From 69cd603a9047918c56430fe405850c415ee17f16 Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Mon, 20 Jun 2022 17:15:15 +0200 Subject: [PATCH 01/50] [Discover] Replace RxJS firstValueFrom with RxJS lastValueFrom to prevent problem with partial results (#134682) --- .../public/hooks/use_es_doc_search.test.tsx | 59 +++++++++++-- .../public/hooks/use_es_doc_search.ts | 87 ++++++++++--------- .../expression/es_query_expression.test.tsx | 38 +++++++- .../expression/es_query_expression.tsx | 4 +- .../search_source_expression.test.tsx | 30 +++++-- .../search_source_expression_form.tsx | 4 +- 6 files changed, 158 insertions(+), 64 deletions(-) diff --git a/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx b/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx index a059ae721ecad..7a482ab086501 100644 --- a/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx +++ b/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx @@ -6,9 +6,9 @@ * Side Public License, v 1. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react-hooks'; import { buildSearchBody, useEsDocSearch } from './use_es_doc_search'; -import { Observable } from 'rxjs'; +import { Subject } from 'rxjs'; import { DataView } from '@kbn/data-views-plugin/public'; import { DocProps } from '../application/doc/components/doc'; import { ElasticRequestState } from '../application/doc/types'; @@ -16,8 +16,7 @@ import { SEARCH_FIELDS_FROM_SOURCE as mockSearchFieldsFromSource } from '../../c import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import React from 'react'; -const mockSearchResult = new Observable(); - +const mockSearchResult = new Subject(); const services = { data: { search: { @@ -171,23 +170,69 @@ describe('Test of helper / hook', () => { `); }); - test('useEsDocSearch', async () => { + test('useEsDocSearch loading', async () => { + const indexPattern = { + getComputedFields: () => [], + }; + const props = { + id: '1', + index: 'index1', + indexPattern, + } as unknown as DocProps; + + const hook = renderHook((p: DocProps) => useEsDocSearch(p), { + initialProps: props, + wrapper: ({ children }) => ( + {children} + ), + }); + + expect(hook.result.current.slice(0, 2)).toEqual([ElasticRequestState.Loading, null]); + }); + + test('useEsDocSearch ignore partial results', async () => { const indexPattern = { getComputedFields: () => [], }; + + const record = { test: 1 }; + const props = { id: '1', index: 'index1', indexPattern, } as unknown as DocProps; - const { result } = renderHook((p: DocProps) => useEsDocSearch(p), { + const hook = renderHook((p: DocProps) => useEsDocSearch(p), { initialProps: props, wrapper: ({ children }) => ( {children} ), }); - expect(result.current.slice(0, 2)).toEqual([ElasticRequestState.Loading, null]); + await act(async () => { + mockSearchResult.next({ + isPartial: true, + isRunning: false, + rawResponse: { + hits: { + hits: [], + }, + }, + }); + mockSearchResult.next({ + isPartial: false, + isRunning: false, + rawResponse: { + hits: { + hits: [record], + }, + }, + }); + mockSearchResult.complete(); + await hook.waitForNextUpdate(); + }); + + expect(hook.result.current.slice(0, 2)).toEqual([ElasticRequestState.Found, record]); }); }); diff --git a/src/plugins/discover/public/hooks/use_es_doc_search.ts b/src/plugins/discover/public/hooks/use_es_doc_search.ts index 27393dca72da3..84e759962de04 100644 --- a/src/plugins/discover/public/hooks/use_es_doc_search.ts +++ b/src/plugins/discover/public/hooks/use_es_doc_search.ts @@ -8,7 +8,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { firstValueFrom } from 'rxjs'; +import { lastValueFrom } from 'rxjs'; import { DataView } from '@kbn/data-views-plugin/public'; import { DocProps } from '../application/doc/components/doc'; import { ElasticRequestState } from '../application/doc/types'; @@ -18,47 +18,6 @@ import { useDiscoverServices } from './use_discover_services'; type RequestBody = Pick; -/** - * helper function to build a query body for Elasticsearch - * https://www.elastic.co/guide/en/elasticsearch/reference/current//query-dsl-ids-query.html - */ -export function buildSearchBody( - id: string, - indexPattern: DataView, - useNewFieldsApi: boolean, - requestAllFields?: boolean -): RequestBody | undefined { - const computedFields = indexPattern.getComputedFields(); - const runtimeFields = computedFields.runtimeFields as estypes.MappingRuntimeFields; - const request: RequestBody = { - body: { - query: { - ids: { - values: [id], - }, - }, - stored_fields: computedFields.storedFields, - script_fields: computedFields.scriptFields, - version: true, - }, - }; - if (!request.body) { - return undefined; - } - if (useNewFieldsApi) { - // @ts-expect-error - request.body.fields = [{ field: '*', include_unmapped: 'true' }]; - request.body.runtime_mappings = runtimeFields ? runtimeFields : {}; - if (requestAllFields) { - request.body._source = true; - } - } else { - request.body._source = true; - } - request.body.fields = [...(request.body?.fields || []), ...(computedFields.docvalueFields || [])]; - return request; -} - /** * Custom react hook for querying a single doc in ElasticSearch */ @@ -75,7 +34,7 @@ export function useEsDocSearch({ const requestData = useCallback(async () => { try { - const { rawResponse } = await firstValueFrom( + const result = await lastValueFrom( data.search.search({ params: { index, @@ -83,6 +42,7 @@ export function useEsDocSearch({ }, }) ); + const rawResponse = result.rawResponse; const hits = rawResponse.hits; @@ -109,3 +69,44 @@ export function useEsDocSearch({ return [status, hit, requestData]; } + +/** + * helper function to build a query body for Elasticsearch + * https://www.elastic.co/guide/en/elasticsearch/reference/current//query-dsl-ids-query.html + */ +export function buildSearchBody( + id: string, + indexPattern: DataView, + useNewFieldsApi: boolean, + requestAllFields?: boolean +): RequestBody | undefined { + const computedFields = indexPattern.getComputedFields(); + const runtimeFields = computedFields.runtimeFields as estypes.MappingRuntimeFields; + const request: RequestBody = { + body: { + query: { + ids: { + values: [id], + }, + }, + stored_fields: computedFields.storedFields, + script_fields: computedFields.scriptFields, + version: true, + }, + }; + if (!request.body) { + return undefined; + } + if (useNewFieldsApi) { + // @ts-expect-error + request.body.fields = [{ field: '*', include_unmapped: 'true' }]; + request.body.runtime_mappings = runtimeFields ? runtimeFields : {}; + if (requestAllFields) { + request.body._source = true; + } + } else { + request.body._source = true; + } + request.body.fields = [...(request.body?.fields || []), ...(computedFields.docvalueFields || [])]; + return request; +} diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.test.tsx b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.test.tsx index 7e38fcf81c678..e361c4d98bb77 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.test.tsx +++ b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import 'brace'; -import { of } from 'rxjs'; +import { of, Subject } from 'rxjs'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import { act } from 'react-dom/test-utils'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; @@ -220,6 +220,42 @@ describe('EsQueryAlertTypeExpression', () => { ); }); + test('should show success message if Test Query is successful (with partial result)', async () => { + const partial = { + isRunning: true, + isPartial: true, + }; + const complete = { + isRunning: false, + isPartial: false, + rawResponse: { + hits: { + total: 1234, + }, + }, + }; + const searchResponseMock$ = new Subject(); + dataMock.search.search.mockImplementation(() => searchResponseMock$); + const wrapper = await setup(defaultEsQueryExpressionParams); + const testQueryButton = wrapper.find('EuiButton[data-test-subj="testQuery"]'); + + testQueryButton.simulate('click'); + expect(dataMock.search.search).toHaveBeenCalled(); + await act(async () => { + searchResponseMock$.next(partial); + searchResponseMock$.next(complete); + searchResponseMock$.complete(); + await nextTick(); + wrapper.update(); + }); + + expect(wrapper.find('[data-test-subj="testQuerySuccess"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="testQueryError"]').exists()).toBeFalsy(); + expect(wrapper.find('EuiText[data-test-subj="testQuerySuccess"]').text()).toEqual( + `Query matched 1234 documents in the last 15s.` + ); + }); + test('should show error message if Test Query is throws error', async () => { dataMock.search.search.mockImplementation(() => { throw new Error('What is this query'); diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.tsx b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.tsx index 92096ba4541c4..97bf42ca2599a 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.tsx +++ b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.tsx @@ -6,7 +6,7 @@ */ import React, { useState, Fragment, useEffect, useCallback } from 'react'; -import { firstValueFrom } from 'rxjs'; +import { lastValueFrom } from 'rxjs'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -141,7 +141,7 @@ export const EsQueryExpression = ({ const timeWindow = parseDuration(window); const parsedQuery = JSON.parse(esQuery); const now = Date.now(); - const { rawResponse } = await firstValueFrom( + const { rawResponse } = await lastValueFrom( data.search.search({ params: buildSortedEventsQuery({ index, diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.test.tsx b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.test.tsx index 091fd606e1bf0..1ad76de08f5e7 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.test.tsx +++ b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.test.tsx @@ -14,8 +14,8 @@ import { EsQueryAlertParams, SearchType } from '../types'; import { SearchSourceExpression } from './search_source_expression'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { act } from 'react-dom/test-utils'; -import { of } from 'rxjs'; -import { IKibanaSearchResponse, ISearchSource } from '@kbn/data-plugin/common'; +import { Subject } from 'rxjs'; +import { ISearchSource } from '@kbn/data-plugin/common'; import { IUiSettingsClient } from '@kbn/core/public'; import { findTestSubject } from '@elastic/eui/lib/test'; import { EuiLoadingSpinner } from '@elastic/eui'; @@ -40,6 +40,20 @@ const defaultSearchSourceExpressionParams: EsQueryAlertParams { - return of({ - rawResponse: { - hits: { - total: 1234, - }, - }, - }); + return mockSearchResult; }), } as unknown as ISearchSource; @@ -143,6 +151,7 @@ describe('SearchSourceAlertTypeExpression', () => { wrapper = await wrapper.update(); expect(findTestSubject(wrapper, 'thresholdExpression')).toBeTruthy(); }); + test('should show success message if Test Query is successful', async () => { let wrapper = setup(defaultSearchSourceExpressionParams); await act(async () => { @@ -156,6 +165,9 @@ describe('SearchSourceAlertTypeExpression', () => { wrapper = await wrapper.update(); await act(async () => { + mockSearchResult.next(testResultPartial); + mockSearchResult.next(testResultComplete); + mockSearchResult.complete(); await nextTick(); wrapper.update(); }); diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx index c351a1fe04c6a..bd03babf85a0b 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx +++ b/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx @@ -7,7 +7,7 @@ import React, { Fragment, useCallback, useEffect, useMemo, useReducer, useState } from 'react'; import deepEqual from 'fast-deep-equal'; -import { firstValueFrom } from 'rxjs'; +import { lastValueFrom } from 'rxjs'; import { Filter } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiSpacer, EuiTitle } from '@elastic/eui'; @@ -183,7 +183,7 @@ export const SearchSourceExpressionForm = (props: SearchSourceExpressionFormProp 'filter', timeFilter ? [timeFilter, ...ruleConfiguration.filter] : ruleConfiguration.filter ); - const { rawResponse } = await firstValueFrom(testSearchSource.fetch$()); + const { rawResponse } = await lastValueFrom(testSearchSource.fetch$()); return { nrOfDocs: totalHitsToNumber(rawResponse.hits.total), timeWindow }; }, [searchSource, timeWindowSize, timeWindowUnit, ruleConfiguration]); From 7649b006899063b1ce06b158abaf5cbc3ac0ff21 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Mon, 20 Jun 2022 08:19:38 -0700 Subject: [PATCH 02/50] [DOCS] Adds prerequisites in update rule API (#134151) --- docs/api/alerting.asciidoc | 2 +- docs/api/alerting/create_rule.asciidoc | 1 - docs/api/alerting/update_rule.asciidoc | 156 ++++++++++++++++--------- 3 files changed, 102 insertions(+), 57 deletions(-) diff --git a/docs/api/alerting.asciidoc b/docs/api/alerting.asciidoc index e0ea8cdc98509..fd5a23886cc5a 100644 --- a/docs/api/alerting.asciidoc +++ b/docs/api/alerting.asciidoc @@ -33,7 +33,7 @@ For deprecated APIs, refer to <>. include::alerting/create_rule.asciidoc[leveloffset=+1] include::alerting/delete_rule.asciidoc[leveloffset=+1] -include::alerting/update_rule.asciidoc[] +include::alerting/update_rule.asciidoc[leveloffset=+1] include::alerting/get_rules.asciidoc[] include::alerting/find_rules.asciidoc[] include::alerting/list_rule_types.asciidoc[] diff --git a/docs/api/alerting/create_rule.asciidoc b/docs/api/alerting/create_rule.asciidoc index 484866436d97d..0b219ad00ebcb 100644 --- a/docs/api/alerting/create_rule.asciidoc +++ b/docs/api/alerting/create_rule.asciidoc @@ -207,7 +207,6 @@ The API returns the following: }, "rule_type_id": ".index-threshold", "scheduled_task_id": "425b0800-6bca-11eb-9e0d-85d233e3ee35", - "snooze_schedule":[], "created_by": "elastic", "updated_by": "elastic", "created_at": "2022-06-08T17:20:31.632Z", diff --git a/docs/api/alerting/update_rule.asciidoc b/docs/api/alerting/update_rule.asciidoc index 5fb8f17d6ebb5..ecce62912939d 100644 --- a/docs/api/alerting/update_rule.asciidoc +++ b/docs/api/alerting/update_rule.asciidoc @@ -1,5 +1,5 @@ [[update-rule-api]] -=== Update rule API +== Update rule API ++++ Update rule ++++ @@ -7,13 +7,22 @@ Update the attributes for an existing rule. [[update-rule-api-request]] -==== Request +=== {api-request-title} `PUT :/api/alerting/rule/` `PUT :/s//api/alerting/rule/` -==== {api-description-title} +=== {api-prereq-title} + +You must have `all` privileges for the *Management* > *Stack Rules* feature or +for the *{ml-app}*, *{observability}*, or *Security* features, depending on the +`consumer` and `rule_type_id` of the rule you're updating. If the rule has +`actions`, you must also have `read` privileges for the *Management* > +*Actions and Connectors* feature. For more details, refer to +<>. + +=== {api-description-title} [WARNING] ==== @@ -23,83 +32,109 @@ Update the attributes for an existing rule. Thereafter, when the rule performs queries, it uses those security privileges. If you have different privileges than the user that created or most recently updated the rule, you might change its behavior. +* Though some properties are optional, when you update the rule the existing +property values are overwritten with default values. Therefore, it is +recommended to explicitly set all property values. ==== [[update-rule-api-path-params]] -==== Path parameters +=== {api-path-parms-title} `id`:: - (Required, string) The ID of the rule that you want to update. +(Required, string) The ID of the rule that you want to update. `space_id`:: - (Optional, string) An identifier for the space. If `space_id` is not provided in the URL, the default space is used. +(Optional, string) An identifier for the space. If `space_id` is not provided in +the URL, the default space is used. +[role="child_attributes"] [[update-rule-api-request-body]] -==== Request body - -`name`:: - (Required, string) A name to reference and search. - -`tags`:: - (Optional, string array) A list of keywords to reference and search. +=== {api-request-body-title} -`schedule`:: - (Required, object) When to run this rule. Use one of the available schedule formats. +`actions`:: +(Optional, object array) An array of action objects. The default value is an +empty array (`[]`). + -._Schedule Formats_. +.Properties of the action objects: [%collapsible%open] ===== -A schedule uses a key: value format. {kib} currently supports the _Interval format_ , which specifies the interval in seconds, minutes, hours, or days at which to execute the rule. +`group`::: +(Required, string) Grouping actions is recommended for escalations for different +types of alerts. If you don't need this, set the value to `default`. -Example: `{ interval: "10s" }`, `{ interval: "5m" }`, `{ interval: "1h" }`, `{ interval: "1d" }`. +`id`::: +(Required, string) The identifier of the action. +`params`::: +(Required, object) The map to the `params` that the +<> will receive. The `params` are handled as +Mustache templates and passed a default set of context. ===== -`throttle`:: - (Optional, string) How often this rule should fire the same actions. This will prevent the rule from sending out the same notification over and over. For example, if a rule with a `schedule` of 1 minute stays in a triggered state for 90 minutes, setting a `throttle` of `10m` or `1h` will prevent it from sending 90 notifications during this period. +`name`:: +(Required, string) A name to reference and search. `notify_when`:: - (Required, string) The condition for throttling the notification: `onActionGroupChange`, `onActiveAlert`, or `onThrottleInterval`. +(Required, string) The condition for throttling the notification: +`onActionGroupChange`, `onActiveAlert`, or `onThrottleInterval`. `params`:: - (Required, object) The parameters to pass to the rule type executor `params` value. This will also validate against the rule type params validator, if defined. +(Required, object) The parameters to pass to the rule type executor `params` +value. This will also validate against the rule type params validator, if defined. -`actions`:: - (Optional, object array) An array of the following action objects. +`schedule`:: +(Required, object) When to run this rule. Use one of the available schedule formats. + -.Properties of the action objects: +.Schedule formats [%collapsible%open] ===== - `group`::: - (Required, string) Grouping actions is recommended for escalations for different types of alerts. If you don't need this, set the value to `default`. - - `id`::: - (Required, string) The ID of the action that saved object executes. +A schedule uses a `key: value` format. {kib} currently supports the +_interval format_, which specifies the interval in seconds, minutes, hours, or +days at which to run the rule. For example: `{ "interval": "10s" }`, +`{ "interval": "5m" }`, `{ "interval": "1h" }`, or `{ "interval": "1d" }`. - `params`::: - (Required, object) The map to the `params` that the <> will receive. `params` are handled as Mustache templates and passed a default set of context. ===== +`tags`:: +(Optional, string array) A list of keywords to reference and search. The default +value is an empty array (`[]`). + +`throttle`:: +(Optional, string) How often this rule should fire the same actions. This will +prevent the rule from sending out the same notification over and over. For +example, if a rule with a `schedule` of 1 minute stays in a triggered state for +90 minutes, setting a `throttle` of `10m` or `1h` will prevent it from sending +90 notifications during this period. The default value is `null`. [[update-rule-api-response-codes]] -==== Response code +=== {api-response-codes-title} `200`:: - Indicates a successful call. +Indicates a successful call. [[update-rule-api-example]] -==== Example +=== {api-examples-title} -Update a rule with ID `ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74` with a different name: +Update an index threshold rule with ID `ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74`: [source,sh] -------------------------------------------------- -$ curl -X PUT api/alerting/rule/ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 - +PUT api/alerting/rule/ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 { "notify_when": "onActionGroupChange", "params": { - "aggType": "avg", + "index":[".test-index"], + "timeField":"@timestamp", + "groupBy":"top", + "aggType":"avg", + "timeWindowSize":5, + "timeWindowUnit":"m", + "thresholdComparator":">", + "threshold":[1000], + "aggType":"avg", + "aggField":"sheet.version", + "termField":"name.keyword", + "termSize":6 }, "schedule": { "interval": "1m" @@ -107,7 +142,7 @@ $ curl -X PUT api/alerting/rule/ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 "actions": [], "tags": [], "name": "new name", - "throttle": null, + "throttle": null } -------------------------------------------------- // KIBANA @@ -118,31 +153,42 @@ The API returns the following: -------------------------------------------------- { "id": "ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74", - "notify_when": "onActionGroupChange", - "params": { - "aggType": "avg", - }, "consumer": "alerts", - "rule_type_id": "test.rule.type", - "schedule": { - "interval": "1m" - }, - "actions": [], "tags": [], "name": "new name", "enabled": true, "throttle": null, + "schedule": { + "interval": "1m" + }, + "params": { + "index": [".updated-index"], + "timeField": "@timestamp", + "groupBy": "top", + "aggType": "avg", + "timeWindowSize": 5, + "timeWindowUnit": "m", + "thresholdComparator": ">", + "threshold": [1000], + "aggField": "sheet.version", + "termField": "name.keyword", + "termSize": 6 + }, "api_key_owner": "elastic", "created_by": "elastic", "updated_by": "elastic", + "rule_type_id": ".index-threshold", + "scheduled_task_id": "4c5eda00-e74f-11ec-b72f-5b18752ff9ea", + "created_at": "2022-06-08T17:20:31.632Z", + "updated_at": "2022-06-09T23:36:36.090Z", + "notify_when": "onActionGroupChange", "mute_all": false, "muted_alert_ids": [], - "updated_at": "2021-02-10T05:37:19.086Z", - "created_at": "2021-02-10T05:37:19.086Z", - "scheduled_task_id": "0b092d90-6b62-11eb-9e0d-85d233e3ee35", "execution_status": { - "last_execution_date": "2021-02-10T17:55:14.262Z", - "status": "ok" - } + "status": "ok", + "last_execution_date": "2022-06-09T23:36:17.332Z", + "last_duration": 577 + }, + "actions":[] } -------------------------------------------------- From e668693f36dda056011153be0c604be77c7bf6b8 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Mon, 20 Jun 2022 10:25:03 -0500 Subject: [PATCH 03/50] [Security Solution] add running-processes response action API (#134573) --- .../common/endpoint/schema/actions.test.ts | 16 ++++---- .../common/endpoint/schema/actions.ts | 4 +- .../endpoint/service/authz/authz.test.ts | 11 ++++++ .../common/endpoint/service/authz/authz.ts | 2 + .../common/endpoint/types/actions.ts | 10 +++-- .../common/endpoint/types/authz.ts | 2 + .../endpoint/routes/actions/isolation.test.ts | 12 +++--- .../endpoint/routes/actions/isolation.ts | 8 ++-- .../routes/actions/response_actions.test.ts | 39 +++++++++++++++++++ .../routes/actions/response_actions.ts | 21 ++++++++-- .../services/feature_usage/service.ts | 1 + 11 files changed, 100 insertions(+), 26 deletions(-) diff --git a/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts b/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts index 60cab431a5444..d3f47421d7d7c 100644 --- a/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts +++ b/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts @@ -9,7 +9,7 @@ import uuid from 'uuid'; import { EndpointActionListRequestSchema, - HostIsolationRequestSchema, + NoParametersRequestSchema, KillOrSuspendProcessRequestSchema, } from './actions'; @@ -147,16 +147,16 @@ describe('actions schemas', () => { }); }); - describe('HostIsolationRequestSchema', () => { + describe('NoParametersRequestSchema', () => { it('should require at least 1 Endpoint ID', () => { expect(() => { - HostIsolationRequestSchema.body.validate({}); + NoParametersRequestSchema.body.validate({}); }).toThrow(); }); it('should accept an Endpoint ID as the only required field', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], }); }).not.toThrow(); @@ -164,7 +164,7 @@ describe('actions schemas', () => { it('should accept a comment', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], comment: 'a user comment', }); @@ -173,7 +173,7 @@ describe('actions schemas', () => { it('should accept alert IDs', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], alert_ids: ['0000000-000-00'], }); @@ -182,7 +182,7 @@ describe('actions schemas', () => { it('should accept case IDs', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], case_ids: ['000000000-000-000'], }); @@ -193,7 +193,7 @@ describe('actions schemas', () => { describe('KillOrSuspendProcessRequestSchema', () => { it('should require at least 1 Endpoint ID', () => { expect(() => { - HostIsolationRequestSchema.body.validate({}); + NoParametersRequestSchema.body.validate({}); }).toThrow(); }); diff --git a/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts b/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts index c4dfa7a5b434c..cf190e5c62ca2 100644 --- a/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts +++ b/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts @@ -18,7 +18,7 @@ const BaseActionRequestSchema = { parameters: schema.maybe(schema.object({})), }; -export const HostIsolationRequestSchema = { +export const NoParametersRequestSchema = { body: schema.object({ ...BaseActionRequestSchema }), }; @@ -33,7 +33,7 @@ export const KillOrSuspendProcessRequestSchema = { }; export const ResponseActionBodySchema = schema.oneOf([ - HostIsolationRequestSchema.body, + NoParametersRequestSchema.body, KillOrSuspendProcessRequestSchema.body, ]); diff --git a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts index 0389ac8e216ae..acf71fa584198 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts @@ -30,6 +30,7 @@ describe('Endpoint Authz service', () => { ['canUnIsolateHost'], ['canKillProcess'], ['canSuspendProcess'], + ['canGetRunningProcesses'], ])('should set `%s` to `true`', (authProperty) => { expect(calculateEndpointAuthz(licenseService, fleetAuthz, userRoles)[authProperty]).toBe( true @@ -60,6 +61,14 @@ describe('Endpoint Authz service', () => { ).toBe(false); }); + it('should set `canGetRunningProcesses` to false if not proper license', () => { + licenseService.isPlatinumPlus.mockReturnValue(false); + + expect( + calculateEndpointAuthz(licenseService, fleetAuthz, userRoles).canGetRunningProcesses + ).toBe(false); + }); + it('should set `canUnIsolateHost` to true even if not proper license', () => { licenseService.isPlatinumPlus.mockReturnValue(false); @@ -82,6 +91,7 @@ describe('Endpoint Authz service', () => { ['canUnIsolateHost'], ['canKillProcess'], ['canSuspendProcess'], + ['canGetRunningProcesses'], ])('should set `%s` to `false`', (authProperty) => { expect(calculateEndpointAuthz(licenseService, fleetAuthz, userRoles)[authProperty]).toBe( false @@ -108,6 +118,7 @@ describe('Endpoint Authz service', () => { canCreateArtifactsByPolicy: false, canKillProcess: false, canSuspendProcess: false, + canGetRunningProcesses: false, }); }); }); diff --git a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts index 5acf3e5df1975..6015d621714a1 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts @@ -34,6 +34,7 @@ export const calculateEndpointAuthz = ( canUnIsolateHost: hasAllAccessToFleet, canKillProcess: hasAllAccessToFleet && isPlatinumPlusLicense, canSuspendProcess: hasAllAccessToFleet && isPlatinumPlusLicense, + canGetRunningProcesses: hasAllAccessToFleet && isPlatinumPlusLicense, }; }; @@ -46,5 +47,6 @@ export const getEndpointAuthzInitialState = (): EndpointAuthz => { canUnIsolateHost: true, canKillProcess: false, canSuspendProcess: false, + canGetRunningProcesses: false, }; }; diff --git a/x-pack/plugins/security_solution/common/endpoint/types/actions.ts b/x-pack/plugins/security_solution/common/endpoint/types/actions.ts index 2dd82d7609de4..ee07e05bac2d3 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/actions.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/actions.ts @@ -8,13 +8,17 @@ import { TypeOf } from '@kbn/config-schema'; import { ActionStatusRequestSchema, - HostIsolationRequestSchema, + NoParametersRequestSchema, ResponseActionBodySchema, } from '../schema/actions'; export type ISOLATION_ACTIONS = 'isolate' | 'unisolate'; -export type ResponseActions = ISOLATION_ACTIONS | 'kill-process' | 'suspend-process'; +export type ResponseActions = + | ISOLATION_ACTIONS + | 'kill-process' + | 'suspend-process' + | 'running-processes'; export const ActivityLogItemTypes = { ACTION: 'action' as const, @@ -189,7 +193,7 @@ export interface ActivityLog { data: ActivityLogEntry[]; } -export type HostIsolationRequestBody = TypeOf; +export type HostIsolationRequestBody = TypeOf; export type ResponseActionRequestBody = TypeOf; diff --git a/x-pack/plugins/security_solution/common/endpoint/types/authz.ts b/x-pack/plugins/security_solution/common/endpoint/types/authz.ts index 3f7a50537177f..054f6ab99aa89 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/authz.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/authz.ts @@ -24,6 +24,8 @@ export interface EndpointAuthz { canKillProcess: boolean; /** If user has permissions to suspend process on hosts */ canSuspendProcess: boolean; + /** If user has permissions to get running processes on hosts */ + canGetRunningProcesses: boolean; } export type EndpointAuthzKeyList = Array; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts index 85d3fd1f064e2..bd3484a0e7518 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts @@ -28,7 +28,7 @@ import { createMockEndpointAppContextServiceStartContract, createRouteHandlerContext, } from '../../mocks'; -import { HostIsolationRequestSchema } from '../../../../common/endpoint/schema/actions'; +import { NoParametersRequestSchema } from '../../../../common/endpoint/schema/actions'; import { registerHostIsolationRoutes } from './isolation'; import { createMockConfig } from '../../../lib/detection_engine/routes/__mocks__'; import { LicenseService } from '../../../../common/license'; @@ -74,13 +74,13 @@ describe('Host Isolation', () => { describe('schema', () => { it('should require at least 1 Endpoint ID', () => { expect(() => { - HostIsolationRequestSchema.body.validate({}); + NoParametersRequestSchema.body.validate({}); }).toThrow(); }); it('should accept an Endpoint ID as the only required field', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], }); }).not.toThrow(); @@ -88,7 +88,7 @@ describe('Host Isolation', () => { it('should accept a comment', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], comment: 'a user comment', }); @@ -97,7 +97,7 @@ describe('Host Isolation', () => { it('should accept alert IDs', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], alert_ids: ['0000000-000-00'], }); @@ -106,7 +106,7 @@ describe('Host Isolation', () => { it('should accept case IDs', () => { expect(() => { - HostIsolationRequestSchema.body.validate({ + NoParametersRequestSchema.body.validate({ endpoint_ids: ['ABC-XYZ-000'], case_ids: ['000000000-000-000'], }); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts index c640f56efb512..bd0e3f07ce6a8 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts @@ -12,7 +12,7 @@ import { TypeOf } from '@kbn/config-schema'; import { CommentType } from '@kbn/cases-plugin/common'; import { CasesByAlertId } from '@kbn/cases-plugin/common/api/cases/case'; import { AGENT_ACTIONS_INDEX } from '@kbn/fleet-plugin/common'; -import { HostIsolationRequestSchema } from '../../../../common/endpoint/schema/actions'; +import { NoParametersRequestSchema } from '../../../../common/endpoint/schema/actions'; import { ENDPOINT_ACTIONS_DS, ENDPOINT_ACTION_RESPONSES_DS, @@ -49,7 +49,7 @@ export function registerHostIsolationRoutes( router.post( { path: ISOLATE_HOST_ROUTE, - validate: HostIsolationRequestSchema, + validate: NoParametersRequestSchema, options: { authRequired: true, tags: ['access:securitySolution'] }, }, withEndpointAuthz( @@ -63,7 +63,7 @@ export function registerHostIsolationRoutes( router.post( { path: UNISOLATE_HOST_ROUTE, - validate: HostIsolationRequestSchema, + validate: NoParametersRequestSchema, options: { authRequired: true, tags: ['access:securitySolution'] }, }, withEndpointAuthz( @@ -107,7 +107,7 @@ export const isolationRequestHandler = function ( ): RequestHandler< unknown, unknown, - TypeOf, + TypeOf, SecuritySolutionRequestHandlerContext > { return async (context, req, res) => { diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts index 3a91ee35269be..bbcb549f55f74 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts @@ -40,6 +40,7 @@ import { ENDPOINT_ACTIONS_INDEX, KILL_PROCESS_ROUTE, SUSPEND_PROCESS_ROUTE, + GET_RUNNING_PROCESSES_ROUTE, } from '../../../../common/endpoint/constants'; import { ActionDetails, @@ -381,6 +382,17 @@ describe('Response actions', () => { expect(actionDoc.data.command).toEqual('suspend-process'); }); + it('sends the running-processes command payload from the running processes route', async () => { + const ctx = await callRoute(GET_RUNNING_PROCESSES_ROUTE, { + body: { endpoint_ids: ['XYZ'] }, + }); + const actionDoc: EndpointAction = ( + ctx.core.elasticsearch.client.asInternalUser.index.mock + .calls[0][0] as estypes.IndexRequest + ).body!; + expect(actionDoc.data.command).toEqual('running-processes'); + }); + describe('With endpoint data streams', () => { it('handles unisolation', async () => { const ctx = await callRoute( @@ -495,6 +507,33 @@ describe('Response actions', () => { expect(responseBody.action).toBeUndefined(); }); + it('handles running-processes', async () => { + const ctx = await callRoute( + GET_RUNNING_PROCESSES_ROUTE, + { + body: { endpoint_ids: ['XYZ'] }, + }, + { endpointDsExists: true } + ); + const indexDoc = ctx.core.elasticsearch.client.asInternalUser.index; + const actionDocs: [ + { index: string; body?: LogsEndpointAction }, + { index: string; body?: EndpointAction } + ] = [ + indexDoc.mock.calls[0][0] as estypes.IndexRequest, + indexDoc.mock.calls[1][0] as estypes.IndexRequest, + ]; + + expect(actionDocs[0].index).toEqual(ENDPOINT_ACTIONS_INDEX); + expect(actionDocs[1].index).toEqual(AGENT_ACTIONS_INDEX); + expect(actionDocs[0].body!.EndpointActions.data.command).toEqual('running-processes'); + expect(actionDocs[1].body!.data.command).toEqual('running-processes'); + + expect(mockResponse.ok).toBeCalled(); + const responseBody = mockResponse.ok.mock.calls[0][0]?.body as ResponseActionApiResponse; + expect(responseBody.action).toBeUndefined(); + }); + it('handles errors', async () => { const ErrMessage = 'Uh oh!'; await callRoute( diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts index 5f7ad42127f7c..71c61d8aacce8 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts @@ -15,7 +15,7 @@ import { AGENT_ACTIONS_INDEX } from '@kbn/fleet-plugin/common'; import { CommentType } from '@kbn/cases-plugin/common'; import { - HostIsolationRequestSchema, + NoParametersRequestSchema, KillOrSuspendProcessRequestSchema, ResponseActionBodySchema, } from '../../../../common/endpoint/schema/actions'; @@ -28,6 +28,7 @@ import { failedFleetActionErrorCode, KILL_PROCESS_ROUTE, SUSPEND_PROCESS_ROUTE, + GET_RUNNING_PROCESSES_ROUTE, } from '../../../../common/endpoint/constants'; import type { EndpointAction, @@ -58,7 +59,7 @@ export function registerResponseActionRoutes( router.post( { path: ISOLATE_HOST_ROUTE_V2, - validate: HostIsolationRequestSchema, + validate: NoParametersRequestSchema, options: { authRequired: true, tags: ['access:securitySolution'] }, }, withEndpointAuthz( @@ -71,7 +72,7 @@ export function registerResponseActionRoutes( router.post( { path: RELEASE_HOST_ROUTE, - validate: HostIsolationRequestSchema, + validate: NoParametersRequestSchema, options: { authRequired: true, tags: ['access:securitySolution'] }, }, withEndpointAuthz( @@ -112,6 +113,19 @@ export function registerResponseActionRoutes( ) ) ); + + router.post( + { + path: GET_RUNNING_PROCESSES_ROUTE, + validate: NoParametersRequestSchema, + options: { authRequired: true, tags: ['access:securitySolution'] }, + }, + withEndpointAuthz( + { all: ['canGetRunningProcesses'] }, + logger, + responseActionRequestHandler(endpointContext, 'running-processes') + ) + ); } const commandToFeatureKeyMap = new Map([ @@ -119,6 +133,7 @@ const commandToFeatureKeyMap = new Map([ ['unisolate', 'HOST_ISOLATION'], ['kill-process', 'KILL_PROCESS'], ['suspend-process', 'SUSPEND_PROCESS'], + ['running-processes', 'RUNNING_PROCESSES'], ]); const returnActionIdCommands: ResponseActions[] = ['isolate', 'unisolate']; diff --git a/x-pack/plugins/security_solution/server/endpoint/services/feature_usage/service.ts b/x-pack/plugins/security_solution/server/endpoint/services/feature_usage/service.ts index 4171bb803fe65..53cb1b8ec2098 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/feature_usage/service.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/feature_usage/service.ts @@ -20,6 +20,7 @@ const FEATURES = { BEHAVIOR_PROTECTION: 'Behavior protection', KILL_PROCESS: 'Kill process', SUSPEND_PROCESS: 'Suspend process', + RUNNING_PROCESSES: 'Get running processes', } as const; export type FeatureKeys = keyof typeof FEATURES; From 8d2e371062c17ca1fe135418cf90c034e1e352d3 Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Mon, 20 Jun 2022 17:36:40 +0200 Subject: [PATCH 04/50] update generateFilters method (#134303) --- .../lib/generate_filter.test.ts | 19 ++++++++++--------- .../filter_manager/lib/generate_filters.ts | 13 ++++--------- .../application/context/context_app.tsx | 2 +- .../components/layout/discover_layout.tsx | 8 +------- .../embeddable/saved_search_embeddable.tsx | 2 +- .../index_data_visualizer_view.tsx | 2 +- 6 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts b/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts index 2b00ff41e9516..af181d2d94fda 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts @@ -22,6 +22,7 @@ import { } from '@kbn/es-query'; const INDEX_NAME = 'my-index'; +const MOCKED_INDEX = { id: INDEX_NAME } as unknown as DataViewBase; const EXISTS_FIELD_NAME = '_exists_'; const FIELD = { name: 'my-field', @@ -47,7 +48,7 @@ describe('Generate filters', () => { EXISTS_FIELD_NAME, FIELD.name, '', - INDEX_NAME + MOCKED_INDEX ); expect(filters).toHaveLength(1); expect(filters[0].meta.index === INDEX_NAME); @@ -61,7 +62,7 @@ describe('Generate filters', () => { EXISTS_FIELD_NAME, FIELD.name, '-', - INDEX_NAME + MOCKED_INDEX ); expect(filters).toHaveLength(1); expect(filters[0].meta.index === INDEX_NAME); @@ -74,7 +75,7 @@ describe('Generate filters', () => { filter.meta.disabled = true; filtersArray.push(filter); - const filters = generateFilters(mockFilterManager, '_exists_', FIELD.name, '-', INDEX_NAME); + const filters = generateFilters(mockFilterManager, '_exists_', FIELD.name, '-', MOCKED_INDEX); expect(filters).toHaveLength(1); expect(filters[0].meta.index === INDEX_NAME); expect(filters[0].meta.negate).toBeTruthy(); @@ -83,7 +84,7 @@ describe('Generate filters', () => { }); it('should create phrase filter', () => { - const filters = generateFilters(mockFilterManager, FIELD, PHRASE_VALUE, '', INDEX_NAME); + const filters = generateFilters(mockFilterManager, FIELD, PHRASE_VALUE, '', MOCKED_INDEX); expect(filters).toHaveLength(1); const [filter] = filters as PhraseFilter[]; @@ -96,7 +97,7 @@ describe('Generate filters', () => { }); it('should create negated phrase filter', () => { - const filters = generateFilters(mockFilterManager, FIELD, PHRASE_VALUE, '-', INDEX_NAME); + const filters = generateFilters(mockFilterManager, FIELD, PHRASE_VALUE, '-', MOCKED_INDEX); expect(filters).toHaveLength(1); const [filter] = filters as PhraseFilter[]; expect(filter.meta.index === INDEX_NAME); @@ -119,7 +120,7 @@ describe('Generate filters', () => { lte: '192.168.255.255', }, '+', - INDEX_NAME + MOCKED_INDEX ) as RangeFilter[]; expect(filters).toHaveLength(1); const [filter] = filters; @@ -143,7 +144,7 @@ describe('Generate filters', () => { } as DataViewFieldBase, 10000, '+', - INDEX_NAME + MOCKED_INDEX ); expect(filters).toHaveLength(1); @@ -164,7 +165,7 @@ describe('Generate filters', () => { FIELD, [PHRASE_VALUE, ANOTHER_PHRASE], '', - INDEX_NAME + MOCKED_INDEX ); expect(filters).toHaveLength(2); expect(filters[0].meta.index === INDEX_NAME); @@ -188,7 +189,7 @@ describe('Generate filters', () => { FIELD, [PHRASE_VALUE, ANOTHER_PHRASE, PHRASE_VALUE, ANOTHER_PHRASE], '', - INDEX_NAME + MOCKED_INDEX ); expect(filters).toHaveLength(2); expect(filters[0].query?.match_phrase).toEqual({ diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts b/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts index e0d29a560a436..8b405a2a6ae4b 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts @@ -18,8 +18,8 @@ import { FilterStateStore, FILTERS, DataViewFieldBase, + DataViewBase, } from '@kbn/es-query'; -import type { DataView } from '@kbn/data-views-plugin/common'; import { FilterManager } from '../filter_manager'; @@ -72,7 +72,7 @@ export function generateFilters( field: DataViewFieldBase | string, values: any, operation: string, - index: string + index: DataViewBase ): Filter[] { values = Array.isArray(values) ? _.uniq(values) : [values]; const fieldObj = ( @@ -96,12 +96,8 @@ export function generateFilters( updateExistingFilter(existing, negate); filter = existing; } else if (fieldObj.type?.includes('range') && value && typeof value === 'object') { - // When dealing with range fields, the filter type depends on the data passed in. If it's an - // object we assume that it's a min/max value - const tmpIndexPattern = { id: index } as DataView; - filter = buildFilter( - tmpIndexPattern, + index, fieldObj, FILTERS.RANGE_FROM_VALUE, false, @@ -111,7 +107,6 @@ export function generateFilters( FilterStateStore.APP_STATE ); } else { - const tmpIndexPattern = { id: index } as DataView; // exists filter special case: fieldname = '_exists' and value = fieldname const filterType = fieldName === '_exists_' ? FILTERS.EXISTS : FILTERS.PHRASE; const actualFieldObj = @@ -121,7 +116,7 @@ export function generateFilters( const isNullFilter = value === null || value === undefined; filter = buildFilter( - tmpIndexPattern, + index, actualFieldObj, isNullFilter ? FILTERS.EXISTS : filterType, isNullFilter ? !negate : negate, diff --git a/src/plugins/discover/public/application/context/context_app.tsx b/src/plugins/discover/public/application/context/context_app.tsx index 482598ea40f38..b56364781206b 100644 --- a/src/plugins/discover/public/application/context/context_app.tsx +++ b/src/plugins/discover/public/application/context/context_app.tsx @@ -118,7 +118,7 @@ export const ContextApp = ({ indexPattern, anchorId }: ContextAppProps) => { const addFilter = useCallback( async (field: DataViewField | string, values: unknown, operation: string) => { - const newFilters = generateFilters(filterManager, field, values, operation, indexPattern.id!); + const newFilters = generateFilters(filterManager, field, values, operation, indexPattern); filterManager.addFilters(newFilters); if (indexPatterns) { const fieldName = typeof field === 'string' ? field : field.name; diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index d68414f6e8478..e65d8a7db4e54 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -172,13 +172,7 @@ export function DiscoverLayout({ (field: DataViewField | string, values: string, operation: '+' | '-') => { const fieldName = typeof field === 'string' ? field : field.name; popularizeField(indexPattern, fieldName, indexPatterns, capabilities); - const newFilters = generateFilters( - filterManager, - field, - values, - operation, - String(indexPattern.id) - ); + const newFilters = generateFilters(filterManager, field, values, operation, indexPattern); if (trackUiMetric) { trackUiMetric(METRIC_TYPE.CLICK, 'filter_added'); } diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx index 0b5d0bc922160..48461e5165762 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx @@ -282,7 +282,7 @@ export class SavedSearchEmbeddable field, value, operator, - indexPattern.id! + indexPattern ); filters = filters.map((filter) => ({ ...filter, diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index d892b5f159434..da12e152e325d 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -287,7 +287,7 @@ export const IndexDataVisualizerView: FC = (dataVi field, values, operation, - String(currentDataView.id) + currentDataView ); if (newFilters) { data.query.filterManager.addFilters(newFilters); From 8a151422188b723c1aa3c6a198b054d228779be5 Mon Sep 17 00:00:00 2001 From: James Rucker Date: Mon, 20 Jun 2022 08:42:46 -0700 Subject: [PATCH 05/50] [Enterprise Search] Adds an endpoint to list indices (#134608) * rename indices to search_indices since it is scoped to search-* * Refactor existing indices route to add a second more general option --- .../engine_creation_logic.test.ts | 4 +- .../engine_creation/engine_creation_logic.ts | 2 +- .../server/lib/fetch_indices.test.ts | 16 ++++-- .../server/lib/fetch_indices.ts | 15 +++--- .../enterprise_search/server/plugin.ts | 4 +- .../routes/enterprise_search/indices.ts | 49 +++++++++++++++++-- 6 files changed, 71 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.test.ts index ec60bf5ae8a8e..a7a3523c7ebf3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.test.ts @@ -347,9 +347,9 @@ describe('EngineCreationLogic', () => { jest.clearAllMocks(); }); - it('GETs to /internal/enterprise_search/indices', () => { + it('GETs to /internal/enterprise_search/search_indices', () => { EngineCreationLogic.actions.loadIndices(); - expect(http.get).toHaveBeenCalledWith('/internal/enterprise_search/indices'); + expect(http.get).toHaveBeenCalledWith('/internal/enterprise_search/search_indices'); }); it('calls onLoadIndicesSuccess with payload on load is successful', async () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.ts index 2bc7f1f977129..4b1a96a25412b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_creation/engine_creation_logic.ts @@ -164,7 +164,7 @@ export const EngineCreationLogic = kea { const { http } = HttpLogic.values; try { - const indices = await http.get('/internal/enterprise_search/indices'); + const indices = await http.get('/internal/enterprise_search/search_indices'); actions.onLoadIndicesSuccess(indices as ElasticsearchIndex[]); } catch (e) { flashAPIErrors(e); diff --git a/x-pack/plugins/enterprise_search/server/lib/fetch_indices.test.ts b/x-pack/plugins/enterprise_search/server/lib/fetch_indices.test.ts index 6365e89fb9184..3c3a1c99796cc 100644 --- a/x-pack/plugins/enterprise_search/server/lib/fetch_indices.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/fetch_indices.test.ts @@ -55,7 +55,9 @@ describe('fetchIndices lib function', () => { mockClient.asCurrentUser.indices.get.mockImplementation(() => regularIndexResponse); mockClient.asCurrentUser.indices.stats.mockImplementation(() => regularIndexStatsResponse); - await expect(fetchIndices(mockClient as unknown as IScopedClusterClient)).resolves.toEqual([ + await expect( + fetchIndices(mockClient as unknown as IScopedClusterClient, 'search-*', /search-.*/) + ).resolves.toEqual([ { health: 'green', status: 'open', @@ -104,7 +106,9 @@ describe('fetchIndices lib function', () => { mockClient.asCurrentUser.indices.get.mockImplementationOnce(() => aliasedIndexResponse); mockClient.asCurrentUser.indices.stats.mockImplementationOnce(() => aliasedStatsResponse); - await expect(fetchIndices(mockClient as unknown as IScopedClusterClient)).resolves.toEqual([ + await expect( + fetchIndices(mockClient as unknown as IScopedClusterClient, 'search-*', /search-.*/) + ).resolves.toEqual([ { health: 'green', status: 'open', @@ -149,7 +153,9 @@ describe('fetchIndices lib function', () => { mockClient.asCurrentUser.indices.stats.mockImplementationOnce(() => missingStatsResponse); // simulates when an index has been deleted after get indices call // deleted index won't be present in the indices stats call response - await expect(fetchIndices(mockClient as unknown as IScopedClusterClient)).resolves.toEqual([ + await expect( + fetchIndices(mockClient as unknown as IScopedClusterClient, 'search-*', /search-.*/) + ).resolves.toEqual([ { name: 'search-regular-index', total: { @@ -170,7 +176,9 @@ describe('fetchIndices lib function', () => { it('should return empty array when no index found', async () => { mockClient.asCurrentUser.indices.get.mockImplementationOnce(() => ({})); - await expect(fetchIndices(mockClient as unknown as IScopedClusterClient)).resolves.toEqual([]); + await expect( + fetchIndices(mockClient as unknown as IScopedClusterClient, 'search-*', /search-.*/) + ).resolves.toEqual([]); expect(mockClient.asCurrentUser.indices.stats).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/enterprise_search/server/lib/fetch_indices.ts b/x-pack/plugins/enterprise_search/server/lib/fetch_indices.ts index ac811ba9ed4f7..31feb8ecd9d5c 100644 --- a/x-pack/plugins/enterprise_search/server/lib/fetch_indices.ts +++ b/x-pack/plugins/enterprise_search/server/lib/fetch_indices.ts @@ -10,13 +10,14 @@ import { IScopedClusterClient } from '@kbn/core/server'; import { ElasticsearchIndex } from '../../common/types'; -export const fetchIndices = async (client: IScopedClusterClient): Promise => { - const indexNamesString = 'search-*'; - const indexNamesRegEx = /^search-*/; - +export const fetchIndices = async ( + client: IScopedClusterClient, + indexPattern: string, + indexRegExp: RegExp +): Promise => { // This call retrieves alias and settings information about indices const indices = await client.asCurrentUser.indices.get({ - index: indexNamesString, + index: indexPattern, expand_wildcards: ['open'], // only get specified index properties from ES to keep the response under 536MB // node.js string length limit: https://github.com/nodejs/node/issues/33960 @@ -30,7 +31,7 @@ export const fetchIndices = async (client: IScopedClusterClient): Promise name.match(indexNamesRegEx)); + .filter(({ name }) => name.match(indexRegExp)); }; diff --git a/x-pack/plugins/enterprise_search/server/plugin.ts b/x-pack/plugins/enterprise_search/server/plugin.ts index c3dbfd99359de..110adec8bc211 100644 --- a/x-pack/plugins/enterprise_search/server/plugin.ts +++ b/x-pack/plugins/enterprise_search/server/plugin.ts @@ -46,7 +46,7 @@ import { import { registerAppSearchRoutes } from './routes/app_search'; import { registerConfigDataRoute } from './routes/enterprise_search/config_data'; -import { registerListRoute } from './routes/enterprise_search/indices'; +import { registerIndexRoutes } from './routes/enterprise_search/indices'; import { registerTelemetryRoute } from './routes/enterprise_search/telemetry'; import { registerWorkplaceSearchRoutes } from './routes/workplace_search'; @@ -160,7 +160,7 @@ export class EnterpriseSearchPlugin implements Plugin { registerConfigDataRoute(dependencies); registerAppSearchRoutes(dependencies); registerWorkplaceSearchRoutes(dependencies); - registerListRoute(dependencies); + registerIndexRoutes(dependencies); /** * Bootstrap the routes, saved objects, and collector for telemetry diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index 65868e4d17935..6ae65ee4c8933 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -5,16 +5,18 @@ * 2.0. */ +import { schema } from '@kbn/config-schema'; + import { fetchIndices } from '../../lib/fetch_indices'; import { RouteDependencies } from '../../plugin'; -export function registerListRoute({ router }: RouteDependencies) { +export function registerIndexRoutes({ router }: RouteDependencies) { router.get( - { path: '/internal/enterprise_search/indices', validate: false }, + { path: '/internal/enterprise_search/search_indices', validate: false }, async (context, _, response) => { const { client } = (await context.core).elasticsearch; try { - const indices = await fetchIndices(client); + const indices = await fetchIndices(client, 'search-*', /^search-.*/); return response.ok({ body: indices, headers: { 'content-type': 'application/json' }, @@ -27,4 +29,45 @@ export function registerListRoute({ router }: RouteDependencies) { } } ); + router.get( + { + path: '/internal/enterprise_search/indices', + validate: { + query: schema.object({ + page: schema.number({ defaultValue: 1, min: 0 }), + size: schema.number({ defaultValue: 10, min: 0 }), + }), + }, + }, + async (context, request, response) => { + const { page, size } = request.query; + const { client } = (await context.core).elasticsearch; + try { + const indices = await fetchIndices(client, '*', /.*/); + const totalResults = indices.length; + const totalPages = Math.ceil(totalResults / size); + const startIndex = (page - 1) * size; + const endIndex = page * size; + return response.ok({ + body: { + meta: { + page: { + current: page, + size, + totalPages, + totalResults, + }, + }, + indices: indices.slice(startIndex, endIndex), + }, + headers: { 'content-type': 'application/json' }, + }); + } catch (error) { + return response.customError({ + statusCode: 502, + body: 'Error fetching index data from Elasticsearch', + }); + } + } + ); } From 64f0d65037cd3cef06211d132e109309dad81384 Mon Sep 17 00:00:00 2001 From: Kfir Peled <61654899+kfirpeled@users.noreply.github.com> Date: Mon, 20 Jun 2022 18:56:02 +0300 Subject: [PATCH 06/50] [Cloud Posture] Using resource.id instead of deprecated resource_id in findings index (#134581) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../latest_findings/use_latest_findings.ts | 1 + .../resource_findings/use_resource_findings.ts | 2 +- .../pages/findings/layout/findings_layout.tsx | 2 +- .../create_indices/latest_findings_mapping.ts | 15 --------------- 4 files changed, 3 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts index 90be856b82d06..924ec7c3d4963 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts @@ -48,6 +48,7 @@ const FIELDS_WITHOUT_KEYWORD_MAPPING = new Set([ '@timestamp', 'resource.sub_type', 'resource.name', + 'resource.id', 'rule.name', ]); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts index 2bd1b49aada2d..5ab16566b9100 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts @@ -43,7 +43,7 @@ const getResourceFindingsQuery = ({ ...query, bool: { ...query?.bool, - filter: [...(query?.bool?.filter || []), { term: { 'resource_id.keyword': resourceId } }], + filter: [...(query?.bool?.filter || []), { term: { 'resource.id': resourceId } }], }, }, pit: { id: pitId }, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx index d735d02e1f797..4da84b23847a0 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx @@ -67,7 +67,7 @@ export const getExpandColumn = ({ export const getFindingsColumns = (): Array> => [ { - field: 'resource_id', + field: 'resource.id', name: ( Date: Mon, 20 Jun 2022 17:34:42 +0100 Subject: [PATCH 07/50] [ML] Anomaly detection job from lens functional tests (#133899) * [ML] Anomaly detection job from lens functional tests * test commit * adding dashboard and tests * increasing tab switch timeout * moving archive * changes based on review * fix for browser window being too small * adding another resize after tab open * removing commented code Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../flyout_body.tsx | 13 +- .../public/embeddables/lens/show_flyout.tsx | 2 +- .../apps/ml/anomaly_detection/index.ts | 1 + .../apps/ml/anomaly_detection/lens_to_ml.ts | 202 ++++++++++++++++++ .../kbn_archiver/ml/lens_to_ml_dashboard.json | 80 +++++++ x-pack/test/functional/services/ml/index.ts | 3 + .../test/functional/services/ml/job_table.ts | 9 + .../services/ml/lens_visualizations.ts | 42 ++++ 8 files changed, 347 insertions(+), 5 deletions(-) create mode 100644 x-pack/test/functional/apps/ml/anomaly_detection/lens_to_ml.ts create mode 100644 x-pack/test/functional/fixtures/kbn_archiver/ml/lens_to_ml_dashboard.json create mode 100644 x-pack/test/functional/services/ml/lens_visualizations.ts diff --git a/x-pack/plugins/ml/public/embeddables/lens/lens_vis_layer_selection_flyout/flyout_body.tsx b/x-pack/plugins/ml/public/embeddables/lens/lens_vis_layer_selection_flyout/flyout_body.tsx index c6f0ec7ccec6f..8f0587dffcdf3 100644 --- a/x-pack/plugins/ml/public/embeddables/lens/lens_vis_layer_selection_flyout/flyout_body.tsx +++ b/x-pack/plugins/ml/public/embeddables/lens/lens_vis_layer_selection_flyout/flyout_body.tsx @@ -42,7 +42,7 @@ export const FlyoutBody: FC = ({ onClose, layerResults, embeddable, share return ( <> {layerResults.map((layer, i) => ( - <> + @@ -62,7 +62,7 @@ export const FlyoutBody: FC = ({ onClose, layerResults, embeddable, share {layer.isCompatible ? ( <> - + @@ -90,6 +90,7 @@ export const FlyoutBody: FC = ({ onClose, layerResults, embeddable, share color="success" iconType="popout" iconSide="right" + data-test-subj={`mlLensLayerCompatibleButton_${i}`} > = ({ onClose, layerResults, embeddable, share ) : ( <> - + @@ -123,7 +128,7 @@ export const FlyoutBody: FC = ({ onClose, layerResults, embeddable, share - + ))} ); diff --git a/x-pack/plugins/ml/public/embeddables/lens/show_flyout.tsx b/x-pack/plugins/ml/public/embeddables/lens/show_flyout.tsx index b77938408fa37..81a9cfcf9dc8e 100644 --- a/x-pack/plugins/ml/public/embeddables/lens/show_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/lens/show_flyout.tsx @@ -77,7 +77,7 @@ export async function showLensVisToADJobFlyout( ) ), { - 'data-test-subj': 'mlFlyoutJobSelector', + 'data-test-subj': 'mlFlyoutLensLayerSelector', ownFocus: true, closeButtonAriaLabel: 'jobSelectorFlyout', onClose: onFlyoutClose, diff --git a/x-pack/test/functional/apps/ml/anomaly_detection/index.ts b/x-pack/test/functional/apps/ml/anomaly_detection/index.ts index 0b206bfc450f3..60bc92990b905 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection/index.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection/index.ts @@ -48,5 +48,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./aggregated_scripted_job')); loadTestFile(require.resolve('./custom_urls')); loadTestFile(require.resolve('./forecasts')); + loadTestFile(require.resolve('./lens_to_ml')); }); } diff --git a/x-pack/test/functional/apps/ml/anomaly_detection/lens_to_ml.ts b/x-pack/test/functional/apps/ml/anomaly_detection/lens_to_ml.ts new file mode 100644 index 0000000000000..31964c5144d89 --- /dev/null +++ b/x-pack/test/functional/apps/ml/anomaly_detection/lens_to_ml.ts @@ -0,0 +1,202 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ getService, getPageObject, getPageObjects }: FtrProviderContext) { + const ml = getService('ml'); + const dashboardPanelActions = getService('dashboardPanelActions'); + const browser = getService('browser'); + const retry = getService('retry'); + const headerPage = getPageObject('header'); + const PageObjects = getPageObjects(['common', 'timePicker', 'dashboard']); + const kibanaServer = getService('kibanaServer'); + const esArchiver = getService('esArchiver'); + + const dashboardTitle = 'lens_to_ml'; + const dashboardArchive = + 'x-pack/test/functional/fixtures/kbn_archiver/ml/lens_to_ml_dashboard.json'; + + async function retrySwitchTab(tabIndex: number, seconds: number) { + await retry.tryForTime(seconds * 1000, async () => { + await browser.switchTab(tabIndex); + }); + await browser.setWindowSize(1920, 1080); + } + + async function setFarequoteTimerange() { + await PageObjects.timePicker.setAbsoluteRange( + 'Feb 7, 2016 @ 00:00:00.000', + 'Feb 11, 2016 @ 23:59:54.000' + ); + } + + async function dashboardPreparation(selectedPanelTitle: string) { + await PageObjects.dashboard.loadSavedDashboard(dashboardTitle); + await ml.dashboardEmbeddables.assertDashboardPanelExists(selectedPanelTitle); + + await setFarequoteTimerange(); + + const header = await dashboardPanelActions.getPanelHeading(selectedPanelTitle); + await dashboardPanelActions.openContextMenuMorePanel(header); + } + + async function createJobInWizard( + jobId: string, + splitField?: string, + aggAndFieldIdentifier?: string + ) { + await headerPage.waitUntilLoadingHasFinished(); + + if (splitField !== undefined) { + await ml.jobTypeSelection.assertMultiMetricJobWizardOpen(); + await ml.jobWizardMultiMetric.assertDetectorSplitExists(splitField); + await ml.jobWizardCommon.assertInfluencerSelection([splitField]); + } else if (aggAndFieldIdentifier !== undefined) { + await ml.jobTypeSelection.assertSingleMetricJobWizardOpen(); + await ml.jobWizardCommon.assertAggAndFieldInputExists(); + await ml.jobWizardCommon.selectAggAndField(aggAndFieldIdentifier, true); + await ml.jobWizardCommon.assertAnomalyChartExists('LINE'); + } + + await ml.testExecution.logTestStep('job creation displays the job details step'); + await ml.jobWizardCommon.advanceToJobDetailsSection(); + + await ml.testExecution.logTestStep('job creation inputs the job id'); + await ml.jobWizardCommon.assertJobIdInputExists(); + await ml.jobWizardCommon.setJobId(jobId); + + await ml.testExecution.logTestStep('job creation displays the validation step'); + await ml.jobWizardCommon.advanceToValidationSection(); + + await ml.testExecution.logTestStep('job creation displays the summary step'); + await ml.jobWizardCommon.advanceToSummarySection(); + + await ml.testExecution.logTestStep('job creation creates the job and finishes processing'); + await ml.jobWizardCommon.assertCreateJobButtonExists(); + await ml.jobWizardCommon.createJobAndWaitForCompletion(); + + await ml.testExecution.logTestStep('job creation displays the created job in the job list'); + await ml.navigation.navigateToMl(); + await ml.navigation.navigateToJobManagement(); + + await ml.jobTable.filterWithSearchString(jobId, 1); + + await ml.jobTable.assertJobRowJobId(jobId); + } + + describe('create jobs from lens', function () { + this.tags(['ml']); + + before(async () => { + await ml.testResources.setKibanaTimeZoneToUTC(); + await ml.securityUI.loginAsMlPowerUser(); + + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); + await kibanaServer.importExport.load(dashboardArchive); + await browser.setWindowSize(1920, 1080); + }); + + after(async () => { + await ml.api.cleanMlIndices(); + await kibanaServer.importExport.unload(dashboardArchive); + }); + + beforeEach(async () => { + await PageObjects.common.navigateToApp('dashboard'); + }); + + let tabsCount = 1; + + afterEach(async () => { + if (tabsCount > 1) { + await browser.closeCurrentWindow(); + await retrySwitchTab(0, 10); + tabsCount--; + } + }); + + it('can create multi metric job from vis with single layer', async () => { + const selectedPanelTitle = 'panel1'; + const jobId = 'job_from_lens_1'; + const splitField = 'airline'; + + await dashboardPreparation(selectedPanelTitle); + + await ml.lensVisualizations.clickCreateMLJobMenuAction(); + + await retrySwitchTab(1, 10); + tabsCount++; + + await createJobInWizard(jobId, splitField, undefined); + }); + + it('can create single metric job from vis with single layer', async () => { + const selectedPanelTitle = 'panel2'; + const aggAndFieldIdentifier = 'Count(Event rate)'; + const jobId = 'job_from_lens_2'; + + await dashboardPreparation(selectedPanelTitle); + + await ml.lensVisualizations.clickCreateMLJobMenuAction(); + + await retrySwitchTab(1, 10); + tabsCount++; + + await createJobInWizard(jobId, undefined, aggAndFieldIdentifier); + }); + + it('can create multi metric job from vis with multiple compatible layers and single incompatible layer', async () => { + const selectedPanelTitle = 'panel3'; + const aggAndFieldIdentifier = 'Mean(responsetime)'; + const jobId = 'job_from_lens_3'; + const numberOfCompatibleLayers = 2; + const numberOfIncompatibleLayers = 1; + + await dashboardPreparation(selectedPanelTitle); + + await ml.lensVisualizations.clickCreateMLJobMenuAction(); + + await ml.lensVisualizations.assertLensLayerSelectorExists(); + + await ml.lensVisualizations.assertNumberOfCompatibleLensLayers(numberOfCompatibleLayers); + + await ml.lensVisualizations.assertNumberOfIncompatibleLensLayers(numberOfIncompatibleLayers); + + ml.lensVisualizations.clickCreateJobFromLayer(1); + + await retrySwitchTab(1, 10); + tabsCount++; + + await createJobInWizard(jobId, undefined, aggAndFieldIdentifier); + }); + + it('shows flyout for job from vis with no compatible layers', async () => { + const selectedPanelTitle = 'panel4'; + const numberOfCompatibleLayers = 0; + const numberOfIncompatibleLayers = 1; + + await dashboardPreparation(selectedPanelTitle); + + await ml.lensVisualizations.clickCreateMLJobMenuAction(); + + await ml.lensVisualizations.assertLensLayerSelectorExists(); + + await ml.lensVisualizations.assertNumberOfCompatibleLensLayers(numberOfCompatibleLayers); + + await ml.lensVisualizations.assertNumberOfIncompatibleLensLayers(numberOfIncompatibleLayers); + }); + + it('does not show link to ml with vis with only incompatible layer types', async () => { + const selectedPanelTitle = 'panel5'; + + await dashboardPreparation(selectedPanelTitle); + + ml.lensVisualizations.assertMLJobMenuActionDoesNotExist(); + }); + }); +} diff --git a/x-pack/test/functional/fixtures/kbn_archiver/ml/lens_to_ml_dashboard.json b/x-pack/test/functional/fixtures/kbn_archiver/ml/lens_to_ml_dashboard.json new file mode 100644 index 0000000000000..17a02882b2b55 --- /dev/null +++ b/x-pack/test/functional/fixtures/kbn_archiver/ml/lens_to_ml_dashboard.json @@ -0,0 +1,80 @@ +{ + "attributes": { + "fieldAttrs": "{}", + "fields": "[]", + "name": "", + "runtimeFieldMap": "{}", + "timeFieldName": "@timestamp", + "title": "ft_farequote", + "typeMeta": "{}" + }, + "coreMigrationVersion": "8.4.0", + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "migrationVersion": { + "index-pattern": "8.0.0" + }, + "references": [], + "type": "index-pattern", + "updated_at": "2022-06-16T10:32:56.582Z", + "version": "WzU4LDFd" +} + +{ + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.4.0\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":9,\"i\":\"ce47cd87-4625-45ae-bf24-0acc847861a3\"},\"panelIndex\":\"ce47cd87-4625-45ae-bf24-0acc847861a3\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0\",\"name\":\"indexpattern-datasource-layer-971d994f-71d7-49d9-ab03-5046fb7c516e\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"971d994f-71d7-49d9-ab03-5046fb7c516e\",\"accessors\":[\"d3f232dc-571b-44bb-b8d9-b68931f3ad9e\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"0df5cd82-7be0-4683-95d6-a93767063e41\",\"splitAccessor\":\"5fb243c9-62e9-4ed7-a6da-1238588cde66\"}]},\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"971d994f-71d7-49d9-ab03-5046fb7c516e\":{\"columns\":{\"0df5cd82-7be0-4683-95d6-a93767063e41\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"d3f232dc-571b-44bb-b8d9-b68931f3ad9e\":{\"label\":\"Median of responsetime\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"responsetime\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}},\"5fb243c9-62e9-4ed7-a6da-1238588cde66\":{\"label\":\"Top 10 values of airline\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"airline\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"d3f232dc-571b-44bb-b8d9-b68931f3ad9e\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}}},\"columnOrder\":[\"5fb243c9-62e9-4ed7-a6da-1238588cde66\",\"0df5cd82-7be0-4683-95d6-a93767063e41\",\"d3f232dc-571b-44bb-b8d9-b68931f3ad9e\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"panel1\"},{\"version\":\"8.4.0\",\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":9,\"i\":\"00a8c0c0-7cb2-4828-bbc8-85072acb43f4\"},\"panelIndex\":\"00a8c0c0-7cb2-4828-bbc8-85072acb43f4\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0\",\"name\":\"indexpattern-datasource-layer-e85e1a7e-0c55-48f6-8610-4e55566ac794\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"e85e1a7e-0c55-48f6-8610-4e55566ac794\",\"accessors\":[\"1953cd9b-5ab7-4770-9e14-38065b0e2e6d\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"d123e2a3-2673-4979-a654-1e9bdf8c860c\"}]},\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"e85e1a7e-0c55-48f6-8610-4e55566ac794\":{\"columns\":{\"d123e2a3-2673-4979-a654-1e9bdf8c860c\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"1953cd9b-5ab7-4770-9e14-38065b0e2e6d\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"d123e2a3-2673-4979-a654-1e9bdf8c860c\",\"1953cd9b-5ab7-4770-9e14-38065b0e2e6d\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"panel2\"},{\"version\":\"8.4.0\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":9,\"w\":24,\"h\":10,\"i\":\"ba0e5dfa-6557-4553-a604-8efba7e1dec7\"},\"panelIndex\":\"ba0e5dfa-6557-4553-a604-8efba7e1dec7\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0\",\"name\":\"indexpattern-datasource-layer-e85e1a7e-0c55-48f6-8610-4e55566ac794\"},{\"type\":\"index-pattern\",\"id\":\"af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0\",\"name\":\"indexpattern-datasource-layer-b71cc247-df37-4af9-8f74-5d57d3d0f601\"},{\"type\":\"index-pattern\",\"id\":\"af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0\",\"name\":\"indexpattern-datasource-layer-4b6c7494-5bb4-4934-8259-498c499afc49\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"e85e1a7e-0c55-48f6-8610-4e55566ac794\",\"accessors\":[\"ac862e79-e190-4683-8ce2-190d19739d0b\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"d123e2a3-2673-4979-a654-1e9bdf8c860c\"},{\"layerId\":\"b71cc247-df37-4af9-8f74-5d57d3d0f601\",\"layerType\":\"data\",\"accessors\":[\"6a30ac94-8136-4a9a-ad82-406e4f356fef\"],\"seriesType\":\"line\",\"xAccessor\":\"cba5843a-cc04-47c3-a5b3-be50a6e0e8f8\"},{\"layerId\":\"5a095ef4-ef79-40fd-9f4f-903569043e83\",\"layerType\":\"annotations\",\"annotations\":[{\"label\":\"Event\",\"key\":{\"type\":\"point_in_time\",\"timestamp\":\"2016-02-09T10:30:00.000Z\"},\"icon\":\"triangle\",\"id\":\"11fabbec-d314-433f-bf98-52ef2a165a66\"}]},{\"layerId\":\"4b6c7494-5bb4-4934-8259-498c499afc49\",\"layerType\":\"data\",\"accessors\":[\"a5274ae1-c2c8-47a8-9ffa-8b0192aa540f\"],\"seriesType\":\"line\",\"xAccessor\":\"f89f9e12-9ae7-46de-a559-66194a44ee71\"}]},\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"e85e1a7e-0c55-48f6-8610-4e55566ac794\":{\"columns\":{\"d123e2a3-2673-4979-a654-1e9bdf8c860c\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"ac862e79-e190-4683-8ce2-190d19739d0b\":{\"label\":\"Median of responsetime\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"responsetime\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"d123e2a3-2673-4979-a654-1e9bdf8c860c\",\"ac862e79-e190-4683-8ce2-190d19739d0b\"],\"incompleteColumns\":{}},\"b71cc247-df37-4af9-8f74-5d57d3d0f601\":{\"columns\":{\"cba5843a-cc04-47c3-a5b3-be50a6e0e8f8\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"6a30ac94-8136-4a9a-ad82-406e4f356fef\":{\"label\":\"Average of responsetime\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"responsetime\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"cba5843a-cc04-47c3-a5b3-be50a6e0e8f8\",\"6a30ac94-8136-4a9a-ad82-406e4f356fef\"],\"incompleteColumns\":{}},\"4b6c7494-5bb4-4934-8259-498c499afc49\":{\"columns\":{\"f89f9e12-9ae7-46de-a559-66194a44ee71\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"a5274ae1-c2c8-47a8-9ffa-8b0192aa540f\":{\"label\":\"Average of responsetime -3h\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"responsetime\",\"isBucketed\":false,\"scale\":\"ratio\",\"timeShift\":\"3h\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"f89f9e12-9ae7-46de-a559-66194a44ee71\",\"a5274ae1-c2c8-47a8-9ffa-8b0192aa540f\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"panel3\"},{\"version\":\"8.4.0\",\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":9,\"w\":24,\"h\":10,\"i\":\"099d1917-72cb-4e98-bbe8-404ce1b8ea78\"},\"panelIndex\":\"099d1917-72cb-4e98-bbe8-404ce1b8ea78\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0\",\"name\":\"indexpattern-datasource-layer-e85e1a7e-0c55-48f6-8610-4e55566ac794\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"e85e1a7e-0c55-48f6-8610-4e55566ac794\",\"accessors\":[\"ef8bebb0-1b26-4ec4-afc5-92147cd47680\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"d123e2a3-2673-4979-a654-1e9bdf8c860c\"}]},\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"e85e1a7e-0c55-48f6-8610-4e55566ac794\":{\"columns\":{\"d123e2a3-2673-4979-a654-1e9bdf8c860c\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"ef8bebb0-1b26-4ec4-afc5-92147cd47680\":{\"label\":\"Median of responsetime -1h\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"responsetime\",\"isBucketed\":false,\"scale\":\"ratio\",\"timeShift\":\"1h\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"d123e2a3-2673-4979-a654-1e9bdf8c860c\",\"ef8bebb0-1b26-4ec4-afc5-92147cd47680\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"panel4\"},{\"version\":\"8.4.0\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":19,\"w\":24,\"h\":10,\"i\":\"1d4fdecd-fe7c-44d8-908d-e9448999915c\"},\"panelIndex\":\"1d4fdecd-fe7c-44d8-908d-e9448999915c\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0\",\"name\":\"indexpattern-datasource-layer-208abf63-5927-4660-bbc7-bb3e5174911b\"}],\"state\":{\"visualization\":{\"columns\":[{\"isTransposed\":false,\"columnId\":\"d411f774-5bf6-4fef-85bb-d748d8c2ce25\"},{\"isTransposed\":false,\"columnId\":\"d1ddc948-8ed3-4caa-9993-b5e6786a742b\"}],\"layerId\":\"208abf63-5927-4660-bbc7-bb3e5174911b\",\"layerType\":\"data\"},\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"208abf63-5927-4660-bbc7-bb3e5174911b\":{\"columns\":{\"d411f774-5bf6-4fef-85bb-d748d8c2ce25\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"d1ddc948-8ed3-4caa-9993-b5e6786a742b\":{\"label\":\"Median of responsetime\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"responsetime\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"d411f774-5bf6-4fef-85bb-d748d8c2ce25\",\"d1ddc948-8ed3-4caa-9993-b5e6786a742b\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"panel5\"}]", + "timeRestore": false, + "title": "lens_to_ml", + "version": 1 + }, + "coreMigrationVersion": "8.4.0", + "id": "210cd820-ed71-11ec-937e-3d81e6f9d3c0", + "migrationVersion": { + "dashboard": "8.3.0" + }, + "references": [ + { + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "name": "ce47cd87-4625-45ae-bf24-0acc847861a3:indexpattern-datasource-layer-971d994f-71d7-49d9-ab03-5046fb7c516e", + "type": "index-pattern" + }, + { + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "name": "00a8c0c0-7cb2-4828-bbc8-85072acb43f4:indexpattern-datasource-layer-e85e1a7e-0c55-48f6-8610-4e55566ac794", + "type": "index-pattern" + }, + { + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "name": "ba0e5dfa-6557-4553-a604-8efba7e1dec7:indexpattern-datasource-layer-e85e1a7e-0c55-48f6-8610-4e55566ac794", + "type": "index-pattern" + }, + { + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "name": "ba0e5dfa-6557-4553-a604-8efba7e1dec7:indexpattern-datasource-layer-b71cc247-df37-4af9-8f74-5d57d3d0f601", + "type": "index-pattern" + }, + { + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "name": "ba0e5dfa-6557-4553-a604-8efba7e1dec7:indexpattern-datasource-layer-4b6c7494-5bb4-4934-8259-498c499afc49", + "type": "index-pattern" + }, + { + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "name": "099d1917-72cb-4e98-bbe8-404ce1b8ea78:indexpattern-datasource-layer-e85e1a7e-0c55-48f6-8610-4e55566ac794", + "type": "index-pattern" + }, + { + "id": "af9fbc40-ed5f-11ec-937e-3d81e6f9d3c0", + "name": "1d4fdecd-fe7c-44d8-908d-e9448999915c:indexpattern-datasource-layer-208abf63-5927-4660-bbc7-bb3e5174911b", + "type": "index-pattern" + } + ], + "type": "dashboard", + "updated_at": "2022-06-16T15:33:11.482Z", + "version": "Wzc5OCwxXQ==" +} \ No newline at end of file diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index 42cde18079aab..e4dd0b4bdeeb7 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -36,6 +36,7 @@ import { MachineLearningJobWizardCommonProvider } from './job_wizard_common'; import { MachineLearningJobWizardCategorizationProvider } from './job_wizard_categorization'; import { MachineLearningJobWizardMultiMetricProvider } from './job_wizard_multi_metric'; import { MachineLearningJobWizardPopulationProvider } from './job_wizard_population'; +import { MachineLearningLensVisualizationsProvider } from './lens_visualizations'; import { MachineLearningNavigationProvider } from './navigation'; import { MachineLearningOverviewPageProvider } from './overview_page'; import { MachineLearningSecurityCommonProvider } from './security_common'; @@ -109,6 +110,7 @@ export function MachineLearningProvider(context: FtrProviderContext) { const jobWizardCommon = MachineLearningJobWizardCommonProvider(context, commonUI, customUrls); const jobWizardMultiMetric = MachineLearningJobWizardMultiMetricProvider(context); const jobWizardPopulation = MachineLearningJobWizardPopulationProvider(context); + const lensVisualizations = MachineLearningLensVisualizationsProvider(context); const navigation = MachineLearningNavigationProvider(context); const overviewPage = MachineLearningOverviewPageProvider(context); const securityCommon = MachineLearningSecurityCommonProvider(context); @@ -165,6 +167,7 @@ export function MachineLearningProvider(context: FtrProviderContext) { jobWizardCommon, jobWizardMultiMetric, jobWizardPopulation, + lensVisualizations, navigation, overviewPage, securityCommon, diff --git a/x-pack/test/functional/services/ml/job_table.ts b/x-pack/test/functional/services/ml/job_table.ts index 000cd04e9d7ac..fe60073bd3a33 100644 --- a/x-pack/test/functional/services/ml/job_table.ts +++ b/x-pack/test/functional/services/ml/job_table.ts @@ -279,6 +279,15 @@ export function MachineLearningJobTableProvider( }); } + public async assertJobRowJobId(jobId: string) { + await retry.tryForTime(5000, async () => { + await this.refreshJobList(); + const rows = await this.parseJobTable(); + const jobRowMatch = rows.find((row) => row.id === jobId); + expect(jobRowMatch).to.not.eql(undefined, `Expected row with job ID ${jobId} to exist`); + }); + } + public async assertJobRowDetailsCounts( jobId: string, expectedCounts: object, diff --git a/x-pack/test/functional/services/ml/lens_visualizations.ts b/x-pack/test/functional/services/ml/lens_visualizations.ts new file mode 100644 index 0000000000000..3c05ec234a3c2 --- /dev/null +++ b/x-pack/test/functional/services/ml/lens_visualizations.ts @@ -0,0 +1,42 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export function MachineLearningLensVisualizationsProvider({ getService }: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + + return { + async clickCreateMLJobMenuAction() { + await testSubjects.click('embeddablePanelAction-create-ml-ad-job-action'); + }, + async clickCreateJobFromLayer(layerIndex: number) { + await testSubjects.click(`mlLensLayerCompatibleButton_${layerIndex}`); + }, + async assertLensLayerSelectorExists() { + await testSubjects.existOrFail('mlFlyoutLensLayerSelector'); + }, + async assertMLJobMenuActionDoesNotExist() { + await testSubjects.missingOrFail('embeddablePanelAction-create-ml-ad-job-action'); + }, + async assertNumberOfCompatibleLensLayers(numberOfCompatibleLayers: number) { + const compatibleLayers = await testSubjects.findAll('mlLensLayerCompatible'); + expect(compatibleLayers.length).to.eql( + numberOfCompatibleLayers, + `Expected number of compatible layers to be ${numberOfCompatibleLayers} (got '${compatibleLayers.length}')` + ); + }, + async assertNumberOfIncompatibleLensLayers(numberOfIncompatibleLayers: number) { + const incompatibleLayers = await testSubjects.findAll('mlLensLayerIncompatible'); + expect(incompatibleLayers.length).to.eql( + numberOfIncompatibleLayers, + `Expected number of compatible layers to be ${numberOfIncompatibleLayers} (got '${incompatibleLayers.length}')` + ); + }, + }; +} From 04ace86b0c28ca115b3a4708fa84e218a51ac580 Mon Sep 17 00:00:00 2001 From: Terrance DeJesus <99630311+terrancedejesus@users.noreply.github.com> Date: Mon, 20 Jun 2022 13:41:17 -0400 Subject: [PATCH 08/50] [Detection Rules] Add 8.3 rules (#134686) --- ...ote_system_discovery_commands_windows.json | 2 +- .../execution_user_exec_to_pod.json | 50 +++++++++++++++++++ .../rules/prepackaged_rules/index.ts | 22 ++++---- ...ege_escalation_linux_strace_activity.json} | 24 +++++++-- 4 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/execution_user_exec_to_pod.json rename x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/{linux_strace_activity.json => privilege_escalation_linux_strace_activity.json} (51%) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/discovery_remote_system_discovery_commands_windows.json b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/discovery_remote_system_discovery_commands_windows.json index 3b004c28fe846..d31c55737fb03 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/discovery_remote_system_discovery_commands_windows.json +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/discovery_remote_system_discovery_commands_windows.json @@ -13,7 +13,7 @@ "license": "Elastic License v2", "name": "Remote System Discovery Commands", "note": "## Triage and analysis\n\n### Investigating Remote System Discovery Commands\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps.\nThis can happen by running commands to enumerate network resources, users, connections, files, and installed security\nsoftware.\n\nThis rule looks for the execution of the `arp` or `nbstat` utilities to enumerate remote systems in the environment,\nwhich is useful for attackers to identify lateral movement targets.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files\nfor prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate abnormal behaviors observed using the account, such as commands executed, files created or modified, and\nnetwork connections.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify\nsuspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are\nidentified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business\nsystems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and\nmalware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the\nmean time to respond (MTTR).\n\n## Config\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2, events will not define `event.ingested` and default fallback for EQL rules was not added until 8.2, so you will need to add a custom pipeline to populate `event.ingested` to @timestamp for this rule to work.\n", - "query": "process where event.type in (\"start\", \"process_started\") and\n (process.name : \"nbtstat.exe\" and process.args : (\"-n\", \"-s\")) or\n (process.name : \"arp.exe\" and process.args : \"-a\")\n", + "query": "process where event.type in (\"start\", \"process_started\") and\n ((process.name : \"nbtstat.exe\" and process.args : (\"-n\", \"-s\")) or\n (process.name : \"arp.exe\" and process.args : \"-a\"))\n", "risk_score": 21, "rule_id": "0635c542-1b96-4335-9b47-126582d2c19a", "severity": "low", diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/execution_user_exec_to_pod.json b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/execution_user_exec_to_pod.json new file mode 100644 index 0000000000000..72c4a8399a0de --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/execution_user_exec_to_pod.json @@ -0,0 +1,50 @@ +{ + "author": [ + "Elastic" + ], + "description": "This rule detects a user attempt to establish a shell session into a pod using the 'exec' command. Using the 'exec' command in a pod allows a user to establish a temporary shell session and execute any process/commands in the pod. An adversary may call bash to gain a persistent interactive shell which will allow access to any data the pod has permissions to, including secrets.", + "false_positives": [ + "An administrator may need to exec into a pod for a legitimate reason like debugging purposes. Containers built from Linux and Windows OS images, tend to include debugging utilities. In this case, an admin may choose to run commands inside a specific container with kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN}. For example, the following command can be used to look at logs from a running Cassandra pod: kubectl exec cassandra --cat /var/log/cassandra/system.log . Additionally, the -i and -t arguments might be used to run a shell connected to the terminal: kubectl exec -i -t cassandra -- sh" + ], + "index": [ + "logs-kubernetes.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Kubernetes User Exec into Pod", + "note": "## Config\n\nThe Kubernetes Fleet integration with Audit Logs enabled or similarly structured data is required to be compatible with this rule.", + "query": "event.dataset:\"kubernetes.audit_logs\" \n and kubernetes.audit.objectRef.resource:\"pods\" \n and kubernetes.audit.objectRef.subresource:\"exec\"\n", + "references": [ + "https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/", + "https://kubernetes.io/docs/tasks/debug/debug-application/get-shell-running-container/" + ], + "risk_score": 47, + "rule_id": "14de811c-d60f-11ec-9fd7-f661ea17fbce", + "severity": "medium", + "tags": [ + "Elastic", + "Kubernetes", + "Continuous Monitoring", + "Execution" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1609", + "name": "Container Administration Command", + "reference": "https://attack.mitre.org/techniques/T1609/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 1 +} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/index.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/index.ts index e579cb36edf0d..a02e40e55dbeb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/index.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/index.ts @@ -86,14 +86,14 @@ import rule73 from './linux_iodine_activity.json'; import rule74 from './linux_netcat_network_connection.json'; import rule75 from './linux_nping_activity.json'; import rule76 from './linux_process_started_in_temp_directory.json'; -import rule77 from './linux_strace_activity.json'; -import rule78 from './persistence_adobe_hijack_persistence.json'; -import rule79 from './persistence_local_scheduled_task_creation.json'; -import rule80 from './persistence_priv_escalation_via_accessibility_features.json'; -import rule81 from './persistence_shell_activity_by_web_server.json'; -import rule82 from './persistence_system_shells_via_services.json'; -import rule83 from './persistence_user_account_creation.json'; -import rule84 from './persistence_via_application_shimming.json'; +import rule77 from './persistence_adobe_hijack_persistence.json'; +import rule78 from './persistence_local_scheduled_task_creation.json'; +import rule79 from './persistence_priv_escalation_via_accessibility_features.json'; +import rule80 from './persistence_shell_activity_by_web_server.json'; +import rule81 from './persistence_system_shells_via_services.json'; +import rule82 from './persistence_user_account_creation.json'; +import rule83 from './persistence_via_application_shimming.json'; +import rule84 from './privilege_escalation_linux_strace_activity.json'; import rule85 from './privilege_escalation_unusual_parentchild_relationship.json'; import rule86 from './impact_modification_of_boot_config.json'; import rule87 from './privilege_escalation_uac_bypass_event_viewer.json'; @@ -680,8 +680,9 @@ import rule667 from './execution_abnormal_process_id_file_created.json'; import rule668 from './execution_process_started_from_process_id_file.json'; import rule669 from './privilege_escalation_suspicious_dnshostname_update.json'; import rule670 from './command_and_control_connection_attempt_by_non_ssh_root_session.json'; -import rule671 from './defense_evasion_elastic_agent_service_terminated.json'; -import rule672 from './defense_evasion_proxy_execution_via_msdt.json'; +import rule671 from './execution_user_exec_to_pod.json'; +import rule672 from './defense_evasion_elastic_agent_service_terminated.json'; +import rule673 from './defense_evasion_proxy_execution_via_msdt.json'; export const rawRules = [ rule1, @@ -1356,4 +1357,5 @@ export const rawRules = [ rule670, rule671, rule672, + rule673, ]; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/linux_strace_activity.json b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/privilege_escalation_linux_strace_activity.json similarity index 51% rename from x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/linux_strace_activity.json rename to x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/privilege_escalation_linux_strace_activity.json index 210a71ced9222..a649bcd3ac487 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/linux_strace_activity.json +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/privilege_escalation_linux_strace_activity.json @@ -2,7 +2,7 @@ "author": [ "Elastic" ], - "description": "Strace runs in a privileged context and can be used to escape restrictive environments by instantiating a shell in order to elevate privileges or move laterally.", + "description": "Strace is a useful diagnostic, instructional, and debugging tool. This rule identifies a privileged context execution of strace which can be used to escape restrictive environments by instantiating a shell in order to elevate privileges or move laterally.", "false_positives": [ "Strace is a dual-use tool that can be used for benign or malicious activity. Some normal use of this command may originate from developers or SREs engaged in debugging or system call tracing." ], @@ -25,9 +25,27 @@ "Elastic", "Host", "Linux", - "Threat Detection" + "Threat Detection", + "Privilege Escalation" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } ], "timestamp_override": "event.ingested", "type": "query", - "version": 7 + "version": 8 } From a1eaaa4680e00c3d7a19b104ef548ebf415fa93a Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Mon, 20 Jun 2022 13:11:09 -0500 Subject: [PATCH 09/50] {REDO} [RAM] Add Snooze Scheduling UI and API (#134512) * Add inline range datepicker * Finish interscheduler UI internals * Add repeat summaries and begin implementing saving * Fix unsnooze, move all UI to snooze notify badge * Hook up snooze schedule api * Finish Rule Ds List scheduling UI * Fix half-baked dropdown work: * Fix displaying yearly recurrences * Move snooze scheduler into snooze panel * Implement scheduler on shareable RuleStatusDropdown * Fix title and typecheck * Fix lint * Fix typecheck * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' * Fix types and jest * Fix jest * Fix functional tests * Fix Jest * Fix test * Re-enable snooze status on O11y * Fix popover title and position * Add 24h default to snooze schedule * Fix delete schedule button text * Disable daily recurrence when snooze is over 24h * Fix button size * Use default kibana tz in scheduler * Add scheduled snooze notification badge * Fix compressed styling * Compress timezone dropdown * Memoize select options * Sort active snoozes in descending order * re-structure * unit test * fix unit test * fix collapse snooze notification * re-structure RuleSnoozePanel components * Clean up helper unit test descriptions * add unit test for CustomRecurrenceScheduler * Add rule_snooze helpers test * Add base snooze panel tests * Fix test * Consolidate repeated types * Fix bad merge Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Xavier Mouligneau --- .../alerting/common/rule_snooze_type.ts | 16 +- .../alerting/server/lib/is_rule_snoozed.ts | 78 ++-- .../server/lib/validate_snooze_date.ts | 8 +- .../server/routes/snooze_rule.test.ts | 35 +- .../alerting/server/routes/snooze_rule.ts | 31 +- .../server/routes/unsnooze_rule.test.ts | 3 + .../alerting/server/routes/unsnooze_rule.ts | 14 +- .../server/rules_client/rules_client.ts | 87 ++-- .../public/pages/rule_details/index.tsx | 6 +- .../public/pages/rules/index.tsx | 7 +- .../rule_status_dropdown_sandbox.tsx | 7 +- .../application/lib/i18n_month_day_date.ts | 20 + .../application/lib/rule_api/snooze.test.ts | 15 +- .../public/application/lib/rule_api/snooze.ts | 18 +- .../application/lib/rule_api/unsnooze.test.ts | 3 + .../application/lib/rule_api/unsnooze.ts | 16 +- .../with_bulk_rule_api_operations.tsx | 13 +- .../rule_details/components/rule_details.tsx | 8 +- .../components/collapsed_item_actions.tsx | 70 ++- .../components/rule_snooze/index.tsx | 8 + .../panel/base_snooze_panel.test.tsx | 113 +++++ .../rule_snooze/panel/base_snooze_panel.tsx | 404 ++++++++++++++++++ .../components/rule_snooze/panel/constants.ts | 14 + .../rule_snooze/panel/helpers.test.tsx | 75 ++++ .../components/rule_snooze/panel/helpers.tsx | 81 ++++ .../components/rule_snooze/panel/index.tsx | 115 +++++ .../rule_snooze/panel/translations.tsx | 44 ++ .../recurrence_scheduler/constants.ts | 85 ++++ .../custom_recurrence_scheduler.test.tsx | 92 ++++ .../custom_recurrence_scheduler.tsx | 186 ++++++++ .../recurrence_scheduler/helpers.test.tsx | 291 +++++++++++++ .../recurrence_scheduler/helpers.tsx | 189 ++++++++ .../recurrence_scheduler/index.tsx | 290 +++++++++++++ .../recurrence_scheduler/translations.tsx | 121 ++++++ .../components/rule_snooze/scheduler.scss | 13 + .../components/rule_snooze/scheduler.tsx | 365 ++++++++++++++++ .../components/rule_status_dropdown.tsx | 335 ++------------- .../rules_list/components/rules_list.tsx | 9 +- .../rules_list_notify_badge.test.tsx | 28 +- .../components/rules_list_notify_badge.tsx | 166 ++++--- .../components/rules_list_snooze_panel.tsx | 123 ------ .../components/rules_list_table.tsx | 17 +- .../triggers_actions_ui/public/types.ts | 27 ++ .../group2/tests/alerting/snooze.ts | 61 ++- .../spaces_only/tests/alerting/snooze.ts | 45 +- 45 files changed, 3093 insertions(+), 659 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/lib/i18n_month_day_date.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/index.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/constants.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/translations.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/constants.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/translations.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.scss create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx delete mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_snooze_panel.tsx diff --git a/x-pack/plugins/alerting/common/rule_snooze_type.ts b/x-pack/plugins/alerting/common/rule_snooze_type.ts index 405cbef357242..335f1b4180727 100644 --- a/x-pack/plugins/alerting/common/rule_snooze_type.ts +++ b/x-pack/plugins/alerting/common/rule_snooze_type.ts @@ -7,11 +7,21 @@ import type { WeekdayStr } from 'rrule'; -export type RuleSnooze = Array<{ +type SnoozeRRule = Partial & Pick; + +export interface RuleSnoozeSchedule { duration: number; - rRule: Partial & Pick; + rRule: SnoozeRRule; // For scheduled/recurring snoozes, `id` uniquely identifies them so that they can be displayed, modified, and deleted individually id?: string; +} + +// Type signature of has to be repeated here to avoid issues with SavedObject compatibility +// RuleSnooze = RuleSnoozeSchedule[] throws typescript errors across the whole lib +export type RuleSnooze = Array<{ + duration: number; + rRule: SnoozeRRule; + id?: string; }>; // An iCal RRULE to define a recurrence schedule, see https://github.com/jakubroztocil/rrule for the spec @@ -26,7 +36,7 @@ export interface RRuleRecord { byweekday?: Array; bymonth?: number[]; bysetpos?: number[]; - bymonthday: number; + bymonthday: number[]; byyearday: number[]; byweekno: number[]; byhour: number[]; diff --git a/x-pack/plugins/alerting/server/lib/is_rule_snoozed.ts b/x-pack/plugins/alerting/server/lib/is_rule_snoozed.ts index 7ae4b99e4df75..2e9dfe7003e27 100644 --- a/x-pack/plugins/alerting/server/lib/is_rule_snoozed.ts +++ b/x-pack/plugins/alerting/server/lib/is_rule_snoozed.ts @@ -6,47 +6,63 @@ */ import { RRule, ByWeekday, Weekday, rrulestr } from 'rrule'; +import { first } from 'lodash'; import { SanitizedRule, RuleTypeParams } from '../../common/rule'; type RuleSnoozeProps = Pick, 'muteAll' | 'snoozeSchedule'>; +type ActiveSnoozes = Array<{ snoozeEndTime: Date; id: string }>; -export function getRuleSnoozeEndTime(rule: RuleSnoozeProps): Date | null { +export function getActiveSnoozes(rule: RuleSnoozeProps): ActiveSnoozes | null { if (rule.snoozeSchedule == null) { return null; } const now = Date.now(); - for (const snooze of rule.snoozeSchedule) { - const { duration, rRule } = snooze; - const startTimeMS = Date.parse(rRule.dtstart); - const initialEndTime = startTimeMS + duration; - // If now is during the first occurrence of the snooze - - if (now >= startTimeMS && now < initialEndTime) return new Date(initialEndTime); - - // Check to see if now is during a recurrence of the snooze - if (rRule) { - try { - const rRuleOptions = { - ...rRule, - dtstart: new Date(rRule.dtstart), - until: rRule.until ? new Date(rRule.until) : null, - wkst: rRule.wkst ? Weekday.fromStr(rRule.wkst) : null, - byweekday: rRule.byweekday ? parseByWeekday(rRule.byweekday) : null, - }; - - const recurrenceRule = new RRule(rRuleOptions); - const lastOccurrence = recurrenceRule.before(new Date(now), true); - if (!lastOccurrence) continue; - const lastOccurrenceEndTime = lastOccurrence.getTime() + duration; - if (now < lastOccurrenceEndTime) return new Date(lastOccurrenceEndTime); - } catch (e) { - throw new Error(`Failed to process RRule ${rRule}: ${e}`); - } - } - } + return ( + rule.snoozeSchedule + .map((snooze) => { + const { duration, rRule, id } = snooze; + const startTimeMS = Date.parse(rRule.dtstart); + const initialEndTime = startTimeMS + duration; + // If now is during the first occurrence of the snooze + + if (now >= startTimeMS && now < initialEndTime) + return { + snoozeEndTime: new Date(initialEndTime), + id, + }; + + // Check to see if now is during a recurrence of the snooze + if (rRule) { + try { + const rRuleOptions = { + ...rRule, + dtstart: new Date(rRule.dtstart), + until: rRule.until ? new Date(rRule.until) : null, + wkst: rRule.wkst ? Weekday.fromStr(rRule.wkst) : null, + byweekday: rRule.byweekday ? parseByWeekday(rRule.byweekday) : null, + }; - return null; + const recurrenceRule = new RRule(rRuleOptions); + const lastOccurrence = recurrenceRule.before(new Date(now), true); + if (!lastOccurrence) return null; + const lastOccurrenceEndTime = lastOccurrence.getTime() + duration; + if (now < lastOccurrenceEndTime) + return { snoozeEndTime: new Date(lastOccurrenceEndTime), id }; + } catch (e) { + throw new Error(`Failed to process RRule ${rRule}: ${e}`); + } + } + return null; + }) + .filter(Boolean) + // Sort in descending snoozeEndTime order + .sort((a, b) => b!.snoozeEndTime.getTime() - a!.snoozeEndTime.getTime()) as ActiveSnoozes + ); +} + +export function getRuleSnoozeEndTime(rule: RuleSnoozeProps): Date | null { + return first(getActiveSnoozes(rule))?.snoozeEndTime ?? null; } export function isRuleSnoozed(rule: RuleSnoozeProps) { diff --git a/x-pack/plugins/alerting/server/lib/validate_snooze_date.ts b/x-pack/plugins/alerting/server/lib/validate_snooze_date.ts index deb951a717a06..91d8a2943d394 100644 --- a/x-pack/plugins/alerting/server/lib/validate_snooze_date.ts +++ b/x-pack/plugins/alerting/server/lib/validate_snooze_date.ts @@ -5,9 +5,15 @@ * 2.0. */ -export const validateSnoozeDate = (date: string) => { +export const validateSnoozeEndDate = (date: string) => { const parsedValue = Date.parse(date); if (isNaN(parsedValue)) return `Invalid date: ${date}`; if (parsedValue <= Date.now()) return `Invalid snooze date as it is in the past: ${date}`; return; }; + +export const validateSnoozeStartDate = (date: string) => { + const parsedValue = Date.parse(date); + if (isNaN(parsedValue)) return `Invalid date: ${date}`; + return; +}; diff --git a/x-pack/plugins/alerting/server/routes/snooze_rule.test.ts b/x-pack/plugins/alerting/server/routes/snooze_rule.test.ts index dd0af1c77ac1a..ab24103672521 100644 --- a/x-pack/plugins/alerting/server/routes/snooze_rule.test.ts +++ b/x-pack/plugins/alerting/server/routes/snooze_rule.test.ts @@ -21,8 +21,14 @@ beforeEach(() => { jest.resetAllMocks(); }); -// These tests don't test for future snooze time validation, so this date doesn't need to be in the future -const SNOOZE_END_TIME = '2021-03-07T00:00:00.000Z'; +const SNOOZE_SCHEDULE = { + rRule: { + dtstart: '2021-03-07T00:00:00.000Z', + tzid: 'UTC', + count: 1, + }, + duration: 864000000, +}; describe('snoozeAlertRoute', () => { it('snoozes an alert', async () => { @@ -44,7 +50,7 @@ describe('snoozeAlertRoute', () => { id: '1', }, body: { - snooze_end_time: SNOOZE_END_TIME, + snooze_schedule: SNOOZE_SCHEDULE, }, }, ['noContent'] @@ -57,7 +63,14 @@ describe('snoozeAlertRoute', () => { Array [ Object { "id": "1", - "snoozeEndTime": "${SNOOZE_END_TIME}", + "snoozeSchedule": Object { + "duration": 864000000, + "rRule": Object { + "count": 1, + "dtstart": "2021-03-07T00:00:00.000Z", + "tzid": "UTC", + }, + }, }, ] `); @@ -84,7 +97,10 @@ describe('snoozeAlertRoute', () => { id: '1', }, body: { - snooze_end_time: -1, + snooze_schedule: { + ...SNOOZE_SCHEDULE, + duration: -1, + }, }, }, ['noContent'] @@ -97,7 +113,14 @@ describe('snoozeAlertRoute', () => { Array [ Object { "id": "1", - "snoozeEndTime": -1, + "snoozeSchedule": Object { + "duration": -1, + "rRule": Object { + "count": 1, + "dtstart": "2021-03-07T00:00:00.000Z", + "tzid": "UTC", + }, + }, }, ] `); diff --git a/x-pack/plugins/alerting/server/routes/snooze_rule.ts b/x-pack/plugins/alerting/server/routes/snooze_rule.ts index a408a4d3175df..c56d57230e876 100644 --- a/x-pack/plugins/alerting/server/routes/snooze_rule.ts +++ b/x-pack/plugins/alerting/server/routes/snooze_rule.ts @@ -8,26 +8,39 @@ import { IRouter } from '@kbn/core/server'; import { schema } from '@kbn/config-schema'; import { ILicenseState, RuleMutedError } from '../lib'; -import { verifyAccessAndContext, RewriteRequestCase } from './lib'; +import { verifyAccessAndContext } from './lib'; import { SnoozeOptions } from '../rules_client'; import { AlertingRequestHandlerContext, INTERNAL_BASE_ALERTING_API_PATH } from '../types'; -import { validateSnoozeDate } from '../lib/validate_snooze_date'; +import { validateSnoozeStartDate, validateSnoozeEndDate } from '../lib/validate_snooze_date'; const paramSchema = schema.object({ id: schema.string(), }); const bodySchema = schema.object({ - snooze_end_time: schema.oneOf([ - schema.string({ - validate: validateSnoozeDate, + snooze_schedule: schema.object({ + id: schema.maybe(schema.string()), + duration: schema.number(), + rRule: schema.object({ + dtstart: schema.string({ validate: validateSnoozeStartDate }), + tzid: schema.string(), + freq: schema.maybe( + schema.oneOf([schema.literal(0), schema.literal(1), schema.literal(2), schema.literal(3)]) + ), + interval: schema.maybe(schema.number()), + until: schema.maybe(schema.string({ validate: validateSnoozeEndDate })), + count: schema.maybe(schema.number()), + byweekday: schema.maybe(schema.arrayOf(schema.string())), + bymonthday: schema.maybe(schema.arrayOf(schema.number())), + bymonth: schema.maybe(schema.arrayOf(schema.number())), }), - schema.literal(-1), - ]), + }), }); -const rewriteBodyReq: RewriteRequestCase = ({ snooze_end_time: snoozeEndTime }) => ({ - snoozeEndTime, +const rewriteBodyReq: (opts: { + snooze_schedule: SnoozeOptions['snoozeSchedule']; +}) => SnoozeOptions = ({ snooze_schedule: snoozeSchedule }) => ({ + snoozeSchedule, }); export const snoozeRuleRoute = ( diff --git a/x-pack/plugins/alerting/server/routes/unsnooze_rule.test.ts b/x-pack/plugins/alerting/server/routes/unsnooze_rule.test.ts index 0a67c3aa608dc..12a4c250bef1d 100644 --- a/x-pack/plugins/alerting/server/routes/unsnooze_rule.test.ts +++ b/x-pack/plugins/alerting/server/routes/unsnooze_rule.test.ts @@ -40,6 +40,9 @@ describe('unsnoozeAlertRoute', () => { params: { id: '1', }, + body: { + scheduleIds: undefined, + }, }, ['noContent'] ); diff --git a/x-pack/plugins/alerting/server/routes/unsnooze_rule.ts b/x-pack/plugins/alerting/server/routes/unsnooze_rule.ts index b91fb24bea56a..2f4187fd3aa28 100644 --- a/x-pack/plugins/alerting/server/routes/unsnooze_rule.ts +++ b/x-pack/plugins/alerting/server/routes/unsnooze_rule.ts @@ -8,13 +8,21 @@ import { IRouter } from '@kbn/core/server'; import { schema } from '@kbn/config-schema'; import { ILicenseState, RuleMutedError } from '../lib'; -import { verifyAccessAndContext } from './lib'; +import { verifyAccessAndContext, RewriteRequestCase } from './lib'; import { AlertingRequestHandlerContext, INTERNAL_BASE_ALERTING_API_PATH } from '../types'; const paramSchema = schema.object({ id: schema.string(), }); +const bodySchema = schema.object({ + schedule_ids: schema.maybe(schema.arrayOf(schema.string())), +}); + +const rewriteBodyReq: RewriteRequestCase<{ scheduleIds?: string[] }> = ({ + schedule_ids: scheduleIds, +}) => (scheduleIds ? { scheduleIds } : {}); + export const unsnoozeRuleRoute = ( router: IRouter, licenseState: ILicenseState @@ -24,14 +32,16 @@ export const unsnoozeRuleRoute = ( path: `${INTERNAL_BASE_ALERTING_API_PATH}/rule/{id}/_unsnooze`, validate: { params: paramSchema, + body: bodySchema, }, }, router.handleLegacyErrors( verifyAccessAndContext(licenseState, async function (context, req, res) { const rulesClient = (await context.alerting).getRulesClient(); const params = req.params; + const body = rewriteBodyReq(req.body); try { - await rulesClient.unsnooze({ ...params }); + await rulesClient.unsnooze({ ...params, ...body }); return res.noContent(); } catch (e) { if (e instanceof RuleMutedError) { diff --git a/x-pack/plugins/alerting/server/rules_client/rules_client.ts b/x-pack/plugins/alerting/server/rules_client/rules_client.ts index 30861ee1ab5a4..cf5592579806b 100644 --- a/x-pack/plugins/alerting/server/rules_client/rules_client.ts +++ b/x-pack/plugins/alerting/server/rules_client/rules_client.ts @@ -55,6 +55,7 @@ import { SanitizedRuleWithLegacyId, PartialRuleWithLegacyId, RuleSnooze, + RuleSnoozeSchedule, RawAlertInstance as RawAlert, } from '../types'; import { @@ -106,9 +107,10 @@ import { getExecutionLogAggregation, } from '../lib/get_execution_log_aggregation'; import { IExecutionLogWithErrorsResult } from '../../common'; -import { validateSnoozeDate } from '../lib/validate_snooze_date'; +import { validateSnoozeStartDate } from '../lib/validate_snooze_date'; import { RuleMutedError } from '../lib/errors/rule_muted'; import { formatExecutionErrorsResult } from '../lib/format_execution_log_errors'; +import { getActiveSnoozes } from '../lib/is_rule_snoozed'; export interface RegistryAlertTypeWithAuth extends RegistryRuleType { authorizedConsumers: string[]; @@ -192,7 +194,7 @@ export interface MuteOptions extends IndexType { } export interface SnoozeOptions extends IndexType { - snoozeEndTime: string | -1; + snoozeSchedule: RuleSnoozeSchedule; } export interface FindOptions extends IndexType { @@ -2099,29 +2101,35 @@ export class RulesClient { public async snooze({ id, - snoozeEndTime, + snoozeSchedule, }: { id: string; - snoozeEndTime: string | -1; + snoozeSchedule: RuleSnoozeSchedule; }): Promise { - if (typeof snoozeEndTime === 'string') { - const snoozeDateValidationMsg = validateSnoozeDate(snoozeEndTime); - if (snoozeDateValidationMsg) { - throw new RuleMutedError(snoozeDateValidationMsg); - } + const snoozeDateValidationMsg = validateSnoozeStartDate(snoozeSchedule.rRule.dtstart); + if (snoozeDateValidationMsg) { + throw new RuleMutedError(snoozeDateValidationMsg); } + return await retryIfConflicts( this.logger, - `rulesClient.snooze('${id}', ${snoozeEndTime})`, - async () => await this.snoozeWithOCC({ id, snoozeEndTime }) + `rulesClient.snooze('${id}', ${JSON.stringify(snoozeSchedule, null, 4)})`, + async () => await this.snoozeWithOCC({ id, snoozeSchedule }) ); } - private async snoozeWithOCC({ id, snoozeEndTime }: { id: string; snoozeEndTime: string | -1 }) { + private async snoozeWithOCC({ + id, + snoozeSchedule, + }: { + id: string; + snoozeSchedule: RuleSnoozeSchedule; + }) { const { attributes, version } = await this.unsecuredSavedObjectsClient.get( 'alert', id ); + const { id: snoozeId, duration } = snoozeSchedule; try { await this.authorization.ensureAuthorized({ @@ -2155,22 +2163,18 @@ export class RulesClient { this.ruleTypeRegistry.ensureRuleTypeEnabled(attributes.alertTypeId); - // If snoozeEndTime is -1, instead mute all + // If duration is -1, instead mute all const newAttrs = - snoozeEndTime === -1 + duration === -1 ? { muteAll: true, snoozeSchedule: clearUnscheduledSnooze(attributes), } : { - snoozeSchedule: clearUnscheduledSnooze(attributes).concat({ - duration: Date.parse(snoozeEndTime) - Date.now(), - rRule: { - dtstart: new Date().toISOString(), - tzid: 'UTC', - count: 1, - }, - }), + snoozeSchedule: (snoozeId + ? clearScheduledSnoozesById(attributes, [snoozeId]) + : clearUnscheduledSnooze(attributes) + ).concat(snoozeSchedule), muteAll: false, }; @@ -2189,15 +2193,21 @@ export class RulesClient { ).then(() => this.updateSnoozedUntilTime({ id })); } - public async unsnooze({ id }: { id: string }): Promise { + public async unsnooze({ + id, + scheduleIds, + }: { + id: string; + scheduleIds?: string[]; + }): Promise { return await retryIfConflicts( this.logger, `rulesClient.unsnooze('${id}')`, - async () => await this.unsnoozeWithOCC({ id }) + async () => await this.unsnoozeWithOCC({ id, scheduleIds }) ); } - private async unsnoozeWithOCC({ id }: { id: string }) { + private async unsnoozeWithOCC({ id, scheduleIds }: { id: string; scheduleIds?: string[] }) { const { attributes, version } = await this.unsecuredSavedObjectsClient.get( 'alert', id @@ -2236,10 +2246,12 @@ export class RulesClient { this.ruleTypeRegistry.ensureRuleTypeEnabled(attributes.alertTypeId); const updateAttributes = this.updateMeta({ - snoozeSchedule: clearUnscheduledSnooze(attributes), - muteAll: false, + snoozeSchedule: scheduleIds + ? clearScheduledSnoozesById(attributes, scheduleIds) + : clearCurrentActiveSnooze(attributes), updatedBy: await this.getUserName(), updatedAt: new Date().toISOString(), + ...(!scheduleIds ? { muteAll: false } : {}), }); const updateOptions = { version }; @@ -2881,7 +2893,28 @@ function parseDate(dateString: string | undefined, propertyName: string, default } function clearUnscheduledSnooze(attributes: { snoozeSchedule?: RuleSnooze }) { + // Clear any snoozes that have no ID property. These are "simple" snoozes created with the quick UI, e.g. snooze for 3 days starting now return attributes.snoozeSchedule ? attributes.snoozeSchedule.filter((s) => typeof s.id !== 'undefined') : []; } + +function clearScheduledSnoozesById(attributes: { snoozeSchedule?: RuleSnooze }, ids: string[]) { + return attributes.snoozeSchedule + ? attributes.snoozeSchedule.filter((s) => s.id && !ids.includes(s.id)) + : []; +} + +function clearCurrentActiveSnooze(attributes: { snoozeSchedule?: RuleSnooze; muteAll: boolean }) { + // First attempt to cancel a simple (unscheduled) snooze + const clearedUnscheduledSnoozes = clearUnscheduledSnooze(attributes); + // Now clear any scheduled snoozes that are currently active and never recur + const activeSnoozes = getActiveSnoozes(attributes); + const activeSnoozeIds = activeSnoozes?.map((s) => s.id) ?? []; + const clearedNonRecurringActiveSnoozes = clearedUnscheduledSnoozes.filter((s) => { + if (!activeSnoozeIds.includes(s.id!)) return true; + // Check if this is a recurring snooze, and return true if so + if (s.rRule.freq && s.rRule.count !== 1) return true; + }); + return clearedNonRecurringActiveSnoozes; +} diff --git a/x-pack/plugins/observability/public/pages/rule_details/index.tsx b/x-pack/plugins/observability/public/pages/rule_details/index.tsx index e88467b225e9e..a1edf0f1dd2f9 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/index.tsx +++ b/x-pack/plugins/observability/public/pages/rule_details/index.tsx @@ -255,10 +255,10 @@ export function RuleDetailsPage() { disableRule: async () => await disableRule({ http, id: rule.id }), onRuleChanged: () => reloadRule(), isEditable: hasEditButton, - snoozeRule: async (snoozeEndTime: string | -1) => { - await snoozeRule({ http, id: rule.id, snoozeEndTime }); + snoozeRule: async (snoozeSchedule) => { + await snoozeRule({ http, id: rule.id, snoozeSchedule }); }, - unsnoozeRule: async () => await unsnoozeRule({ http, id: rule.id }), + unsnoozeRule: async (scheduleIds) => await unsnoozeRule({ http, id: rule.id, scheduleIds }), }); const getNotifyText = () => diff --git a/x-pack/plugins/observability/public/pages/rules/index.tsx b/x-pack/plugins/observability/public/pages/rules/index.tsx index 6c63eb41a633f..f4d6a3c10eeb0 100644 --- a/x-pack/plugins/observability/public/pages/rules/index.tsx +++ b/x-pack/plugins/observability/public/pages/rules/index.tsx @@ -241,10 +241,11 @@ function RulesPage() { disableRule: async () => await disableRule({ http, id: item.id }), onRuleChanged: () => reload(), isEditable: item.isEditable && isRuleTypeEditableInContext(item.ruleTypeId), - snoozeRule: async (snoozeEndTime: string | -1) => { - await snoozeRule({ http, id: item.id, snoozeEndTime }); + snoozeRule: async (snoozeSchedule) => { + await snoozeRule({ http, id: item.id, snoozeSchedule }); }, - unsnoozeRule: async () => await unsnoozeRule({ http, id: item.id }), + unsnoozeRule: async (scheduleIds) => + await unsnoozeRule({ http, id: item.id, scheduleIds }), }); }, }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rule_status_dropdown_sandbox.tsx b/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rule_status_dropdown_sandbox.tsx index e17721930858d..0cbbc8f0ee9f8 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rule_status_dropdown_sandbox.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rule_status_dropdown_sandbox.tsx @@ -6,6 +6,7 @@ */ import React, { useState } from 'react'; +import moment from 'moment'; import { getRuleStatusDropdownLazy } from '../../../common/get_rule_status_dropdown'; export const RuleStatusDropdownSandbox: React.FC<{}> = () => { @@ -25,12 +26,12 @@ export const RuleStatusDropdownSandbox: React.FC<{}> = () => { setIsSnoozedUntil(null); }, disableRule: async () => setEnabled(false), - snoozeRule: async (time) => { - if (time === -1) { + snoozeRule: async (schedule) => { + if (schedule.duration === -1) { setIsSnoozedUntil(null); setMuteAll(true); } else { - setIsSnoozedUntil(new Date(time)); + setIsSnoozedUntil(moment(schedule.rRule.dtstart).add(schedule.duration, 'ms').toDate()); setMuteAll(false); } }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/i18n_month_day_date.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/i18n_month_day_date.ts new file mode 100644 index 0000000000000..6730cb5bf3d1d --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/i18n_month_day_date.ts @@ -0,0 +1,20 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Moment } from 'moment'; + +export const i18nMonthDayDate = (date: Moment) => i18nLocalDateWithoutYear(date, 'LL'); +export const i18nAbbrMonthDayDate = (date: Moment) => i18nLocalDateWithoutYear(date, 'll'); + +const i18nLocalDateWithoutYear = (date: Moment, format: string) => + date + .format(format) + // We want to produce the local equivalent of DD MMM (e.g. MMM DD in US, China, Japan, Hungary, etc.) + // but Moment doesn't let us format just DD MMM according to locale, only DD MM(,?) YYYY, + // so regex replace the year and any commas from the LL formatted string + .replace(new RegExp(`(${date.format('YYYY')}|,)`, 'g'), '') + .trim(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.test.ts index acc854caa06f4..a220d4893d55d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.test.ts @@ -13,14 +13,25 @@ beforeEach(() => jest.resetAllMocks()); describe('snoozeRule', () => { test('should call mute alert API', async () => { - const result = await snoozeRule({ http, id: '1/', snoozeEndTime: '9999-01-01T00:00:00.000Z' }); + const result = await snoozeRule({ + http, + id: '1/', + snoozeSchedule: { + id: null, + duration: 864000000, + rRule: { + dtstart: '9999-01-01T00:00:00.000Z', + tzid: 'UTC', + }, + }, + }); expect(result).toEqual(undefined); expect(http.post.mock.calls).toMatchInlineSnapshot(` Array [ Array [ "/internal/alerting/rule/1%2F/_snooze", Object { - "body": "{\\"snooze_end_time\\":\\"9999-01-01T00:00:00.000Z\\"}", + "body": "{\\"snooze_schedule\\":{\\"duration\\":864000000,\\"rRule\\":{\\"dtstart\\":\\"9999-01-01T00:00:00.000Z\\",\\"tzid\\":\\"UTC\\"}}}", }, ], ] diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.ts index d1f47bbec012e..ecefa038d539e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.ts @@ -5,20 +5,32 @@ * 2.0. */ import { HttpSetup } from '@kbn/core/public'; +import { SnoozeSchedule } from '../../../types'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../constants'; +function rewriteSnoozeSchedule({ id, duration, rRule }: SnoozeSchedule) { + return { + ...(id ? { id } : {}), + duration, + rRule: { + ...rRule, + ...(rRule.until ? { until: rRule.until.toISOString() } : {}), + }, + }; +} + export async function snoozeRule({ id, - snoozeEndTime, + snoozeSchedule, http, }: { id: string; - snoozeEndTime: string | -1; + snoozeSchedule: SnoozeSchedule; http: HttpSetup; }): Promise { await http.post(`${INTERNAL_BASE_ALERTING_API_PATH}/rule/${encodeURIComponent(id)}/_snooze`, { body: JSON.stringify({ - snooze_end_time: snoozeEndTime, + snooze_schedule: rewriteSnoozeSchedule(snoozeSchedule), }), }); } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.test.ts index d0a9707cbedf5..59211873eb1d3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.test.ts @@ -19,6 +19,9 @@ describe('muteRule', () => { Array [ Array [ "/internal/alerting/rule/1%2F/_unsnooze", + Object { + "body": "{}", + }, ], ] `); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts index 3f0ccd0aeab4d..91880fd9e6206 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts @@ -7,6 +7,18 @@ import { HttpSetup } from '@kbn/core/public'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../constants'; -export async function unsnoozeRule({ id, http }: { id: string; http: HttpSetup }): Promise { - await http.post(`${INTERNAL_BASE_ALERTING_API_PATH}/rule/${encodeURIComponent(id)}/_unsnooze`); +export async function unsnoozeRule({ + id, + http, + scheduleIds, +}: { + id: string; + http: HttpSetup; + scheduleIds?: string[]; +}): Promise { + await http.post(`${INTERNAL_BASE_ALERTING_API_PATH}/rule/${encodeURIComponent(id)}/_unsnooze`, { + body: JSON.stringify({ + schedule_ids: scheduleIds, + }), + }); } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx index e82bbaad26743..071f216bbb6c0 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx @@ -15,6 +15,7 @@ import { RuleSummary, AlertingFrameworkHealth, ResolvedRule, + SnoozeSchedule, } from '../../../../types'; import { deleteRules, @@ -69,8 +70,8 @@ export interface ComponentOpts { ) => Promise; getHealth: () => Promise; resolveRule: (id: Rule['id']) => Promise; - snoozeRule: (rule: Rule, snoozeEndTime: string | -1) => Promise; - unsnoozeRule: (rule: Rule) => Promise; + snoozeRule: (rule: Rule, snoozeSchedule: SnoozeSchedule) => Promise; + unsnoozeRule: (rule: Rule, scheduleIds?: string[]) => Promise; } export type PropsWithOptionalApiHandlers = Omit & Partial; @@ -149,11 +150,11 @@ export function withBulkRuleOperations( } resolveRule={async (ruleId: Rule['id']) => resolveRule({ http, ruleId })} getHealth={async () => alertingFrameworkHealth({ http })} - snoozeRule={async (rule: Rule, snoozeEndTime: string | -1) => { - return await snoozeRule({ http, id: rule.id, snoozeEndTime }); + snoozeRule={async (rule: Rule, snoozeSchedule: SnoozeSchedule) => { + return await snoozeRule({ http, id: rule.id, snoozeSchedule }); }} - unsnoozeRule={async (rule: Rule) => { - return await unsnoozeRule({ http, id: rule.id }); + unsnoozeRule={async (rule: Rule, scheduleIds?: string[]) => { + return await unsnoozeRule({ http, id: rule.id, scheduleIds }); }} /> ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx index 4faae3f2b26d5..1fd38ba063098 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx @@ -327,10 +327,10 @@ export const RuleDetails: React.FunctionComponent = ({ await disableRule(rule)} enableRule={async () => await enableRule(rule)} - snoozeRule={async (snoozeEndTime: string | -1) => - await snoozeRule(rule, snoozeEndTime) - } - unsnoozeRule={async () => await unsnoozeRule(rule)} + snoozeRule={async (snoozeSchedule) => { + await snoozeRule(rule, snoozeSchedule); + }} + unsnoozeRule={async (scheduleIds) => await unsnoozeRule(rule, scheduleIds)} rule={rule as RuleTableItem} onRuleChanged={requestRefresh} direction="row" diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx index fb64082868525..95e2aceb0f292 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx @@ -21,14 +21,19 @@ import { } from '@elastic/eui'; import { useKibana } from '../../../../common/lib/kibana'; -import { RuleTableItem } from '../../../../types'; +import { RuleTableItem, SnoozeSchedule } from '../../../../types'; import { ComponentOpts as BulkOperationsComponentOpts, withBulkRuleOperations, } from '../../common/components/with_bulk_rule_api_operations'; -import { RulesListSnoozePanel } from './rules_list_snooze_panel'; import { isRuleSnoozed } from './rule_status_dropdown'; import './collapsed_item_actions.scss'; +import { futureTimeToInterval, SnoozePanel } from './rule_snooze'; +import { + SNOOZE_FAILED_MESSAGE, + SNOOZE_SUCCESS_MESSAGE, + UNSNOOZE_SUCCESS_MESSAGE, +} from './rules_list_notify_badge'; export type ComponentOpts = { item: RuleTableItem; @@ -51,7 +56,10 @@ export const CollapsedItemActions: React.FunctionComponent = ({ snoozeRule, unsnoozeRule, }: ComponentOpts) => { - const { ruleTypeRegistry } = useKibana().services; + const { + ruleTypeRegistry, + notifications: { toasts }, + } = useKibana().services; const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [isDisabled, setIsDisabled] = useState(!item.enabled); @@ -59,20 +67,44 @@ export const CollapsedItemActions: React.FunctionComponent = ({ setIsDisabled(!item.enabled); }, [item.enabled]); + const onClose = useCallback(() => { + setIsPopoverOpen(false); + }, [setIsPopoverOpen]); + const snoozeRuleInternal = useCallback( - async (snoozeEndTime: string | -1, interval: string | null) => { - await snoozeRule(item, snoozeEndTime); + async (snoozeSchedule: SnoozeSchedule) => { + try { + onLoading(true); + await snoozeRule(item, snoozeSchedule); + onRuleChanged(); + toasts.addSuccess(SNOOZE_SUCCESS_MESSAGE); + } catch (e) { + toasts.addDanger(SNOOZE_FAILED_MESSAGE); + } finally { + onLoading(false); + onClose(); + } + await snoozeRule(item, snoozeSchedule); }, - [snoozeRule, item] + [onLoading, snoozeRule, item, onRuleChanged, toasts, onClose] ); - const unsnoozeRuleInternal = useCallback(async () => { - await unsnoozeRule(item); - }, [unsnoozeRule, item]); - - const onClose = useCallback(() => { - setIsPopoverOpen(false); - }, [setIsPopoverOpen]); + const unsnoozeRuleInternal = useCallback( + async (scheduleIds?: string[]) => { + try { + onLoading(true); + await unsnoozeRule(item, scheduleIds); + onRuleChanged(); + toasts.addSuccess(UNSNOOZE_SUCCESS_MESSAGE); + } catch (e) { + toasts.addDanger(SNOOZE_FAILED_MESSAGE); + } finally { + onLoading(false); + onClose(); + } + }, + [onLoading, unsnoozeRule, item, onRuleChanged, toasts, onClose] + ); const isRuleTypeEditableInContext = ruleTypeRegistry.has(item.ruleTypeId) ? !ruleTypeRegistry.get(item.ruleTypeId).requiresAppContext @@ -224,7 +256,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ {i18n.translate( 'xpack.triggersActionsUI.sections.rulesList.collapsedItemActons.snoozeActions', - { defaultMessage: 'Snooze actions' } + { defaultMessage: 'Snooze notifications' } )} @@ -232,11 +264,11 @@ export const CollapsedItemActions: React.FunctionComponent = ({ width: 500, content: ( - diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/index.tsx new file mode 100644 index 0000000000000..2f2141da528b5 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/index.tsx @@ -0,0 +1,8 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { SnoozePanel, futureTimeToInterval } from './panel'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.test.tsx new file mode 100644 index 0000000000000..cd60fcfc44151 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.test.tsx @@ -0,0 +1,113 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import React from 'react'; +import { BaseSnoozePanel } from './base_snooze_panel'; + +describe('CustomRecurrenceScheduler', () => { + test('should render', () => { + const wrapper = mountWithIntl( + + ); + expect(wrapper.find('[data-test-subj="snoozePanel"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="snoozePanelTitle"]').exists()).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="ruleSnoozeIntervalValue"]').first().props().value + ).toEqual(5); + expect(wrapper.find('[data-test-subj="ruleSnoozeIntervalUnit"]').first().props().value).toEqual( + 'd' + ); + expect(wrapper.find('[data-test-subj="ruleSnoozeCancel"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="ruleAddSchedule"]').exists()).toBeTruthy(); + }); + test('should render without title', () => { + const wrapper = mountWithIntl( + + ); + expect(wrapper.find('[data-test-subj="snoozePanel"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="snoozePanelTitle"]').exists()).toBeFalsy(); + }); + test('should render with cancel button', () => { + const wrapper = mountWithIntl( + + ); + expect(wrapper.find('[data-test-subj="snoozePanel"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="ruleSnoozeCancel"]').exists()).toBeTruthy(); + }); + test('should render a list of scheduled snoozes', () => { + const wrapper = mountWithIntl( + + ); + expect(wrapper.find('[data-test-subj="snoozePanel"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="ruleAddSchedule"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="ruleRemoveAllSchedules"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="ruleSchedulesListAddButton"]').exists()).toBeTruthy(); + + expect( + wrapper + .find('[data-test-subj="ruleSchedulesList"]') + .children() + .getElements() + .filter((e) => Boolean(e.key)).length + ).toEqual(2); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx new file mode 100644 index 0000000000000..1453d796a1d39 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx @@ -0,0 +1,404 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { + EuiButton, + EuiButtonEmpty, + EuiConfirmModal, + EuiFieldNumber, + EuiFlexGrid, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiIcon, + EuiLink, + EuiPopoverTitle, + EuiSelect, + EuiSpacer, + EuiText, + EuiTitle, + useGeneratedHtmlId, +} from '@elastic/eui'; +import { RuleSnooze } from '@kbn/alerting-plugin/common'; +import moment from 'moment'; +import React, { useState, useCallback, useMemo } from 'react'; +import { parseInterval } from '../../../../../../../common'; + +import { SnoozeSchedule } from '../../../../../../types'; +import { COMMON_SNOOZE_TIMES, SnoozeUnit } from './constants'; +import { durationToTextString, scheduleSummary, usePreviousSnoozeInterval } from './helpers'; +import { DAYS, HOURS, MINUTES, MONTHS, WEEKS } from './translations'; + +export interface BaseSnoozePanelProps { + interval?: string; + snoozeRule: (schedule: SnoozeSchedule) => Promise; + unsnoozeRule: (scheduleIds?: string[]) => Promise; + showCancel: boolean; + scheduledSnoozes: RuleSnooze; + hasTitle?: boolean; + navigateToScheduler: (sched?: SnoozeSchedule) => void; + isLoading: boolean; + onRemoveAllSchedules: (ids: string[]) => void; +} + +export const BaseSnoozePanel: React.FunctionComponent = ({ + isLoading, + interval = '3d', + snoozeRule, + unsnoozeRule, + showCancel, + scheduledSnoozes, + navigateToScheduler, + onRemoveAllSchedules, + hasTitle, +}) => { + const [intervalValue, setIntervalValue] = useState(parseInterval(interval).value); + const [intervalUnit, setIntervalUnit] = useState(parseInterval(interval).unit); + + const [isRemoveAllModalVisible, setIsRemoveAllModalVisible] = useState(false); + + const [previousSnoozeInterval, setPreviousSnoozeInterval] = usePreviousSnoozeInterval(); + + const onChangeValue = useCallback( + ({ target }) => setIntervalValue(target.value), + [setIntervalValue] + ); + const onChangeUnit = useCallback( + ({ target }) => setIntervalUnit(target.value), + [setIntervalUnit] + ); + + const snoozeRuleAndStoreInterval = useCallback( + (newSnoozeEndTime: string | -1, intervalToStore: string | null) => { + if (intervalToStore) { + setPreviousSnoozeInterval(intervalToStore); + } + const newSnoozeSchedule = { + id: null, + duration: newSnoozeEndTime === -1 ? -1 : Date.parse(newSnoozeEndTime) - Date.now(), + rRule: { dtstart: new Date().toISOString(), count: 1, tzid: moment.tz.guess() }, + }; + return snoozeRule(newSnoozeSchedule); + }, + [setPreviousSnoozeInterval, snoozeRule] + ); + + const applySnooze = useCallback( + async (value: number, unit?: SnoozeUnit) => { + if (value === -1) { + await snoozeRuleAndStoreInterval(-1, null); + } else if (value !== 0) { + const newSnoozeEndTime = moment().add(value, unit).toISOString(); + await snoozeRuleAndStoreInterval(newSnoozeEndTime, `${value}${unit}`); + } else await unsnoozeRule(); + }, + [snoozeRuleAndStoreInterval, unsnoozeRule] + ); + + const onApplyIndefinite = useCallback(() => applySnooze(-1), [applySnooze]); + const onClickApplyButton = useCallback( + () => applySnooze(intervalValue, intervalUnit as SnoozeUnit), + [applySnooze, intervalValue, intervalUnit] + ); + const onCancelSnooze = useCallback(() => applySnooze(0, 'm'), [applySnooze]); + + const onClickAddSchedule = useCallback(() => navigateToScheduler(), [navigateToScheduler]); + const onClickEditScheduleFactory = useCallback( + (schedule: SnoozeSchedule) => () => navigateToScheduler(schedule), + [navigateToScheduler] + ); + + const onClickRemoveAllSchedules = useCallback(() => { + setIsRemoveAllModalVisible(false); + onRemoveAllSchedules(scheduledSnoozes!.filter((s) => s.id).map((s) => s.id as string)); + }, [onRemoveAllSchedules, scheduledSnoozes]); + + const hasSchedules = useMemo( + () => scheduledSnoozes && scheduledSnoozes.filter((s) => Boolean(s.id)).length > 0, + [scheduledSnoozes] + ); + + const parsedPrevSnooze = previousSnoozeInterval ? parseInterval(previousSnoozeInterval) : null; + const prevSnoozeEqualsCurrentSnooze = + parsedPrevSnooze?.value === intervalValue && parsedPrevSnooze?.unit === intervalUnit; + const previousButton = parsedPrevSnooze && !prevSnoozeEqualsCurrentSnooze && ( + <> + + + applySnooze(parsedPrevSnooze.value, parsedPrevSnooze.unit as SnoozeUnit)} + > + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.previousSnooze', { + defaultMessage: 'Previous', + })} + + + + + {durationToTextString(parsedPrevSnooze.value, parsedPrevSnooze.unit as SnoozeUnit)} + + + + + + ); + return ( + <> + {hasTitle && ( + + + + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozePanelTitle', { + defaultMessage: 'Snooze notifications', + })} + + + + )} + + + + + + + + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.applySnooze', { + defaultMessage: 'Apply', + })} + + + + + {previousButton} + + + +
+ {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeCommonlyUsed', { + defaultMessage: 'Commonly used', + })} +
+
+
+ + {COMMON_SNOOZE_TIMES.map(([value, unit]) => ( + + applySnooze(value, unit)} + > + {durationToTextString(value, unit)} + + + ))} +
+ + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeIndefinitely', { + defaultMessage: 'Snooze indefinitely', + })} + + + + + {!hasSchedules && ( + <> + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.addSchedule', { + defaultMessage: 'Add schedule', + })} + + + + + + + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.addScheduleDescription', + { + defaultMessage: + 'Create recurring schedules to silence actions during expected downtimes', + } + )} + + + + + )} + {hasSchedules && ( + <> + + + +
+ {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.snoozeSchedulesTitle', + { + defaultMessage: 'Schedules', + } + )} +
+
+
+ + setIsRemoveAllModalVisible(true)} + data-test-subj="ruleRemoveAllSchedules" + > + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.removeAllButton', { + defaultMessage: 'Remove all', + })} + + +
+ + {scheduledSnoozes!.map((schedule) => ( + + + + ))} + + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.addButton', { + defaultMessage: 'Add', + })} + + + + + )} + {showCancel && ( + <> + + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.cancelSnooze', { + defaultMessage: 'Cancel snooze', + })} + + + + + )} + + {isRemoveAllModalVisible && ( + setIsRemoveAllModalVisible(false)} + onConfirm={onClickRemoveAllSchedules} + buttonColor="danger" + cancelButtonText={i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.removeCancelButton', + { + defaultMessage: 'Cancel', + } + )} + confirmButtonText={i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.removeConfirmButton', + { + defaultMessage: 'Remove all', + } + )} + > + + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.removeAllSnoozeSchedulesConfirmText', + { + defaultMessage: + 'This will remove {count, plural, one {# scheduled snooze} other {# scheduled snoozes}} from this rule. Are you sure?', + values: { count: scheduledSnoozes?.length ?? 0 }, + } + )} + + + )} + + ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/constants.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/constants.ts new file mode 100644 index 0000000000000..8e12e15f619ff --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/constants.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export type SnoozeUnit = 'm' | 'h' | 'd' | 'w' | 'M'; +export const COMMON_SNOOZE_TIMES: Array<[number, SnoozeUnit]> = [ + [1, 'h'], + [3, 'h'], + [8, 'h'], + [1, 'd'], +]; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.test.tsx new file mode 100644 index 0000000000000..343db5adbad97 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.test.tsx @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import sinon from 'sinon'; +import { RRuleFrequency } from '../../../../../../types'; +import { futureTimeToInterval, durationToTextString, scheduleSummary } from './helpers'; + +const NOW = '2021-01-01T12:00:00.000Z'; +const TEN_MINUTES_FROM_NOW = '2021-01-01T12:10:00.000Z'; +const ABOUT_ONE_HOUR_FROM_NOW = '2021-01-01T13:10:00.000Z'; +const TWO_DAYS_FROM_NOW = '2021-01-03T10:10:00.000Z'; +const SIX_MONTHS_FROM_NOW = '2021-07-03T10:10:00.000Z'; +const THIRTY_SIX_MONTHS_FROM_NOW = '2023-07-03T10:10:00.000Z'; + +describe('Snooze panel helpers', () => { + let timers: sinon.SinonFakeTimers; + + beforeAll(() => { + timers = sinon.useFakeTimers(new Date(NOW)); + }); + afterAll(() => { + timers.restore(); + }); + + describe('futureTimeToInterval', () => { + test('should parse a time several minutes from now', () => { + expect(futureTimeToInterval(new Date(TEN_MINUTES_FROM_NOW))).toBe('10m'); + }); + test('should parse a time about an hour from now', () => { + expect(futureTimeToInterval(new Date(ABOUT_ONE_HOUR_FROM_NOW))).toBe('1h'); + }); + test('should parse a time days from now', () => { + expect(futureTimeToInterval(new Date(TWO_DAYS_FROM_NOW))).toBe('2d'); + }); + test('should parse a time months from now', () => { + expect(futureTimeToInterval(new Date(SIX_MONTHS_FROM_NOW))).toBe('6M'); + }); + test('should parse a time years from now', () => { + expect(futureTimeToInterval(new Date(THIRTY_SIX_MONTHS_FROM_NOW))).toBe('36M'); + }); + }); + + describe('durationToTextString', () => { + test('should output 1 hour instead of "an" hour', () => { + expect(durationToTextString(1, 'h')).toBe('1 hour'); + }); + + test('should output 2 days', () => { + expect(durationToTextString(2, 'd')).toBe('2 days'); + }); + }); + + describe('scheduleSummary', () => { + test('should capitalize the output', () => { + expect( + scheduleSummary({ + id: null, + duration: 864000, + rRule: { + dtstart: NOW, + tzid: 'UTC', + freq: RRuleFrequency.MONTHLY, + interval: 1, + count: 5, + byweekday: ['+4TU'], + }, + }) + ).toEqual('Every month on the 4th Tuesday for 5 occurrences'); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.tsx new file mode 100644 index 0000000000000..b31991b14ad9b --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/helpers.tsx @@ -0,0 +1,81 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import moment from 'moment'; +import { useState } from 'react'; + +import { RecurrenceSchedule, SnoozeSchedule } from '../../../../../../types'; +import { recurrenceSummary } from '../recurrence_scheduler/helpers'; +import { SnoozeUnit } from './constants'; +import { ONE } from './translations'; + +const PREV_SNOOZE_INTERVAL_KEY = 'triggersActionsUi_previousSnoozeInterval'; +export const usePreviousSnoozeInterval: ( + p?: string | null +) => [string | null, (n: string) => void] = (propsInterval) => { + const intervalFromStorage = localStorage.getItem(PREV_SNOOZE_INTERVAL_KEY); + const usePropsInterval = typeof propsInterval !== 'undefined'; + const interval = usePropsInterval ? propsInterval : intervalFromStorage; + const [previousSnoozeInterval, setPreviousSnoozeInterval] = useState(interval); + const storeAndSetPreviousSnoozeInterval = (newInterval: string) => { + if (!usePropsInterval) { + localStorage.setItem(PREV_SNOOZE_INTERVAL_KEY, newInterval); + } + setPreviousSnoozeInterval(newInterval); + }; + return [previousSnoozeInterval, storeAndSetPreviousSnoozeInterval]; +}; + +export const futureTimeToInterval = (time?: Date | null) => { + if (!time) return; + const relativeTime = moment(time).locale('en').fromNow(true); + const [valueStr, unitStr] = relativeTime.split(' '); + let value = valueStr === 'a' || valueStr === 'an' ? 1 : parseInt(valueStr, 10); + let unit; + switch (unitStr) { + case 'year': + case 'years': + unit = 'M'; + value = value * 12; + break; + case 'month': + case 'months': + unit = 'M'; + break; + case 'day': + case 'days': + unit = 'd'; + break; + case 'hour': + case 'hours': + unit = 'h'; + break; + case 'minute': + case 'minutes': + unit = 'm'; + break; + } + + if (!unit) return; + return `${value}${unit}`; +}; + +export const durationToTextString = (value: number, unit: SnoozeUnit) => { + // Moment.humanize will parse "1" as "a" or "an", e.g "an hour" + // Override this to output "1 hour" + if (value === 1) { + return ONE[unit]; + } + return moment.duration(value, unit).humanize(); +}; + +export const scheduleSummary = (schedule: SnoozeSchedule) => { + if (schedule.rRule.freq == null) return moment(schedule.rRule.dtstart).format('LLLL'); + const summary = recurrenceSummary(schedule.rRule as RecurrenceSchedule); + // Capitalize first letter of summary + return summary[0].toLocaleUpperCase() + summary.slice(1); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx new file mode 100644 index 0000000000000..7a5965532e4cf --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx @@ -0,0 +1,115 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useState } from 'react'; +import { SnoozeSchedule } from '../../../../../../types'; +import { RuleSnoozeScheduler } from '../scheduler'; +import { BaseSnoozePanel, BaseSnoozePanelProps } from './base_snooze_panel'; + +export { futureTimeToInterval } from './helpers'; + +type SnoozePanelProps = Pick< + BaseSnoozePanelProps, + 'interval' | 'snoozeRule' | 'unsnoozeRule' | 'showCancel' | 'scheduledSnoozes' | 'hasTitle' +>; + +export const SnoozePanel: React.FC = ({ + interval, + snoozeRule, + unsnoozeRule, + showCancel, + scheduledSnoozes, + hasTitle = true, +}) => { + const [isSchedulerOpen, setIsSchedulerOpen] = useState(false); + const [initialSchedule, setInitialSchedule] = useState(null); + const [isLoading, setIsLoading] = useState(false); + + const onSnoozeRule = useCallback( + async (schedule: SnoozeSchedule) => { + setIsLoading(true); + try { + await snoozeRule(schedule); + } finally { + setIsLoading(false); + } + }, + [setIsLoading, snoozeRule] + ); + + const onUnsnoozeRule = useCallback( + async (scheduleIds?: string[]) => { + setIsLoading(true); + try { + await unsnoozeRule(scheduleIds); + } finally { + setIsLoading(false); + } + }, + [setIsLoading, unsnoozeRule] + ); + + const saveSnoozeSchedule = useCallback( + async (schedule: SnoozeSchedule) => { + setIsLoading(true); + try { + await snoozeRule(schedule); + } finally { + setIsLoading(false); + } + }, + [snoozeRule, setIsLoading] + ); + + const cancelSnoozeSchedules = useCallback( + async (scheduleIds: string[]) => { + setIsLoading(true); + try { + await unsnoozeRule(scheduleIds); + } finally { + setIsLoading(false); + } + }, + [unsnoozeRule, setIsLoading] + ); + + const onOpenScheduler = useCallback( + (schedule?: SnoozeSchedule) => { + setInitialSchedule(schedule ?? null); + setIsSchedulerOpen(true); + }, + [setInitialSchedule, setIsSchedulerOpen] + ); + + const onCloseScheduler = useCallback(() => setIsSchedulerOpen(false), [setIsSchedulerOpen]); + + return !isSchedulerOpen ? ( + + ) : ( + + ); +}; + +// eslint-disable-next-line import/no-default-export +export { SnoozePanel as default }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/translations.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/translations.tsx new file mode 100644 index 0000000000000..71c16175401ed --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/translations.tsx @@ -0,0 +1,44 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { SnoozeUnit } from './constants'; + +export const MINUTES = i18n.translate('xpack.triggersActionsUI.sections.rulesList.minutesLabel', { + defaultMessage: 'minutes', +}); +export const HOURS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.hoursLabel', { + defaultMessage: 'hours', +}); +export const DAYS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.daysLabel', { + defaultMessage: 'days', +}); +export const WEEKS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.weeksLabel', { + defaultMessage: 'weeks', +}); +export const MONTHS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.monthsLabel', { + defaultMessage: 'months', +}); + +// i18n constants to override moment.humanize +export const ONE: Record = { + m: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneMinute', { + defaultMessage: '1 minute', + }), + h: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneHour', { + defaultMessage: '1 hour', + }), + d: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneDay', { + defaultMessage: '1 day', + }), + w: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneWeek', { + defaultMessage: '1 week', + }), + M: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneMonth', { + defaultMessage: '1 month', + }), +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/constants.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/constants.ts new file mode 100644 index 0000000000000..72a78dc964225 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/constants.ts @@ -0,0 +1,85 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import { invert, mapValues } from 'lodash'; +import moment from 'moment'; +import { RRuleFrequency } from '../../../../../../types'; + +export const ISO_WEEKDAYS = [1, 2, 3, 4, 5, 6, 7]; + +export const RECURRENCE_END_OPTIONS = [ + { id: 'never', label: 'Never' }, + { id: 'ondate', label: 'On date' }, + { id: 'afterx', label: 'After {x}' }, +]; + +export const DEFAULT_REPEAT_OPTIONS = [ + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurDaily', { + defaultMessage: 'Daily', + }), + value: RRuleFrequency.DAILY, + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurWeekly', { + defaultMessage: 'Weekly', + }), + value: RRuleFrequency.WEEKLY, + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurMonthly', { + defaultMessage: 'Monthly', + }), + value: RRuleFrequency.MONTHLY, + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurYearly', { + defaultMessage: 'Yearly', + }), + value: RRuleFrequency.YEARLY, + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurCustom', { + defaultMessage: 'Custom', + }), + value: 'CUSTOM', + }, +]; + +export const DEFAULT_RRULE_PRESETS = { + [RRuleFrequency.DAILY]: { + interval: 1, + }, + [RRuleFrequency.WEEKLY]: { + interval: 1, + }, + [RRuleFrequency.MONTHLY]: { + interval: 1, + }, + [RRuleFrequency.YEARLY]: { + interval: 1, + }, +}; + +export const I18N_WEEKDAY_OPTIONS = ISO_WEEKDAYS.map((n) => ({ + id: String(n), + label: moment().isoWeekday(n).format('dd'), +})); + +export const ISO_WEEKDAYS_TO_RRULE: Record = { + 1: 'MO', + 2: 'TU', + 3: 'WE', + 4: 'TH', + 5: 'FR', + 6: 'SA', + 7: 'SU', +}; + +export const RRULE_WEEKDAYS_TO_ISO_WEEKDAYS = mapValues(invert(ISO_WEEKDAYS_TO_RRULE), (v) => + Number(v) +); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.test.tsx new file mode 100644 index 0000000000000..25c91004ac77e --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.test.tsx @@ -0,0 +1,92 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import moment from 'moment'; +import React from 'react'; +import { RRuleFrequency } from '../../../../../../types'; +import { CustomRecurrenceScheduler } from './custom_recurrence_scheduler'; + +describe('CustomRecurrenceScheduler', () => { + const startDate = moment('11/23/1979'); + const initialState = { + freq: RRuleFrequency.DAILY, + interval: 1, + byweekday: [], + bymonthday: [], + bymonth: [], + }; + const onChange = jest.fn(); + + beforeEach(() => { + onChange.mockReset(); + }); + + test('render', () => { + const wrapper = mountWithIntl( + + ); + expect(wrapper.find('[data-test-subj="customRecurrenceScheduler"]').exists()).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="customRecurrenceSchedulerFrequency"]').first().props().value + ).toEqual(RRuleFrequency.DAILY); + expect(wrapper.find('[data-test-subj="customRecurrenceSchedulerWeekly"]').exists()).toBeFalsy(); + expect( + wrapper.find('[data-test-subj="customRecurrenceSchedulerMonthly"]').exists() + ).toBeFalsy(); + }); + + test('render weekly options', () => { + const wrapper = mountWithIntl( + + ); + expect( + wrapper.find('[data-test-subj="customRecurrenceSchedulerWeekly"]').exists() + ).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="customRecurrenceSchedulerFrequency"]').first().props().value + ).toEqual(RRuleFrequency.WEEKLY); + }); + + test('render monthly options', () => { + const wrapper = mountWithIntl( + + ); + expect( + wrapper.find('[data-test-subj="customRecurrenceSchedulerMonthly"]').exists() + ).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="customRecurrenceSchedulerFrequency"]').first().props().value + ).toEqual(RRuleFrequency.MONTHLY); + }); + + test('should call onChange when state changed ', () => { + const wrapper = mountWithIntl( + + ); + + wrapper.find('[data-test-subj="customRecurrenceSchedulerFrequency"]').first().simulate('click'); + wrapper.find('option[data-test-subj="ruleSnoozeSchedulerRecurWeek"]').first().simulate('click'); + expect(onChange).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx new file mode 100644 index 0000000000000..84af76cc3cf57 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx @@ -0,0 +1,186 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButtonGroup, + EuiFieldNumber, + EuiFormControlLayoutDelimited, + EuiFormRow, + EuiSelect, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { euiStyled } from '@kbn/kibana-react-plugin/common'; +import deepEqual from 'fast-deep-equal'; +import { Moment } from 'moment'; +import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; + +import { RRuleFrequency } from '../../../../../../types'; +import { I18N_WEEKDAY_OPTIONS } from './constants'; +import { + buildCustomRecurrenceSchedulerState, + CustomFrequencyState, + getInitialByweekday, + getWeekdayInfo, +} from './helpers'; +import { i18nEndControlOptions, i18nNthWeekdayShort } from './translations'; + +// FIXME https://github.com/elastic/eui/issues/5958 +const EuiFormRowWithDelimitedFixer = euiStyled(EuiFormRow)` + & .euiFormControlLayout__childrenWrapper { + height: 100%; + } +`; + +interface CustomRecurrenceSchedulerProps { + startDate: Moment | null; + onChange: (state: CustomFrequencyState) => void; + initialState: CustomFrequencyState; +} + +export const CustomRecurrenceScheduler: React.FC = ({ + startDate, + onChange, + initialState, +}) => { + const [initialStartDate] = useState(startDate); + const [frequency, setFrequency] = useState(initialState.freq); + const [interval, setInterval] = useState(initialState.interval); + const [byweekday, setByweekday] = useState( + getInitialByweekday(initialState.byweekday, startDate) + ); + const [monthlyRecurDay, setMonthlyRecurDay] = useState( + initialState.freq === RRuleFrequency.MONTHLY && initialState.byweekday.length > 0 + ? 'weekday' + : 'day' + ); + + const monthlyRecurDayOptions = useMemo(() => { + if (!startDate) return []; + const { dayOfWeek, nthWeekdayOfMonth, isLastOfMonth } = getWeekdayInfo(startDate); + return [ + { + id: 'day', + label: i18n.translate( + 'xpack.triggersActionsUI.ruleSnoozeScheduler.repeatOnMonthlyDayNumber', + { + defaultMessage: 'On day {dayNumber}', + values: { dayNumber: startDate.date() }, + } + ), + }, + { + id: 'weekday', + label: i18nNthWeekdayShort(dayOfWeek!)[isLastOfMonth ? 0 : nthWeekdayOfMonth!], + }, + ]; + }, [startDate]); + + useEffect(() => { + if (initialStartDate !== startDate) setByweekday(getInitialByweekday([], startDate)); + }, [startDate, initialStartDate]); + + const customRecurrenceSchedulerState = useRef(null); + useEffect(() => { + const nextState = buildCustomRecurrenceSchedulerState({ + frequency, + interval, + byweekday, + monthlyRecurDay, + startDate, + }); + if (!deepEqual(customRecurrenceSchedulerState.current, nextState)) { + onChange(nextState); + customRecurrenceSchedulerState.current = nextState; + } + }, [frequency, interval, byweekday, monthlyRecurDay, startDate, onChange]); + + const onToggleWeekday = useCallback( + (id: string) => { + const newByweekday = { ...byweekday, [id]: !byweekday[id as keyof typeof byweekday] }; + // Don't allow the user to deselect all weekdays + if (!Object.values(newByweekday).every((v) => v === false)) { + setByweekday(newByweekday); + } + }, + [byweekday] + ); + + const endControlOptions = useMemo(() => i18nEndControlOptions(interval), [interval]); + + return ( + <> + + setInterval(Number(e.target.value))} + /> + } + endControl={ + setFrequency(Number(e.target.value))} + value={frequency} + options={endControlOptions} + /> + } + /> + + {frequency === RRuleFrequency.WEEKLY && ( + + + + )} + {frequency === RRuleFrequency.MONTHLY && startDate && ( + + + + )} + + ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.test.tsx new file mode 100644 index 0000000000000..eb5ad5bf64510 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.test.tsx @@ -0,0 +1,291 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import moment from 'moment'; +import { RRuleFrequency } from '../../../../../../types'; +import { + buildCustomRecurrenceSchedulerState, + generateNthByweekday, + getInitialByweekday, + getWeekdayInfo, + recurrenceSummary, + rRuleWeekdayToWeekdayName, +} from './helpers'; + +describe('Recurrence scheduler helper', () => { + describe('getWeekdayInfo', () => { + test('should return the fourth tuesday of the month for 11/23/2021', () => { + expect(getWeekdayInfo(moment('11/23/2021'))).toEqual({ + dayOfWeek: 'Tuesday', + isLastOfMonth: false, + nthWeekdayOfMonth: 4, + }); + }); + + test('should return the third Tuesday of the month 11/16/2021', () => { + expect(getWeekdayInfo(moment('11/16/2021'))).toEqual({ + dayOfWeek: 'Tuesday', + isLastOfMonth: false, + nthWeekdayOfMonth: 3, + }); + }); + + test('should return the last Friday of the month 12/25/2020', () => { + expect(getWeekdayInfo(moment('12/25/2020'))).toEqual({ + dayOfWeek: 'Friday', + isLastOfMonth: true, + nthWeekdayOfMonth: 4, + }); + }); + + test('should return expected invalid props for a null date', () => { + expect(getWeekdayInfo(moment(null))).toEqual({ + dayOfWeek: 'Invalid date', + isLastOfMonth: true, + nthWeekdayOfMonth: NaN, + }); + }); + }); + + describe('getInitialByweekday', () => { + test('when passed empty recurrence params, should return the day of the week of the passed in startDate', () => { + expect(getInitialByweekday([], moment('11/23/2021'))).toEqual({ + '1': false, + '2': true, + '3': false, + '4': false, + '5': false, + '6': false, + '7': false, + }); + }); + + test('when passed recurrence params, should return the passed in days of the week and ignore the startDate', () => { + expect(getInitialByweekday(['+2MO', '-1FR'], moment('11/23/2021'))).toEqual({ + '1': true, + '2': false, + '3': false, + '4': false, + '5': true, + '6': false, + '7': false, + }); + }); + + test('when passed a null date, should return only Monday', () => { + expect(getInitialByweekday([], null)).toEqual({ + '1': true, + '2': false, + '3': false, + '4': false, + '5': false, + '6': false, + '7': false, + }); + }); + }); + + describe('generateNthByweekday', () => { + test('should parse the 4th tuesday', () => { + expect(generateNthByweekday(moment('11/23/2021'))).toEqual(['+4TU']); + }); + + test('should parse the 3rd tuesday', () => { + expect(generateNthByweekday(moment('11/16/2021'))).toEqual(['+3TU']); + }); + }); + + describe('recurrenceSummary', () => { + test('should give a detailed msg with the until', () => { + expect( + recurrenceSummary({ + freq: RRuleFrequency.MONTHLY, + interval: 1, + until: moment('11/23/1979'), + count: 5, + byweekday: ['+4TU'], + }) + ).toEqual('every month on the 4th Tuesday until November 23, 1979'); + }); + + test('should give a detailed msg with the occurrences', () => { + expect( + recurrenceSummary({ + freq: RRuleFrequency.MONTHLY, + interval: 1, + count: 5, + byweekday: ['+4TU'], + }) + ).toEqual('every month on the 4th Tuesday for 5 occurrences'); + }); + + test('should give a detailed msg with the recurrence', () => { + expect( + recurrenceSummary({ + freq: RRuleFrequency.MONTHLY, + interval: 1, + byweekday: ['+4TU'], + }) + ).toEqual('every month on the 4th Tuesday'); + }); + + test('should give a basic msg', () => { + expect( + recurrenceSummary({ + freq: RRuleFrequency.MONTHLY, + interval: 1, + }) + ).toEqual('every month'); + }); + }); + + describe('rRuleWeekdayToWeekdayName', () => { + test('parses 2nd Monday', () => { + expect(rRuleWeekdayToWeekdayName('+2MO')).toEqual('Monday'); + }); + + test('parses 3rd Tuesday', () => { + expect(rRuleWeekdayToWeekdayName('+3TU')).toEqual('Tuesday'); + }); + + test('parses last Friday', () => { + expect(rRuleWeekdayToWeekdayName('-1FR')).toEqual('Friday'); + }); + }); + + describe('buildCustomRecurrenceSchedulerState', () => { + test('Daily frequency ', () => { + expect( + buildCustomRecurrenceSchedulerState({ + frequency: RRuleFrequency.DAILY, + interval: 2, + byweekday: { + '1': false, + '2': true, + '3': false, + '4': false, + '5': false, + '6': false, + '7': false, + }, + monthlyRecurDay: 'day', + startDate: moment('11/23/2021'), + }) + ).toEqual({ + bymonth: [], + bymonthday: [], + byweekday: [], + freq: 3, + interval: 2, + }); + }); + + test('Weekly frequency ', () => { + expect( + buildCustomRecurrenceSchedulerState({ + frequency: RRuleFrequency.WEEKLY, + interval: 2, + byweekday: { + '1': false, + '2': true, + '3': false, + '4': false, + '5': false, + '6': false, + '7': false, + }, + monthlyRecurDay: 'day', + startDate: moment('11/23/2021'), + }) + ).toEqual({ + bymonth: [], + bymonthday: [], + byweekday: ['TU'], + freq: 2, + interval: 2, + }); + }); + + test('Monthly frequency ', () => { + expect( + buildCustomRecurrenceSchedulerState({ + frequency: RRuleFrequency.MONTHLY, + interval: 2, + byweekday: { + '1': false, + '2': true, + '3': false, + '4': false, + '5': false, + '6': false, + '7': false, + }, + monthlyRecurDay: 'day', + startDate: moment('11/23/2021'), + }) + ).toEqual({ + bymonth: [], + bymonthday: [23], + byweekday: [], + freq: 1, + interval: 2, + }); + }); + + test('Monthly frequency by weekday ', () => { + expect( + buildCustomRecurrenceSchedulerState({ + frequency: RRuleFrequency.MONTHLY, + interval: 2, + byweekday: { + '1': false, + '2': true, + '3': false, + '4': false, + '5': false, + '6': false, + '7': false, + }, + monthlyRecurDay: 'weekday', + startDate: moment('11/23/2021'), + }) + ).toEqual({ + bymonth: [], + bymonthday: [], + byweekday: ['+4TU'], + freq: 1, + interval: 2, + }); + }); + + test('Yearly frequency ', () => { + expect( + buildCustomRecurrenceSchedulerState({ + frequency: RRuleFrequency.YEARLY, + interval: 2, + byweekday: { + '1': false, + '2': true, + '3': false, + '4': false, + '5': false, + '6': false, + '7': false, + }, + monthlyRecurDay: 'day', + startDate: moment('11/23/2021'), + }) + ).toEqual({ + bymonth: [10], + bymonthday: [23], + byweekday: [], + freq: 0, + interval: 2, + }); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.tsx new file mode 100644 index 0000000000000..e8d272eb85ae6 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/helpers.tsx @@ -0,0 +1,189 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import moment, { Moment } from 'moment'; + +import { RecurrenceSchedule, RRuleFrequency } from '../../../../../../types'; +import { i18nMonthDayDate } from '../../../../../lib/i18n_month_day_date'; +import { ISO_WEEKDAYS, ISO_WEEKDAYS_TO_RRULE, RRULE_WEEKDAYS_TO_ISO_WEEKDAYS } from './constants'; +import { i18nFreqSummary, i18nNthWeekdayShort } from './translations'; + +export interface CustomFrequencyState { + freq: RRuleFrequency; + interval: number; + byweekday: string[]; + bymonthday: number[]; + bymonth: number[]; +} + +export const getWeekdayInfo = (date: Moment) => { + const dayOfWeek = date.format('dddd'); + const nthWeekdayOfMonth = Math.ceil(date.date() / 7); + const isLastOfMonth = nthWeekdayOfMonth > 4 || !date.isSame(moment(date).add(7, 'd'), 'month'); + return { dayOfWeek, nthWeekdayOfMonth, isLastOfMonth }; +}; + +export const getInitialByweekday = ( + initialStateByweekday: CustomFrequencyState['byweekday'], + date: Moment | null +) => { + const dayOfWeek = date ? date.isoWeekday() : 1; + return ISO_WEEKDAYS.reduce( + (result, n) => ({ + ...result, + [n]: + initialStateByweekday.length > 0 + ? initialStateByweekday + // Sanitize nth day strings, e.g. +2MO, -1FR, into just days of the week + .map((w) => w.replace(/[0-9+\-]/g, '')) + .includes(ISO_WEEKDAYS_TO_RRULE[n]) + : n === dayOfWeek, + }), + {} as Record + ); +}; + +export const generateNthByweekday = (startDate: Moment) => { + const { isLastOfMonth, nthWeekdayOfMonth } = getWeekdayInfo(startDate); + return [ + `${isLastOfMonth ? '-1' : '+' + nthWeekdayOfMonth}${ + ISO_WEEKDAYS_TO_RRULE[startDate.isoWeekday()] + }`, + ]; +}; + +export const recurrenceSummary = ({ + freq, + interval, + until, + count, + byweekday, + bymonthday, + bymonth, +}: RecurrenceSchedule) => { + const frequencySummary = i18nFreqSummary(interval)[freq]; + + // For weekday summaries + const firstWeekday = byweekday ? byweekday[0] : ''; + const nthWeekday = !firstWeekday + ? null + : firstWeekday.startsWith('+') + ? Number(firstWeekday[1]) + : firstWeekday.startsWith('-1') + ? 0 + : null; + let byweekdaySummary = + byweekday && byweekday.length > 0 + ? nthWeekday !== null + ? i18nNthWeekdayShort(rRuleWeekdayToWeekdayName(firstWeekday))[nthWeekday] + : i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.byweekdaySummary', { + defaultMessage: 'on {weekdays}', + values: { + weekdays: byweekday + .map((rRuleWeekday) => rRuleWeekdayToWeekdayName(rRuleWeekday)) + .join(', '), + }, + }) + : null; + if (byweekdaySummary) + byweekdaySummary = byweekdaySummary[0].toLocaleLowerCase() + byweekdaySummary.slice(1); + + const bymonthdaySummary = + bymonthday && bymonthday.length > 0 + ? i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.bymonthdaySummary', { + defaultMessage: 'on day {monthday}', + values: { + monthday: bymonthday.join(', '), + }, + }) + : null; + + const bymonthSummary = + bymonth && bymonth.length > 0 && bymonthday && bymonthday.length > 0 + ? i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.bymonthSummary', { + defaultMessage: 'on {date}', + values: { + date: i18nMonthDayDate(moment().month(bymonth[0]).date(bymonthday[0])), + }, + }) + : null; + + const onSummary = + freq === RRuleFrequency.WEEKLY + ? byweekdaySummary + : freq === RRuleFrequency.MONTHLY + ? byweekdaySummary ?? bymonthdaySummary + : freq === RRuleFrequency.YEARLY + ? bymonthSummary + : null; + + const untilSummary = until + ? i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.untilDateSummary', { + defaultMessage: 'until {date}', + values: { date: moment(until).format('LL') }, + }) + : count + ? i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.occurrencesSummary', { + defaultMessage: 'for {count, plural, one {# occurrence} other {# occurrences}}', + values: { count }, + }) + : null; + + const every = i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurrenceSummary', { + defaultMessage: 'every {frequencySummary}{on}{until}', + values: { + frequencySummary, + on: onSummary ? ` ${onSummary}` : '', + until: untilSummary ? ` ${untilSummary}` : '', + }, + }); + + return every; +}; + +export const rRuleWeekdayToWeekdayName = (weekday: string) => + moment().isoWeekday(RRULE_WEEKDAYS_TO_ISO_WEEKDAYS[weekday.slice(-2)]).format('dddd'); + +export const buildCustomRecurrenceSchedulerState = ({ + frequency, + interval, + byweekday, + monthlyRecurDay, + startDate, +}: { + frequency: RRuleFrequency; + interval: number; + byweekday: Record; + monthlyRecurDay: string; + startDate: Moment | null; +}) => { + const isMonthlyByDay = frequency === RRuleFrequency.MONTHLY && monthlyRecurDay === 'day'; + const isMonthlyByWeekday = frequency === RRuleFrequency.MONTHLY && monthlyRecurDay === 'weekday'; + const useByMonthDay = startDate && (isMonthlyByDay || frequency === RRuleFrequency.YEARLY); + + const configuredByweekday = + // If weekly frequency is selected, pull byweekday from chosen days + frequency === RRuleFrequency.WEEKLY + ? Object.keys(byweekday) + .filter((k) => byweekday[k] === true) + .map((n) => ISO_WEEKDAYS_TO_RRULE[Number(n)]) + : // If monthly frequency is selected with the nth weekday option, pull byweekday from the configured startDate + startDate && isMonthlyByWeekday + ? generateNthByweekday(startDate) + : []; + + const bymonthday = useByMonthDay ? [startDate.date()] : []; + const bymonth = startDate && frequency === RRuleFrequency.YEARLY ? [startDate.month()] : []; + return { + freq: frequency, + interval, + byweekday: configuredByweekday, + bymonthday, + bymonth, + }; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx new file mode 100644 index 0000000000000..4b2bc6e70d71e --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx @@ -0,0 +1,290 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButtonGroup, + EuiDatePicker, + EuiFieldNumber, + EuiFormControlLayout, + EuiFormRow, + EuiHorizontalRule, + EuiPanel, + EuiSelect, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import moment from 'moment'; +import { Moment } from 'moment'; +import React from 'react'; +import { useEffect, useMemo, useRef, useState } from 'react'; + +import { RRuleFrequency, RecurrenceSchedule } from '../../../../../../types'; +import { i18nMonthDayDate } from '../../../../../lib/i18n_month_day_date'; +import { + DEFAULT_REPEAT_OPTIONS, + DEFAULT_RRULE_PRESETS, + ISO_WEEKDAYS_TO_RRULE, + RECURRENCE_END_OPTIONS, +} from './constants'; +import { CustomRecurrenceScheduler } from './custom_recurrence_scheduler'; +import { + CustomFrequencyState, + generateNthByweekday, + getWeekdayInfo, + recurrenceSummary, +} from './helpers'; +import { i18nNthWeekday } from './translations'; + +interface ComponentOpts { + startDate: Moment | null; + endDate: Moment | null; + initialState: RecurrenceSchedule | null; + onChange: (schedule: RecurrenceSchedule) => void; +} + +export const RecurrenceScheduler: React.FC = ({ + startDate, + endDate, + onChange, + initialState, +}) => { + const hasInitialized = useRef(false); + const [frequency, setFrequency] = useState(RRuleFrequency.DAILY); + const [recurrenceEnds, setRecurrenceEnds] = useState('never'); + + const [customFrequency, setCustomFrequency] = useState({ + freq: RRuleFrequency.DAILY, + interval: 1, + byweekday: [], + bymonthday: [], + bymonth: [], + }); + + const [recurrenceEndDate, setRecurrenceEndDate] = useState(endDate); + const [occurrences, setOccurrrences] = useState(1); + + const disableDailyOption = useMemo(() => { + if (!startDate || !endDate) return false; + return Math.abs(startDate.diff(endDate, 'hours')) >= 24; + }, [startDate, endDate]); + + useEffect(() => { + if (disableDailyOption && frequency === RRuleFrequency.DAILY) + setFrequency(RRuleFrequency.WEEKLY); + }, [disableDailyOption, frequency]); + + useEffect(() => { + if (initialState && !hasInitialized.current) { + const isCustomFrequency = + initialState.interval > 1 || (initialState.byweekday ?? []).length > 1; + setFrequency(isCustomFrequency ? 'CUSTOM' : initialState.freq); + if (isCustomFrequency) { + setCustomFrequency(initialState as CustomFrequencyState); + } + if (initialState.until) { + setRecurrenceEnds('ondate'); + setRecurrenceEndDate(initialState.until); + } + if (initialState.count) { + setRecurrenceEnds('afterx'); + setOccurrrences(initialState.count); + } + } + hasInitialized.current = true; + }, [initialState]); + + const { repeatOptions, rrulePresets } = useMemo(() => { + if (!startDate) { + return { + repeatOptions: DEFAULT_REPEAT_OPTIONS, + rrulePresets: DEFAULT_RRULE_PRESETS, + }; + } + const { dayOfWeek, nthWeekdayOfMonth, isLastOfMonth } = getWeekdayInfo(startDate); + return { + repeatOptions: [ + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurDaily', { + defaultMessage: 'Daily', + }), + value: RRuleFrequency.DAILY, + disabled: disableDailyOption, + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurWeeklyOnWeekday', { + defaultMessage: 'Weekly on {dayOfWeek}', + values: { dayOfWeek }, + }), + value: RRuleFrequency.WEEKLY, + }, + { + text: i18nNthWeekday(dayOfWeek)[isLastOfMonth ? 0 : nthWeekdayOfMonth], + value: RRuleFrequency.MONTHLY, + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurYearlyOnDay', { + defaultMessage: 'Yearly on {date}', + values: { + date: i18nMonthDayDate(startDate), + }, + }), + value: RRuleFrequency.YEARLY, + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurCustom', { + defaultMessage: 'Custom', + }), + value: 'CUSTOM', + }, + ], + rrulePresets: { + [RRuleFrequency.DAILY]: { + interval: 1, + }, + [RRuleFrequency.WEEKLY]: { + interval: 1, + byweekday: [ISO_WEEKDAYS_TO_RRULE[startDate.isoWeekday()]], + }, + [RRuleFrequency.MONTHLY]: { + interval: 1, + byweekday: generateNthByweekday(startDate), + }, + [RRuleFrequency.YEARLY]: { + interval: 1, + bymonth: [startDate.month() + 1], + bymonthday: [startDate.date()], + }, + }, + }; + }, [startDate, disableDailyOption]); + + const compiledRecurrenceSchedule: RecurrenceSchedule = useMemo(() => { + const recurrenceEndProps = + recurrenceEnds === 'ondate' && recurrenceEndDate + ? { + until: recurrenceEndDate, + } + : recurrenceEnds === 'afterx' + ? { + count: occurrences, + } + : {}; + if (frequency === 'CUSTOM') { + return { ...customFrequency, ...recurrenceEndProps }; + } + return { + freq: frequency, + ...rrulePresets[frequency], + ...recurrenceEndProps, + }; + }, [frequency, rrulePresets, recurrenceEnds, customFrequency, recurrenceEndDate, occurrences]); + + useEffect(() => { + onChange(compiledRecurrenceSchedule); + }, [compiledRecurrenceSchedule, onChange]); + + return ( + +
+ + + setFrequency(e.target.value === 'CUSTOM' ? 'CUSTOM' : Number(e.target.value)) + } + compressed + /> + + {frequency === 'CUSTOM' && ( + + )} + + + + {recurrenceEnds === 'ondate' && ( + + + + )} + {recurrenceEnds === 'afterx' && ( + + + setOccurrrences(Number(e.target.value))} + /> + + + )} +
+ +
+ {i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.repeatsSummary', { + defaultMessage: 'Repeats {summary}', + values: { summary: recurrenceSummary(compiledRecurrenceSchedule) }, + })} +
+
+ ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/translations.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/translations.tsx new file mode 100644 index 0000000000000..5eb60be028692 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/translations.tsx @@ -0,0 +1,121 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { RRuleFrequency } from '../../../../../../types'; + +export const i18nNthWeekday = (dayOfWeek: string) => [ + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurLast', { + defaultMessage: 'Monthly on the last {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurFirst', { + defaultMessage: 'Monthly on the first {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurSecond', { + defaultMessage: 'Monthly on the second {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurThird', { + defaultMessage: 'Monthly on the third {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurFourth', { + defaultMessage: 'Monthly on the fourth {dayOfWeek}', + values: { dayOfWeek }, + }), +]; + +export const i18nNthWeekdayShort = (dayOfWeek: string) => [ + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurLastShort', { + defaultMessage: 'On the last {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurFirstShort', { + defaultMessage: 'On the 1st {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurSecondShort', { + defaultMessage: 'On the 2nd {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurThirdShort', { + defaultMessage: 'On the 3rd {dayOfWeek}', + values: { dayOfWeek }, + }), + i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurFourthShort', { + defaultMessage: 'On the 4th {dayOfWeek}', + values: { dayOfWeek }, + }), +]; + +export const i18nFreqSummary = (interval: number) => ({ + [RRuleFrequency.DAILY]: i18n.translate( + 'xpack.triggersActionsUI.ruleSnoozeScheduler.recurDaySummary', + { + defaultMessage: '{interval, plural, one {day} other {# days}}', + values: { interval }, + } + ), + [RRuleFrequency.WEEKLY]: i18n.translate( + 'xpack.triggersActionsUI.ruleSnoozeScheduler.recurWeekSummary', + { + defaultMessage: '{interval, plural, one {week} other {# weeks}}', + values: { interval }, + } + ), + [RRuleFrequency.MONTHLY]: i18n.translate( + 'xpack.triggersActionsUI.ruleSnoozeScheduler.recurMonthSummary', + { + defaultMessage: '{interval, plural, one {month} other {# months}}', + values: { interval }, + } + ), + [RRuleFrequency.YEARLY]: i18n.translate( + 'xpack.triggersActionsUI.ruleSnoozeScheduler.recurYearSummary', + { + defaultMessage: '{interval, plural, one {year} other {# years}}', + values: { interval }, + } + ), +}); + +export const i18nEndControlOptions = (interval: number) => [ + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurDay', { + defaultMessage: '{interval, plural, one {day} other {days}}', + values: { interval }, + }), + value: RRuleFrequency.DAILY, + 'data-test-subj': 'ruleSnoozeSchedulerRecurDay', + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurWeek', { + defaultMessage: '{interval, plural, one {week} other {weeks}}', + values: { interval }, + }), + value: RRuleFrequency.WEEKLY, + 'data-test-subj': 'ruleSnoozeSchedulerRecurWeek', + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurMonth', { + defaultMessage: '{interval, plural, one {month} other {months}}', + values: { interval }, + }), + value: RRuleFrequency.MONTHLY, + 'data-test-subj': 'ruleSnoozeSchedulerRecurMonth', + }, + { + text: i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.recurYear', { + defaultMessage: '{interval, plural, one {year} other {years}}', + values: { interval }, + }), + value: RRuleFrequency.YEARLY, + 'data-test-subj': 'ruleSnoozeSchedulerRecurYear', + }, +]; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.scss b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.scss new file mode 100644 index 0000000000000..d69249faa74ee --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.scss @@ -0,0 +1,13 @@ +.RuleSnoozeScheduler__pseudofocus { + &:not(:focus) { + background-image: linear-gradient( + to top, + #07C, + #07C 2px, + transparent 2px, + transparent 100% + ); + background-size: 100% 100%; + outline: none; + } +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx new file mode 100644 index 0000000000000..8fcdf10da9567 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx @@ -0,0 +1,365 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState, useCallback, useMemo } from 'react'; +import moment, { Moment } from 'moment'; +import { i18n } from '@kbn/i18n'; +import { useUiSetting } from '@kbn/kibana-react-plugin/public'; +import uuid from 'uuid'; +import { + EuiDatePicker, + EuiDatePickerRange, + EuiPanel, + EuiComboBox, + EuiFormRow, + EuiHorizontalRule, + EuiFlexGroup, + EuiFlexItem, + EuiSwitch, + EuiSpacer, + EuiButton, + EuiPopoverTitle, + EuiIcon, + EuiLink, +} from '@elastic/eui'; +import { RecurrenceSchedule, SnoozeSchedule } from '../../../../../types'; +import { RecurrenceScheduler } from './recurrence_scheduler'; + +import './scheduler.scss'; + +interface PanelOpts { + onSaveSchedule: (sched: SnoozeSchedule) => void; + onCancelSchedules: (ids: string[]) => void; + initialSchedule: SnoozeSchedule | null; + isLoading: boolean; +} + +export interface ComponentOpts extends PanelOpts { + onClose: () => void; + hasTitle: boolean; +} + +const TIMEZONE_OPTIONS = moment.tz?.names().map((n) => ({ label: n })) ?? [{ label: 'UTC' }]; + +const useDefaultTimzezone = () => { + const kibanaTz: string = useUiSetting('dateFormat:tz'); + if (!kibanaTz || kibanaTz === 'Browser') return moment.tz?.guess() ?? 'UTC'; + return kibanaTz; +}; + +export const RuleSnoozeScheduler: React.FunctionComponent = ({ + onClose, + initialSchedule, + hasTitle = true, + ...rest +}: ComponentOpts) => { + const title = + hasTitle && + (initialSchedule + ? i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.editSchedule', { + defaultMessage: 'Edit schedule', + }) + : i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.addSchedule', { + defaultMessage: 'Add schedule', + })); + + return ( + <> + {title && ( + + + + + + + + {title} + + + + + )} + + + ); +}; + +const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ + onSaveSchedule, + initialSchedule, + isLoading, + onCancelSchedules, +}) => { + // These two states form a state machine for whether or not the user's clicks on the datepicker apply to the start/end date or start/end time + // - State A: After the user clicks a start date: + // - Next date click will change the end date and move to state B + // - Time clicks change the start time, and continue to change the start time until the user clicks an end date + // - State B: After the user clicks an end date: + // - Next date click will change the start date and move to state A + // - Time clicks change the end time, and continue to change the end time until the user clicks a start date + // - State C: If the user clicks on the Start Date textbox: + // - Next date click will change the start date and move to state B + // - Time clicks change the start time, and continue to change the start time + // - State D: If the user clicks on the End Date textbox: + // - Next date click will change the end date and move to state A + // - Time clicks change the end time, and continue to change the end time + // Component initializes in State C + const [selectingEndDate, setSelectingEndDate] = useState(false); + const [selectingEndTime, setSelectingEndTime] = useState(false); + const minDate = useMemo( + () => moment(initialSchedule?.rRule.dtstart ?? undefined), + [initialSchedule] + ); + + const defaultTz = useDefaultTimzezone(); + const initialState = useMemo(() => { + if (!initialSchedule) { + return { + startDT: moment().add('24', 'h'), + endDT: moment().add('48', 'h'), + isRecurring: false, + recurrenceSchedule: null, + selectedTimezone: [{ label: defaultTz }], + }; + } + + const isRecurring = initialSchedule?.rRule?.freq != null; + + const recurrenceSchedule = !isRecurring + ? null + : ({ + ...initialSchedule.rRule, + ...(initialSchedule.rRule.until ? { until: moment(initialSchedule.rRule.until) } : {}), + } as RecurrenceSchedule); + + return { + startDT: moment(initialSchedule.rRule.dtstart), + endDT: moment(initialSchedule.rRule.dtstart).add(initialSchedule.duration, 'ms'), + isRecurring, + recurrenceSchedule, + selectedTimezone: [{ label: initialSchedule.rRule.tzid }], + }; + }, [initialSchedule, defaultTz]); + + const [startDT, setStartDT] = useState(initialState.startDT); + const [endDT, setEndDT] = useState(initialState.endDT); + + const [isRecurring, setIsRecurring] = useState(initialState.isRecurring); + const [recurrenceSchedule, setRecurrenceSchedule] = useState( + initialState.recurrenceSchedule + ); + + const [selectedTimezone, setSelectedTimezone] = useState(initialState.selectedTimezone); + + const onFocusStart = useCallback(() => { + setSelectingEndDate(false); + setSelectingEndTime(false); + }, [setSelectingEndDate]); + + const onFocusEnd = useCallback(() => { + setSelectingEndDate(true); + setSelectingEndTime(true); + }, [setSelectingEndDate]); + + const selectStartDT = useCallback( + (date, clearEndDT) => { + setStartDT(moment.max(date, minDate)); + if (clearEndDT) { + setEndDT(null); + setSelectingEndDate(true); + setSelectingEndTime(false); + } + }, + [setStartDT, setSelectingEndDate, minDate] + ); + const selectEndDT = useCallback( + (date) => { + setEndDT(date); + setSelectingEndTime(true); + setSelectingEndDate(false); + }, + [setEndDT, setSelectingEndDate] + ); + + const onSelectFromInline = useCallback( + (date) => { + const dateAsMoment = moment(date); + const newDateAfterStart = + !startDT || dateAsMoment.isAfter(startDT) || dateAsMoment.isSame(startDT); + const isEndDateTimeChange = + dateAsMoment.isSame(endDT, 'day') && !dateAsMoment.isSame(endDT, 'minute'); + const isStartDateTimeChange = + dateAsMoment.isSame(startDT, 'day') && + !dateAsMoment.isSame(startDT, 'minute') && + (!isEndDateTimeChange || !selectingEndTime); + + const applyToEndDate = + !isStartDateTimeChange && (selectingEndDate || (isEndDateTimeChange && selectingEndTime)); + if (applyToEndDate && newDateAfterStart) { + selectEndDT(date); + } else selectStartDT(date, !isStartDateTimeChange); + }, + [selectingEndDate, selectingEndTime, startDT, endDT, selectEndDT, selectStartDT] + ); + + const onClickSaveSchedule = useCallback(() => { + if (!startDT || !endDT) return; + const recurrence = + isRecurring && recurrenceSchedule + ? recurrenceSchedule + : { + count: 1, + }; + onSaveSchedule({ + id: initialSchedule?.id ?? uuid.v4(), + rRule: { + dtstart: startDT.toISOString(), + tzid: selectedTimezone[0].label ?? defaultTz, + ...recurrence, + }, + duration: endDT.valueOf() - startDT.valueOf(), + }); + }, [ + onSaveSchedule, + endDT, + startDT, + selectedTimezone, + isRecurring, + recurrenceSchedule, + initialSchedule, + defaultTz, + ]); + + const onCancelSchedule = useCallback(() => { + if (!initialSchedule?.id) return; + onCancelSchedules([initialSchedule.id]); + }, [initialSchedule, onCancelSchedules]); + + return ( + + + + + } + endDateControl={ + + } + /> + + + + + + + + + + + + + + + + + setIsRecurring(!isRecurring)} + checked={isRecurring} + /> + {isRecurring && ( + <> + + + + )} + + + {i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.saveSchedule', { + defaultMessage: 'Save schedule', + })} + + {initialSchedule && ( + <> + + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.deleteSchedule', { + defaultMessage: 'Delete schedule', + })} + + + + + )} + + ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx index 194bf86030e56..ff4d13d67d93f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx @@ -8,73 +8,40 @@ import React, { useState, useEffect, useCallback } from 'react'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; +import type { RuleSnooze } from '@kbn/alerting-plugin/common'; import { - useGeneratedHtmlId, EuiLoadingSpinner, EuiPopover, EuiContextMenu, EuiBadge, EuiPanel, - EuiFieldNumber, - EuiSelect, EuiFlexGroup, EuiFlexItem, - EuiButton, - EuiHorizontalRule, - EuiTitle, - EuiFlexGrid, - EuiSpacer, - EuiLink, EuiText, EuiToolTip, - EuiButtonEmpty, } from '@elastic/eui'; -import { parseInterval } from '../../../../../common'; +import type { SnoozeSchedule } from '../../../../types'; +import { SnoozePanel } from './rule_snooze'; import { Rule } from '../../../../types'; export type SnoozeUnit = 'm' | 'h' | 'd' | 'w' | 'M'; const SNOOZE_END_TIME_FORMAT = 'LL @ LT'; -type DropdownRuleRecord = Pick; +type DropdownRuleRecord = Pick; export interface ComponentOpts { rule: DropdownRuleRecord; onRuleChanged: () => void; enableRule: () => Promise; disableRule: () => Promise; - snoozeRule: (snoozeEndTime: string | -1, interval: string | null) => Promise; - unsnoozeRule: () => Promise; + snoozeRule: (snoozeSchedule: SnoozeSchedule) => Promise; + unsnoozeRule: (scheduleIds?: string[]) => Promise; isEditable: boolean; - previousSnoozeInterval?: string | null; direction?: 'column' | 'row'; hideSnoozeOption?: boolean; } -const COMMON_SNOOZE_TIMES: Array<[number, SnoozeUnit]> = [ - [1, 'h'], - [3, 'h'], - [8, 'h'], - [1, 'd'], -]; - -const PREV_SNOOZE_INTERVAL_KEY = 'triggersActionsUi_previousSnoozeInterval'; -export const usePreviousSnoozeInterval: ( - p?: string | null -) => [string | null, (n: string) => void] = (propsInterval) => { - const intervalFromStorage = localStorage.getItem(PREV_SNOOZE_INTERVAL_KEY); - const usePropsInterval = typeof propsInterval !== 'undefined'; - const interval = usePropsInterval ? propsInterval : intervalFromStorage; - const [previousSnoozeInterval, setPreviousSnoozeInterval] = useState(interval); - const storeAndSetPreviousSnoozeInterval = (newInterval: string) => { - if (!usePropsInterval) { - localStorage.setItem(PREV_SNOOZE_INTERVAL_KEY, newInterval); - } - setPreviousSnoozeInterval(newInterval); - }; - return [previousSnoozeInterval, storeAndSetPreviousSnoozeInterval]; -}; - export const isRuleSnoozed = (rule: { isSnoozedUntil?: Date | null; muteAll: boolean }) => Boolean( (rule.isSnoozedUntil && new Date(rule.isSnoozedUntil).getTime() > Date.now()) || rule.muteAll @@ -88,36 +55,23 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ snoozeRule, unsnoozeRule, isEditable, - previousSnoozeInterval: propsPreviousSnoozeInterval, hideSnoozeOption = false, direction = 'column', }: ComponentOpts) => { const [isEnabled, setIsEnabled] = useState(rule.enabled); - const [isSnoozed, setIsSnoozed] = useState(isRuleSnoozed(rule)); - const [previousSnoozeInterval, setPreviousSnoozeInterval] = usePreviousSnoozeInterval( - propsPreviousSnoozeInterval - ); + const [isSnoozed, setIsSnoozed] = useState(!hideSnoozeOption && isRuleSnoozed(rule)); useEffect(() => { setIsEnabled(rule.enabled); }, [rule.enabled]); useEffect(() => { - setIsSnoozed(isRuleSnoozed(rule)); - }, [rule]); + if (!hideSnoozeOption) setIsSnoozed(isRuleSnoozed(rule)); + }, [rule, hideSnoozeOption]); const [isUpdating, setIsUpdating] = useState(false); const [isPopoverOpen, setIsPopoverOpen] = useState(false); const onClickBadge = useCallback(() => setIsPopoverOpen((isOpen) => !isOpen), [setIsPopoverOpen]); const onClosePopover = useCallback(() => setIsPopoverOpen(false), [setIsPopoverOpen]); - const snoozeRuleAndStoreInterval = useCallback( - (snoozeEndTime: string | -1, interval: string | null) => { - if (interval) { - setPreviousSnoozeInterval(interval); - } - return snoozeRule(snoozeEndTime, interval); - }, - [setPreviousSnoozeInterval, snoozeRule] - ); const onChangeEnabledStatus = useCallback( async (enable: boolean) => { @@ -139,23 +93,29 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ }, [rule.enabled, isEnabled, onRuleChanged, enableRule, disableRule] ); - const onChangeSnooze = useCallback( - async (value: number, unit?: SnoozeUnit) => { - setIsUpdating(true); + + const onSnoozeRule = useCallback( + async (snoozeSchedule) => { try { - if (value === -1) { - await snoozeRuleAndStoreInterval(-1, null); - } else if (value !== 0) { - const snoozeEndTime = moment().add(value, unit).toISOString(); - await snoozeRuleAndStoreInterval(snoozeEndTime, `${value}${unit}`); - } else await unsnoozeRule(); - setIsSnoozed(value !== 0); + await snoozeRule(snoozeSchedule); onRuleChanged(); } finally { - setIsUpdating(false); + onClosePopover(); } }, - [setIsUpdating, setIsSnoozed, onRuleChanged, snoozeRuleAndStoreInterval, unsnoozeRule] + [snoozeRule, onRuleChanged, onClosePopover] + ); + + const onUnsnoozeRule = useCallback( + async (scheduleIds) => { + try { + await unsnoozeRule(scheduleIds); + onRuleChanged(); + } finally { + onClosePopover(); + } + }, + [unsnoozeRule, onRuleChanged, onClosePopover] ); const badgeColor = !isEnabled ? 'default' : isSnoozed ? 'warning' : 'primary'; @@ -221,12 +181,13 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ ) : ( @@ -242,47 +203,41 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ interface RuleStatusMenuProps { onChangeEnabledStatus: (enabled: boolean) => void; - onChangeSnooze: (value: number | -1, unit?: SnoozeUnit) => void; onClosePopover: () => void; isEnabled: boolean; isSnoozed: boolean; snoozeEndTime?: Date | null; - previousSnoozeInterval: string | null; hideSnoozeOption?: boolean; + snoozeRule: (snoozeSchedule: SnoozeSchedule) => Promise; + unsnoozeRule: (scheduleIds?: string[]) => Promise; + scheduledSnoozes?: RuleSnooze; } const RuleStatusMenu: React.FunctionComponent = ({ onChangeEnabledStatus, - onChangeSnooze, onClosePopover, isEnabled, isSnoozed, snoozeEndTime, - previousSnoozeInterval, hideSnoozeOption = false, + snoozeRule, + unsnoozeRule, + scheduledSnoozes = [], }) => { const enableRule = useCallback(() => { if (isSnoozed) { // Unsnooze if the rule is snoozed and the user clicks Enabled - onChangeSnooze(0, 'm'); + unsnoozeRule(); } else { onChangeEnabledStatus(true); } onClosePopover(); - }, [onChangeEnabledStatus, onClosePopover, onChangeSnooze, isSnoozed]); + }, [onChangeEnabledStatus, onClosePopover, unsnoozeRule, isSnoozed]); const disableRule = useCallback(() => { onChangeEnabledStatus(false); onClosePopover(); }, [onChangeEnabledStatus, onClosePopover]); - const onApplySnooze = useCallback( - (value: number, unit?: SnoozeUnit) => { - onChangeSnooze(value, unit); - onClosePopover(); - }, - [onClosePopover, onChangeSnooze] - ); - let snoozeButtonTitle = {SNOOZE}; if (isSnoozed && snoozeEndTime) { snoozeButtonTitle = ( @@ -315,15 +270,17 @@ const RuleStatusMenu: React.FunctionComponent = ({ return [ { id: 1, - width: 360, + width: 400, title: SNOOZE, content: ( - + ), @@ -359,166 +316,6 @@ const RuleStatusMenu: React.FunctionComponent = ({ return ; }; -interface SnoozePanelProps { - interval?: string; - isLoading?: boolean; - applySnooze: (value: number | -1, unit?: SnoozeUnit) => void; - showCancel: boolean; - previousSnoozeInterval: string | null; -} - -export const SnoozePanel: React.FunctionComponent = ({ - interval = '3d', - isLoading = false, - applySnooze, - showCancel, - previousSnoozeInterval, -}) => { - const [intervalValue, setIntervalValue] = useState(parseInterval(interval).value); - const [intervalUnit, setIntervalUnit] = useState(parseInterval(interval).unit); - - const onChangeValue = useCallback( - ({ target }) => setIntervalValue(target.value), - [setIntervalValue] - ); - const onChangeUnit = useCallback( - ({ target }) => setIntervalUnit(target.value), - [setIntervalUnit] - ); - - const onApplyIndefinite = useCallback(() => applySnooze(-1), [applySnooze]); - const onClickApplyButton = useCallback( - () => applySnooze(intervalValue, intervalUnit as SnoozeUnit), - [applySnooze, intervalValue, intervalUnit] - ); - const onCancelSnooze = useCallback(() => applySnooze(0, 'm'), [applySnooze]); - - const parsedPrevSnooze = previousSnoozeInterval ? parseInterval(previousSnoozeInterval) : null; - const prevSnoozeEqualsCurrentSnooze = - parsedPrevSnooze?.value === intervalValue && parsedPrevSnooze?.unit === intervalUnit; - const previousButton = parsedPrevSnooze && !prevSnoozeEqualsCurrentSnooze && ( - <> - - - applySnooze(parsedPrevSnooze.value, parsedPrevSnooze.unit as SnoozeUnit)} - > - {i18n.translate('xpack.triggersActionsUI.sections.rulesList.previousSnooze', { - defaultMessage: 'Previous', - })} - - - - - {durationToTextString(parsedPrevSnooze.value, parsedPrevSnooze.unit as SnoozeUnit)} - - - - - - ); - return ( - <> - - - - - - - - - - - {i18n.translate('xpack.triggersActionsUI.sections.rulesList.applySnooze', { - defaultMessage: 'Apply', - })} - - - - - {previousButton} - - - -
- {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeCommonlyUsed', { - defaultMessage: 'Commonly used', - })} -
-
-
- - {COMMON_SNOOZE_TIMES.map(([value, unit]) => ( - - applySnooze(value, unit)}> - {durationToTextString(value, unit)} - - - ))} -
- - - - - {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeIndefinitely', { - defaultMessage: 'Snooze indefinitely', - })} - - - - {showCancel && ( - <> - - - - - Cancel snooze - - - - - )} - - - ); -}; - export const futureTimeToInterval = (time?: Date | null) => { if (!time) return; const relativeTime = moment(time).locale('en').fromNow(true); @@ -553,15 +350,6 @@ export const futureTimeToInterval = (time?: Date | null) => { return `${value}${unit}`; }; -const durationToTextString = (value: number, unit: SnoozeUnit) => { - // Moment.humanize will parse "1" as "a" or "an", e.g "an hour" - // Override this to output "1 hour" - if (value === 1) { - return ONE[unit]; - } - return moment.duration(value, unit).humanize(); -}; - const ENABLED = i18n.translate('xpack.triggersActionsUI.sections.rulesList.enabledRuleStatus', { defaultMessage: 'Enabled', }); @@ -585,45 +373,10 @@ const OPEN_MENU_ARIA_LABEL = i18n.translate( } ); -const MINUTES = i18n.translate('xpack.triggersActionsUI.sections.rulesList.minutesLabel', { - defaultMessage: 'minutes', -}); -const HOURS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.hoursLabel', { - defaultMessage: 'hours', -}); -const DAYS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.daysLabel', { - defaultMessage: 'days', -}); -const WEEKS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.weeksLabel', { - defaultMessage: 'weeks', -}); -const MONTHS = i18n.translate('xpack.triggersActionsUI.sections.rulesList.monthsLabel', { - defaultMessage: 'months', -}); - const INDEFINITELY = i18n.translate( 'xpack.triggersActionsUI.sections.rulesList.remainingSnoozeIndefinite', { defaultMessage: 'Indefinitely' } ); -// i18n constants to override moment.humanize -const ONE: Record = { - m: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneMinute', { - defaultMessage: '1 minute', - }), - h: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneHour', { - defaultMessage: '1 hour', - }), - d: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneDay', { - defaultMessage: '1 day', - }), - w: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneWeek', { - defaultMessage: '1 week', - }), - M: i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeOneMonth', { - defaultMessage: '1 month', - }), -}; - // eslint-disable-next-line import/no-default-export export { RuleStatusDropdown as default }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index 571fd1f947b14..3d54ae8bee5d7 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -49,6 +49,7 @@ import { Pagination, Percentiles, TriggersActionsUiConfig, + SnoozeSchedule, } from '../../../../types'; import { RuleAdd, RuleEdit } from '../../rule_form'; import { BulkOperationPopover } from '../../common/components/bulk_operation_popover'; @@ -403,12 +404,12 @@ export const RulesList: React.FunctionComponent = () => { return enableRule({ http, id: rule.id }); }; - const onSnoozeRule = (rule: RuleTableItem, snoozeEndTime: string | -1) => { - return snoozeRule({ http, id: rule.id, snoozeEndTime }); + const onSnoozeRule = (rule: RuleTableItem, snoozeSchedule: SnoozeSchedule) => { + return snoozeRule({ http, id: rule.id, snoozeSchedule }); }; - const onUnsnoozeRule = (rule: RuleTableItem) => { - return unsnoozeRule({ http, id: rule.id }); + const onUnsnoozeRule = (rule: RuleTableItem, scheduleIds?: string[]) => { + return unsnoozeRule({ http, id: rule.id, scheduleIds }); }; const toolsRight = [ diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.test.tsx index e59a847eb11b2..229a24aa2100f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.test.tsx @@ -4,14 +4,15 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + +import { EuiButtonIcon, EuiButton } from '@elastic/eui'; import React from 'react'; +import { act } from 'react-dom/test-utils'; import moment from 'moment'; -import { EuiButtonIcon, EuiButton } from '@elastic/eui'; + import { RuleTableItem } from '../../../../types'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { RulesListNotifyBadge } from './rules_list_notify_badge'; -import { RulesListSnoozePanel } from './rules_list_snooze_panel'; -import { act } from 'react-dom/test-utils'; jest.mock('../../../../common/lib/kibana'); @@ -127,15 +128,17 @@ describe('RulesListNotifyBadge', () => { ); // Snooze for 1 hour - wrapper - .find(RulesListSnoozePanel) - .find({ children: '1 hour' }) - .find('button') - .first() - .simulate('click'); + wrapper.find('button[data-test-subj="linkSnooze1h"]').first().simulate('click'); expect(onLoading).toHaveBeenCalledWith(true); - expect(onClose).toHaveBeenCalled(); - expect(snoozeRule).toHaveBeenCalledWith(expect.stringContaining('1990'), '1h'); + expect(snoozeRule).toHaveBeenCalledWith({ + duration: 3600000, + id: null, + rRule: { + count: 1, + dtstart: '1990-01-01T05:00:00.000Z', + tzid: 'America/New_York', + }, + }); await act(async () => { jest.runOnlyPendingTimers(); @@ -143,6 +146,7 @@ describe('RulesListNotifyBadge', () => { expect(onRuleChanged).toHaveBeenCalled(); expect(onLoading).toHaveBeenCalledWith(false); + expect(onClose).toHaveBeenCalled(); }); it('should allow the user to unsnooze rules', async () => { @@ -166,7 +170,6 @@ describe('RulesListNotifyBadge', () => { // Unsnooze wrapper.find('[data-test-subj="ruleSnoozeCancel"] button').simulate('click'); expect(onLoading).toHaveBeenCalledWith(true); - expect(onClose).toHaveBeenCalled(); await act(async () => { jest.runOnlyPendingTimers(); @@ -174,5 +177,6 @@ describe('RulesListNotifyBadge', () => { expect(unsnoozeRule).toHaveBeenCalled(); expect(onLoading).toHaveBeenCalledWith(false); + expect(onClose).toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx index f32913ce5eb83..d9ec9bc5c4f64 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx @@ -5,23 +5,36 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React, { useCallback, useMemo } from 'react'; import moment from 'moment'; -import { - EuiButton, - EuiButtonIcon, - EuiPopover, - EuiText, - EuiToolTip, - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiPopoverTitle, -} from '@elastic/eui'; +import { EuiButton, EuiButtonIcon, EuiPopover, EuiText, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { isRuleSnoozed } from './rule_status_dropdown'; -import { RuleTableItem } from '../../../../types'; -import { RulesListSnoozePanel } from './rules_list_snooze_panel'; +import { RuleSnooze, RuleSnoozeSchedule } from '@kbn/alerting-plugin/common'; +import { i18nAbbrMonthDayDate, i18nMonthDayDate } from '../../../lib/i18n_month_day_date'; +import { RuleTableItem, SnoozeSchedule } from '../../../../types'; +import { SnoozePanel, futureTimeToInterval } from './rule_snooze'; +import { useKibana } from '../../../../common/lib/kibana'; + +export const SNOOZE_SUCCESS_MESSAGE = i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListSnoozePanel.snoozeSuccess', + { + defaultMessage: 'Rule successfully snoozed', + } +); + +export const UNSNOOZE_SUCCESS_MESSAGE = i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListSnoozePanel.unsnoozeSuccess', + { + defaultMessage: 'Rule successfully unsnoozed', + } +); + +export const SNOOZE_FAILED_MESSAGE = i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListSnoozePanel.snoozeFailed', + { + defaultMessage: 'Unabled to change rule snooze settings', + } +); export interface RulesListNotifyBadgeProps { rule: RuleTableItem; @@ -31,9 +44,9 @@ export interface RulesListNotifyBadgeProps { onClick: React.MouseEventHandler; onClose: () => void; onLoading: (isLoading: boolean) => void; - onRuleChanged: () => Promise; - snoozeRule: (snoozeEndTime: string | -1, interval: string | null) => Promise; - unsnoozeRule: () => Promise; + onRuleChanged: () => void; + snoozeRule: (schedule: SnoozeSchedule, muteAll?: boolean) => Promise; + unsnoozeRule: (scheduleIds?: string[]) => Promise; } const openSnoozePanelAriaLabel = i18n.translate( @@ -41,12 +54,27 @@ const openSnoozePanelAriaLabel = i18n.translate( { defaultMessage: 'Open snooze panel' } ); +export const isRuleSnoozed = (rule: { isSnoozedUntil?: Date | null; muteAll: boolean }) => + Boolean( + (rule.isSnoozedUntil && new Date(rule.isSnoozedUntil).getTime() > Date.now()) || rule.muteAll + ); + +const getNextRuleSnoozeSchedule = (rule: { snoozeSchedule?: RuleSnooze }) => { + if (!rule.snoozeSchedule || rule.snoozeSchedule.length === 0) return null; + const nextSchedule = rule.snoozeSchedule.reduce( + (a: RuleSnoozeSchedule, b: RuleSnoozeSchedule) => { + if (moment(b.rRule.dtstart).isBefore(moment(a.rRule.dtstart))) return b; + return a; + } + ); + return nextSchedule; +}; + export const RulesListNotifyBadge: React.FunctionComponent = (props) => { const { isLoading = false, rule, isOpen, - previousSnoozeInterval, onClick, onClose, onLoading, @@ -59,21 +87,28 @@ export const RulesListNotifyBadge: React.FunctionComponent { return isRuleSnoozed(rule); }, [rule]); + const nextScheduledSnooze = useMemo(() => getNextRuleSnoozeSchedule(rule), [rule]); + const isScheduled = useMemo(() => { - // TODO: Implement scheduled check - return false; - }, []); + return !isSnoozed && Boolean(nextScheduledSnooze); + }, [nextScheduledSnooze, isSnoozed]); const formattedSnoozeText = useMemo(() => { if (!isSnoozedUntil) { + if (nextScheduledSnooze) + return i18nAbbrMonthDayDate(moment(nextScheduledSnooze.rRule.dtstart)); return ''; } - return moment(isSnoozedUntil).format('MMM D'); - }, [isSnoozedUntil]); + return i18nAbbrMonthDayDate(moment(isSnoozedUntil)); + }, [isSnoozedUntil, nextScheduledSnooze]); const snoozeTooltipText = useMemo(() => { if (isSnoozedIndefinitely) { @@ -83,8 +118,15 @@ export const RulesListNotifyBadge: React.FunctionComponent { return ( @@ -197,34 +239,60 @@ export const RulesListNotifyBadge: React.FunctionComponent{button}; }, [isOpen, button, snoozeTooltipText]); + const onClosePopover = useCallback(() => { + onClose(); + // Set a timeout on closing the scheduler to avoid flicker + // setTimeout(onCloseScheduler, 1000); + }, [onClose]); + + const onApplySnooze = useCallback( + async (schedule: SnoozeSchedule) => { + try { + onLoading(true); + await snoozeRule(schedule); + onRuleChanged(); + toasts.addSuccess(SNOOZE_SUCCESS_MESSAGE); + } catch (e) { + toasts.addDanger(SNOOZE_FAILED_MESSAGE); + } finally { + onLoading(false); + onClosePopover(); + } + }, + [onLoading, snoozeRule, onRuleChanged, toasts, onClosePopover] + ); + + const onApplyUnsnooze = useCallback( + async (scheduleIds?: string[]) => { + try { + onLoading(true); + await unsnoozeRule(scheduleIds); + onRuleChanged(); + toasts.addSuccess(UNSNOOZE_SUCCESS_MESSAGE); + } catch (e) { + toasts.addDanger(SNOOZE_FAILED_MESSAGE); + } finally { + onLoading(false); + onClosePopover(); + } + }, + [onLoading, unsnoozeRule, onRuleChanged, toasts, onClosePopover] + ); + return ( - - - - - - - {i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListNotifyBadge.snoozeActions', - { defaultMessage: 'Snooze actions' } - )} - - - - ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_snooze_panel.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_snooze_panel.tsx deleted file mode 100644 index d02376975b3f6..0000000000000 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_snooze_panel.tsx +++ /dev/null @@ -1,123 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback, useMemo } from 'react'; -import moment from 'moment'; -import { i18n } from '@kbn/i18n'; -import { RuleTableItem } from '../../../../types'; -import { useKibana } from '../../../../common/lib/kibana'; -import { - SnoozePanel, - futureTimeToInterval, - usePreviousSnoozeInterval, - SnoozeUnit, - isRuleSnoozed, -} from './rule_status_dropdown'; - -export const SNOOZE_SUCCESS_MESSAGE = i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListSnoozePanel.snoozeSuccess', - { - defaultMessage: 'Rule successfully snoozed', - } -); - -export const UNSNOOZE_SUCCESS_MESSAGE = i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListSnoozePanel.unsnoozeSuccess', - { - defaultMessage: 'Rule successfully unsnoozed', - } -); - -export const SNOOZE_FAILED_MESSAGE = i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListSnoozePanel.snoozeFailed', - { - defaultMessage: 'Unabled to change rule snooze settings', - } -); - -const EMPTY_HANDLER = () => {}; - -export interface RulesListSnoozePanelProps { - rule: RuleTableItem; - previousSnoozeInterval?: string | null; - onLoading?: (isLoading: boolean) => void; - onRuleChanged: () => Promise; - onClose: () => void; - snoozeRule: (snoozeEndTime: string | -1, interval: string | null) => Promise; - unsnoozeRule: () => Promise; -} - -export const RulesListSnoozePanel = (props: RulesListSnoozePanelProps) => { - const { - rule, - previousSnoozeInterval: propsPreviousSnoozeInterval, - onRuleChanged, - onClose, - snoozeRule, - unsnoozeRule, - onLoading = EMPTY_HANDLER, - } = props; - - const { - notifications: { toasts }, - } = useKibana().services; - - const { isSnoozedUntil } = rule; - - const [previousSnoozeInterval, setPreviousSnoozeInterval] = usePreviousSnoozeInterval( - propsPreviousSnoozeInterval - ); - - const isSnoozed = useMemo(() => { - return isRuleSnoozed(rule); - }, [rule]); - - const snoozeRuleAndStoreInterval = useCallback( - (newSnoozeEndTime: string | -1, interval: string | null) => { - if (interval) { - setPreviousSnoozeInterval(interval); - } - return snoozeRule(newSnoozeEndTime, interval); - }, - [setPreviousSnoozeInterval, snoozeRule] - ); - - const onChangeSnooze = useCallback( - async (value: number, unit?: SnoozeUnit) => { - onLoading(true); - onClose(); - try { - if (value === -1) { - await snoozeRuleAndStoreInterval(-1, null); - toasts.addSuccess(SNOOZE_SUCCESS_MESSAGE); - } else if (value !== 0) { - const newSnoozeEndTime = moment().add(value, unit).toISOString(); - await snoozeRuleAndStoreInterval(newSnoozeEndTime, `${value}${unit}`); - toasts.addSuccess(SNOOZE_SUCCESS_MESSAGE); - } else { - await unsnoozeRule(); - toasts.addSuccess(UNSNOOZE_SUCCESS_MESSAGE); - } - } catch (e) { - toasts.addDanger(SNOOZE_FAILED_MESSAGE); - } finally { - await onRuleChanged(); - onLoading(false); - } - }, - [toasts, onRuleChanged, snoozeRuleAndStoreInterval, unsnoozeRule, onLoading, onClose] - ); - - return ( - - ); -}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index a97a0c289c93f..692c10191c2ce 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -46,6 +46,7 @@ import { Percentiles, TriggersActionsUiConfig, RuleTypeRegistryContract, + SnoozeSchedule, } from '../../../../types'; import { shouldShowDurationWarning } from '../../../lib/execution_duration_utils'; import { PercentileSelectablePopover } from './percentile_selectable_popover'; @@ -116,8 +117,8 @@ export interface RulesListTableProps { onRuleChanged: () => Promise; onEnableRule: (rule: RuleTableItem) => Promise; onDisableRule: (rule: RuleTableItem) => Promise; - onSnoozeRule: (rule: RuleTableItem, snoozeEndTime: string | -1) => Promise; - onUnsnoozeRule: (rule: RuleTableItem) => Promise; + onSnoozeRule: (rule: RuleTableItem, snoozeSchedule: SnoozeSchedule) => Promise; + onUnsnoozeRule: (rule: RuleTableItem, scheduleIds?: string[]) => Promise; renderCollapsedItemActions?: ( rule: RuleTableItem, onLoading: (isLoading: boolean) => void @@ -242,10 +243,8 @@ export const RulesListTable = (props: RulesListTableProps) => { hideSnoozeOption disableRule={async () => await onDisableRule(rule)} enableRule={async () => await onEnableRule(rule)} - snoozeRule={async (snoozeEndTime: string | -1, interval: string | null) => { - await onSnoozeRule(rule, snoozeEndTime); - }} - unsnoozeRule={async () => await onUnsnoozeRule(rule)} + snoozeRule={async () => {}} + unsnoozeRule={async () => {}} rule={rule} onRuleChanged={onRuleChanged} isEditable={rule.isEditable && isRuleTypeEditableInContext(rule.ruleTypeId)} @@ -449,10 +448,10 @@ export const RulesListTable = (props: RulesListTableProps) => { onClick={() => setCurrentlyOpenNotify(rule.id)} onClose={() => setCurrentlyOpenNotify('')} onRuleChanged={onRuleChanged} - snoozeRule={async (snoozeEndTime: string | -1, interval: string | null) => { - await onSnoozeRule(rule, snoozeEndTime); + snoozeRule={async (snoozeSchedule) => { + await onSnoozeRule(rule, snoozeSchedule); }} - unsnoozeRule={async () => await onUnsnoozeRule(rule)} + unsnoozeRule={async (scheduleIds) => await onUnsnoozeRule(rule, scheduleIds)} /> ); }, diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 6923fe51d39d6..d88567adf5d40 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -5,6 +5,7 @@ * 2.0. */ +import type { Moment } from 'moment'; import type { ComponentType, ReactNode } from 'react'; import type { PublicMethodsOf } from '@kbn/utility-types'; import type { DocLinksStart } from '@kbn/core/public'; @@ -437,6 +438,32 @@ export enum AlertsTableFlyoutState { export type RuleStatus = 'enabled' | 'disabled' | 'snoozed'; +export enum RRuleFrequency { + YEARLY = 0, + MONTHLY = 1, + WEEKLY = 2, + DAILY = 3, +} + +export interface RecurrenceSchedule { + freq: RRuleFrequency; + interval: number; + until?: Moment; + count?: number; + byweekday?: string[]; + bymonthday?: number[]; + bymonth?: number[]; +} + +export interface SnoozeSchedule { + id: string | null; + duration: number; + rRule: Partial & { + dtstart: string; + tzid: string; + }; +} + export interface ConnectorServices { validateEmailAddresses: ActionsPublicPluginSetup['validateEmailAddresses']; } diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts index 0ca1ce4bf1eb7..2376e05635e9c 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts @@ -18,7 +18,15 @@ import { getProducerUnauthorizedErrorMessage, } from '../../../../common/lib'; -const FUTURE_SNOOZE_TIME = '9999-12-31T06:00:00.000Z'; +const NOW = new Date().toISOString(); +const SNOOZE_SCHEDULE = { + duration: 864000000, + rRule: { + dtstart: NOW, + tzid: 'UTC', + count: 1, + }, +}; // eslint-disable-next-line import/no-default-export export default function createSnoozeRuleTests({ getService }: FtrProviderContext) { @@ -67,7 +75,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext const response = await alertUtils .getSnoozeRequest(createdAlert.id) - .send({ snooze_end_time: FUTURE_SNOOZE_TIME }); + .send({ snooze_schedule: SNOOZE_SCHEDULE }); switch (scenario.id) { case 'no_kibana_privileges at space1': @@ -97,19 +105,15 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); expect(response.body).to.eql(''); - const now = Date.now(); const { body: updatedAlert } = await supertestWithoutAuth .get(`${getUrlPrefix(space.id)}/internal/alerting/rule/${createdAlert.id}`) .set('kbn-xsrf', 'foo') .auth(user.username, user.password) .expect(200); expect(updatedAlert.snooze_schedule.length).to.eql(1); - // Due to latency, test to make sure the returned rRule.dtstart is within 10 seconds of the current time const { rRule, duration } = updatedAlert.snooze_schedule[0]; - expect(Math.abs(Date.parse(rRule.dtstart) - now) < 10000).to.be(true); - expect(Math.abs(duration - (Date.parse(FUTURE_SNOOZE_TIME) - now)) < 10000).to.be( - true - ); + expect(rRule.dtstart).to.eql(NOW); + expect(duration).to.eql(SNOOZE_SCHEDULE.duration); expect(updatedAlert.mute_all).to.eql(false); // Ensure AAD isn't broken await checkAAD({ @@ -140,7 +144,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext const response = await alertUtils .getSnoozeRequest(createdAlert.id) - .send({ snooze_end_time: FUTURE_SNOOZE_TIME }); + .send({ snooze_schedule: SNOOZE_SCHEDULE }); switch (scenario.id) { case 'no_kibana_privileges at space1': @@ -163,19 +167,15 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); expect(response.body).to.eql(''); - const now = Date.now(); const { body: updatedAlert } = await supertestWithoutAuth .get(`${getUrlPrefix(space.id)}/internal/alerting/rule/${createdAlert.id}`) .set('kbn-xsrf', 'foo') .auth(user.username, user.password) .expect(200); expect(updatedAlert.snooze_schedule.length).to.eql(1); - // Due to latency, test to make sure the returned rRule.dtstart is within 10 seconds of the current time const { rRule, duration } = updatedAlert.snooze_schedule[0]; - expect(Math.abs(Date.parse(rRule.dtstart) - now) < 10000).to.be(true); - expect(Math.abs(duration - (Date.parse(FUTURE_SNOOZE_TIME) - now)) < 10000).to.be( - true - ); + expect(rRule.dtstart).to.eql(NOW); + expect(duration).to.eql(SNOOZE_SCHEDULE.duration); expect(updatedAlert.mute_all).to.eql(false); // Ensure AAD isn't broken await checkAAD({ @@ -206,7 +206,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext const response = await alertUtils .getSnoozeRequest(createdAlert.id) - .send({ snooze_end_time: FUTURE_SNOOZE_TIME }); + .send({ snooze_schedule: SNOOZE_SCHEDULE }); switch (scenario.id) { case 'no_kibana_privileges at space1': @@ -240,19 +240,15 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); expect(response.body).to.eql(''); - const now = Date.now(); const { body: updatedAlert } = await supertestWithoutAuth .get(`${getUrlPrefix(space.id)}/internal/alerting/rule/${createdAlert.id}`) .set('kbn-xsrf', 'foo') .auth(user.username, user.password) .expect(200); expect(updatedAlert.snooze_schedule.length).to.eql(1); - // Due to latency, test to make sure the returned rRule.dtstart is within 10 seconds of the current time const { rRule, duration } = updatedAlert.snooze_schedule[0]; - expect(Math.abs(Date.parse(rRule.dtstart) - now) < 10000).to.be(true); - expect(Math.abs(duration - (Date.parse(FUTURE_SNOOZE_TIME) - now)) < 10000).to.be( - true - ); + expect(rRule.dtstart).to.eql(NOW); + expect(duration).to.eql(SNOOZE_SCHEDULE.duration); expect(updatedAlert.mute_all).to.eql(false); // Ensure AAD isn't broken await checkAAD({ @@ -283,7 +279,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext const response = await alertUtils .getSnoozeRequest(createdAlert.id) - .send({ snooze_end_time: FUTURE_SNOOZE_TIME }); + .send({ snooze_schedule: SNOOZE_SCHEDULE }); switch (scenario.id) { case 'no_kibana_privileges at space1': @@ -317,19 +313,15 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); expect(response.body).to.eql(''); - const now = Date.now(); const { body: updatedAlert } = await supertestWithoutAuth .get(`${getUrlPrefix(space.id)}/internal/alerting/rule/${createdAlert.id}`) .set('kbn-xsrf', 'foo') .auth(user.username, user.password) .expect(200); expect(updatedAlert.snooze_schedule.length).to.eql(1); - // Due to latency, test to make sure the returned rRule.dtstart is within 10 seconds of the current time const { rRule, duration } = updatedAlert.snooze_schedule[0]; - expect(Math.abs(Date.parse(rRule.dtstart) - now) < 10000).to.be(true); - expect(Math.abs(duration - (Date.parse(FUTURE_SNOOZE_TIME) - now)) < 10000).to.be( - true - ); + expect(rRule.dtstart).to.eql(NOW); + expect(duration).to.eql(SNOOZE_SCHEDULE.duration); expect(updatedAlert.mute_all).to.eql(false); // Ensure AAD isn't broken await checkAAD({ @@ -344,7 +336,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext } }); - it('should handle snooze rule request appropriately when snoozeEndTime is -1', async () => { + it('should handle snooze rule request appropriately when duration is -1', async () => { const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/actions/connector`) .set('kbn-xsrf', 'foo') @@ -374,9 +366,12 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext .expect(200); objectRemover.add(space.id, createdAlert.id, 'rule', 'alerting'); - const response = await alertUtils - .getSnoozeRequest(createdAlert.id) - .send({ snooze_end_time: -1 }); + const response = await alertUtils.getSnoozeRequest(createdAlert.id).send({ + snooze_schedule: { + ...SNOOZE_SCHEDULE, + duration: -1, + }, + }); switch (scenario.id) { case 'no_kibana_privileges at space1': diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/snooze.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/snooze.ts index 80cfa5a105467..02340f69718d6 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/snooze.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/snooze.ts @@ -17,7 +17,15 @@ import { getEventLog, } from '../../../common/lib'; -const FUTURE_SNOOZE_TIME = '9999-12-31T06:00:00.000Z'; +const NOW = new Date().toISOString(); +const SNOOZE_SCHEDULE = { + duration: 864000000, + rRule: { + dtstart: NOW, + tzid: 'UTC', + count: 1, + }, +}; // eslint-disable-next-line import/no-default-export export default function createSnoozeRuleTests({ getService }: FtrProviderContext) { @@ -66,20 +74,18 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext const response = await alertUtils .getSnoozeRequest(createdRule.id) - .send({ snooze_end_time: FUTURE_SNOOZE_TIME }); + .send({ snooze_schedule: SNOOZE_SCHEDULE }); expect(response.statusCode).to.eql(204); expect(response.body).to.eql(''); - const now = Date.now(); const { body: updatedAlert } = await supertestWithoutAuth .get(`${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${createdRule.id}`) .set('kbn-xsrf', 'foo') .expect(200); expect(updatedAlert.snooze_schedule.length).to.eql(1); - // Due to latency, test to make sure the returned rRule.dtstart is within 10 seconds of the current time const { rRule, duration } = updatedAlert.snooze_schedule[0]; - expect(Math.abs(Date.parse(rRule.dtstart) - now) < 10000).to.be(true); - expect(Math.abs(duration - (Date.parse(FUTURE_SNOOZE_TIME) - now)) < 10000).to.be(true); + expect(rRule.dtstart).to.eql(NOW); + expect(duration).to.eql(SNOOZE_SCHEDULE.duration); expect(updatedAlert.mute_all).to.eql(false); // Ensure AAD isn't broken await checkAAD({ @@ -90,7 +96,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext }); }); - it('should handle snooze rule request appropriately when snoozeEndTime is -1', async () => { + it('should handle snooze rule request appropriately when duration is -1', async () => { const { body: createdAction } = await supertest .post(`${getUrlPrefix(Spaces.space1.id)}/api/actions/connector`) .set('kbn-xsrf', 'foo') @@ -121,9 +127,12 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext .expect(200); objectRemover.add(Spaces.space1.id, createdRule.id, 'rule', 'alerting'); - const response = await alertUtils - .getSnoozeRequest(createdRule.id) - .send({ snooze_end_time: -1 }); + const response = await alertUtils.getSnoozeRequest(createdRule.id).send({ + snooze_schedule: { + ...SNOOZE_SCHEDULE, + duration: -1, + }, + }); expect(response.statusCode).to.eql(204); expect(response.body).to.eql(''); @@ -186,11 +195,19 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext await getRuleEvents(createdRule.id); log.info('start snoozing'); + const now = new Date().toISOString(); const snoozeSeconds = 10; - const snoozeEndDate = new Date(Date.now() + 1000 * snoozeSeconds); - await alertUtils - .getSnoozeRequest(createdRule.id) - .send({ snooze_end_time: snoozeEndDate.toISOString() }); + const snoozeDuration = snoozeSeconds * 1000; + await alertUtils.getSnoozeRequest(createdRule.id).send({ + snooze_schedule: { + duration: snoozeDuration, + rRule: { + dtstart: now, + tzid: 'UTC', + count: 1, + }, + }, + }); // could be an action execution while calling snooze, so set snooze start // to a value that we know it will be in effect (after this call) From 7e44314b4a295e0175959f88672bca164eb78b20 Mon Sep 17 00:00:00 2001 From: Bhavya RM Date: Mon, 20 Jun 2022 14:33:13 -0400 Subject: [PATCH 10/50] Graph a11y tests (#134694) Graph a11y tests --- .../public/components/settings/settings.tsx | 3 +- .../components/settings/url_template_form.tsx | 1 + .../workspace_top_nav_menu.tsx | 2 + x-pack/test/accessibility/apps/graph.ts | 103 ++++++++++++++++++ x-pack/test/accessibility/config.ts | 1 + 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 x-pack/test/accessibility/apps/graph.ts diff --git a/x-pack/plugins/graph/public/components/settings/settings.tsx b/x-pack/plugins/graph/public/components/settings/settings.tsx index d8f18add4f375..6b96800f6d2eb 100644 --- a/x-pack/plugins/graph/public/components/settings/settings.tsx +++ b/x-pack/plugins/graph/public/components/settings/settings.tsx @@ -105,10 +105,11 @@ export function SettingsComponent({ {tabs .filter(({ id }) => id !== 'drillDowns' || workspaceProps.canEditDrillDownUrls) - .map(({ title }, index) => ( + .map(({ title, id }, index) => ( { setActiveTab(index); }} diff --git a/x-pack/plugins/graph/public/components/settings/url_template_form.tsx b/x-pack/plugins/graph/public/components/settings/url_template_form.tsx index e05685be3e660..57e69d0912a7f 100644 --- a/x-pack/plugins/graph/public/components/settings/url_template_form.tsx +++ b/x-pack/plugins/graph/public/components/settings/url_template_form.tsx @@ -264,6 +264,7 @@ export function UrlTemplateForm(props: UrlTemplateFormProps) {
{urlTemplateIconChoices.map((icon) => ( { run: () => { props.setShowInspect((prevShowInspect) => !prevShowInspect); }, + testId: 'graphInspectButton', }); topNavMenu.push({ @@ -164,6 +165,7 @@ export const WorkspaceTopNavMenu = (props: WorkspaceTopNavMenuProps) => { } ); }, + testId: 'graphSettingsButton', }); return ( diff --git a/x-pack/test/accessibility/apps/graph.ts b/x-pack/test/accessibility/apps/graph.ts new file mode 100644 index 0000000000000..d13ed5a58f871 --- /dev/null +++ b/x-pack/test/accessibility/apps/graph.ts @@ -0,0 +1,103 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const a11y = getService('a11y'); + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const browser = getService('browser'); + const PageObjects = getPageObjects(['settings', 'common', 'graph', 'header', 'home']); + + describe('Graph app a11y tests', () => { + before(async () => { + await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + useActualUrl: true, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.home.addSampleDataSet('flights'); + await PageObjects.common.navigateToApp('graph'); + }); + + after(async () => { + await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + useActualUrl: true, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.home.removeSampleDataSet('flights'); + }); + + it('Graph listing page', async function () { + await a11y.testAppSnapshot(); + }); + + it('Edit Graph page', async function () { + await testSubjects.click('graphListingTitleLink-Kibana-Sample-Data---Flights'); + await a11y.testAppSnapshot(); + }); + + it('Syntax options panel', async function () { + await testSubjects.click('switchQueryLanguageButton'); + await a11y.testAppSnapshot(); + await browser.pressKeys(browser.keys.ESCAPE); + }); + + it('Add fields panel', async function () { + await testSubjects.click('graph-add-field-button'); + await retry.waitFor( + 'Add fields panel is visible', + async () => await testSubjects.exists('graph-add-field-button') + ); + await a11y.testAppSnapshot(); + await browser.pressKeys(browser.keys.ESCAPE); + }); + + it('Graph save panel', async function () { + await testSubjects.click('graphSaveButton'); + await a11y.testAppSnapshot(); + await testSubjects.click('saveCancelButton'); + }); + + it('Graph inspect panel', async function () { + await testSubjects.click('graphInspectButton'); + await a11y.testAppSnapshot(); + await testSubjects.click('graphInspectButton'); + }); + + it('Graph settings - advanced settings tab', async function () { + await testSubjects.click('graphSettingsButton'); + await a11y.testAppSnapshot(); + }); + + it('Graph settings - block list tab', async function () { + await testSubjects.click('blocklist'); + await a11y.testAppSnapshot(); + }); + + it('Graph settings - drilldowns tab', async function () { + await testSubjects.click('drillDowns'); + await a11y.testAppSnapshot(); + await browser.pressKeys(browser.keys.ESCAPE); + }); + + // https://github.com/elastic/kibana/issues/134693 + it.skip('Graph settings drilldown tab - add new drilldown', async function () { + await testSubjects.click('graphAddNewTemplate'); + await a11y.testAppSnapshot(); + await testSubjects.click('graphRemoveUrlTemplate'); + await testSubjects.click('euiFlyoutCloseButton'); + await browser.pressKeys(browser.keys.ESCAPE); + }); + + it('Create new graph page', async function () { + await testSubjects.click('graphNewButton'); + await testSubjects.click('confirmModalConfirmButton'); + await a11y.testAppSnapshot(); + }); + }); +} diff --git a/x-pack/test/accessibility/config.ts b/x-pack/test/accessibility/config.ts index 351865d296ec8..739ff5318bc10 100644 --- a/x-pack/test/accessibility/config.ts +++ b/x-pack/test/accessibility/config.ts @@ -36,6 +36,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { require.resolve('./apps/upgrade_assistant'), require.resolve('./apps/canvas'), require.resolve('./apps/maps'), + require.resolve('./apps/graph'), require.resolve('./apps/security_solution'), require.resolve('./apps/ml_embeddables_in_dashboard'), require.resolve('./apps/remote_clusters'), From 52f15aa46d68bfc3e54f004dc51df75a69f22d4e Mon Sep 17 00:00:00 2001 From: Pete Hampton Date: Mon, 20 Jun 2022 19:35:39 +0100 Subject: [PATCH 11/50] Timeline telemetry: Collect less telemetry payloads for 8.3 (#134766) * Update receiver.ts * commit using @elastic.co --- .../plugins/security_solution/server/lib/telemetry/receiver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts index 8712a51b15069..bd98cef5187d4 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts @@ -667,7 +667,7 @@ export class TelemetryReceiver implements ITelemetryReceiver { expand_wildcards: ['open' as const, 'hidden' as const], index: `${this.alertsIndex}*`, ignore_unavailable: true, - size: 100, + size: 30, body: { query: { bool: { From 7cbd0bf15db3428ae6cec781f61eac13dafa490b Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Mon, 20 Jun 2022 20:37:55 +0100 Subject: [PATCH 12/50] [Fleet] Add fetch package unit tests (#134768) * move getPathParts tests into describe block * move archive tests to archive folder * fetchFindLatestPackageOrUndefined tests * fetchFindLatestPackageOrThrow test * move generic tests to util fn * fix spelling --- .../server/services/epm/archive/index.test.ts | 89 ++++++++++ .../services/epm/registry/index.test.ts | 166 ++++++++++-------- 2 files changed, 184 insertions(+), 71 deletions(-) create mode 100644 x-pack/plugins/fleet/server/services/epm/archive/index.test.ts diff --git a/x-pack/plugins/fleet/server/services/epm/archive/index.test.ts b/x-pack/plugins/fleet/server/services/epm/archive/index.test.ts new file mode 100644 index 0000000000000..ab2bb44621b0e --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/archive/index.test.ts @@ -0,0 +1,89 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { AssetParts } from '../../../types'; + +import { getBufferExtractor, getPathParts, untarBuffer, unzipBuffer } from '.'; + +describe('getPathParts', () => { + const testPaths = [ + { + path: 'foo-1.1.0/service/type/file.yml', + assetParts: { + dataset: undefined, + file: 'file.yml', + path: 'foo-1.1.0/service/type/file.yml', + pkgkey: 'foo-1.1.0', + service: 'service', + type: 'type', + }, + }, + { + path: 'iptables-1.0.4/kibana/visualization/683402b0-1f29-11e9-8ec4-cf5d91a864b3-ecs.json', + assetParts: { + dataset: undefined, + file: '683402b0-1f29-11e9-8ec4-cf5d91a864b3-ecs.json', + path: 'iptables-1.0.4/kibana/visualization/683402b0-1f29-11e9-8ec4-cf5d91a864b3-ecs.json', + pkgkey: 'iptables-1.0.4', + service: 'kibana', + type: 'visualization', + }, + }, + { + path: 'coredns-1.0.1/data_stream/stats/fields/coredns.stats.yml', + assetParts: { + dataset: 'stats', + file: 'coredns.stats.yml', + path: 'coredns-1.0.1/data_stream/stats/fields/coredns.stats.yml', + pkgkey: 'coredns-1.0.1', + service: '', + type: 'fields', + }, + }, + ]; + test('testPathParts', () => { + for (const value of testPaths) { + expect(getPathParts(value.path)).toStrictEqual(value.assetParts as AssetParts); + } + }); +}); + +describe('getBufferExtractor called with { archivePath }', () => { + it('returns unzipBuffer if `archivePath` ends in .zip', () => { + const extractor = getBufferExtractor({ archivePath: '.zip' }); + expect(extractor).toBe(unzipBuffer); + }); + + it('returns untarBuffer if `archivePath` ends in .gz', () => { + const extractor = getBufferExtractor({ archivePath: '.gz' }); + expect(extractor).toBe(untarBuffer); + const extractor2 = getBufferExtractor({ archivePath: '.tar.gz' }); + expect(extractor2).toBe(untarBuffer); + }); + + it('returns `undefined` if `archivePath` ends in anything else', () => { + const extractor = getBufferExtractor({ archivePath: '.xyz' }); + expect(extractor).toEqual(undefined); + }); +}); + +describe('getBufferExtractor called with { contentType }', () => { + it('returns unzipBuffer if `contentType` is `application/zip`', () => { + const extractor = getBufferExtractor({ contentType: 'application/zip' }); + expect(extractor).toBe(unzipBuffer); + }); + + it('returns untarBuffer if `contentType` is `application/gzip`', () => { + const extractor = getBufferExtractor({ contentType: 'application/gzip' }); + expect(extractor).toBe(untarBuffer); + }); + + it('returns `undefined` if `contentType` ends in anything else', () => { + const extractor = getBufferExtractor({ contentType: '.xyz' }); + expect(extractor).toEqual(undefined); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/registry/index.test.ts b/x-pack/plugins/fleet/server/services/epm/registry/index.test.ts index 62ea278734795..e9427732d4aef 100644 --- a/x-pack/plugins/fleet/server/services/epm/registry/index.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/registry/index.test.ts @@ -5,54 +5,35 @@ * 2.0. */ -import type { AssetParts } from '../../../types'; -import { getBufferExtractor, getPathParts, untarBuffer, unzipBuffer } from '../archive'; - -import { splitPkgKey } from '.'; - -const testPaths = [ - { - path: 'foo-1.1.0/service/type/file.yml', - assetParts: { - dataset: undefined, - file: 'file.yml', - path: 'foo-1.1.0/service/type/file.yml', - pkgkey: 'foo-1.1.0', - service: 'service', - type: 'type', - }, - }, - { - path: 'iptables-1.0.4/kibana/visualization/683402b0-1f29-11e9-8ec4-cf5d91a864b3-ecs.json', - assetParts: { - dataset: undefined, - file: '683402b0-1f29-11e9-8ec4-cf5d91a864b3-ecs.json', - path: 'iptables-1.0.4/kibana/visualization/683402b0-1f29-11e9-8ec4-cf5d91a864b3-ecs.json', - pkgkey: 'iptables-1.0.4', - service: 'kibana', - type: 'visualization', - }, - }, - { - path: 'coredns-1.0.1/data_stream/stats/fields/coredns.stats.yml', - assetParts: { - dataset: 'stats', - file: 'coredns.stats.yml', - path: 'coredns-1.0.1/data_stream/stats/fields/coredns.stats.yml', - pkgkey: 'coredns-1.0.1', - service: '', - type: 'fields', - }, +import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; + +import { PackageNotFoundError } from '../../../errors'; + +import { splitPkgKey, fetchFindLatestPackageOrUndefined, fetchFindLatestPackageOrThrow } from '.'; + +const mockLoggerFactory = loggingSystemMock.create(); +const mockLogger = mockLoggerFactory.get('mock logger'); + +const mockGetBundledPackageByName = jest.fn(); +const mockFetchUrl = jest.fn(); +jest.mock('../..', () => ({ + appContextService: { + getLogger: () => mockLogger, + getKibanaBranch: () => 'main', + getKibanaVersion: () => '99.0.0', + getConfig: () => ({}), }, -]; +})); -test('testPathParts', () => { - for (const value of testPaths) { - expect(getPathParts(value.path)).toStrictEqual(value.assetParts as AssetParts); - } -}); +jest.mock('./requests', () => ({ + fetchUrl: (url: string) => mockFetchUrl(url), +})); -describe('splitPkgKey tests', () => { +jest.mock('../packages/bundled_packages', () => ({ + getBundledPackageByName: (name: string) => mockGetBundledPackageByName(name), +})); + +describe('splitPkgKey', () => { it('throws an error if there is nothing before the delimiter', () => { expect(() => { splitPkgKey('-0.0.1-dev1'); @@ -84,38 +65,81 @@ describe('splitPkgKey tests', () => { }); }); -describe('getBufferExtractor called with { archivePath }', () => { - it('returns unzipBuffer if `archivePath` ends in .zip', () => { - const extractor = getBufferExtractor({ archivePath: '.zip' }); - expect(extractor).toBe(unzipBuffer); +describe('fetch package', () => { + afterEach(() => { + mockFetchUrl.mockReset(); + mockGetBundledPackageByName.mockReset(); }); - it('returns untarBuffer if `archivePath` ends in .gz', () => { - const extractor = getBufferExtractor({ archivePath: '.gz' }); - expect(extractor).toBe(untarBuffer); - const extractor2 = getBufferExtractor({ archivePath: '.tar.gz' }); - expect(extractor2).toBe(untarBuffer); - }); + type FetchFn = typeof fetchFindLatestPackageOrThrow | typeof fetchFindLatestPackageOrUndefined; + const performGenericFetchTests = (fetchMethodToTest: FetchFn) => { + it('Should return registry package if bundled package is older version', async () => { + const bundledPackage = { name: 'testpkg', version: '1.0.0' }; + const registryPackage = { name: 'testpkg', version: '1.0.1' }; - it('returns `undefined` if `archivePath` ends in anything else', () => { - const extractor = getBufferExtractor({ archivePath: '.xyz' }); - expect(extractor).toEqual(undefined); - }); -}); + mockFetchUrl.mockResolvedValue(JSON.stringify([registryPackage])); -describe('getBufferExtractor called with { contentType }', () => { - it('returns unzipBuffer if `contentType` is `application/zip`', () => { - const extractor = getBufferExtractor({ contentType: 'application/zip' }); - expect(extractor).toBe(unzipBuffer); - }); + mockGetBundledPackageByName.mockResolvedValue(bundledPackage); + const result = await fetchMethodToTest('testpkg'); + expect(result).toEqual(registryPackage); + }); + + it('Should return bundled package if bundled package is newer version', async () => { + const bundledPackage = { name: 'testpkg', version: '1.0.1' }; + const registryPackage = { name: 'testpkg', version: '1.0.0' }; - it('returns untarBuffer if `contentType` is `application/gzip`', () => { - const extractor = getBufferExtractor({ contentType: 'application/gzip' }); - expect(extractor).toBe(untarBuffer); + mockFetchUrl.mockResolvedValue(JSON.stringify([registryPackage])); + + mockGetBundledPackageByName.mockResolvedValue(bundledPackage); + const result = await fetchMethodToTest('testpkg'); + expect(result).toEqual(bundledPackage); + }); + it('Should return bundled package if there is no registry package', async () => { + const bundledPackage = { name: 'testpkg', version: '1.0.1' }; + + mockFetchUrl.mockResolvedValue(JSON.stringify([])); + + mockGetBundledPackageByName.mockResolvedValue(bundledPackage); + const result = await fetchMethodToTest('testpkg'); + expect(result).toEqual(bundledPackage); + }); + + it('Should fall back to bundled package if there is an error getting from the registry', async () => { + const bundledPackage = { name: 'testpkg', version: '1.0.1' }; + + mockFetchUrl.mockRejectedValue(new Error('Registry error')); + + mockGetBundledPackageByName.mockResolvedValue(bundledPackage); + const result = await fetchMethodToTest('testpkg'); + expect(result).toEqual(bundledPackage); + }); + }; + + describe('fetchFindLatestPackageOrUndefined', () => { + performGenericFetchTests(fetchFindLatestPackageOrUndefined); + it('Should return undefined if there is a registry error and no bundled package', async () => { + const bundledPackage = null; + + mockFetchUrl.mockRejectedValue(new Error('Registry error')); + + mockGetBundledPackageByName.mockResolvedValue(bundledPackage); + const result = await fetchFindLatestPackageOrUndefined('testpkg'); + expect(result).toEqual(undefined); + }); }); - it('returns `undefined` if `contentType` ends in anything else', () => { - const extractor = getBufferExtractor({ contentType: '.xyz' }); - expect(extractor).toEqual(undefined); + describe('fetchFindLatestPackageOrThrow', () => { + performGenericFetchTests(fetchFindLatestPackageOrThrow); + it('Should return undefined if there is a registry error and no bundled package', async () => { + const bundledPackage = null; + + mockFetchUrl.mockRejectedValue(new Error('Registry error')); + + mockGetBundledPackageByName.mockResolvedValue(bundledPackage); + + expect(() => fetchFindLatestPackageOrThrow('testpkg')).rejects.toBeInstanceOf( + PackageNotFoundError + ); + }); }); }); From b7c8ff5d7bd603167b625fc0ceb0f538ce4d62ab Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 20 Jun 2022 13:52:28 -0600 Subject: [PATCH 13/50] [maps] fix sort not applied to vector tile search request (#134607) * [maps] fix sort not applied to vector tile search request * clean up * clean comment * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' * fix jest, integration, and functional test Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../plugins/maps/common/mvt_request_body.ts | 40 +------------- .../es_search_source/es_search_source.test.ts | 2 +- .../es_search_source/es_search_source.tsx | 55 +++++++++++-------- .../components/get_tile_request.test.ts | 22 ++++++-- .../api_integration/apis/maps/get_tile.js | 6 +- .../apps/maps/group4/mvt_scaling.js | 2 +- 6 files changed, 57 insertions(+), 70 deletions(-) diff --git a/x-pack/plugins/maps/common/mvt_request_body.ts b/x-pack/plugins/maps/common/mvt_request_body.ts index c2d367f89fa8a..2e7ade7f594ed 100644 --- a/x-pack/plugins/maps/common/mvt_request_body.ts +++ b/x-pack/plugins/maps/common/mvt_request_body.ts @@ -82,47 +82,11 @@ export function getHitsTileRequest({ exact_bounds: true, extent: 4096, // full resolution, query: requestBody.query, - fields: mergeFields( - [ - requestBody.docvalue_fields as Field[] | undefined, - requestBody.stored_fields as Field[] | undefined, - ], - [geometryFieldName] - ), + fields: requestBody.fields ? requestBody.fields : [], runtime_mappings: requestBody.runtime_mappings, + sort: requestBody.sort ? requestBody.sort : [], track_total_hits: typeof requestBody.size === 'number' ? requestBody.size + 1 : false, with_labels: hasLabels, }, }; } - -// can not use "import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey" -// SearchRequest is incorrectly typed and does not support Field as object -// https://github.com/elastic/elasticsearch-js/issues/1615 -type Field = - | string - | { - field: string; - format: string; - }; - -function mergeFields(fieldsList: Array, excludeNames: string[]): Field[] { - const fieldNames: string[] = []; - const mergedFields: Field[] = []; - - fieldsList.forEach((fields) => { - if (!fields) { - return; - } - - fields.forEach((field) => { - const fieldName = typeof field === 'string' ? field : field.field; - if (!excludeNames.includes(fieldName) && !fieldNames.includes(fieldName)) { - fieldNames.push(fieldName); - mergedFields.push(field); - } - }); - }); - - return mergedFields; -} diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts index 24470ae0fade7..e374989e07892 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts @@ -116,7 +116,7 @@ describe('ESSearchSource', () => { }); const tileUrl = await esSearchSource.getTileUrl(searchFilters, '1234', false); expect(tileUrl).toBe( - `rootdir/api/maps/mvt/getTile/{z}/{x}/{y}.pbf?geometryFieldName=bar&index=foobar-title-*&hasLabels=false&requestBody=(foobar%3AES_DSL_PLACEHOLDER%2Cparams%3A('0'%3A('0'%3Aindex%2C'1'%3A(fields%3A()%2Ctitle%3A'foobar-title-*'))%2C'1'%3A('0'%3Asize%2C'1'%3A1000)%2C'2'%3A('0'%3Afilter%2C'1'%3A!())%2C'3'%3A('0'%3Aquery)%2C'4'%3A('0'%3Aindex%2C'1'%3A(fields%3A()%2Ctitle%3A'foobar-title-*'))%2C'5'%3A('0'%3Aquery%2C'1'%3A(language%3AKQL%2Cquery%3A'tooltipField%3A%20foobar'))%2C'6'%3A('0'%3AfieldsFromSource%2C'1'%3A!(tooltipField%2CstyleField))%2C'7'%3A('0'%3Asource%2C'1'%3A!(tooltipField%2CstyleField))))&token=1234` + `rootdir/api/maps/mvt/getTile/{z}/{x}/{y}.pbf?geometryFieldName=bar&index=foobar-title-*&hasLabels=false&requestBody=(foobar%3AES_DSL_PLACEHOLDER%2Cparams%3A('0'%3A('0'%3Aindex%2C'1'%3A(fields%3A()%2Ctitle%3A'foobar-title-*'))%2C'1'%3A('0'%3Asize%2C'1'%3A1000)%2C'2'%3A('0'%3Afilter%2C'1'%3A!())%2C'3'%3A('0'%3Aquery)%2C'4'%3A('0'%3Aindex%2C'1'%3A(fields%3A()%2Ctitle%3A'foobar-title-*'))%2C'5'%3A('0'%3Aquery%2C'1'%3A(language%3AKQL%2Cquery%3A'tooltipField%3A%20foobar'))%2C'6'%3A('0'%3AfieldsFromSource%2C'1'%3A!(_id))%2C'7'%3A('0'%3Asource%2C'1'%3A!f)%2C'8'%3A('0'%3Afields%2C'1'%3A!(tooltipField%2CstyleField))))&token=1234` ); }); }); diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx index 83118410bac41..cd69e6ec6514b 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx @@ -827,41 +827,50 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource const indexPattern = await this.getIndexPattern(); const indexSettings = await loadIndexSettings(indexPattern.title); - const fieldNames = searchFilters.fieldNames.filter( - (fieldName) => fieldName !== this._descriptor.geoField - ); - const { docValueFields, sourceOnlyFields } = getDocValueAndSourceFields( - indexPattern, - fieldNames, - 'epoch_millis' - ); - - const initialSearchContext = { docvalue_fields: docValueFields }; // Request fields in docvalue_fields insted of _source - - const searchSource = await this.makeSearchSource( - searchFilters, - indexSettings.maxResultWindow, - initialSearchContext - ); - searchSource.setField('fieldsFromSource', searchFilters.fieldNames); // Setting "fields" filters out unused scripted fields - if (sourceOnlyFields.length === 0) { - searchSource.setField('source', false); // do not need anything from _source - } else { - searchSource.setField('source', sourceOnlyFields); - } + const searchSource = await this.makeSearchSource(searchFilters, indexSettings.maxResultWindow); + // searchSource calls dataView.getComputedFields to seed docvalueFields + // dataView.getComputedFields adds each date field in the dataView to docvalueFields to ensure standardized date format across kibana + // we don't need these as they request unneeded fields and bloat responses + // setting fieldsFromSource notifies searchSource to filterout unused docvalueFields + // '_id' is used since the value of 'fieldsFromSource' is irreverent because '_source: false'. + searchSource.setField('fieldsFromSource', ['_id']); + searchSource.setField('source', false); if (this._hasSort()) { searchSource.setField('sort', this._buildEsSort()); } + // use fields API + searchSource.setField( + 'fields', + searchFilters.fieldNames + .filter((fieldName) => { + return fieldName !== this._descriptor.geoField; + }) + .map((fieldName) => { + const field = indexPattern.fields.getByName(fieldName); + return field && field.type === 'date' + ? { + field: fieldName, + format: 'epoch_millis', + } + : fieldName; + }) + ); + const mvtUrlServicePath = getHttp().basePath.prepend( `/${GIS_API_PATH}/${MVT_GETTILE_API_PATH}/{z}/{x}/{y}.pbf` ); + const requestBody = searchSource.getSearchRequestBody(); + // Remove keys not supported by elasticsearch vector tile search API + delete requestBody.script_fields; + delete requestBody.stored_fields; + return `${mvtUrlServicePath}\ ?geometryFieldName=${this._descriptor.geoField}\ &index=${indexPattern.title}\ &hasLabels=${hasLabels}\ -&requestBody=${encodeMvtResponseBody(searchSource.getSearchRequestBody())}\ +&requestBody=${encodeMvtResponseBody(requestBody)}\ &token=${refreshToken}`; } diff --git a/x-pack/plugins/maps/public/inspector/vector_tile_adapter/components/get_tile_request.test.ts b/x-pack/plugins/maps/public/inspector/vector_tile_adapter/components/get_tile_request.test.ts index 4534c8047409d..d43366031eea3 100644 --- a/x-pack/plugins/maps/public/inspector/vector_tile_adapter/components/get_tile_request.test.ts +++ b/x-pack/plugins/maps/public/inspector/vector_tile_adapter/components/get_tile_request.test.ts @@ -80,7 +80,7 @@ test('Should return elasticsearch vector tile request for hits tiles', () => { expect( getTileRequest({ layerId: '1', - tileUrl: `http://localhost:5601/pof/api/maps/mvt/getTile/{z}/{x}/{y}.pbf?geometryFieldName=geo.coordinates&hasLabels=true&index=kibana_sample_data_logs&requestBody=(_source%3A!f%2Cdocvalue_fields%3A!()%2Cquery%3A(bool%3A(filter%3A!((range%3A(timestamp%3A(format%3Astrict_date_optional_time%2Cgte%3A%272022-04-22T16%3A46%3A00.744Z%27%2Clte%3A%272022-04-29T16%3A46%3A05.345Z%27))))%2Cmust%3A!()%2Cmust_not%3A!()%2Cshould%3A!()))%2Cruntime_mappings%3A(hour_of_day%3A(script%3A(source%3A%27emit(doc%5B!%27timestamp!%27%5D.value.getHour())%3B%27)%2Ctype%3Along))%2Cscript_fields%3A()%2Csize%3A10000%2Cstored_fields%3A!(geo.coordinates))&token=415049b6-bb0a-444a-a7b9-89717db5183c`, + tileUrl: `http://localhost:5601/zuv/api/maps/mvt/getTile/4/2/6.pbf?geometryFieldName=geo.coordinates&index=kibana_sample_data_logs&hasLabels=true&requestBody=(_source%3A!f%2Cfields%3A!((field%3A%27%40timestamp%27%2Cformat%3Aepoch_millis)%2Cbytes)%2Cquery%3A(bool%3A(filter%3A!((range%3A(timestamp%3A(format%3Astrict_date_optional_time%2Cgte%3A%272022-06-15T20%3A00%3A00.000Z%27%2Clte%3A%272022-06-16T20%3A48%3A02.517Z%27))))%2Cmust%3A!()%2Cmust_not%3A!()%2Cshould%3A!()))%2Cruntime_mappings%3A(hour_of_day%3A(script%3A(source%3A%27emit(doc%5B!%27timestamp!%27%5D.value.getHour())%3B%27)%2Ctype%3Along))%2Csize%3A10000%2Csort%3A!((%27%40timestamp%27%3A(order%3Adesc%2Cunmapped_type%3Aboolean))))&token=7afe7c2d-c96b-4bdb-9b5e-819aceac80a1`, x: 0, y: 0, z: 2, @@ -98,8 +98,8 @@ test('Should return elasticsearch vector tile request for hits tiles', () => { range: { timestamp: { format: 'strict_date_optional_time', - gte: '2022-04-22T16:46:00.744Z', - lte: '2022-04-29T16:46:05.345Z', + gte: '2022-06-15T20:00:00.000Z', + lte: '2022-06-16T20:48:02.517Z', }, }, }, @@ -109,7 +109,13 @@ test('Should return elasticsearch vector tile request for hits tiles', () => { should: [], }, }, - fields: [], + fields: [ + { + field: '@timestamp', + format: 'epoch_millis', + }, + 'bytes', + ], runtime_mappings: { hour_of_day: { script: { @@ -118,6 +124,14 @@ test('Should return elasticsearch vector tile request for hits tiles', () => { type: 'long', }, }, + sort: [ + { + '@timestamp': { + order: 'desc', + unmapped_type: 'boolean', + }, + }, + ], track_total_hits: 10001, with_labels: true, }, diff --git a/x-pack/test/api_integration/apis/maps/get_tile.js b/x-pack/test/api_integration/apis/maps/get_tile.js index 6803b5e404ab0..344256d30413a 100644 --- a/x-pack/test/api_integration/apis/maps/get_tile.js +++ b/x-pack/test/api_integration/apis/maps/get_tile.js @@ -29,7 +29,7 @@ export default function ({ getService }) { ?geometryFieldName=geo.coordinates\ &hasLabels=false\ &index=logstash-*\ -&requestBody=(_source:!f,docvalue_fields:!(bytes,geo.coordinates,machine.os.raw,(field:'@timestamp',format:epoch_millis)),query:(bool:(filter:!((match_all:()),(range:(%27@timestamp%27:(format:strict_date_optional_time,gte:%272015-09-20T00:00:00.000Z%27,lte:%272015-09-20T01:00:00.000Z%27)))),must:!(),must_not:!(),should:!())),runtime_mappings:(),script_fields:(),size:10000,stored_fields:!(bytes,geo.coordinates,machine.os.raw,'@timestamp'))` +&requestBody=(_source:!f,fields:!(bytes,machine.os.raw,(field:'@timestamp',format:epoch_millis)),query:(bool:(filter:!((match_all:()),(range:(%27@timestamp%27:(format:strict_date_optional_time,gte:%272015-09-20T00:00:00.000Z%27,lte:%272015-09-20T01:00:00.000Z%27)))),must:!(),must_not:!(),should:!())),runtime_mappings:(),size:10000)` ) .set('kbn-xsrf', 'kibana') .responseType('blob') @@ -93,7 +93,7 @@ export default function ({ getService }) { ?geometryFieldName=geo.coordinates\ &hasLabels=true\ &index=logstash-*\ -&requestBody=(_source:!f,docvalue_fields:!(bytes,geo.coordinates,machine.os.raw,(field:'@timestamp',format:epoch_millis)),query:(bool:(filter:!((match_all:()),(range:(%27@timestamp%27:(format:strict_date_optional_time,gte:%272015-09-20T00:00:00.000Z%27,lte:%272015-09-20T01:00:00.000Z%27)))),must:!(),must_not:!(),should:!())),runtime_mappings:(),script_fields:(),size:10000,stored_fields:!(bytes,geo.coordinates,machine.os.raw,'@timestamp'))` +&requestBody=(_source:!f,fields:!(bytes,machine.os.raw,(field:'@timestamp',format:epoch_millis)),query:(bool:(filter:!((match_all:()),(range:(%27@timestamp%27:(format:strict_date_optional_time,gte:%272015-09-20T00:00:00.000Z%27,lte:%272015-09-20T01:00:00.000Z%27)))),must:!(),must_not:!(),should:!())),runtime_mappings:(),size:10000)` ) .set('kbn-xsrf', 'kibana') .responseType('blob') @@ -138,7 +138,7 @@ export default function ({ getService }) { ?geometryFieldName=geo.coordinates\ &hasLabels=false\ &index=notRealIndex\ -&requestBody=(_source:!f,docvalue_fields:!(bytes,geo.coordinates,machine.os.raw,(field:'@timestamp',format:epoch_millis)),query:(bool:(filter:!((match_all:()),(range:(%27@timestamp%27:(format:strict_date_optional_time,gte:%272015-09-20T00:00:00.000Z%27,lte:%272015-09-20T01:00:00.000Z%27)))),must:!(),must_not:!(),should:!())),runtime_mappings:(),script_fields:(),size:10000,stored_fields:!(bytes,geo.coordinates,machine.os.raw,'@timestamp'))` +&requestBody=(_source:!f,fields:!(bytes,machine.os.raw,(field:'@timestamp',format:epoch_millis)),query:(bool:(filter:!((match_all:()),(range:(%27@timestamp%27:(format:strict_date_optional_time,gte:%272015-09-20T00:00:00.000Z%27,lte:%272015-09-20T01:00:00.000Z%27)))),must:!(),must_not:!(),should:!())),runtime_mappings:(),size:10000)` ) .set('kbn-xsrf', 'kibana') .responseType('blob') diff --git a/x-pack/test/functional/apps/maps/group4/mvt_scaling.js b/x-pack/test/functional/apps/maps/group4/mvt_scaling.js index 5f740e9137cdb..9bc23c8488ab9 100644 --- a/x-pack/test/functional/apps/maps/group4/mvt_scaling.js +++ b/x-pack/test/functional/apps/maps/group4/mvt_scaling.js @@ -53,7 +53,7 @@ export default function ({ getPageObjects, getService }) { hasLabels: 'false', index: 'geo_shapes*', requestBody: - '(_source:!f,docvalue_fields:!(prop1),query:(bool:(filter:!(),must:!(),must_not:!(),should:!())),runtime_mappings:(),script_fields:(),size:10001,stored_fields:!(geometry,prop1))', + '(_source:!f,fields:!(prop1),query:(bool:(filter:!(),must:!(),must_not:!(),should:!())),runtime_mappings:(),size:10001)', }); }); From 021b6eab8346a95bede2fd371e9b0ff53764d440 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Mon, 20 Jun 2022 15:54:41 -0400 Subject: [PATCH 14/50] [Security Solution][Endpoint] new dev script to listen for pending actions and send responses for them to ES (#134712) * New script endpoint_action_responder that will (currently) continuously pull for pending actions and respond to them (by sending to ES both the Fleet action response and Endpoint action response) * common services for creating security user and stack services --- .../endpoint/action_responder/constants.ts | 19 +++ .../endpoint/action_responder/index.ts | 67 ++++++++ .../action_responder/run_in_auto_mode.ts | 144 ++++++++++++++++++ .../endpoint/action_responder/utils.ts | 116 ++++++++++++++ .../endpoint/common/security_user_services.ts | 35 +++++ .../scripts/endpoint/common/stack_services.ts | 118 ++++++++++++++ .../endpoint/endpoint_action_responder.js | 9 ++ 7 files changed, 508 insertions(+) create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/action_responder/constants.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/action_responder/index.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/action_responder/run_in_auto_mode.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/action_responder/utils.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/common/security_user_services.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/endpoint_action_responder.js diff --git a/x-pack/plugins/security_solution/scripts/endpoint/action_responder/constants.ts b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/constants.ts new file mode 100644 index 0000000000000..23c3292da66e7 --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/constants.ts @@ -0,0 +1,19 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const HORIZONTAL_LINE = '-'.repeat(80); + +export const SUPPORTED_TOKENS = `The following tokens can be used in the Action request 'comment' to drive + the type of response that is sent: + Token Description + --------------------------- ------------------------------------------------------- + RESPOND.STATE=SUCCESS Will ensure the Endpoint Action response is success + RESPOND.STATE=FAILURE Will ensure the Endpoint Action response is a failure + RESPOND.FLEET.STATE=SUCCESS Will ensure the Fleet Action response is success + RESPOND.FLEET.STATE=FAILURE Will ensure the Fleet Action response is a failure + +`; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/action_responder/index.ts b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/index.ts new file mode 100644 index 0000000000000..b0683bfbad868 --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/index.ts @@ -0,0 +1,67 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { run, RunContext } from '@kbn/dev-cli-runner'; +import { HORIZONTAL_LINE, SUPPORTED_TOKENS } from './constants'; +import { runInAutoMode } from './run_in_auto_mode'; + +export const cli = () => { + run( + async (context: RunContext) => { + context.log.write(` +${HORIZONTAL_LINE} + Endpoint Action Responder +${HORIZONTAL_LINE} +`); + if (context.flags.mode === 'auto') { + return runInAutoMode(context); + } + + context.log.warning(`exiting... Nothing to do. use '--help' to see list of options`); + + context.log.write(` +${HORIZONTAL_LINE} +`); + }, + + { + description: `Respond to pending Endpoint actions. + ${SUPPORTED_TOKENS}`, + flags: { + string: ['mode', 'kibana', 'elastic', 'username', 'password', 'delay'], + boolean: ['asSuperuser'], + default: { + mode: 'auto', + kibana: 'http://localhost:5601', + elastic: 'http://localhost:9200', + username: 'elastic', + password: 'changeme', + asSuperuser: false, + delay: '', + }, + help: ` + --mode The mode for running the tool. (Default: 'auto'). + Value values are: + auto : tool will continue to run and checking for pending + actions periodically. + --username User name to be used for auth against elasticsearch and + kibana (Default: elastic). + **IMPORTANT:** This username's roles MUST have 'superuser'] + and 'kibana_system' roles + --password User name Password (Default: changeme) + --asSuperuser If defined, then a Security super user will be created using the + the credentials defined via 'username' and 'password' options. This + new user will then be used to run this utility. + --delay The delay (in milliseconds) that should be applied before responding + to an action. (Default: 40000 (40s)) + --kibana The url to Kibana (Default: http://localhost:5601) + --elastic The url to Elasticsearch (Default: http:localholst:9200) + `, + }, + } + ); +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/action_responder/run_in_auto_mode.ts b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/run_in_auto_mode.ts new file mode 100644 index 0000000000000..a765eba2d062d --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/run_in_auto_mode.ts @@ -0,0 +1,144 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RunContext } from '@kbn/dev-cli-runner'; +import { set } from 'lodash'; +import { SUPPORTED_TOKENS } from './constants'; +import { ActionDetails } from '../../../common/endpoint/types'; +import { createRuntimeServices, RuntimeServices } from '../common/stack_services'; + +import { + fetchEndpointActionList, + sendEndpointActionResponse, + sendFleetActionResponse, + sleep, +} from './utils'; + +const ACTION_RESPONSE_DELAY = 40_000; + +export const runInAutoMode = async ({ + log, + flags: { username, password, asSuperuser, kibana, elastic, delay: _delay }, +}: RunContext) => { + const runtimeServices = await createRuntimeServices({ + log, + password: password as string, + username: username as string, + asSuperuser: asSuperuser as boolean, + elasticsearchUrl: elastic as string, + kibanaUrl: kibana as string, + }); + + log.write(` ${SUPPORTED_TOKENS}`); + + const delay = Number(_delay) || ACTION_RESPONSE_DELAY; + + do { + await checkPendingActionsAndRespond(runtimeServices, { delay }); + await sleep(5_000); + } while (true); +}; + +const checkPendingActionsAndRespond = async ( + { kbnClient, esClient, log }: RuntimeServices, + { delay = ACTION_RESPONSE_DELAY }: { delay?: number } = {} +) => { + let hasMore = true; + let nextPage = 1; + + try { + while (hasMore) { + const { data: actions } = await fetchEndpointActionList(kbnClient, { + page: nextPage++, + pageSize: 100, + }); + + if (actions.length === 0) { + hasMore = false; + } + + for (const action of actions) { + if (action.isCompleted === false) { + if (Date.now() - new Date(action.startedAt).getTime() >= delay) { + log.info( + `[${new Date().toLocaleTimeString()}]: Responding to [${ + action.command + }] action [id: ${action.id}] agent: [${action.agents.join(', ')}]` + ); + + const tokens = parseCommentTokens(getActionComment(action)); + + log.verbose('tokens found in action:', tokens); + + const fleetResponse = await sendFleetActionResponse(esClient, action, { + // If an Endpoint state token was found, then force the Fleet response to `success` + // so that we can actually generate an endpoint response below. + state: tokens.state ? 'success' : tokens.fleet.state, + }); + + // If not a fleet response error, then also sent the Endpoint Response + if (!fleetResponse.error) { + await sendEndpointActionResponse(esClient, action, { state: tokens.state }); + } + } + } + } + } + } catch (e) { + log.error(`${e.message}. Run with '--verbose' option to see more`); + log.verbose(e); + } +}; + +interface CommentTokens { + state: 'success' | 'failure' | undefined; + fleet: { + state: 'success' | 'failure' | undefined; + }; +} + +const parseCommentTokens = (comment: string): CommentTokens => { + const response: CommentTokens = { + state: undefined, + fleet: { + state: undefined, + }, + }; + + if (comment) { + const findTokensRegExp = /(respond\.\S*=\S*)/gi; + let matches; + + while ((matches = findTokensRegExp.exec(comment)) !== null) { + const [key, value] = matches[0] + .toLowerCase() + .split('=') + .map((s) => s.trim()); + + set(response, key.split('.').slice(1), value); + } + } + return response; +}; + +const getActionComment = (action: ActionDetails): string => { + const actionRequest = action.logEntries.find( + (entry) => entry.type === 'fleetAction' || entry.type === 'action' + ); + + if (actionRequest) { + if (actionRequest.type === 'fleetAction') { + return actionRequest.item.data.data.comment ?? ''; + } + + if (actionRequest.type === 'action') { + return actionRequest.item.data.EndpointActions.data.comment ?? ''; + } + } + + return ''; +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/action_responder/utils.ts b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/utils.ts new file mode 100644 index 0000000000000..4cdf94436d9e5 --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/action_responder/utils.ts @@ -0,0 +1,116 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { KbnClient } from '@kbn/test'; +import { Client } from '@elastic/elasticsearch'; +import { AGENT_ACTIONS_RESULTS_INDEX } from '@kbn/fleet-plugin/common'; +import { FleetActionGenerator } from '../../../common/endpoint/data_generators/fleet_action_generator'; +import { + ENDPOINT_ACTION_RESPONSES_INDEX, + ENDPOINTS_ACTION_LIST_ROUTE, +} from '../../../common/endpoint/constants'; +import { + ActionDetails, + ActionListApiResponse, + EndpointActionData, + EndpointActionResponse, + LogsEndpointActionResponse, +} from '../../../common/endpoint/types'; +import { EndpointActionListRequestQuery } from '../../../common/endpoint/schema/actions'; +import { EndpointActionGenerator } from '../../../common/endpoint/data_generators/endpoint_action_generator'; + +const ES_INDEX_OPTIONS = { headers: { 'X-elastic-product-origin': 'fleet' } }; + +export const fleetActionGenerator = new FleetActionGenerator(); + +export const endpointActionGenerator = new EndpointActionGenerator(); + +export const sleep = (ms: number = 1000) => new Promise((r) => setTimeout(r, ms)); + +export const fetchEndpointActionList = async ( + kbn: KbnClient, + options: EndpointActionListRequestQuery = {} +): Promise => { + return ( + await kbn.request({ + method: 'GET', + path: ENDPOINTS_ACTION_LIST_ROUTE, + query: options, + }) + ).data; +}; + +export const sendFleetActionResponse = async ( + esClient: Client, + action: ActionDetails, + { state }: { state?: 'success' | 'failure' } = {} +): Promise => { + const fleetResponse = fleetActionGenerator.generateResponse({ + action_id: action.id, + agent_id: action.agents[0], + action_response: { + endpoint: { + ack: true, + }, + }, + }); + + // 20% of the time we generate an error + if (state === 'failure' || (!state && fleetActionGenerator.randomFloat() < 0.2)) { + fleetResponse.action_response = {}; + fleetResponse.error = 'Agent failed to deliver message to endpoint due to unknown error'; + } else { + // show it as success (generator currently always generates a `error`, so delete it) + delete fleetResponse.error; + } + + await esClient.index( + { + index: AGENT_ACTIONS_RESULTS_INDEX, + body: fleetResponse, + refresh: 'wait_for', + }, + ES_INDEX_OPTIONS + ); + + return fleetResponse; +}; + +export const sendEndpointActionResponse = async ( + esClient: Client, + action: ActionDetails, + { state }: { state?: 'success' | 'failure' } = {} +): Promise => { + // FIXME:PT Generate command specific responses + + const endpointResponse = endpointActionGenerator.generateResponse({ + agent: { id: action.agents[0] }, + EndpointActions: { + action_id: action.id, + data: { + command: action.command as EndpointActionData['command'], + comment: '', + }, + started_at: action.startedAt, + }, + }); + + // 20% of the time we generate an error + if (state === 'failure' || (state !== 'success' && endpointActionGenerator.randomFloat() < 0.2)) { + endpointResponse.error = { + message: 'Endpoint encountered an error and was unable to apply action to host', + }; + } + + await esClient.index({ + index: ENDPOINT_ACTION_RESPONSES_INDEX, + body: endpointResponse, + refresh: 'wait_for', + }); + + return endpointResponse; +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/security_user_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/security_user_services.ts new file mode 100644 index 0000000000000..52fe4b3d15fe3 --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/security_user_services.ts @@ -0,0 +1,35 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Client } from '@elastic/elasticsearch'; +import { userInfo } from 'os'; + +export const createSecuritySuperuser = async ( + esClient: Client, + username: string = userInfo().username, + password: string = 'changeme' +): Promise<{ username: string; password: string; created: boolean }> => { + if (!username || !password) { + throw new Error(`username and password require values.`); + } + + const addedUser = await esClient.transport.request>({ + method: 'POST', + path: `_security/user/${username}`, + body: { + password, + roles: ['superuser', 'kibana_system'], + full_name: username, + }, + }); + + return { + created: addedUser.created, + username, + password, + }; +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts new file mode 100644 index 0000000000000..72dbf3ade5e4a --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts @@ -0,0 +1,118 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Client } from '@elastic/elasticsearch'; +import { ToolingLog } from '@kbn/tooling-log'; +import { KbnClient } from '@kbn/test'; +import { createSecuritySuperuser } from './security_user_services'; + +export interface RuntimeServices { + kbnClient: KbnClient; + esClient: Client; + log: ToolingLog; + user: Readonly<{ + username: string; + password: string; + }>; +} + +interface CreateRuntimeServicesOptions { + kibanaUrl: string; + elasticsearchUrl: string; + username: string; + password: string; + log?: ToolingLog; + asSuperuser?: boolean; +} + +export const createRuntimeServices = async ({ + kibanaUrl, + elasticsearchUrl, + username: _username, + password: _password, + log = new ToolingLog(), + asSuperuser = false, +}: CreateRuntimeServicesOptions): Promise => { + let username = _username; + let password = _password; + + if (asSuperuser) { + const superuserResponse = await createSecuritySuperuser( + createEsClient({ + url: elasticsearchUrl, + username, + password, + log, + }) + ); + + ({ username, password } = superuserResponse); + + if (superuserResponse.created) { + log.info(`Kibana user [${username}] was crated with password [${password}]`); + } + } + + return { + kbnClient: createKbnClient({ log, url: kibanaUrl, username, password }), + esClient: createEsClient({ log, url: elasticsearchUrl, username, password }), + log, + user: { + username, + password, + }, + }; +}; + +const buildUrlWithCredentials = (url: string, username: string, password: string): string => { + const newUrl = new URL(url); + + newUrl.username = username; + newUrl.password = password; + + return newUrl.href; +}; + +export const createEsClient = ({ + url, + username, + password, + log, +}: { + url: string; + username: string; + password: string; + log?: ToolingLog; +}): Client => { + const esUrl = buildUrlWithCredentials(url, username, password); + + if (log) { + log.verbose(`Creating Elasticsearch client with URL: ${esUrl}`); + } + + return new Client({ node: esUrl }); +}; + +export const createKbnClient = ({ + url, + username, + password, + log = new ToolingLog(), +}: { + url: string; + username: string; + password: string; + log?: ToolingLog; +}): KbnClient => { + const kbnUrl = buildUrlWithCredentials(url, username, password); + + if (log) { + log.verbose(`Creating Kibana client with URL: ${kbnUrl}`); + } + + return new KbnClient({ log, url: kbnUrl }); +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_action_responder.js b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_action_responder.js new file mode 100644 index 0000000000000..3617b8d0d5b32 --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_action_responder.js @@ -0,0 +1,9 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +require('../../../../../src/setup_node_env'); +require('./action_responder').cli(); From eee3f7ec089b586df54e60a6c85e3fd8be805ad4 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 20 Jun 2022 13:55:53 -0600 Subject: [PATCH 15/50] [Maps] fix array values out of order in tooltips (#134588) * [Maps] fix array values out of order in tooltips * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../es_search_source/es_search_source.tsx | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx index cd69e6ec6514b..734c8cfb04892 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx @@ -589,27 +589,39 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource return {}; } - const { docValueFields } = getDocValueAndSourceFields( - indexPattern, - this._getTooltipPropertyNames(), - 'strict_date_optional_time' - ); - - const initialSearchContext = { docvalue_fields: docValueFields }; // Request fields in docvalue_fields insted of _source const searchService = getSearchService(); - const searchSource = await searchService.searchSource.create(initialSearchContext as object); + const searchSource = await searchService.searchSource.create(); searchSource.setField('trackTotalHits', false); searchSource.setField('index', indexPattern); searchSource.setField('size', 1); - const query = { language: 'kuery', query: `_id:"${docId}" and _index:"${index}"`, }; - searchSource.setField('query', query); - searchSource.setField('fieldsFromSource', this._getTooltipPropertyNames()); + + // searchSource calls dataView.getComputedFields to seed docvalueFields + // dataView.getComputedFields adds each date field in the dataView to docvalueFields to ensure standardized date format across kibana + // we don't need these as they request unneeded fields and bloat responses + // setting fieldsFromSource notifies searchSource to filterout unused docvalueFields + // '_id' is used since the value of 'fieldsFromSource' is irreverent because '_source: false'. + searchSource.setField('fieldsFromSource', ['_id']); + searchSource.setField('source', false); + + // Get all tooltip properties from fields API + searchSource.setField( + 'fields', + this._getTooltipPropertyNames().map((fieldName) => { + const field = indexPattern.fields.getByName(fieldName); + return field && field.type === 'date' + ? { + field: fieldName, + format: 'strict_date_optional_time', + } + : fieldName; + }) + ); const { rawResponse: resp } = await lastValueFrom( searchSource.fetch$({ From cdcb272082f9cd67d4989ad250adf40554c76466 Mon Sep 17 00:00:00 2001 From: Georgii Gorbachev Date: Mon, 20 Jun 2022 22:07:15 +0200 Subject: [PATCH 16/50] [Security Solution][Detections] Fix fetching package info from registry for installed integrations (#134732) **Fixes:** https://github.com/elastic/kibana/issues/134639 ## Summary In Cloud, `Elastic APM` and `Fleet Server` integrations are installed by default. However, attempts to fetch their packages from Elastic Package Registry via Fleet services on the server-side fail with the following errors: ```json { "message": "apm@8.3.0 not found", "status_code": 500 } ``` ```json { "message": "fleet_server@1.2.0 not found", "status_code": 500 } ``` Screenshot 2022-06-20 at 11 28 18 This behavior happens in some Cloud environments (like the one in the related ticket). It seems to not happen in Cloud CI environments and locally. This PR adds error handling for this edge case to `GET /internal/detection_engine/fleet/integrations/installed?packages=` endpoint. - It logs fetching errors to the console logs of Kibana. - It uses a "best-effort" approach for returning data from the endpoint. If we could successfully read existing integration policies, we already have all of the needed data except correct integration titles. So, if after that any request to EPR results in an error, we: - Still return 200 with a list of installed integrations - Include correct titles for those packages that were successfully fetched - Include "best guess" titles for those packages that failed ``` [2022-06-20T12:57:10.270+02:00][ERROR][plugins.securitySolution] Error fetching package info from registry for fleet_server@1.2.0. Boom! [2022-06-20T12:57:10.270+02:00][ERROR][plugins.securitySolution] Error fetching package info from registry for apm@8.4.0. Boom! ``` Screenshot 2022-06-20 at 13 05 08 ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../get_installed_integrations_route.ts | 50 +++++++++++++++---- .../installed_integration_set.ts | 15 ++++-- .../security_solution/server/routes/index.ts | 2 +- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/get_installed_integrations_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/get_installed_integrations_route.ts index 5809af1b1642f..7dbc67e6125b0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/get_installed_integrations_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/get_installed_integrations_route.ts @@ -5,18 +5,25 @@ * 2.0. */ +import { Logger } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; - +import { initPromisePool } from '../../../../../utils/promise_pool'; +import { buildSiemResponse } from '../../utils'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; + import { DETECTION_ENGINE_INSTALLED_INTEGRATIONS_URL } from '../../../../../../common/constants'; import { GetInstalledIntegrationsResponse } from '../../../../../../common/detection_engine/schemas/response/get_installed_integrations_response_schema'; -import { buildSiemResponse } from '../../utils'; import { createInstalledIntegrationSet } from './installed_integration_set'; +const MAX_CONCURRENT_REQUESTS_TO_PACKAGE_REGISTRY = 5; + /** * Returns an array of installed Fleet integrations and their packages. */ -export const getInstalledIntegrationsRoute = (router: SecuritySolutionPluginRouter) => { +export const getInstalledIntegrationsRoute = ( + router: SecuritySolutionPluginRouter, + logger: Logger +) => { router.get( { path: DETECTION_ENGINE_INSTALLED_INTEGRATIONS_URL, @@ -39,17 +46,40 @@ export const getInstalledIntegrationsRoute = (router: SecuritySolutionPluginRout set.addPackagePolicy(policy); }); - const registryPackages = await Promise.all( - set.getPackages().map((packageInfo) => { - return fleet.packages.getRegistryPackage( + const registryPackages = await initPromisePool({ + concurrency: MAX_CONCURRENT_REQUESTS_TO_PACKAGE_REGISTRY, + items: set.getPackages(), + executor: async (packageInfo) => { + const registryPackage = await fleet.packages.getRegistryPackage( packageInfo.package_name, packageInfo.package_version ); - }) - ); + return registryPackage; + }, + }); + + if (registryPackages.errors.length > 0) { + const errors = registryPackages.errors.map(({ error, item }) => { + return { + error, + packageId: `${item.package_name}@${item.package_version}`, + }; + }); + + const packages = errors.map((e) => e.packageId).join(', '); + logger.error( + `Unable to retrieve installed integrations. Error fetching packages from registry: ${packages}.` + ); + + errors.forEach(({ error, packageId }) => { + const logMessage = `Error fetching package info from registry for ${packageId}`; + const logReason = error instanceof Error ? error.message : String(error); + logger.debug(`${logMessage}. ${logReason}`); + }); + } - registryPackages.forEach((registryPackage) => { - set.addRegistryPackage(registryPackage.packageInfo); + registryPackages.results.forEach(({ result }) => { + set.addRegistryPackage(result.packageInfo); }); const installedIntegrations = set.getIntegrations(); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/installed_integration_set.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/installed_integration_set.ts index 5ea546359c972..092435a07f360 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/installed_integration_set.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/fleet/get_installed_integrations/installed_integration_set.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { flatten } from 'lodash'; +import { capitalize, flatten } from 'lodash'; import { PackagePolicy, RegistryPackage } from '@kbn/fleet-plugin/common'; import { InstalledIntegration, @@ -35,7 +35,7 @@ export const createInstalledIntegrationSet = (): IInstalledIntegrationSet => { const addPackagePolicy = (policy: PackagePolicy): void => { const packageInfo = getPackageInfoFromPolicy(policy); - const integrationsInfo = getIntegrationsInfoFromPolicy(policy); + const integrationsInfo = getIntegrationsInfoFromPolicy(policy, packageInfo); const packageKey = `${packageInfo.package_name}:${packageInfo.package_version}`; const existingPackageInfo = packageMap.get(packageKey); @@ -121,11 +121,16 @@ const getPackageInfoFromPolicy = (policy: PackagePolicy): InstalledPackageBasicI }; }; -const getIntegrationsInfoFromPolicy = (policy: PackagePolicy): InstalledIntegrationBasicInfo[] => { +const getIntegrationsInfoFromPolicy = ( + policy: PackagePolicy, + packageInfo: InstalledPackageBasicInfo +): InstalledIntegrationBasicInfo[] => { return policy.inputs.map((input) => { + const integrationName = normalizeString(input.policy_template); // e.g. 'cloudtrail' + const integrationTitle = `${packageInfo.package_title} ${capitalize(integrationName)}`; // e.g. 'AWS Cloudtrail' return { - integration_name: normalizeString(input.policy_template), - integration_title: '', // this gets initialized later in addRegistryPackage() + integration_name: integrationName, + integration_title: integrationTitle, // title gets re-initialized later in addRegistryPackage() is_enabled: input.enabled, }; }); diff --git a/x-pack/plugins/security_solution/server/routes/index.ts b/x-pack/plugins/security_solution/server/routes/index.ts index d64cbd397ecfa..04bc2e1e3988a 100644 --- a/x-pack/plugins/security_solution/server/routes/index.ts +++ b/x-pack/plugins/security_solution/server/routes/index.ts @@ -119,7 +119,7 @@ export const initRoutes = ( getRuleExecutionEventsRoute(router); - getInstalledIntegrationsRoute(router); + getInstalledIntegrationsRoute(router, logger); createTimelinesRoute(router, config, security); patchTimelinesRoute(router, config, security); From 1599cd8d2a9976b1a34c3043a4556c20b6fd4ba4 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 21 Jun 2022 00:45:08 +0100 Subject: [PATCH 17/50] docs(NA): windows wsl development (#134589) * docs(NA): windows wsl development * docs(NA): update titles for the documentation created * chore(NA): update dev_docs/tutorials/development_windows.mdx Co-authored-by: Jonathan Budzenski * docs(NA): updated guide to include info around GUI apps support * docs(NA): updated guide to include info around GUI apps support * docs(NA): include win10 GUI workaround * docs(NA): run a first sudo command before running others * docs(NA): added remote code wsl extension * docs(NA): mentioned NVIDIA does now includes vGPU drivers for WSL within the common drivers * docs(NA): update sudo commands separation * docs(NA): added hardware virtualization prerequisite awareness into the guide * docs(NA): update wording on guide recomendation for win11 Co-authored-by: Jonathan Budzenski Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../getting_started/development_windows.mdx | 45 ----- .../setting_up_a_development_env.mdx | 6 +- dev_docs/tutorials/development_windows.mdx | 163 ++++++++++++++++++ nav-kibana-dev.docnav.json | 5 +- 4 files changed, 171 insertions(+), 48 deletions(-) delete mode 100644 dev_docs/getting_started/development_windows.mdx create mode 100644 dev_docs/tutorials/development_windows.mdx diff --git a/dev_docs/getting_started/development_windows.mdx b/dev_docs/getting_started/development_windows.mdx deleted file mode 100644 index 4300c307a7b11..0000000000000 --- a/dev_docs/getting_started/development_windows.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: kibDevTutorialSetupDevWindows -slug: /kibana-dev-docs/tutorial/setup-dev-windows -title: Development on Windows -summary: Learn how to setup a development environment on Windows -date: 2021-08-11 -tags: ['kibana', 'onboarding', 'dev', 'windows', 'setup'] ---- - - -# Overview - -Development on Windows is recommended through WSL2. WSL lets users run a Linux environment on Windows, providing a supported development environment for Kibana. - -## Install WSL - -The latest setup instructions can be found at https://docs.microsoft.com/en-us/windows/wsl/install-win10 - -1) Open Powershell as an administrator -1) Enable WSL - ``` - dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart - ``` -1) Enable Virtual Machine Platform - ``` - dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart - ``` -1) Download and install the [Linux kernel update package](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi) -1) Set WSL 2 as the default version - ``` - wsl --set-default-version 2 - ``` -1) Open the Micrsoft Store application and install a Linux distribution - -## Setup Kibana - -1. - -## Install VS Code - -Remote development is supported with an extension. [Reference](https://code.visualstudio.com/docs/remote/wsl). - -1) Install VS Code on Windows -1) Check the "Add to PATH" option during setup -1) Install the [Remote Development](https://aka.ms/vscode-remote/download/extension) package diff --git a/dev_docs/getting_started/setting_up_a_development_env.mdx b/dev_docs/getting_started/setting_up_a_development_env.mdx index 570dcb57a56b8..0cb0d109d1829 100644 --- a/dev_docs/getting_started/setting_up_a_development_env.mdx +++ b/dev_docs/getting_started/setting_up_a_development_env.mdx @@ -13,9 +13,11 @@ Setting up a development environment is pretty easy. In order to support Windows development we currently require you to use one of the following: - [Git Bash](https://git-scm.com/download/win) -- [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/about) +- [Windows Subsystem for Linux (recommended)](https://docs.microsoft.com/en-us/windows/wsl/about) -Before running the steps below, please make sure you have installed [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48145) and that you are running all commands in either Git Bash or WSL. + If you want to know more about how to setup and use WSL for development on Windows, which will become our only supported way in the upcoming future, please check our . + + Before running the steps below, please make sure you have installed [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48145) and that you are running all commands in either Git Bash or WSL. diff --git a/dev_docs/tutorials/development_windows.mdx b/dev_docs/tutorials/development_windows.mdx new file mode 100644 index 0000000000000..94f3e993219b7 --- /dev/null +++ b/dev_docs/tutorials/development_windows.mdx @@ -0,0 +1,163 @@ +--- +id: kibDevTutorialSetupWindowsDevWSL +slug: /kibana-dev-docs/tutorial/setup-windows-development-wsl +title: WSL on Windows Development +summary: Learn how to setup a Windows development environment using WSL +date: 2022-06-16 +tags: ['kibana', 'onboarding', 'setup', 'windows', 'development', 'wsl'] +--- + + +# Overview + +Development on Windows is recommended through WSL2. WSL lets users run a Linux environment on Windows, providing a supported development environment for Kibana. + + + + This guide allows you to achieve two different kind of experiences (Basic and Default each with their specifics). While we fully advise for upgrading into Windows 11 to use the much better Default experience (and will eventually remove the basic one from this guide), + for now both have a common prerequisite on enabling the hardware virtualization. + + Get that feature to work will highly depend on your hardware, as it should be enabled on your UEFI (or BIOS). Please check the official Microsoft documentation on + [How to Enable Virtualization on Windows](https://support.microsoft.com/en-us/windows/enable-virtualization-on-windows-11-pcs-c5578302-6e43-4b4b-a449-8ced115f58e1). + + After successfully achieve the previous step there is a second good guide describing [How to Enable Hyper-V Platform Feature on Windows](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v#enable-the-hyper-v-role-through-settings). + + Once hardware virtualization is enabled on Windows, please pay attention to the specific prerequisites for each type of experience listed below. + + ### Basic Experience + For a basic WSL usage you must be running **Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11**. Note that in a basic setup you won't be able to use + the browser GUI to visually run and/or debug functional tests. It's highly advisable to make sure you install the prerequisites for a default usage listed below. + + **Note:** For a normal development cycle we really advise to use the default experience setup within Windows 11. However if you have an explicit need for using a browser GUI + while using Windows 10, please follow each step of the guide below applicable for the Basic Experience setup and then check our . + + ### Default Experience + For a default experience and a completion of the entire guide which will make you able to run GUI apps you must be running **Windows 11 (Build 22000 and higher)**. + In addition to that, installing a **vGPU driver** is also required. Please choose the one compatible with your hardware: + + - [Intel GPU driver for WSL](https://www.intel.com/content/www/us/en/download/19344/intel-graphics-windows-dch-drivers.html?) + - [AMD GPU driver for WSL](https://www.amd.com/en/support/kb/release-notes/rn-rad-win-wsl-support) + - [NVIDIA GPU driver for WSL](https://developer.nvidia.com/cuda/wsl) (**Note:** NVIDIA does now includes the vGPU driver in their common gpu drivers. Please make sure you have your latest available drivers installed or refer to the previous link for official documentation) + + More information for that could be found in the [official guide for GUI apps on WSL](https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-apps#install-support-for-linux-gui-apps). + + +## Install WSL + +The latest setup instructions can be found at https://docs.microsoft.com/en-us/windows/wsl/install + +1. Open Powershell as an administrator + +2. Install WSL with Ubuntu and restart the machine when prompted + ``` + wsl --install -d Ubuntu + ``` + + In case you already have WSL installed you can just `wsl --update` and then reboot the machine. + +3. Once rebooted the installation will proceed for a new WSL install. If that's not the case make sure you're using + WSL2 and Ubuntu by + ``` + wsl --set-default-version 2 + ``` + + and + + ``` + wsl --set-default Ubuntu + ``` + +4. Install support for Google Chrome by running the following inside WSL shell **(IMPORTANT: )** + + Start by updating your apt package sources list with + ``` + sudo apt update + ``` + + Enter your user password, then + ``` + sudo apt -y upgrade && sudo apt -y autoremove + cd /tmp + wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + sudo dpkg -i google-chrome-stable_current_amd64.deb + sudo apt install --fix-broken -y + sudo dpkg -i google-chrome-stable_current_amd64.deb + ``` + + Now you can launch Google Chrome by either `google-chrome` on your WSL shell or from Ubuntu Applications on Windows. + + It's also worth it to check if there are other useful [GUI packages you would want to add on WSL](https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-apps#update-the-packages-in-your-distribution) and then the configuration is complete. + +## Setup Kibana + +The next step is now for Kibana inside WSL just like in any other case. + +## Install VSCode + +Even though in previous steps you might have installed Nautilus and other X11 apps that allows you to use the file explorer for the WSL environment or even using some apps supported by X11 like +Sublime Text our recommended way to write your code is by using VSCode installed natively on Windows and then use its remote development extension to connect into the WSL environment. You can do this +by completing the following: + +1. Install VSCode on Windows +2. Check the "Add to PATH" option during setup +3. Install the [Remote Development](https://code.visualstudio.com/docs/remote/wsl) package + +For more information you can find the official documentation on how to Remote development is supported with an extension [here](https://code.visualstudio.com/docs/remote/wsl). + +## Success + +At this point you should be able to develop Kibana using WSL by writing code on VSCode, running commands for build, test and manage your dev environment using the WSL shell and finally having a basic GUI +support for your WSL environment using the applications we recommended like Google Chrome and others you choose to install like for example Nautilus file manager or other X11 based ones. + +## Short Term Workaround for Windows 10 GUI Support + +As mentioned before is highly recommended you setup your environment for a default experience using Windows 11. If you're reading this section is because you are not available to do that for a reason and +at the same time you still have the need for a GUI browser on Windows 10. Next you can find our recommendations for a short term workaround to achieve that for Windows 10 before we could terminate the support +for this operating system. + +1. Fulfil the as well as installing the . + +2. Make sure you've followed up to step 3, and . + +3. Install Google Chrome and it's dependencies by + ``` + cd /tmp + sudo apt-get update + sudo apt-get install -y curl unzip xvfb libxi6 libgconf-2-4 + wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + sudo apt install ./google-chrome-stable_current_amd64.deb + ``` + + Then run `google-chrome --version` and you should be able to get the current version installed printed out. + +4. Download [VcXsrv](https://sourceforge.net/projects/vcxsrv) and install it natively on your **Windows**. Once installed go to the program files folder for VcXsrv and run `xlaunch.exe`. The majority of the default + settings are okay but make sure `Disable access control` is checked. In doubt, check the same settings as shown into this [Github issue image](https://github.com/microsoft/WSL/issues/4106#issuecomment-502920377). + Next, allow this application through the firewall if prompted when its first ran. Otherwise, if not asked, please go to `Windows firewall -> Allow an app through firewall -> click change settings -> select BOTH entries of "VcXsrv windows server" -> OK`. + +5. Configure the `DISPLAY` env var which in Linux tells GUI applications at which IP address the X Server is running. On WSL2 the IP for the native Windows is not localhost, so we need + to set DISPLAY to the correct IP address. Let's go ahead and add the following into the `.bashrc` file of your WSL environment: + ``` + export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0 + ``` + Once complete, running `echo $DISPLAY` inside your WSL shell should print the Windows native IP suffixed by `:0.0`. + +6. When reaching that point, if you run `google-chrome` on the WSL shell, the Chrome browser should open inside an X server window on Windows which should also work as expected when the functional tests chromedriver will try to use a browser to run into. + +### Troubleshooting the workaround + +#### Unable to open X display + +If that is seen when running the Google Chrome + +``` +Error: /etc/machine-id contains 0 characters (32 were expected). +Unable to open X display +``` + +- Make sure VcXsrv is running in Windows with “Disable access control” checked. +- Make sure VcXsrv is whitelisted in the Windows firewall (search the start menu for “Allow a program through Windows firewall” and enable it there) + +### More information + +For more information on how to configure this alternative X server or to troubleshoot other problems please check +the [official documentation](https://sourceforge.net/p/vcxsrv/wiki/VcXsrv%20%26%20Win10/) or a [popular Github issue](https://github.com/microsoft/WSL/issues/4106#issuecomment-502920377). diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json index 7b066bf357d32..a8632e18a9848 100644 --- a/nav-kibana-dev.docnav.json +++ b/nav-kibana-dev.docnav.json @@ -100,6 +100,9 @@ { "label": "Tutorials", "items": [ + { + "id": "kibDevTutorialSetupWindowsDevWSL" + }, { "id": "kibDevTutorialTestingPlugins" }, @@ -519,4 +522,4 @@ ] } ] -} \ No newline at end of file +} From 04e621727bd053965263391acaa18bcdac9f943e Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 21 Jun 2022 00:51:44 -0400 Subject: [PATCH 18/50] [api-docs] Daily api_docs build (#134799) --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 98 +- api_docs/alerting.mdx | 4 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/core.devdocs.json | 130 +-- api_docs/core.mdx | 4 +- api_docs/core_application.mdx | 4 +- api_docs/core_chrome.mdx | 4 +- api_docs/core_http.mdx | 4 +- api_docs/core_saved_objects.mdx | 4 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 313 +++--- api_docs/data.mdx | 4 +- api_docs/data_query.devdocs.json | 8 +- api_docs/data_query.mdx | 4 +- api_docs/data_search.devdocs.json | 162 --- api_docs/data_search.mdx | 4 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/elastic_apm_synthtrace.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.devdocs.json | 8 + api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bazel_packages.mdx | 2 +- api_docs/kbn_bazel_runner.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- .../kbn_core_injected_metadata_browser.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_server.devdocs.json | 984 ++++++++++++++++++ api_docs/kbn_core_logging_server.mdx | 30 + ..._core_logging_server_internal.devdocs.json | 184 ++++ api_docs/kbn_core_logging_server_internal.mdx | 33 + ...kbn_core_logging_server_mocks.devdocs.json | 243 +++++ api_docs/kbn_core_logging_server_mocks.mdx | 27 + api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_kibana_json_schema.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_discovery.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_pm.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- .../kbn_scalability_simulation_generator.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_shared_ux_components.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- api_docs/kbn_shared_ux_services.mdx | 2 +- api_docs/kbn_shared_ux_storybook.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_sort_package_json.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_type_summarizer.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 17 +- api_docs/presentation_util.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/shared_u_x.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 33 +- api_docs/triggers_actions_ui.mdx | 4 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 254 files changed, 2107 insertions(+), 663 deletions(-) create mode 100644 api_docs/kbn_core_logging_server.devdocs.json create mode 100644 api_docs/kbn_core_logging_server.mdx create mode 100644 api_docs/kbn_core_logging_server_internal.devdocs.json create mode 100644 api_docs/kbn_core_logging_server_internal.mdx create mode 100644 api_docs/kbn_core_logging_server_mocks.devdocs.json create mode 100644 api_docs/kbn_core_logging_server_mocks.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 10c19d9c293c0..a3c9c51cd2716 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github summary: API docs for the actions plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 692a2494761fb..2362df77d806d 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github summary: API docs for the advancedSettings plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index f8402bc28bcca..33f5b265739b2 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github summary: API docs for the aiops plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 27eefd2cead9b..f47a91695fd1e 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3036,7 +3036,15 @@ "section": "def-server.BulkEditError", "text": "BulkEditError" }, - "[]; total: number; }>; updateApiKey: ({ id }: { id: string; }) => Promise; snooze: ({ id, snoozeEndTime, }: { id: string; snoozeEndTime: string | -1; }) => Promise; unsnooze: ({ id }: { id: string; }) => Promise; updateSnoozedUntilTime: ({ id }: { id: string; }) => Promise; unmuteAll: ({ id }: { id: string; }) => Promise; muteInstance: ({ alertId, alertInstanceId }: ", + "[]; total: number; }>; updateApiKey: ({ id }: { id: string; }) => Promise; snooze: ({ id, snoozeSchedule, }: { id: string; snoozeSchedule: ", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleSnoozeSchedule", + "text": "RuleSnoozeSchedule" + }, + "; }) => Promise; unsnooze: ({ id, scheduleIds, }: { id: string; scheduleIds?: string[] | undefined; }) => Promise; updateSnoozedUntilTime: ({ id }: { id: string; }) => Promise; unmuteAll: ({ id }: { id: string; }) => Promise; muteInstance: ({ alertId, alertInstanceId }: ", "MuteOptions", ") => Promise; unmuteInstance: ({ alertId, alertInstanceId }: ", "MuteOptions", @@ -4466,10 +4474,13 @@ { "parentPluginId": "alerting", "id": "def-common.RRuleRecord.bymonthday", - "type": "number", + "type": "Array", "tags": [], "label": "bymonthday", "description": [], + "signature": [ + "number[]" + ], "path": "x-pack/plugins/alerting/common/rule_snooze_type.ts", "deprecated": false }, @@ -5241,6 +5252,71 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-common.RuleSnoozeSchedule", + "type": "Interface", + "tags": [], + "label": "RuleSnoozeSchedule", + "description": [], + "path": "x-pack/plugins/alerting/common/rule_snooze_type.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-common.RuleSnoozeSchedule.duration", + "type": "number", + "tags": [], + "label": "duration", + "description": [], + "path": "x-pack/plugins/alerting/common/rule_snooze_type.ts", + "deprecated": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.RuleSnoozeSchedule.rRule", + "type": "CompoundType", + "tags": [], + "label": "rRule", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RRuleRecord", + "text": "RRuleRecord" + }, + "> & Pick<", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RRuleRecord", + "text": "RRuleRecord" + }, + ", \"dtstart\" | \"tzid\">" + ], + "path": "x-pack/plugins/alerting/common/rule_snooze_type.ts", + "deprecated": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.RuleSnoozeSchedule.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/alerting/common/rule_snooze_type.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-common.RuleStateNavigation", @@ -5942,23 +6018,7 @@ "label": "RuleSnooze", "description": [], "signature": [ - "{ duration: number; rRule: Partial<", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RRuleRecord", - "text": "RRuleRecord" - }, - "> & Pick<", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RRuleRecord", - "text": "RRuleRecord" - }, - ", \"dtstart\" | \"tzid\">; id?: string | undefined; }[]" + "{ duration: number; rRule: SnoozeRRule; id?: string | undefined; }[]" ], "path": "x-pack/plugins/alerting/common/rule_snooze_type.ts", "deprecated": false, diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index a7c2987408ce6..a9a38362bad81 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github summary: API docs for the alerting plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 359 | 0 | 350 | 20 | +| 363 | 0 | 354 | 20 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 098d7ad098eeb..22d5292e01528 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github summary: API docs for the apm plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 469707ac8dbe1..a4e6037e7b41c 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github summary: API docs for the banners plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index c05558298f1d7..d91d6b14b30bf 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github summary: API docs for the bfetch plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 3641ac6f9a281..964bbe8ce5872 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github summary: API docs for the canvas plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 6dbf6ca1e47ec..9e2f532071351 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github summary: API docs for the cases plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 0a2ffe1342ce0..ac24cd50d2d6b 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github summary: API docs for the charts plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 8bb66c999e055..34b7f273f271e 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github summary: API docs for the cloud plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index a1ecc0dfc59ca..c6ac3bd0c1ee7 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github summary: API docs for the cloudSecurityPosture plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/console.mdx b/api_docs/console.mdx index e3589d8616fd6..5d5de2b8f163c 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github summary: API docs for the console plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 01ac2653e11a5..f85640721d867 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github summary: API docs for the controls plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/core.devdocs.json b/api_docs/core.devdocs.json index 83f05f2617239..6f06c69c9a35c 100644 --- a/api_docs/core.devdocs.json +++ b/api_docs/core.devdocs.json @@ -11089,13 +11089,7 @@ "{@link LoggingServiceSetup}" ], "signature": [ - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.LoggingServiceSetup", - "text": "LoggingServiceSetup" - } + "LoggingServiceSetup" ], "path": "src/core/server/index.ts", "deprecated": false @@ -19428,14 +19422,67 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "core", + "id": "def-server.LoggerConfigType", + "type": "Interface", + "tags": [], + "label": "LoggerConfigType", + "description": [ + "\r\nDescribes the configuration of a given logger.\r\n" + ], + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "core", + "id": "def-server.LoggerConfigType.appenders", + "type": "Array", + "tags": [], + "label": "appenders", + "description": [], + "signature": [ + "string[]" + ], + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", + "deprecated": false + }, + { + "parentPluginId": "core", + "id": "def-server.LoggerConfigType.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", + "deprecated": false + }, + { + "parentPluginId": "core", + "id": "def-server.LoggerConfigType.level", + "type": "CompoundType", + "tags": [], + "label": "level", + "description": [], + "signature": [ + "\"error\" | \"all\" | \"info\" | \"off\" | \"debug\" | \"trace\" | \"warn\" | \"fatal\"" + ], + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "core", "id": "def-server.LoggerContextConfigInput", "type": "Interface", "tags": [], "label": "LoggerContextConfigInput", - "description": [], - "path": "src/core/server/logging/logging_config.ts", + "description": [ + "\r\nInput used to configure logging dynamically using {@link LoggingServiceSetup.configure}" + ], + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", "deprecated": false, "children": [ { @@ -19447,24 +19494,12 @@ "description": [], "signature": [ "Record | Map | undefined" ], - "path": "src/core/server/logging/logging_config.ts", + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", "deprecated": false }, { @@ -19475,9 +19510,10 @@ "label": "loggers", "description": [], "signature": [ - "Readonly<{} & { name: string; level: \"error\" | \"all\" | \"info\" | \"off\" | \"debug\" | \"trace\" | \"warn\" | \"fatal\"; appenders: string[]; }>[] | undefined" + "LoggerConfigType", + "[] | undefined" ], - "path": "src/core/server/logging/logging_config.ts", + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", "deprecated": false } ], @@ -19540,9 +19576,9 @@ "tags": [], "label": "LoggingServiceSetup", "description": [ - "\nProvides APIs to plugins for customizing the plugin's logger." + "\r\nProvides APIs to plugins for customizing the plugin's logger." ], - "path": "src/core/server/logging/logging_service.ts", + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", "deprecated": false, "children": [ { @@ -19552,22 +19588,16 @@ "tags": [], "label": "configure", "description": [ - "\nCustomizes the logging config for the plugin's context.\n" + "\r\nCustomizes the logging config for the plugin's context.\r\n" ], "signature": [ "(config$: ", "Observable", "<", - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.LoggerContextConfigInput", - "text": "LoggerContextConfigInput" - }, + "LoggerContextConfigInput", ">) => void" ], - "path": "src/core/server/logging/logging_service.ts", + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", "deprecated": false, "children": [ { @@ -19580,16 +19610,10 @@ "signature": [ "Observable", "<", - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.LoggerContextConfigInput", - "text": "LoggerContextConfigInput" - }, + "LoggerContextConfigInput", ">" ], - "path": "src/core/server/logging/logging_service.ts", + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", "deprecated": false, "isRequired": true } @@ -24263,7 +24287,7 @@ " | ", "RollingFileAppenderConfig" ], - "path": "src/core/server/logging/appenders/appenders.ts", + "path": "node_modules/@types/kbn__core-logging-server/index.d.ts", "deprecated": false, "initialIsOpen": false }, @@ -26782,20 +26806,6 @@ "deprecated": false, "initialIsOpen": false }, - { - "parentPluginId": "core", - "id": "def-server.LoggerConfigType", - "type": "Type", - "tags": [], - "label": "LoggerConfigType", - "description": [], - "signature": [ - "{ readonly name: string; readonly level: \"error\" | \"all\" | \"info\" | \"off\" | \"debug\" | \"trace\" | \"warn\" | \"fatal\"; readonly appenders: string[]; }" - ], - "path": "src/core/server/logging/logging_config.ts", - "deprecated": false, - "initialIsOpen": false - }, { "parentPluginId": "core", "id": "def-server.LogMeta", diff --git a/api_docs/core.mdx b/api_docs/core.mdx index 457357dc2dd88..42dd8263b124e 100644 --- a/api_docs/core.mdx +++ b/api_docs/core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core title: "core" image: https://source.unsplash.com/400x175/?github summary: API docs for the core plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2524 | 15 | 946 | 33 | +| 2527 | 15 | 940 | 29 | ## Client diff --git a/api_docs/core_application.mdx b/api_docs/core_application.mdx index ce7ea096eac82..f71fa5999f448 100644 --- a/api_docs/core_application.mdx +++ b/api_docs/core_application.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-application title: "core.application" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.application plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.application'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2524 | 15 | 946 | 33 | +| 2527 | 15 | 940 | 29 | ## Client diff --git a/api_docs/core_chrome.mdx b/api_docs/core_chrome.mdx index cc608e2ea8955..ff3e958e0529f 100644 --- a/api_docs/core_chrome.mdx +++ b/api_docs/core_chrome.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-chrome title: "core.chrome" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.chrome plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.chrome'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2524 | 15 | 946 | 33 | +| 2527 | 15 | 940 | 29 | ## Client diff --git a/api_docs/core_http.mdx b/api_docs/core_http.mdx index 83f94398f3a94..23bd766d9ae5d 100644 --- a/api_docs/core_http.mdx +++ b/api_docs/core_http.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-http title: "core.http" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.http plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.http'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2524 | 15 | 946 | 33 | +| 2527 | 15 | 940 | 29 | ## Client diff --git a/api_docs/core_saved_objects.mdx b/api_docs/core_saved_objects.mdx index 93633f9326843..bac90d13acfc3 100644 --- a/api_docs/core_saved_objects.mdx +++ b/api_docs/core_saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-savedObjects title: "core.savedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.savedObjects plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.savedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2524 | 15 | 946 | 33 | +| 2527 | 15 | 940 | 29 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 58ef33efc8294..1992adc2ffa81 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github summary: API docs for the customIntegrations plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 689e8aed6348e..a05ab42c32be8 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github summary: API docs for the dashboard plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 54adffe4f115b..80ea33452576a 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the dashboardEnhanced plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 6bfac6736a81b..a9cbb8be306c9 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -11713,7 +11713,9 @@ }, ", field: string | ", "DataViewFieldBase", - ", values: any, operation: string, index: string) => ", + ", values: any, operation: string, index: ", + "DataViewBase", + ") => ", "Filter", "[]" ], @@ -11780,10 +11782,15 @@ { "parentPluginId": "data", "id": "def-public.esFilters.generateFilters.$5", - "type": "string", + "type": "Object", "tags": [], "label": "index", "description": [], + "signature": [ + "{ fields: ", + "DataViewFieldBase", + "[]; id?: string | undefined; title: string; }" + ], "path": "src/plugins/data/public/query/filter_manager/lib/generate_filters.ts", "deprecated": false } @@ -13287,113 +13294,6 @@ ], "path": "src/plugins/data/public/index.ts", "deprecated": false - }, - { - "parentPluginId": "data", - "id": "def-public.search.aggs.getNumberHistogramIntervalByDatatableColumn", - "type": "Function", - "tags": [], - "label": "getNumberHistogramIntervalByDatatableColumn", - "description": [], - "signature": [ - "(column: ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - }, - ") => number | undefined" - ], - "path": "src/plugins/data/public/index.ts", - "deprecated": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "data", - "id": "def-public.search.aggs.getNumberHistogramIntervalByDatatableColumn.$1", - "type": "Object", - "tags": [], - "label": "column", - "description": [], - "signature": [ - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - } - ], - "path": "src/plugins/data/common/search/aggs/utils/get_number_histogram_interval.ts", - "deprecated": false - } - ] - }, - { - "parentPluginId": "data", - "id": "def-public.search.aggs.getDateHistogramMetaDataByDatatableColumn", - "type": "Function", - "tags": [], - "label": "getDateHistogramMetaDataByDatatableColumn", - "description": [], - "signature": [ - "(column: ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - }, - ", defaults?: Partial<{ timeZone: string; }>) => { interval: string | undefined; timeZone: string | undefined; timeRange: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; } | undefined" - ], - "path": "src/plugins/data/public/index.ts", - "deprecated": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "data", - "id": "def-public.search.aggs.getDateHistogramMetaDataByDatatableColumn.$1", - "type": "Object", - "tags": [], - "label": "column", - "description": [], - "signature": [ - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - } - ], - "path": "src/plugins/data/common/search/aggs/utils/get_date_histogram_meta.ts", - "deprecated": false - }, - { - "parentPluginId": "data", - "id": "def-public.search.aggs.getDateHistogramMetaDataByDatatableColumn.$2", - "type": "Object", - "tags": [], - "label": "defaults", - "description": [], - "signature": [ - "{ timeZone?: string | undefined; }" - ], - "path": "src/plugins/data/common/search/aggs/utils/get_date_histogram_meta.ts", - "deprecated": false - } - ] } ] }, @@ -13603,50 +13503,6 @@ "deprecated": false } ] - }, - { - "parentPluginId": "data", - "id": "def-public.search.checkColumnForPrecisionError", - "type": "Function", - "tags": [], - "label": "checkColumnForPrecisionError", - "description": [], - "signature": [ - "(column: ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - }, - ") => ", - "Serializable" - ], - "path": "src/plugins/data/public/index.ts", - "deprecated": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "data", - "id": "def-public.search.checkColumnForPrecisionError.$1", - "type": "Object", - "tags": [], - "label": "column", - "description": [], - "signature": [ - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - } - ], - "path": "src/plugins/data/common/search/tabify/utils.ts", - "deprecated": false - } - ] } ], "initialIsOpen": false @@ -22209,6 +22065,66 @@ ], "returnComment": [] }, + { + "parentPluginId": "data", + "id": "def-common.DatatableUtilitiesService.getDateHistogramMeta", + "type": "Function", + "tags": [], + "label": "getDateHistogramMeta", + "description": [ + "\nHelper function returning the used interval, used time zone and applied time filters for data table column created by the date_histogramm agg type.\n\"auto\" will get expanded to the actually used interval.\nIf the column is not a column created by a date_histogram aggregation of the esaggs data source,\nthis function will return undefined." + ], + "signature": [ + "(column: ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + }, + ", defaults?: Partial<{ timeZone: string; }>) => DateHistogramMeta | undefined" + ], + "path": "src/plugins/data/common/datatable_utilities/datatable_utilities_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-common.DatatableUtilitiesService.getDateHistogramMeta.$1", + "type": "Object", + "tags": [], + "label": "column", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + } + ], + "path": "src/plugins/data/common/datatable_utilities/datatable_utilities_service.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "data", + "id": "def-common.DatatableUtilitiesService.getDateHistogramMeta.$2", + "type": "Object", + "tags": [], + "label": "defaults", + "description": [], + "signature": [ + "Partial<{ timeZone: string; }>" + ], + "path": "src/plugins/data/common/datatable_utilities/datatable_utilities_service.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "data", "id": "def-common.DatatableUtilitiesService.getDataView", @@ -22409,6 +22325,52 @@ ], "returnComment": [] }, + { + "parentPluginId": "data", + "id": "def-common.DatatableUtilitiesService.getNumberHistogramInterval", + "type": "Function", + "tags": [], + "label": "getNumberHistogramInterval", + "description": [ + "\nHelper function returning the used interval for data table column created by the histogramm agg type.\n\"auto\" will get expanded to the actually used interval.\nIf the column is not a column created by a histogram aggregation of the esaggs data source,\nthis function will return undefined." + ], + "signature": [ + "(column: ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + }, + ") => number | undefined" + ], + "path": "src/plugins/data/common/datatable_utilities/datatable_utilities_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-common.DatatableUtilitiesService.getNumberHistogramInterval.$1", + "type": "Object", + "tags": [], + "label": "column", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + } + ], + "path": "src/plugins/data/common/datatable_utilities/datatable_utilities_service.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "data", "id": "def-common.DatatableUtilitiesService.getTotalCount", @@ -22453,6 +22415,51 @@ ], "returnComment": [] }, + { + "parentPluginId": "data", + "id": "def-common.DatatableUtilitiesService.hasPrecisionError", + "type": "Function", + "tags": [], + "label": "hasPrecisionError", + "description": [], + "signature": [ + "(column: ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + }, + ") => ", + "Serializable" + ], + "path": "src/plugins/data/common/datatable_utilities/datatable_utilities_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-common.DatatableUtilitiesService.hasPrecisionError.$1", + "type": "Object", + "tags": [], + "label": "column", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + } + ], + "path": "src/plugins/data/common/datatable_utilities/datatable_utilities_service.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "data", "id": "def-common.DatatableUtilitiesService.isFilterable", diff --git a/api_docs/data.mdx b/api_docs/data.mdx index cb3dc6cd4f132..3ba5beb5d04d8 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github summary: API docs for the data plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3379 | 35 | 2525 | 21 | +| 3372 | 35 | 2518 | 21 | ## Client diff --git a/api_docs/data_query.devdocs.json b/api_docs/data_query.devdocs.json index 8bf70e994cdff..ba274a046a393 100644 --- a/api_docs/data_query.devdocs.json +++ b/api_docs/data_query.devdocs.json @@ -1276,7 +1276,9 @@ }, ", field: string | ", "DataViewFieldBase", - ", values: any, operation: string, index: string) => ", + ", values: any, operation: string, index: ", + "DataViewBase", + ") => ", "Filter", "[]" ], @@ -1357,14 +1359,14 @@ { "parentPluginId": "data", "id": "def-public.generateFilters.$5", - "type": "string", + "type": "Object", "tags": [], "label": "index", "description": [ "- Index string to generate filters for" ], "signature": [ - "string" + "DataViewBase" ], "path": "src/plugins/data/public/query/filter_manager/lib/generate_filters.ts", "deprecated": false, diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index f57b367a5af9c..2a81780f25e56 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github summary: API docs for the data.query plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3379 | 35 | 2525 | 21 | +| 3372 | 35 | 2518 | 21 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 81ea72cf187d3..deba3008b0de7 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -11355,52 +11355,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-common.checkColumnForPrecisionError", - "type": "Function", - "tags": [], - "label": "checkColumnForPrecisionError", - "description": [], - "signature": [ - "(column: ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - }, - ") => ", - "Serializable" - ], - "path": "src/plugins/data/common/search/tabify/utils.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "data", - "id": "def-common.checkColumnForPrecisionError.$1", - "type": "Object", - "tags": [], - "label": "column", - "description": [], - "signature": [ - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - } - ], - "path": "src/plugins/data/common/search/tabify/utils.ts", - "deprecated": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-common.cidrToAst", @@ -12515,75 +12469,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-common.getDateHistogramMetaDataByDatatableColumn", - "type": "Function", - "tags": [], - "label": "getDateHistogramMetaDataByDatatableColumn", - "description": [ - "\nHelper function returning the used interval, used time zone and applied time filters for data table column created by the date_histogramm agg type.\n\"auto\" will get expanded to the actually used interval.\nIf the column is not a column created by a date_histogram aggregation of the esaggs data source,\nthis function will return undefined." - ], - "signature": [ - "(column: ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - }, - ", defaults?: Partial<{ timeZone: string; }>) => { interval: string | undefined; timeZone: string | undefined; timeRange: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; } | undefined" - ], - "path": "src/plugins/data/common/search/aggs/utils/get_date_histogram_meta.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "data", - "id": "def-common.getDateHistogramMetaDataByDatatableColumn.$1", - "type": "Object", - "tags": [], - "label": "column", - "description": [], - "signature": [ - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - } - ], - "path": "src/plugins/data/common/search/aggs/utils/get_date_histogram_meta.ts", - "deprecated": false, - "isRequired": true - }, - { - "parentPluginId": "data", - "id": "def-common.getDateHistogramMetaDataByDatatableColumn.$2", - "type": "Object", - "tags": [], - "label": "defaults", - "description": [], - "signature": [ - "Partial<{ timeZone: string; }>" - ], - "path": "src/plugins/data/common/search/aggs/utils/get_date_histogram_meta.ts", - "deprecated": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-common.getDateRangeBucketAgg", @@ -13483,53 +13368,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-common.getNumberHistogramIntervalByDatatableColumn", - "type": "Function", - "tags": [], - "label": "getNumberHistogramIntervalByDatatableColumn", - "description": [ - "\nHelper function returning the used interval for data table column created by the histogramm agg type.\n\"auto\" will get expanded to the actually used interval.\nIf the column is not a column created by a histogram aggregation of the esaggs data source,\nthis function will return undefined." - ], - "signature": [ - "(column: ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - }, - ") => number | undefined" - ], - "path": "src/plugins/data/common/search/aggs/utils/get_number_histogram_interval.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "data", - "id": "def-common.getNumberHistogramIntervalByDatatableColumn.$1", - "type": "Object", - "tags": [], - "label": "column", - "description": [], - "signature": [ - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.DatatableColumn", - "text": "DatatableColumn" - } - ], - "path": "src/plugins/data/common/search/aggs/utils/get_number_histogram_interval.ts", - "deprecated": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-common.getPercentileRanksMetricAgg", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 2615366ca0687..5f0239c3ee434 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github summary: API docs for the data.search plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3379 | 35 | 2525 | 21 | +| 3372 | 35 | 2518 | 21 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 1c545320dfa49..6f2cdb2350507 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewEditor plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 0852c99a6e1a4..692d50ae66a77 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewFieldEditor plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 2ccdee0a3b82b..b2dff4fcae8ef 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewManagement plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 4b6c4bae0e3af..ccf8f12cb276c 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViews plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 72831bc9ded5b..0de7c1db684e6 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataVisualizer plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 778cb4d6e1751..f5fddc4eb32e1 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API summary: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 7facd074c2acb..85c1f61e6d944 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin summary: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index e38386196a6d2..4e41da90b698a 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team summary: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 504cffb064a67..4dea92a222265 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github summary: API docs for the devTools plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index b58a748a1a60b..6740276120bc4 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github summary: API docs for the discover plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 389b0894a89a9..6584490e7c347 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the discoverEnhanced plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/elastic_apm_synthtrace.mdx b/api_docs/elastic_apm_synthtrace.mdx index 11e521017e343..ec575d551a733 100644 --- a/api_docs/elastic_apm_synthtrace.mdx +++ b/api_docs/elastic_apm_synthtrace.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/elastic-apm-synthtrace title: "@elastic/apm-synthtrace" image: https://source.unsplash.com/400x175/?github summary: API docs for the @elastic/apm-synthtrace plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@elastic/apm-synthtrace'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 2238816b57e16..a6737f6650638 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github summary: API docs for the embeddable plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index b6bf33acfe3ba..c8873882cc3a3 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the embeddableEnhanced plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 0cc86f4b42a8a..319b3b5198e43 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the encryptedSavedObjects plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 623e460290d63..b218b8f933f54 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the enterpriseSearch plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 7bc071d2ce1b9..3ad01719d1506 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github summary: API docs for the esUiShared plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 8940d86a797e1..3ca4853bd2823 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github summary: API docs for the eventAnnotation plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index ff694709f7468..42f392650f117 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github summary: API docs for the eventLog plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 272a4abc34939..71115486d3599 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionError plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 0794056f7d22b..ff3eb921466cc 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionGauge plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_heatmap.devdocs.json b/api_docs/expression_heatmap.devdocs.json index 4b3586b153f25..0476516cb26a1 100644 --- a/api_docs/expression_heatmap.devdocs.json +++ b/api_docs/expression_heatmap.devdocs.json @@ -580,6 +580,14 @@ }, "; chartsThemeService: ", "Theme", + "; datatableUtilities: ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataPluginApi", + "section": "def-common.DatatableUtilitiesService", + "text": "DatatableUtilitiesService" + }, "; onClickValue: (data: { data: { table: Pick<", { "pluginId": "expressions", diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index b3e0525b6e118..0f275e9b6c018 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionHeatmap plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 774f21deb4752..b8c422da05f27 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionImage plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index aca8c50c65a89..46b37e71cbf25 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionMetric plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 7f0fc043f8fbd..b4e4ef9bf5cf6 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionMetricVis plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 0c67b86fe67f7..b4bddb1883e5b 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionPartitionVis plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 378bb8a424b39..e5bf549f9d90e 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionRepeatImage plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 75cc7a943d6e2..1ff5125f23082 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionRevealImage plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index a358d431ac66c..fc8c1da0baa60 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionShape plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index d62018f89f5d5..efc368456ed80 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionTagcloud plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 089fd9c5b512e..a54e704f338e7 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionXY plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index c56218c270fcf..702747e6b7379 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressions plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 590de06e88f9d..0ea745c09724b 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github summary: API docs for the features plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 73229785be96e..de50b4c79027f 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github summary: API docs for the fieldFormats plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 0af077ff4507d..c08489d474686 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github summary: API docs for the fileUpload plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 956fdb251c79e..71008fbb011f1 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github summary: API docs for the fleet plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 6ee57d083b9c3..b6ace962da867 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the globalSearch plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/home.mdx b/api_docs/home.mdx index d208fea06f2fd..cb4efc7394ae2 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github summary: API docs for the home plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 23557b805f7c7..0abd7dafe1dfc 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the indexLifecycleManagement plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 8b8d77ba53704..237e1d188a1eb 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the indexManagement plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 2d57be66434db..2af55a03958b9 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github summary: API docs for the infra plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 7f09991ac7762..47fb922cea12a 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github summary: API docs for the inspector plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 28d0f047ccb8b..e71b5ee9c4570 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github summary: API docs for the interactiveSetup plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 19f3295cf76d7..85fb794b3cc01 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ace plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 4ebda4318d9c9..8161553290b5a 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/aiops-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 550ac8cb20799..64b400887b5f1 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/alerts plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 3f4cc7c569566..d94411838ac93 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 3136af1376608..076fb0b37b285 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-client plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 80bdfe134b71b..f43a920340a8a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index e8e4cae95cdfc..2c2d370c55530 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index a42f68ad5bfbe..0313b6a4bc96c 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 13b083414db81..7de051d50bd1d 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 554348a0e5c01..d616defe56978 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/apm-config-loader plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 5ed146c303a42..d7eefb5218955 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/apm-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index f78626fe88e42..995e5e5902dca 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/axe-config plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_bazel_packages.mdx b/api_docs/kbn_bazel_packages.mdx index 494bc11e96bf9..d70c566be14ef 100644 --- a/api_docs/kbn_bazel_packages.mdx +++ b/api_docs/kbn_bazel_packages.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-bazel-packages title: "@kbn/bazel-packages" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/bazel-packages plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bazel-packages'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_bazel_runner.mdx b/api_docs/kbn_bazel_runner.mdx index 5601cd9a16408..2415099300f2a 100644 --- a/api_docs/kbn_bazel_runner.mdx +++ b/api_docs/kbn_bazel_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-bazel-runner title: "@kbn/bazel-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/bazel-runner plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bazel-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 8e807b6ae5c70..4f87c899a1c89 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-core plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 0ba00e91f34ba..a252ee5af2af1 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-reporter plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index d58003cb99d4b..a08c2708487a1 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/cli-dev-mode plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index d6fc0458ba3e0..ec54a8a98a21b 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/coloring plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 46796f8545b8f..152e372f9838e 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 4652804afdd22..43254c641247c 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 30738e0b3d7d3..aac83c2bb4ae5 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config-schema plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 027bb3a07121b..b4a987b6c9c8a 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 176253ee51594..3014690067bf7 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 052627586ab3f..ac90c830633e2 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index c74c14c8e1f77..ced92a3a32d9a 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-browser-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 498d78df692f5..7a8ef3b91471a 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-common plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 0c501894d36f7..a813e133f6627 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-server-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 2ec238740efcb..6d78b0bfac021 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-browser plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index a05a15e7934de..8aeffa4b0a86a 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 7483e86df0d4f..5c4517d534751 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-server plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index b421b8563e6a7..57edcacd8f414 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_injected_metadata_browser.mdx b/api_docs/kbn_core_injected_metadata_browser.mdx index a5bb61d37be36..96861c44d2bd2 100644 --- a/api_docs/kbn_core_injected_metadata_browser.mdx +++ b/api_docs/kbn_core_injected_metadata_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser title: "@kbn/core-injected-metadata-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-injected-metadata-browser plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 225559552e479..c39204be565b9 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_logging_server.devdocs.json b/api_docs/kbn_core_logging_server.devdocs.json new file mode 100644 index 0000000000000..fb838f8e4c7e0 --- /dev/null +++ b/api_docs/kbn_core_logging_server.devdocs.json @@ -0,0 +1,984 @@ +{ + "id": "@kbn/core-logging-server", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.ConsoleAppenderConfig", + "type": "Interface", + "tags": [], + "label": "ConsoleAppenderConfig", + "description": [ + "\nConfiguration of a console appender" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/console.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.ConsoleAppenderConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"console\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/console.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.ConsoleAppenderConfig.layout", + "type": "CompoundType", + "tags": [], + "label": "layout", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.PatternLayoutConfigType", + "text": "PatternLayoutConfigType" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.JsonLayoutConfigType", + "text": "JsonLayoutConfigType" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/console.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.FileAppenderConfig", + "type": "Interface", + "tags": [], + "label": "FileAppenderConfig", + "description": [ + "\nConfiguration of a file appender" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/file.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.FileAppenderConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"file\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.FileAppenderConfig.layout", + "type": "CompoundType", + "tags": [], + "label": "layout", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.PatternLayoutConfigType", + "text": "PatternLayoutConfigType" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.JsonLayoutConfigType", + "text": "JsonLayoutConfigType" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.FileAppenderConfig.fileName", + "type": "string", + "tags": [], + "label": "fileName", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/file.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.JsonLayoutConfigType", + "type": "Interface", + "tags": [], + "label": "JsonLayoutConfigType", + "description": [ + "\nConfiguration of a json layout" + ], + "path": "packages/core/logging/core-logging-server/src/layout.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.JsonLayoutConfigType.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"json\"" + ], + "path": "packages/core/logging/core-logging-server/src/layout.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggerConfigType", + "type": "Interface", + "tags": [], + "label": "LoggerConfigType", + "description": [ + "\nDescribes the configuration of a given logger.\n" + ], + "path": "packages/core/logging/core-logging-server/src/logger.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggerConfigType.appenders", + "type": "Array", + "tags": [], + "label": "appenders", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/core/logging/core-logging-server/src/logger.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggerConfigType.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/core/logging/core-logging-server/src/logger.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggerConfigType.level", + "type": "CompoundType", + "tags": [], + "label": "level", + "description": [], + "signature": [ + "\"error\" | \"all\" | \"info\" | \"off\" | \"debug\" | \"trace\" | \"warn\" | \"fatal\"" + ], + "path": "packages/core/logging/core-logging-server/src/logger.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggerContextConfigInput", + "type": "Interface", + "tags": [], + "label": "LoggerContextConfigInput", + "description": [ + "\nInput used to configure logging dynamically using {@link LoggingServiceSetup.configure}" + ], + "path": "packages/core/logging/core-logging-server/src/contracts.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggerContextConfigInput.appenders", + "type": "CompoundType", + "tags": [], + "label": "appenders", + "description": [], + "signature": [ + "Record | Map | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/contracts.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggerContextConfigInput.loggers", + "type": "Array", + "tags": [], + "label": "loggers", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.LoggerConfigType", + "text": "LoggerConfigType" + }, + "[] | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/contracts.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggingServiceSetup", + "type": "Interface", + "tags": [], + "label": "LoggingServiceSetup", + "description": [ + "\nProvides APIs to plugins for customizing the plugin's logger." + ], + "path": "packages/core/logging/core-logging-server/src/contracts.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggingServiceSetup.configure", + "type": "Function", + "tags": [], + "label": "configure", + "description": [ + "\nCustomizes the logging config for the plugin's context.\n" + ], + "signature": [ + "(config$: ", + "Observable", + "<", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.LoggerContextConfigInput", + "text": "LoggerContextConfigInput" + }, + ">) => void" + ], + "path": "packages/core/logging/core-logging-server/src/contracts.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LoggingServiceSetup.configure.$1", + "type": "Object", + "tags": [], + "label": "config$", + "description": [], + "signature": [ + "Observable", + "<", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.LoggerContextConfigInput", + "text": "LoggerContextConfigInput" + }, + ">" + ], + "path": "packages/core/logging/core-logging-server/src/contracts.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.MetaRewritePolicyConfig", + "type": "Interface", + "tags": [], + "label": "MetaRewritePolicyConfig", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.MetaRewritePolicyConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"meta\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.MetaRewritePolicyConfig.mode", + "type": "CompoundType", + "tags": [], + "label": "mode", + "description": [ + "\nThe 'mode' specifies what action to perform on the specified properties.\n - 'update' updates an existing property at the provided 'path'.\n - 'remove' removes an existing property at the provided 'path'." + ], + "signature": [ + "\"update\" | \"remove\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.MetaRewritePolicyConfig.properties", + "type": "Array", + "tags": [], + "label": "properties", + "description": [ + "\nThe properties to modify.\n" + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.MetaRewritePolicyConfigProperty", + "text": "MetaRewritePolicyConfigProperty" + }, + "[]" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.MetaRewritePolicyConfigProperty", + "type": "Interface", + "tags": [], + "label": "MetaRewritePolicyConfigProperty", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.MetaRewritePolicyConfigProperty.path", + "type": "string", + "tags": [], + "label": "path", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.MetaRewritePolicyConfigProperty.value", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "string | number | boolean | null | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.NumericRollingStrategyConfig", + "type": "Interface", + "tags": [], + "label": "NumericRollingStrategyConfig", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.NumericRollingStrategyConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"numeric\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.NumericRollingStrategyConfig.pattern", + "type": "string", + "tags": [], + "label": "pattern", + "description": [ + "\nThe suffix pattern to apply when renaming a file. The suffix will be applied\nafter the `appender.fileName` file name, but before the file extension.\n\nMust include `%i`, as it is the value that will be converted to the file index\n" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.NumericRollingStrategyConfig.max", + "type": "number", + "tags": [], + "label": "max", + "description": [ + "\nThe maximum number of files to keep. Once this number is reached, oldest\nfiles will be deleted. Defaults to `7`" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.PatternLayoutConfigType", + "type": "Interface", + "tags": [], + "label": "PatternLayoutConfigType", + "description": [ + "\nConfiguration of a pattern layout" + ], + "path": "packages/core/logging/core-logging-server/src/layout.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.PatternLayoutConfigType.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"pattern\"" + ], + "path": "packages/core/logging/core-logging-server/src/layout.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.PatternLayoutConfigType.highlight", + "type": "CompoundType", + "tags": [], + "label": "highlight", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/layout.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.PatternLayoutConfigType.pattern", + "type": "string", + "tags": [], + "label": "pattern", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/layout.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RewriteAppenderConfig", + "type": "Interface", + "tags": [], + "label": "RewriteAppenderConfig", + "description": [ + "\nConfiguration of a rewrite appender" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RewriteAppenderConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"rewrite\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RewriteAppenderConfig.appenders", + "type": "Array", + "tags": [], + "label": "appenders", + "description": [ + "\nThe {@link Appender | appender(s)} to pass the log event to after\nimplementing the specified rewrite policy." + ], + "signature": [ + "string[]" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RewriteAppenderConfig.policy", + "type": "Object", + "tags": [], + "label": "policy", + "description": [ + "\nThe {@link RewritePolicy | policy} to use to manipulate the provided data." + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.MetaRewritePolicyConfig", + "text": "MetaRewritePolicyConfig" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RollingFileAppenderConfig", + "type": "Interface", + "tags": [], + "label": "RollingFileAppenderConfig", + "description": [ + "\nConfiguration of a rolling-file appender" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RollingFileAppenderConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"rolling-file\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RollingFileAppenderConfig.layout", + "type": "CompoundType", + "tags": [], + "label": "layout", + "description": [ + "\nThe layout to use when writing log entries" + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.PatternLayoutConfigType", + "text": "PatternLayoutConfigType" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.JsonLayoutConfigType", + "text": "JsonLayoutConfigType" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RollingFileAppenderConfig.fileName", + "type": "string", + "tags": [], + "label": "fileName", + "description": [ + "\nThe absolute path of the file to write to." + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RollingFileAppenderConfig.policy", + "type": "CompoundType", + "tags": [], + "label": "policy", + "description": [ + "\nThe {@link TriggeringPolicy | policy} to use to determine if a rollover should occur." + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.SizeLimitTriggeringPolicyConfig", + "text": "SizeLimitTriggeringPolicyConfig" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.TimeIntervalTriggeringPolicyConfig", + "text": "TimeIntervalTriggeringPolicyConfig" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RollingFileAppenderConfig.strategy", + "type": "Object", + "tags": [], + "label": "strategy", + "description": [ + "\nThe {@link RollingStrategy | rollout strategy} to use for rolling." + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.NumericRollingStrategyConfig", + "text": "NumericRollingStrategyConfig" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.SizeLimitTriggeringPolicyConfig", + "type": "Interface", + "tags": [], + "label": "SizeLimitTriggeringPolicyConfig", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.SizeLimitTriggeringPolicyConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"size-limit\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.SizeLimitTriggeringPolicyConfig.size", + "type": "Object", + "tags": [], + "label": "size", + "description": [ + "\nThe minimum size the file must have to roll over." + ], + "signature": [ + "ByteSizeValue" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.TimeIntervalTriggeringPolicyConfig", + "type": "Interface", + "tags": [], + "label": "TimeIntervalTriggeringPolicyConfig", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.TimeIntervalTriggeringPolicyConfig.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"time-interval\"" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.TimeIntervalTriggeringPolicyConfig.interval", + "type": "Object", + "tags": [], + "label": "interval", + "description": [ + "\nHow often a rollover should occur.\n" + ], + "signature": [ + "moment.Duration" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.TimeIntervalTriggeringPolicyConfig.modulate", + "type": "boolean", + "tags": [], + "label": "modulate", + "description": [ + "\nIndicates whether the interval should be adjusted to cause the next rollover to occur on the interval boundary.\n\nFor example, if the interval is `4h` and the current hour is 3 am then\nthe first rollover will occur at 4 am and then next ones will occur at 8 am, noon, 4pm, etc.\nThe default value is true." + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.AppenderConfigType", + "type": "Type", + "tags": [], + "label": "AppenderConfigType", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.ConsoleAppenderConfig", + "text": "ConsoleAppenderConfig" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.FileAppenderConfig", + "text": "FileAppenderConfig" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.RewriteAppenderConfig", + "text": "RewriteAppenderConfig" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.RollingFileAppenderConfig", + "text": "RollingFileAppenderConfig" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/index.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.LayoutConfigType", + "type": "Type", + "tags": [], + "label": "LayoutConfigType", + "description": [ + "\nConfiguration of a logging layout.\nSee {@link JsonLayoutConfigType} and {@link PatternLayoutConfigType}" + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.PatternLayoutConfigType", + "text": "PatternLayoutConfigType" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.JsonLayoutConfigType", + "text": "JsonLayoutConfigType" + } + ], + "path": "packages/core/logging/core-logging-server/src/layout.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RewritePolicyConfig", + "type": "Type", + "tags": [], + "label": "RewritePolicyConfig", + "description": [ + "\nAvailable rewrite policies which specify what part of a {@link LogRecord}\ncan be modified." + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.MetaRewritePolicyConfig", + "text": "MetaRewritePolicyConfig" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rewrite.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.RollingStrategyConfig", + "type": "Type", + "tags": [], + "label": "RollingStrategyConfig", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.NumericRollingStrategyConfig", + "text": "NumericRollingStrategyConfig" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-server.TriggeringPolicyConfig", + "type": "Type", + "tags": [], + "label": "TriggeringPolicyConfig", + "description": [ + "\nAny of the existing policy's configuration\n\nSee {@link SizeLimitTriggeringPolicyConfig} and {@link TimeIntervalTriggeringPolicyConfig}" + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.SizeLimitTriggeringPolicyConfig", + "text": "SizeLimitTriggeringPolicyConfig" + }, + " | ", + { + "pluginId": "@kbn/core-logging-server", + "scope": "server", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-server.TimeIntervalTriggeringPolicyConfig", + "text": "TimeIntervalTriggeringPolicyConfig" + } + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "initialIsOpen": false + } + ], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx new file mode 100644 index 0000000000000..c2664520f5a8c --- /dev/null +++ b/api_docs/kbn_core_logging_server.mdx @@ -0,0 +1,30 @@ +--- +id: kibKbnCoreLoggingServerPluginApi +slug: /kibana-dev-docs/api/kbn-core-logging-server +title: "@kbn/core-logging-server" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-logging-server plugin +date: 2022-06-21 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 56 | 0 | 30 | 0 | + +## Server + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_core_logging_server_internal.devdocs.json b/api_docs/kbn_core_logging_server_internal.devdocs.json new file mode 100644 index 0000000000000..058b446d5c2a6 --- /dev/null +++ b/api_docs/kbn_core_logging_server_internal.devdocs.json @@ -0,0 +1,184 @@ +{ + "id": "@kbn/core-logging-server-internal", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.getNextRollingTime", + "type": "Function", + "tags": [], + "label": "getNextRollingTime", + "description": [ + "\nReturn the next rollout time, given current time and rollout interval" + ], + "signature": [ + "(currentTime: number, interval: moment.Duration, modulate: boolean) => number" + ], + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.getNextRollingTime.$1", + "type": "number", + "tags": [], + "label": "currentTime", + "description": [], + "signature": [ + "number" + ], + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.getNextRollingTime.$2", + "type": "Object", + "tags": [], + "label": "interval", + "description": [], + "signature": [ + "moment.Duration" + ], + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.getNextRollingTime.$3", + "type": "boolean", + "tags": [], + "label": "modulate", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.PrebootDeps", + "type": "Interface", + "tags": [], + "label": "PrebootDeps", + "description": [], + "path": "packages/core/logging/core-logging-server-internal/src/logging_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.PrebootDeps.loggingSystem", + "type": "Object", + "tags": [], + "label": "loggingSystem", + "description": [], + "signature": [ + "ILoggingSystem" + ], + "path": "packages/core/logging/core-logging-server-internal/src/logging_service.ts", + "deprecated": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [ + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.appendersSchema", + "type": "Object", + "tags": [], + "label": "appendersSchema", + "description": [ + "\nConfig schema for validting the shape of the `appenders` key in in {@link LoggerContextConfigType} or\n{@link LoggingConfigType}.\n" + ], + "signature": [ + "Type", + " | Readonly<{ highlight?: boolean | undefined; pattern?: string | undefined; } & { type: \"pattern\"; }>; }> | Readonly<{} & { type: \"file\"; layout: Readonly<{} & { type: \"json\"; }> | Readonly<{ highlight?: boolean | undefined; pattern?: string | undefined; } & { type: \"pattern\"; }>; fileName: string; }> | Readonly<{} & { type: \"rewrite\"; policy: Readonly<{} & { type: \"meta\"; mode: \"update\" | \"remove\"; properties: Readonly<{ value?: string | number | boolean | null | undefined; } & { path: string; }>[]; }>; appenders: string[]; }> | Readonly<{} & { type: \"rolling-file\"; strategy: ", + "NumericRollingStrategyConfig", + "; layout: Readonly<{} & { type: \"json\"; }> | Readonly<{ highlight?: boolean | undefined; pattern?: string | undefined; } & { type: \"pattern\"; }>; policy: Readonly<{} & { size: ", + "ByteSizeValue", + "; type: \"size-limit\"; }> | Readonly<{} & { interval: moment.Duration; type: \"time-interval\"; modulate: boolean; }>; fileName: string; }>>" + ], + "path": "packages/core/logging/core-logging-server-internal/src/appenders/appenders.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.loggerContextConfigSchema", + "type": "Object", + "tags": [], + "label": "loggerContextConfigSchema", + "description": [ + "\nConfig schema for validating the inputs to the {@link LoggingServiceStart.configure} API.\nSee {@link LoggerContextConfigType}.\n" + ], + "signature": [ + "ObjectType", + "<{ appenders: ", + "Type", + ">; loggers: ", + "Type", + "[]>; }>" + ], + "path": "packages/core/logging/core-logging-server-internal/src/logging_config.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server-internal", + "id": "def-server.loggerSchema", + "type": "Object", + "tags": [], + "label": "loggerSchema", + "description": [ + "\nConfig schema for validating the `loggers` key in {@link LoggerContextConfigType} or {@link LoggingConfigType}.\n" + ], + "signature": [ + "ObjectType", + "<{ appenders: ", + "Type", + "; name: ", + "Type", + "; level: ", + "Type", + "<\"error\" | \"all\" | \"info\" | \"off\" | \"debug\" | \"trace\" | \"warn\" | \"fatal\">; }>" + ], + "path": "packages/core/logging/core-logging-server-internal/src/logging_config.ts", + "deprecated": false, + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx new file mode 100644 index 0000000000000..cc3af53be3195 --- /dev/null +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -0,0 +1,33 @@ +--- +id: kibKbnCoreLoggingServerInternalPluginApi +slug: /kibana-dev-docs/api/kbn-core-logging-server-internal +title: "@kbn/core-logging-server-internal" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-logging-server-internal plugin +date: 2022-06-21 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 9 | 0 | 5 | 1 | + +## Server + +### Objects + + +### Functions + + +### Interfaces + + diff --git a/api_docs/kbn_core_logging_server_mocks.devdocs.json b/api_docs/kbn_core_logging_server_mocks.devdocs.json new file mode 100644 index 0000000000000..d3ff7df8aee46 --- /dev/null +++ b/api_docs/kbn_core_logging_server_mocks.devdocs.json @@ -0,0 +1,243 @@ +{ + "id": "@kbn/core-logging-server-mocks", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [ + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingServiceMock", + "type": "Object", + "tags": [], + "label": "loggingServiceMock", + "description": [], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_service.mock.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingServiceMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => jest.Mocked" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingServiceMock.createSetupContract", + "type": "Function", + "tags": [], + "label": "createSetupContract", + "description": [], + "signature": [ + "() => jest.Mocked<", + "LoggingServiceSetup", + ">" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingServiceMock.createInternalPrebootContract", + "type": "Function", + "tags": [], + "label": "createInternalPrebootContract", + "description": [], + "signature": [ + "() => jest.Mocked<", + "InternalLoggingServicePreboot", + ">" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingServiceMock.createInternalSetupContract", + "type": "Function", + "tags": [], + "label": "createInternalSetupContract", + "description": [], + "signature": [ + "() => jest.Mocked<", + "InternalLoggingServicePreboot", + ">" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock", + "type": "Object", + "tags": [], + "label": "loggingSystemMock", + "description": [], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => jest.Mocked<", + "ILoggingSystem", + ">" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock.collect", + "type": "Function", + "tags": [], + "label": "collect", + "description": [], + "signature": [ + "(loggerFactory: ", + "LoggerFactory", + ") => { debug: [message: string, meta?: ", + "LogMeta", + " | undefined][]; error: [errorOrMessage: string | Error, meta?: ", + "LogMeta", + " | undefined][]; fatal: [errorOrMessage: string | Error, meta?: ", + "LogMeta", + " | undefined][]; info: [message: string, meta?: ", + "LogMeta", + " | undefined][]; log: [record: ", + "LogRecord", + "][]; trace: [message: string, meta?: ", + "LogMeta", + " | undefined][]; warn: [errorOrMessage: string | Error, meta?: ", + "LogMeta", + " | undefined][]; }" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock.collect.$1", + "type": "Object", + "tags": [], + "label": "loggerFactory", + "description": [], + "signature": [ + "LoggerFactory" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock.clear", + "type": "Function", + "tags": [], + "label": "clear", + "description": [], + "signature": [ + "(loggerFactory: ", + "LoggerFactory", + ") => void" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock.clear.$1", + "type": "Object", + "tags": [], + "label": "loggerFactory", + "description": [], + "signature": [ + "LoggerFactory" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock.createLogger", + "type": "Function", + "tags": [], + "label": "createLogger", + "description": [], + "signature": [ + "(context?: string[] | undefined) => ", + "MockedLogger" + ], + "path": "packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-logging-server-mocks", + "id": "def-server.loggingSystemMock.createLogger.$1", + "type": "Array", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "node_modules/@types/kbn__logging-mocks/index.d.ts", + "deprecated": false + } + ] + } + ], + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx new file mode 100644 index 0000000000000..535d4d3a932b5 --- /dev/null +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -0,0 +1,27 @@ +--- +id: kibKbnCoreLoggingServerMocksPluginApi +slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks +title: "@kbn/core-logging-server-mocks" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-logging-server-mocks plugin +date: 2022-06-21 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 13 | 0 | 12 | 0 | + +## Server + +### Objects + + diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 27e517a9eb85b..5f379191fe282 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 80e7aa5fb18b8..2162544a05f48 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 8a9d55345def6..95f2e776c80e5 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/crypto plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 6f1bb0dfd490a..c3811fd412a2e 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/datemath plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index ff971f7f17a66..f585bdc573c75 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-cli-errors plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index fb4757bfdeda4..e30cdaa95acac 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-cli-runner plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 32c25ec0a34c0..46fa0a53d918f 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-proc-runner plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 2e404f4f90d6e..1e5f7b4f3af51 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 1e18e178c60b1..a593ea5035957 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/doc-links plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index a0e757b961abd..08ffcde971221 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/docs-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 630d2d9bdcdae..4ff0302d119ec 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-archiver plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 21eb0c8e4a09c..63b6540345873 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-query plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 0d43b6ce69524..5380651f5a379 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/eslint-plugin-imports plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 843f19ad00106..f7e83c49e3531 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/field-types plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 534a5c3d074e5..a060876ef8294 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/find-used-node-modules plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 9f1670667c02a..f6dc380c6eb57 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/generate plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 2869a23da1caa..2f6eb81c13c6e 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/handlebars plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 9a334754f6e25..ae11aab2ae80e 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/i18n plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 6da70ba47f580..8330b2ec0d1ad 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/import-resolver plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 65f3571e01d53..7b06cbd48ba6a 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/interpreter plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 97a5703265f3b..d57be8829be1c 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/io-ts-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 4a4c6e156b968..c6aefbd3a2a73 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/jest-serializers plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_kibana_json_schema.mdx b/api_docs/kbn_kibana_json_schema.mdx index e01413720f96a..f666a6a35d16d 100644 --- a/api_docs/kbn_kibana_json_schema.mdx +++ b/api_docs/kbn_kibana_json_schema.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-json-schema title: "@kbn/kibana-json-schema" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/kibana-json-schema plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-json-schema'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 90bce73503e11..748ca8964b47e 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/logging plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 7a6e7a2150d91..116a3e5bfb5a3 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/logging-mocks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index f88beec0483e5..305bce79f7a17 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/mapbox-gl plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index cc2da152502e5..28f3452aa0801 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/monaco plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 2babb3818c770..ce97dea91ec10 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/optimizer plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 49ddb2dd0123e..19a148f1b9a64 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 0fc6d5d92566d..70f66a8d84e60 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_discovery.mdx b/api_docs/kbn_plugin_discovery.mdx index 82ebf993bc741..06e9bfecbf28b 100644 --- a/api_docs/kbn_plugin_discovery.mdx +++ b/api_docs/kbn_plugin_discovery.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-discovery title: "@kbn/plugin-discovery" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-discovery plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-discovery'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 7fe029225fd65..4d156a34493ca 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-generator plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 1a9a87371c22d..f96db886af8ee 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-helpers plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_pm.mdx b/api_docs/kbn_pm.mdx index 7bca639f15929..1e8d2e041ad8c 100644 --- a/api_docs/kbn_pm.mdx +++ b/api_docs/kbn_pm.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-pm title: "@kbn/pm" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/pm plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/pm'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index b74dbc2d92963..21a881b8c9e94 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/react-field plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 3a672674f65fb..bca0097fd340c 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/rule-data-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_scalability_simulation_generator.mdx b/api_docs/kbn_scalability_simulation_generator.mdx index d757c75bed9e9..99e0436572c4c 100644 --- a/api_docs/kbn_scalability_simulation_generator.mdx +++ b/api_docs/kbn_scalability_simulation_generator.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-scalability-simulation-generator title: "@kbn/scalability-simulation-generator" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/scalability-simulation-generator plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scalability-simulation-generator'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index f194f39a79b64..befdcbf244df1 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 64157f1a5879a..14e3623c1d2f1 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-es-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 17d13adb0243f..a5d22f2856471 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index d645d143b0114..b6dbcd138101b 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index a1dc982b9585f..9b722a3e50c54 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 70aa47217a41f..c28cef5e556ac 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index a7bb616edb57a..986209b3533f0 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 03b99c06674f2..c3df2a70c2ca5 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-api plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 4757db78f5d22..e7bc1ce950efa 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-constants plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index f7a0e168ede3e..aaf737e4d5b00 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index eb9463c14ab62..d4ac078abbad4 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 8fc02370eb73f..c3075b99ee570 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-rules plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 7c6a273a06627..629e39084edf0 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-t-grid plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index ffc024d571746..37ec345bcef94 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 57e19cdde4411..e283d62175b26 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/server-http-tools plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index c930a2eea34fc..42035384c3d57 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/server-route-repository plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_components.mdx b/api_docs/kbn_shared_ux_components.mdx index ce7f727cf2c0a..bcc049c525f48 100644 --- a/api_docs/kbn_shared_ux_components.mdx +++ b/api_docs/kbn_shared_ux_components.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-components title: "@kbn/shared-ux-components" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-components plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-components'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 52a296ad4bedd..480849798cd98 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 3cfc74807e388..e47f5b9daf814 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 396a8c5374909..255b56f6a9dd8 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_services.mdx b/api_docs/kbn_shared_ux_services.mdx index fe9cc82d9e763..14cd49894a5e7 100644 --- a/api_docs/kbn_shared_ux_services.mdx +++ b/api_docs/kbn_shared_ux_services.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-services title: "@kbn/shared-ux-services" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-services plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-services'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_storybook.mdx b/api_docs/kbn_shared_ux_storybook.mdx index 406cb27be4220..b405fd2cf9465 100644 --- a/api_docs/kbn_shared_ux_storybook.mdx +++ b/api_docs/kbn_shared_ux_storybook.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook title: "@kbn/shared-ux-storybook" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-storybook plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 6b165f3deb40d..7decdcc305e7b 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-utility plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_sort_package_json.mdx b/api_docs/kbn_sort_package_json.mdx index 655955b014ee7..7e5e5c6eceb3c 100644 --- a/api_docs/kbn_sort_package_json.mdx +++ b/api_docs/kbn_sort_package_json.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-sort-package-json title: "@kbn/sort-package-json" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/sort-package-json plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-package-json'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index cec7a5b7e2bd1..3368a7ab9c159 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/std plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 96fdabd6a8c49..402b716b6cc1f 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/stdio-dev-helpers plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 22ee4fc78462b..bd1a62e3435df 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/storybook plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 281cb53a0163b..5521938204a73 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/telemetry-tools plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index b998b81e39326..6f1b84a16cd16 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/test plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 76d58552b017a..d782de1dae9f6 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/test-jest-helpers plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 1e74a3ad43bfb..b6014d1b8c0eb 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/tooling-log plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_type_summarizer.mdx b/api_docs/kbn_type_summarizer.mdx index 73fff26688083..df57d5d260f5f 100644 --- a/api_docs/kbn_type_summarizer.mdx +++ b/api_docs/kbn_type_summarizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer title: "@kbn/type-summarizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/type-summarizer plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 6689af703250d..ae6037a1263f3 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/typed-react-router-config plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index ed395b2dc7893..aa9b3fb0ea96f 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ui-theme plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 265c2033e9729..797ab4c9112d8 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utility-types plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 4be371b7fe8a8..1a67afdbbd632 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utility-types-jest plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index c325031caaae6..0f4d4f4b7174a 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index e40e26df82817..78ed43bbada8f 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaOverview plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 578d40ad72101..2242d950f6c29 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaReact plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index b92cb11549ce3..fbd9b5bdd4acf 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaUtils plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 701af09b59c8e..bef023719b650 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github summary: API docs for the kubernetesSecurity plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index ae6ee08a0243d..1f41d750347a1 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github summary: API docs for the lens plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index a78351084c110..0311a4144606e 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github summary: API docs for the licenseApiGuard plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 6d589dc2be840..64d2d74d65595 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the licenseManagement plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 63cd961bf6aa1..90c723377b5b2 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github summary: API docs for the licensing plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index de1dda07bc6e0..374c61201b9aa 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github summary: API docs for the lists plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 0dbc8cbb9ebfb..ec9cedc1b123d 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github summary: API docs for the management plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index b330d3baa5ae5..48aea2c4895dc 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github summary: API docs for the maps plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 30c51ecb35576..9d4043ad6cc75 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github summary: API docs for the mapsEms plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index d39e1667dbced..1ea342d35e1de 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github summary: API docs for the ml plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index d5f3c1a34705a..748bb78ac66d1 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github summary: API docs for the monitoring plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index e3bc1a571cd2b..088a3a7cac1d3 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github summary: API docs for the monitoringCollection plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index bf656ce1928c0..207c3bb12cf30 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github summary: API docs for the navigation plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 87adddfbf7acb..8048f69d979dc 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github summary: API docs for the newsfeed plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index b19b9fb22783c..17c7f3d460722 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github summary: API docs for the observability plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 21bf30d1d84e4..f7e4d6adb8263 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github summary: API docs for the osquery plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 5f5c5a1f4d211..32383fd0f8d8b 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -3,7 +3,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory summary: Directory of public APIs available through plugins or packages. -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -12,13 +12,13 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 287 | 230 | 35 | +| 290 | 233 | 35 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 26541 | 172 | 19102 | 1242 | +| 26620 | 172 | 19141 | 1252 | ## Plugin Directory @@ -27,7 +27,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 241 | 0 | 236 | 19 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 23 | 0 | 19 | 1 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 11 | 0 | 0 | 0 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 359 | 0 | 350 | 20 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 363 | 0 | 354 | 20 | | | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 40 | 0 | 40 | 55 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 78 | 1 | 69 | 2 | @@ -38,12 +38,12 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-posture-security) | The cloud security posture plugin | 14 | 0 | 14 | 0 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 13 | 0 | 13 | 1 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 206 | 0 | 198 | 7 | -| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2524 | 15 | 946 | 33 | +| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2527 | 15 | 940 | 29 | | crossClusterReplication | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | | [Fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 101 | 0 | 82 | 1 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 143 | 0 | 141 | 12 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 52 | 0 | 51 | 0 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3379 | 35 | 2525 | 21 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3372 | 35 | 2518 | 21 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | This plugin provides the ability to create data views via a modal flyout from any kibana app | 15 | 0 | 7 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Reusable data view field editor across Kibana | 42 | 0 | 37 | 3 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data view management app | 2 | 0 | 2 | 0 | @@ -141,7 +141,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 436 | 1 | 332 | 35 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [Kibana Localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 388 | 0 | 374 | 34 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 389 | 0 | 375 | 35 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds UI Actions service to Kibana | 130 | 0 | 91 | 11 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Extends UI Actions plugin with more functionality | 205 | 0 | 142 | 9 | | | [Unified Search](https://github.com/orgs/elastic/teams/kibana-app-services) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 82 | 2 | 78 | 13 | @@ -204,6 +204,9 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Owner missing] | - | 4 | 0 | 4 | 0 | | | [Owner missing] | - | 8 | 2 | 6 | 0 | | | [Owner missing] | - | 4 | 0 | 4 | 0 | +| | [Owner missing] | - | 56 | 0 | 30 | 0 | +| | [Owner missing] | - | 9 | 0 | 5 | 1 | +| | [Owner missing] | - | 13 | 0 | 12 | 0 | | | [Owner missing] | - | 6 | 0 | 4 | 0 | | | [Owner missing] | - | 6 | 0 | 6 | 0 | | | [Owner missing] | - | 13 | 0 | 7 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 428aea39f9a19..8d17c70635b98 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github summary: API docs for the presentationUtil plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 53937a24e9b6b..a042b3740a67f 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github summary: API docs for the remoteClusters plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 9dedf85aeee85..b1c829f78678e 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github summary: API docs for the reporting plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index b5f20c27512d0..d10a59bbd07d3 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github summary: API docs for the rollup plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 40931242a3bd2..33f15039f24ae 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github summary: API docs for the ruleRegistry plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 5c748a9dabfe7..89138bbe32a3b 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github summary: API docs for the runtimeFields plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 42614109c93a0..a61a7eee2ca45 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjects plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 47af39a7b11ba..7b15727ad98e6 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsManagement plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 8645eef9f92e7..e4c11a2821387 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsTagging plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 4af9e977a3857..49c58d8bd77f3 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsTaggingOss plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index b7a062fe9da8c..61d950b32adfa 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github summary: API docs for the screenshotMode plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index db0ff186e2f0d..517de3434b0ad 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github summary: API docs for the screenshotting plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/security.mdx b/api_docs/security.mdx index c36b96a3f2243..341da1ff265f2 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github summary: API docs for the security plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index ede3e3ea9dddb..c79b7d1ed0fc4 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github summary: API docs for the securitySolution plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index d80211dc276a1..c4ea5ee61f820 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github summary: API docs for the sessionView plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 77259c9265a3f..85d7476dfa0f2 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github summary: API docs for the share plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/shared_u_x.mdx b/api_docs/shared_u_x.mdx index ae6f9ef9e103f..500e70f9d6fac 100644 --- a/api_docs/shared_u_x.mdx +++ b/api_docs/shared_u_x.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/sharedUX title: "sharedUX" image: https://source.unsplash.com/400x175/?github summary: API docs for the sharedUX plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sharedUX'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index d5cd7c997e89c..72118a77eee39 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github summary: API docs for the snapshotRestore plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index f9eff9907ef0c..bf0983152c457 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github summary: API docs for the spaces plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 93c9350c6b770..183b1f1105347 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github summary: API docs for the stackAlerts plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index a7bfa6cf50e08..1426b95f84d09 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github summary: API docs for the taskManager plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index fbaa5ebf8ac88..495a173de69f4 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetry plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 57fb71e79634e..374f795aa17ff 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryCollectionManager plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index a5b93f12daf42..be49b24529e5e 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryCollectionXpack plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 5a54d20a2fb23..21dea3bcd1f30 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryManagementSection plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 6de0c0a300e9f..44c529cd368f1 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github summary: API docs for the timelines plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 8e45e8bffc28d..f0407efcf8d13 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github summary: API docs for the transform plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index b57a0505d7df8..0b434e11ba237 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1536,7 +1536,9 @@ "label": "snoozeRule", "description": [], "signature": [ - "({\n id,\n snoozeEndTime,\n http,\n}: { id: string; snoozeEndTime: string | -1; http: ", + "({\n id,\n snoozeSchedule,\n http,\n}: { id: string; snoozeSchedule: ", + "SnoozeSchedule", + "; http: ", { "pluginId": "core", "scope": "public", @@ -1554,7 +1556,7 @@ "id": "def-public.snoozeRule.$1", "type": "Object", "tags": [], - "label": "{\n id,\n snoozeEndTime,\n http,\n}", + "label": "{\n id,\n snoozeSchedule,\n http,\n}", "description": [], "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.ts", "deprecated": false, @@ -1571,13 +1573,13 @@ }, { "parentPluginId": "triggersActionsUi", - "id": "def-public.snoozeRule.$1.snoozeEndTime", - "type": "CompoundType", + "id": "def-public.snoozeRule.$1.snoozeSchedule", + "type": "Object", "tags": [], - "label": "snoozeEndTime", + "label": "snoozeSchedule", "description": [], "signature": [ - "string | -1" + "SnoozeSchedule" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/snooze.ts", "deprecated": false @@ -1758,7 +1760,7 @@ "label": "unsnoozeRule", "description": [], "signature": [ - "({ id, http }: { id: string; http: ", + "({\n id,\n http,\n scheduleIds,\n}: { id: string; http: ", { "pluginId": "core", "scope": "public", @@ -1766,7 +1768,7 @@ "section": "def-public.HttpSetup", "text": "HttpSetup" }, - "; }) => Promise" + "; scheduleIds?: string[] | undefined; }) => Promise" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts", "deprecated": false, @@ -1776,7 +1778,7 @@ "id": "def-public.unsnoozeRule.$1", "type": "Object", "tags": [], - "label": "{ id, http }", + "label": "{\n id,\n http,\n scheduleIds,\n}", "description": [], "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts", "deprecated": false, @@ -1809,6 +1811,19 @@ ], "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts", "deprecated": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.unsnoozeRule.$1.scheduleIds", + "type": "Array", + "tags": [], + "label": "scheduleIds", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/unsnooze.ts", + "deprecated": false } ] } diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index a06696d3a1fb7..80428368d4eac 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github summary: API docs for the triggersActionsUi plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 388 | 0 | 374 | 34 | +| 389 | 0 | 375 | 35 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index b38f001c99559..91add4fe3a647 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github summary: API docs for the uiActions plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 12ec1f9d91d49..3c4dd685e0dfb 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the uiActionsEnhanced plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 1a6140c152741..e8c89e1094e70 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the unifiedSearch plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 0402f9998ac50..4b52092837842 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github summary: API docs for the unifiedSearch.autocomplete plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 14279e05aa50f..c12a378c02365 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github summary: API docs for the urlForwarding plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 1ccbd1d0e2192..5e94564ea7785 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github summary: API docs for the usageCollection plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 400c2d5d334aa..dd3e748e4f8da 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github summary: API docs for the ux plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 6b55e7f068e9c..36ded170d7d2f 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the visDefaultEditor plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 0b2024c1812b2..d410523075e93 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeGauge plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 6c539144c5bc8..e2e148842026b 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeHeatmap plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 2052df6e4c629..b38616526e102 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypePie plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 4eb6a448fd2dd..eb93a2b5f1105 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTable plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index c52b9c2628ba2..42c8cd671ebe2 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTimelion plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index d94c8c83f7c68..c3f505b257520 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTimeseries plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index fd1fe2fec5668..6adce6d305f4f 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeVega plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 997add33f225e..daf06b80d1df9 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeVislib plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index b41cf3c71b12e..6012d5344f67b 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeXy plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index c0669504f7365..f1fc3dd6e816f 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github summary: API docs for the visualizations plugin -date: 2022-06-20 +date: 2022-06-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- From 9ec4d311edf834fb6177625adcd845d2c967155d Mon Sep 17 00:00:00 2001 From: Clint Andrew Hall Date: Tue, 21 Jun 2022 02:00:57 -0500 Subject: [PATCH 19/50] [Shared UX] Move Solution Toolbar components to package (#134392) * [Shared UX] Move Solution Toolbar components to package * Addressing feedback * [CI] Auto-commit changed files from 'node scripts/generate packages_build_manifest' * Adding support to jest_config_check * Fixing i18n * Apply suggestions from code review Co-authored-by: Caroline Horn <549577+cchaos@users.noreply.github.com> * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Caroline Horn <549577+cchaos@users.noreply.github.com> --- package.json | 2 + packages/BUILD.bazel | 2 + .../src/bazel_package_dirs.ts | 1 + .../kbn-shared-ux-components/src/index.ts | 1 - .../add_from_library.test.tsx.snap | 76 --- .../add_from_library/add_from_library.mdx | 10 - .../icon_button_group.test.tsx.snap | 326 ---------- .../icon_button_group/icon_button_group.mdx | 20 - .../__snapshots__/primary.test.tsx.snap | 101 --- .../src/toolbar/buttons/primary/primary.mdx | 12 - .../__snapshots__/popover.test.tsx.snap | 89 --- packages/shared-ux/button_toolbar/BUILD.bazel | 138 ++++ packages/shared-ux/button_toolbar/README.mdx | 9 + .../shared-ux/button_toolbar/jest.config.js | 13 + .../shared-ux/button_toolbar/package.json | 8 + .../add_from_library.test.tsx.snap | 587 ++++++++++++++++++ .../add_from_library.stories.tsx | 12 +- .../add_from_library.test.tsx | 6 +- .../add_from_library/add_from_library.tsx | 9 +- .../src/buttons/add_from_library}/index.ts | 7 +- .../icon_button_group.test.tsx.snap | 384 ++++++++++++ .../icon_button_group.stories.tsx | 25 +- .../icon_button_group.styles.ts | 0 .../icon_button_group.test.tsx | 18 +- .../icon_button_group/icon_button_group.tsx | 32 +- .../src/buttons/icon_button_group/index.ts | 10 + .../button_toolbar/src/buttons/index.ts | 16 + .../__snapshots__/primary.test.tsx.snap | 465 ++++++++++++++ .../src/buttons/primary/index.ts | 10 + .../src}/buttons/primary/primary.stories.tsx | 38 +- .../src}/buttons/primary/primary.test.tsx | 25 +- .../src}/buttons/primary/primary.tsx | 8 +- .../shared-ux/button_toolbar/src/index.ts | 18 + .../__snapshots__/popover.test.tsx.snap | 395 ++++++++++++ .../button_toolbar/src/popover/index.ts | 10 + .../button_toolbar/src/popover}/popover.mdx | 0 .../src/popover}/popover.stories.tsx | 47 +- .../src/popover}/popover.test.tsx | 9 +- .../button_toolbar/src/popover}/popover.tsx | 10 +- .../shared-ux/button_toolbar/tsconfig.json | 19 + .../solution_toolbar/items/index.ts | 2 +- src/plugins/presentation_util/public/index.ts | 2 +- .../translations/translations/fr-FR.json | 2 +- .../translations/translations/ja-JP.json | 2 +- .../translations/translations/zh-CN.json | 2 +- yarn.lock | 8 + 46 files changed, 2223 insertions(+), 763 deletions(-) delete mode 100644 packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap delete mode 100644 packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.mdx delete mode 100644 packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap delete mode 100644 packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.mdx delete mode 100644 packages/kbn-shared-ux-components/src/toolbar/buttons/primary/__snapshots__/primary.test.tsx.snap delete mode 100644 packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.mdx delete mode 100644 packages/kbn-shared-ux-components/src/toolbar/popovers/__snapshots__/popover.test.tsx.snap create mode 100644 packages/shared-ux/button_toolbar/BUILD.bazel create mode 100644 packages/shared-ux/button_toolbar/README.mdx create mode 100644 packages/shared-ux/button_toolbar/jest.config.js create mode 100644 packages/shared-ux/button_toolbar/package.json create mode 100644 packages/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/add_from_library/add_from_library.stories.tsx (61%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/add_from_library/add_from_library.test.tsx (82%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/add_from_library/add_from_library.tsx (68%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src/buttons/add_from_library}/index.ts (56%) create mode 100644 packages/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/icon_button_group/icon_button_group.stories.tsx (70%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/icon_button_group/icon_button_group.styles.ts (100%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/icon_button_group/icon_button_group.test.tsx (60%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/icon_button_group/icon_button_group.tsx (78%) create mode 100644 packages/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts create mode 100644 packages/shared-ux/button_toolbar/src/buttons/index.ts create mode 100644 packages/shared-ux/button_toolbar/src/buttons/primary/__snapshots__/primary.test.tsx.snap create mode 100644 packages/shared-ux/button_toolbar/src/buttons/primary/index.ts rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/primary/primary.stories.tsx (52%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/primary/primary.test.tsx (51%) rename packages/{kbn-shared-ux-components/src/toolbar => shared-ux/button_toolbar/src}/buttons/primary/primary.tsx (81%) create mode 100644 packages/shared-ux/button_toolbar/src/index.ts create mode 100644 packages/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap create mode 100644 packages/shared-ux/button_toolbar/src/popover/index.ts rename packages/{kbn-shared-ux-components/src/toolbar/popovers => shared-ux/button_toolbar/src/popover}/popover.mdx (100%) rename packages/{kbn-shared-ux-components/src/toolbar/popovers => shared-ux/button_toolbar/src/popover}/popover.stories.tsx (66%) rename packages/{kbn-shared-ux-components/src/toolbar/popovers => shared-ux/button_toolbar/src/popover}/popover.test.tsx (81%) rename packages/{kbn-shared-ux-components/src/toolbar/popovers => shared-ux/button_toolbar/src/popover}/popover.tsx (86%) create mode 100644 packages/shared-ux/button_toolbar/tsconfig.json diff --git a/package.json b/package.json index fd4892f5d53d0..0cf2676cdc172 100644 --- a/package.json +++ b/package.json @@ -210,6 +210,7 @@ "@kbn/server-route-repository": "link:bazel-bin/packages/kbn-server-route-repository", "@kbn/shared-ux-avatar-solution": "link:bazel-bin/packages/shared-ux/avatar/solution", "@kbn/shared-ux-button-exit-full-screen": "link:bazel-bin/packages/shared-ux/button/exit_full_screen", + "@kbn/shared-ux-button-toolbar": "link:bazel-bin/packages/shared-ux/button_toolbar", "@kbn/shared-ux-components": "link:bazel-bin/packages/kbn-shared-ux-components", "@kbn/shared-ux-link-redirect-app": "link:bazel-bin/packages/shared-ux/link/redirect_app", "@kbn/shared-ux-page-analytics-no-data": "link:bazel-bin/packages/shared-ux/page/analytics_no_data", @@ -749,6 +750,7 @@ "@types/kbn__server-route-repository": "link:bazel-bin/packages/kbn-server-route-repository/npm_module_types", "@types/kbn__shared-ux-avatar-solution": "link:bazel-bin/packages/shared-ux/avatar/solution/npm_module_types", "@types/kbn__shared-ux-button-exit-full-screen": "link:bazel-bin/packages/shared-ux/button/exit_full_screen/npm_module_types", + "@types/kbn__shared-ux-button-toolbar": "link:bazel-bin/packages/shared-ux/button_toolbar/npm_module_types", "@types/kbn__shared-ux-components": "link:bazel-bin/packages/kbn-shared-ux-components/npm_module_types", "@types/kbn__shared-ux-link-redirect-app": "link:bazel-bin/packages/shared-ux/link/redirect_app/npm_module_types", "@types/kbn__shared-ux-page-analytics-no-data": "link:bazel-bin/packages/shared-ux/page/analytics_no_data/npm_module_types", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index 9bcf6572cdc08..cc5c0e13dcccf 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -144,6 +144,7 @@ filegroup( "//packages/kbn-utility-types:build", "//packages/kbn-utils:build", "//packages/shared-ux/avatar/solution:build", + "//packages/shared-ux/button_toolbar:build", "//packages/shared-ux/button/exit_full_screen:build", "//packages/shared-ux/link/redirect_app:build", "//packages/shared-ux/page/analytics_no_data:build", @@ -276,6 +277,7 @@ filegroup( "//packages/kbn-utility-types:build_types", "//packages/kbn-utils:build_types", "//packages/shared-ux/avatar/solution:build_types", + "//packages/shared-ux/button_toolbar:build_types", "//packages/shared-ux/button/exit_full_screen:build_types", "//packages/shared-ux/link/redirect_app:build_types", "//packages/shared-ux/page/analytics_no_data:build_types", diff --git a/packages/kbn-bazel-packages/src/bazel_package_dirs.ts b/packages/kbn-bazel-packages/src/bazel_package_dirs.ts index a23b54317454a..5c0bfb5d4595b 100644 --- a/packages/kbn-bazel-packages/src/bazel_package_dirs.ts +++ b/packages/kbn-bazel-packages/src/bazel_package_dirs.ts @@ -21,6 +21,7 @@ import { REPO_ROOT } from '@kbn/utils'; */ export const BAZEL_PACKAGE_DIRS = [ 'packages', + 'packages/shared-ux', 'packages/shared-ux/*', 'packages/analytics', 'packages/analytics/shippers', diff --git a/packages/kbn-shared-ux-components/src/index.ts b/packages/kbn-shared-ux-components/src/index.ts index 68772ed90121c..970e584d95782 100644 --- a/packages/kbn-shared-ux-components/src/index.ts +++ b/packages/kbn-shared-ux-components/src/index.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -export { ToolbarButton, IconButtonGroup, AddFromLibraryButton, ToolbarPopover } from './toolbar'; export { KibanaPageTemplateSolutionNav } from './page_template/solution_nav'; // TODO: clintandrewhall - NoDataPageProps is a temporary addition until it is split into its own package diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap b/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap deleted file mode 100644 index 520184f0f96dc..0000000000000 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` is rendered 1`] = ` - - - - - - - - - -`; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.mdx b/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.mdx deleted file mode 100644 index f6a2f92cd41eb..0000000000000 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -id: sharedUX/Components/AddFromLibraryButton -slug: /shared-ux/components/toolbar/buttons/add_from_library -title: Add From Library Button -summary: An example of the primary button -tags: ['shared-ux', 'component'] -date: 2022-03-18 ---- - -This button is an example of the primary button. diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap b/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap deleted file mode 100644 index 8091bd222d1a3..0000000000000 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap +++ /dev/null @@ -1,326 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` is rendered 1`] = ` - - - -
- - - Legend - - -
- - - - - - - , - , - , - , - ], - }, - } - } - isStringTag={false} - serialized={ - Object { - "map": undefined, - "name": "iuv015-EuiButtonGroup", - "next": undefined, - "styles": "&.euiButtonGroupButton{background-color:#FFF;border:1px solid #D3DAE6 !important;&:first-of-type{border-top-left-radius:6px !important;border-bottom-left-radius:6px !important;}&:last-of-type{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important;}};;label:EuiButtonGroup;", - "toString": [Function], - } - } - /> - - - - - - -
-
-
-
-
-`; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.mdx b/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.mdx deleted file mode 100644 index 979bfb24a0f2f..0000000000000 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -id: sharedUX/Components/Toolbar/Icon_Button_Group -slug: /shared-ux/components/toolbar/icon_button_group -title: Toolbar Icon Button Group -summary: 'An array of icon-only buttons for use in a toolbar' -tags: ['shared-ux', 'component'] -date: 2022-02-23 ---- - -> This documentation is in-progress. - -This component requires a prop that consists of a series of buttons that can then be displayed based on the number of buttons desired. An example of a button that can be part of an array of icon buttons is included below: - -``` - { - label: 'Text', - onClick: clickHandler, - iconType: 'visText', - } -``` diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/__snapshots__/primary.test.tsx.snap b/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/__snapshots__/primary.test.tsx.snap deleted file mode 100644 index fbe628e30314c..0000000000000 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/__snapshots__/primary.test.tsx.snap +++ /dev/null @@ -1,101 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` is rendered 1`] = ` - - - - - - - - - -`; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.mdx b/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.mdx deleted file mode 100644 index 5b72eb92360be..0000000000000 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -id: sharedUX/Components/ToolbarButton -slug: /shared-ux/components/toolbar/buttons/primary -title: Toolbar Button -summary: An opinionated implementation of the toolbar extracted to just the button. -tags: ['shared-ux', 'component'] -date: 2022-03-30 ---- - -> This documentation is in-progress. - -This button is a part of the solution toolbar component. This button has primary styling and requires a label. OnClick handlers, icon side, and icon types are supported as an extension of EuiButtonProps. Icons by default are left of any labels within the button but can also be set to right. diff --git a/packages/kbn-shared-ux-components/src/toolbar/popovers/__snapshots__/popover.test.tsx.snap b/packages/kbn-shared-ux-components/src/toolbar/popovers/__snapshots__/popover.test.tsx.snap deleted file mode 100644 index c38d0b8e4cd7c..0000000000000 --- a/packages/kbn-shared-ux-components/src/toolbar/popovers/__snapshots__/popover.test.tsx.snap +++ /dev/null @@ -1,89 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` is rendered 1`] = ` - - - } - closePopover={[Function]} - display="inlineBlock" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelPaddingSize="m" - > -
-
- - - - - - - -
-
-
-
-`; diff --git a/packages/shared-ux/button_toolbar/BUILD.bazel b/packages/shared-ux/button_toolbar/BUILD.bazel new file mode 100644 index 0000000000000..cbba92916a3a5 --- /dev/null +++ b/packages/shared-ux/button_toolbar/BUILD.bazel @@ -0,0 +1,138 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "button_toolbar" +PKG_REQUIRE_NAME = "@kbn/shared-ux-button-toolbar" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.scss", + "src/**/*.mdx", + ], + exclude = [ + "**/*.test.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +# In this array place runtime dependencies, including other packages and NPM packages +# which must be available for this code to run. +# +# To reference other packages use: +# "//repo/relative/path/to/package" +# eg. "//packages/kbn-utils" +# +# To reference a NPM package use: +# "@npm//name-of-package" +# eg. "@npm//lodash" +RUNTIME_DEPS = [ + "@npm//@elastic/eui", + "@npm//react", + "//packages/kbn-i18n-react", + "//packages/kbn-i18n", +] + +# In this array place dependencies necessary to build the types, which will include the +# :npm_module_types target of other packages and packages from NPM, including @types/* +# packages. +# +# To reference the types for another package use: +# "//repo/relative/path/to/package:npm_module_types" +# eg. "//packages/kbn-utils:npm_module_types" +# +# References to NPM packages work the same as RUNTIME_DEPS +TYPES_DEPS = [ + "@npm//@elastic/eui", + "@npm//@storybook/addon-actions", + "@npm//@types/jest", + "@npm//@types/node", + "@npm//@types/react", + "//packages/kbn-ambient-ui-types", + "//packages/kbn-i18n-react:npm_module_types", + "//packages/kbn-i18n:npm_module_types", +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, + additional_args = [ + "--copy-files", + "--quiet" + ], +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/shared-ux/button_toolbar/README.mdx b/packages/shared-ux/button_toolbar/README.mdx new file mode 100644 index 0000000000000..fb693dab44498 --- /dev/null +++ b/packages/shared-ux/button_toolbar/README.mdx @@ -0,0 +1,9 @@ +--- +id: sharedUX/ButtonToolbar +slug: /shared-ux/button-toolbar +title: Button Toolbar +summary: +tags: ['shared-ux', 'component'] +date: 2022-06-14 +--- + diff --git a/packages/shared-ux/button_toolbar/jest.config.js b/packages/shared-ux/button_toolbar/jest.config.js new file mode 100644 index 0000000000000..ae826337a4a68 --- /dev/null +++ b/packages/shared-ux/button_toolbar/jest.config.js @@ -0,0 +1,13 @@ +/* + * 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. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/packages/shared-ux/button_toolbar'], +}; diff --git a/packages/shared-ux/button_toolbar/package.json b/packages/shared-ux/button_toolbar/package.json new file mode 100644 index 0000000000000..c9a4569ee2e02 --- /dev/null +++ b/packages/shared-ux/button_toolbar/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/shared-ux-button-toolbar", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap new file mode 100644 index 0000000000000..57921977baf2d --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap @@ -0,0 +1,587 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` is rendered 1`] = ` + + + + + + + + + +`; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.stories.tsx b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.stories.tsx similarity index 61% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.stories.tsx rename to packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.stories.tsx index ea50431545028..75872ff2fe2f1 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.stories.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.stories.tsx @@ -7,12 +7,12 @@ */ import React from 'react'; -import { AddFromLibraryButton } from './add_from_library'; -import mdx from './add_from_library.mdx'; +import { AddFromLibraryButton as Component } from './add_from_library'; +import mdx from '../../../README.mdx'; export default { - title: 'Toolbar/Buttons/Add From Library Button', - description: 'An implementation of the solution toolbar primary button', + title: 'Button Toolbar/Buttons', + description: 'An implementation of the toolbar primary button', parameters: { docs: { page: mdx, @@ -20,6 +20,6 @@ export default { }, }; -export const Component = () => { - return ; +export const AddFromLibraryButton = () => { + return ; }; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.test.tsx b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.test.tsx similarity index 82% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.test.tsx rename to packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.test.tsx index a2ba1d8bff174..f573f6654e664 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.test.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.test.tsx @@ -6,14 +6,14 @@ * Side Public License, v 1. */ -import { mount as enzymeMount } from 'enzyme'; import React from 'react'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; + import { AddFromLibraryButton } from './add_from_library'; describe('', () => { test('is rendered', () => { - const component = enzymeMount(); - + const component = mountWithIntl(); expect(component).toMatchSnapshot(); }); }); diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.tsx b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.tsx similarity index 68% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.tsx rename to packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.tsx index 190edc8f29491..fd35301d7210d 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/add_from_library/add_from_library.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.tsx @@ -8,17 +8,20 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; -import { ToolbarButton, Props as ToolbarButtonProps } from '../primary/primary'; +import { PrimaryButton, Props as ToolbarButtonProps } from '../primary/primary'; export type Props = Omit; const label = { getLibraryButtonLabel: () => - i18n.translate('sharedUXComponents.toolbar.buttons.addFromLibrary.libraryButtonLabel', { + i18n.translate('sharedUXPackages.buttonToolbar.buttons.addFromLibrary.libraryButtonLabel', { defaultMessage: 'Add from library', }), }; +/** + * A button that acts to add an item from the library to a solution, typically through a modal. + */ export const AddFromLibraryButton = ({ onClick, ...rest }: Props) => ( - + ); diff --git a/packages/kbn-shared-ux-components/src/toolbar/index.ts b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/index.ts similarity index 56% rename from packages/kbn-shared-ux-components/src/toolbar/index.ts rename to packages/shared-ux/button_toolbar/src/buttons/add_from_library/index.ts index f3e74ace3e5ff..e831d84d237f2 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/index.ts +++ b/packages/shared-ux/button_toolbar/src/buttons/add_from_library/index.ts @@ -5,7 +5,6 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -export { ToolbarButton } from './buttons/primary/primary'; -export { IconButtonGroup } from './buttons/icon_button_group/icon_button_group'; -export { AddFromLibraryButton } from './buttons/add_from_library/add_from_library'; -export { ToolbarPopover } from './popovers/popover'; + +export { AddFromLibraryButton } from './add_from_library'; +export type { Props as AddFromLibraryButtonProps } from './add_from_library'; diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap new file mode 100644 index 0000000000000..1bf442adb6163 --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap @@ -0,0 +1,384 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` is rendered 1`] = ` + + +
+ + + Legend + + +
+ + + + + + + , + , + , + , + ], + }, + } + } + isStringTag={false} + serialized={ + Object { + "map": undefined, + "name": "iuv015-EuiButtonGroup", + "next": undefined, + "styles": "&.euiButtonGroupButton{background-color:#FFF;border:1px solid #D3DAE6 !important;&:first-of-type{border-top-left-radius:6px !important;border-bottom-left-radius:6px !important;}&:last-of-type{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important;}};;label:EuiButtonGroup;", + "toString": [Function], + } + } + /> + + + + + + +
+
+
+
+`; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.stories.tsx b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.stories.tsx similarity index 70% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.stories.tsx rename to packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.stories.tsx index 988a5bddd513f..21fff3f3ed887 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.stories.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.stories.tsx @@ -7,14 +7,13 @@ */ import { action } from '@storybook/addon-actions'; -import { Story } from '@storybook/react'; import React from 'react'; -import { IconButtonGroup } from './icon_button_group'; -import mdx from './icon_button_group.mdx'; +import { IconButtonGroup as Component } from './icon_button_group'; +import mdx from '../../../README.mdx'; export default { - title: 'Toolbar/Buttons/Icon Button Group', - description: 'A collection of buttons that is a part of a toolbar.', + title: 'Button Toolbar/Buttons', + description: 'A collection of icon buttons that is a part of a toolbar.', parameters: { docs: { page: mdx, @@ -51,13 +50,7 @@ const quickButtons = [ }, ]; -export const ConnectedComponent: Story<{ buttonCount: number }> = ({ buttonCount }) => { - return ( - - ); -}; - -ConnectedComponent.argTypes = { +const argTypes = { buttonCount: { defaultValue: 2, control: { @@ -68,3 +61,11 @@ ConnectedComponent.argTypes = { }, }, }; + +type Params = Record; + +export const IconButtonGroup = ({ buttonCount }: Params) => { + return ; +}; + +IconButtonGroup.argTypes = argTypes; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.styles.ts b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.styles.ts similarity index 100% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.styles.ts rename to packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.styles.ts diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.test.tsx b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.test.tsx similarity index 60% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.test.tsx rename to packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.test.tsx index aefcd59fbd7d5..db5722986bcc0 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/icon_button_group/icon_button_group.test.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.test.tsx @@ -7,27 +7,13 @@ */ import React from 'react'; -import { mount as enzymeMount, ReactWrapper } from 'enzyme'; -import { - mockServicesFactory, - SharedUxServices, - SharedUxServicesProvider, -} from '@kbn/shared-ux-services'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; import { IconButtonGroup } from './icon_button_group'; describe('', () => { - let services: SharedUxServices; - let mount: (element: JSX.Element) => ReactWrapper; - - beforeEach(() => { - services = mockServicesFactory(); - mount = (element: JSX.Element) => - enzymeMount({element}); - }); - test('is rendered', () => { - const component = mount( + const component = mountWithIntl( void; - /** - * HTML `title` attribute for tooltips if different from `label` - */ + /** HTML `title` attribute for tooltips if different from `label` */ title?: string; } +/** + * Props for `IconButtonGroup`. + */ export interface Props { - /** - * Required accessible legend for the whole group - */ + /** Required accessible legend for the whole group */ legend: EuiButtonGroupProps['legend']; - /** - * Array of `QuickButton`s - */ + /** Array of `IconButton` */ buttons: IconButton[]; } type Option = EuiButtonGroupOptionProps & Omit; +/** + * A group of buttons each performing an action, represented by an icon. + */ export const IconButtonGroup = ({ buttons, legend }: Props) => { const euiTheme = useEuiTheme(); const iconButtonGroupStyles = IconButtonGroupStyles(euiTheme); diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts new file mode 100644 index 0000000000000..35dfe250cd054 --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts @@ -0,0 +1,10 @@ +/* + * 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. + */ + +export { IconButtonGroup } from './icon_button_group'; +export type { IconButton, Props as IconButtonGroupProps } from './icon_button_group'; diff --git a/packages/shared-ux/button_toolbar/src/buttons/index.ts b/packages/shared-ux/button_toolbar/src/buttons/index.ts new file mode 100644 index 0000000000000..c747130c769c7 --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/buttons/index.ts @@ -0,0 +1,16 @@ +/* + * 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. + */ + +export { PrimaryButton } from './primary'; +export type { PrimaryButtonProps } from './primary'; + +export { IconButtonGroup } from './icon_button_group'; +export type { IconButtonGroupProps, IconButton } from './icon_button_group'; + +export { AddFromLibraryButton } from './add_from_library'; +export type { AddFromLibraryButtonProps } from './add_from_library'; diff --git a/packages/shared-ux/button_toolbar/src/buttons/primary/__snapshots__/primary.test.tsx.snap b/packages/shared-ux/button_toolbar/src/buttons/primary/__snapshots__/primary.test.tsx.snap new file mode 100644 index 0000000000000..dfd75c6ff000e --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/buttons/primary/__snapshots__/primary.test.tsx.snap @@ -0,0 +1,465 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` is rendered 1`] = ` + + + + + + + +`; diff --git a/packages/shared-ux/button_toolbar/src/buttons/primary/index.ts b/packages/shared-ux/button_toolbar/src/buttons/primary/index.ts new file mode 100644 index 0000000000000..1d3220b3654aa --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/buttons/primary/index.ts @@ -0,0 +1,10 @@ +/* + * 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. + */ + +export { PrimaryButton } from './primary'; +export type { Props as PrimaryButtonProps } from './primary'; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.stories.tsx b/packages/shared-ux/button_toolbar/src/buttons/primary/primary.stories.tsx similarity index 52% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.stories.tsx rename to packages/shared-ux/button_toolbar/src/buttons/primary/primary.stories.tsx index a81be610c1508..fb3b53b160f4c 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.stories.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/primary/primary.stories.tsx @@ -6,36 +6,38 @@ * Side Public License, v 1. */ -import { Story } from '@storybook/react'; import React from 'react'; -import { ToolbarButton } from './primary'; -import mdx from './primary.mdx'; + +import { PrimaryButton as Component } from './primary'; +import mdx from '../../../README.mdx'; + +const argTypes = { + iconType: { + control: { + type: 'radio', + expanded: true, + options: ['apps', 'logoGithub', 'folderCheck', 'documents'], + }, + }, +}; + +type Params = Record; export default { - title: 'Toolbar/Buttons/Primary button', + title: 'Button Toolbar/Buttons', description: 'A primary button that is a part of a toolbar.', parameters: { docs: { page: mdx, }, }, - argTypes: { - iconType: { - control: { - type: 'radio', - expanded: true, - options: ['apps', 'logoGithub', 'folderCheck', 'documents'], - }, - }, - }, + argTypes, }; -export const Component: Story<{ - iconType: any; -}> = ({ iconType }) => { - return ; +export const PrimaryButton = ({ iconType }: Params) => { + return ; }; -Component.args = { +PrimaryButton.args = { iconType: 'apps', }; diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.test.tsx b/packages/shared-ux/button_toolbar/src/buttons/primary/primary.test.tsx similarity index 51% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.test.tsx rename to packages/shared-ux/button_toolbar/src/buttons/primary/primary.test.tsx index 3e0e153f453e5..10cbe7cb4dff0 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.test.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/primary/primary.test.tsx @@ -6,35 +6,20 @@ * Side Public License, v 1. */ -import { mount as enzymeMount, ReactWrapper } from 'enzyme'; import React from 'react'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; -import { - SharedUxServicesProvider, - SharedUxServices, - mockServicesFactory, -} from '@kbn/shared-ux-services'; - -import { ToolbarButton } from './primary'; +import { PrimaryButton } from './primary'; describe('', () => { - let services: SharedUxServices; - let mount: (element: JSX.Element) => ReactWrapper; - - beforeEach(() => { - services = mockServicesFactory(); - mount = (element: JSX.Element) => - enzymeMount({element}); - }); - test('is rendered', () => { - const component = mount(); - + const component = mountWithIntl(); expect(component).toMatchSnapshot(); }); + test('it can be passed a functional onClick handler', () => { const mockHandler = jest.fn(); - const component = mount(); + const component = mountWithIntl(); component.simulate('click'); expect(mockHandler).toHaveBeenCalled(); }); diff --git a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.tsx b/packages/shared-ux/button_toolbar/src/buttons/primary/primary.tsx similarity index 81% rename from packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.tsx rename to packages/shared-ux/button_toolbar/src/buttons/primary/primary.tsx index f935a08fe8434..4d2975db2682b 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/buttons/primary/primary.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/primary/primary.tsx @@ -10,11 +10,17 @@ import React from 'react'; import { EuiButton } from '@elastic/eui'; import { EuiButtonPropsForButton } from '@elastic/eui/src/components/button/button'; +/** + * Props for `PrimaryButton`. + */ export interface Props extends Pick { label: string; } -export const ToolbarButton = ({ label, iconSide = 'left', ...rest }: Props) => { +/** + * A primary action button, usually appearing first in the toolbar. + */ +export const PrimaryButton = ({ label, iconSide = 'left', ...rest }: Props) => { return ( {label} diff --git a/packages/shared-ux/button_toolbar/src/index.ts b/packages/shared-ux/button_toolbar/src/index.ts new file mode 100644 index 0000000000000..6ee6230881039 --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/index.ts @@ -0,0 +1,18 @@ +/* + * 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. + */ + +export { PrimaryButton, IconButtonGroup, AddFromLibraryButton } from './buttons'; +export type { + AddFromLibraryButtonProps, + IconButtonGroupProps, + IconButton, + PrimaryButtonProps, +} from './buttons'; + +export { ToolbarPopover } from './popover'; +export type { ToolbarPopoverProps } from './popover'; diff --git a/packages/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap b/packages/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap new file mode 100644 index 0000000000000..d727134b4dcdd --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap @@ -0,0 +1,395 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` is rendered 1`] = ` + + + } + closePopover={[Function]} + display="inlineBlock" + hasArrow={true} + intl={ + Object { + "defaultFormats": Object {}, + "defaultLocale": "en", + "formatDate": [Function], + "formatHTMLMessage": [Function], + "formatMessage": [Function], + "formatNumber": [Function], + "formatPlural": [Function], + "formatRelative": [Function], + "formatTime": [Function], + "formats": Object { + "date": Object { + "full": Object { + "day": "numeric", + "month": "long", + "weekday": "long", + "year": "numeric", + }, + "long": Object { + "day": "numeric", + "month": "long", + "year": "numeric", + }, + "medium": Object { + "day": "numeric", + "month": "short", + "year": "numeric", + }, + "short": Object { + "day": "numeric", + "month": "numeric", + "year": "2-digit", + }, + }, + "number": Object { + "currency": Object { + "style": "currency", + }, + "percent": Object { + "style": "percent", + }, + }, + "relative": Object { + "days": Object { + "units": "day", + }, + "hours": Object { + "units": "hour", + }, + "minutes": Object { + "units": "minute", + }, + "months": Object { + "units": "month", + }, + "seconds": Object { + "units": "second", + }, + "years": Object { + "units": "year", + }, + }, + "time": Object { + "full": Object { + "hour": "numeric", + "minute": "numeric", + "second": "numeric", + "timeZoneName": "short", + }, + "long": Object { + "hour": "numeric", + "minute": "numeric", + "second": "numeric", + "timeZoneName": "short", + }, + "medium": Object { + "hour": "numeric", + "minute": "numeric", + "second": "numeric", + }, + "short": Object { + "hour": "numeric", + "minute": "numeric", + }, + }, + }, + "formatters": Object { + "getDateTimeFormat": [Function], + "getMessageFormat": [Function], + "getNumberFormat": [Function], + "getPluralFormat": [Function], + "getRelativeFormat": [Function], + }, + "locale": "en", + "messages": Object {}, + "now": [Function], + "onError": [Function], + "textComponent": Symbol(react.fragment), + "timeZone": null, + } + } + isOpen={false} + ownFocus={true} + panelPaddingSize="m" + > +
+
+ + + + + + + +
+
+
+
+`; diff --git a/packages/shared-ux/button_toolbar/src/popover/index.ts b/packages/shared-ux/button_toolbar/src/popover/index.ts new file mode 100644 index 0000000000000..10167b975f584 --- /dev/null +++ b/packages/shared-ux/button_toolbar/src/popover/index.ts @@ -0,0 +1,10 @@ +/* + * 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. + */ + +export { ToolbarPopover } from './popover'; +export type { Props as ToolbarPopoverProps } from './popover'; diff --git a/packages/kbn-shared-ux-components/src/toolbar/popovers/popover.mdx b/packages/shared-ux/button_toolbar/src/popover/popover.mdx similarity index 100% rename from packages/kbn-shared-ux-components/src/toolbar/popovers/popover.mdx rename to packages/shared-ux/button_toolbar/src/popover/popover.mdx diff --git a/packages/kbn-shared-ux-components/src/toolbar/popovers/popover.stories.tsx b/packages/shared-ux/button_toolbar/src/popover/popover.stories.tsx similarity index 66% rename from packages/kbn-shared-ux-components/src/toolbar/popovers/popover.stories.tsx rename to packages/shared-ux/button_toolbar/src/popover/popover.stories.tsx index f429cebd7071b..e0c37b035cbd9 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/popovers/popover.stories.tsx +++ b/packages/shared-ux/button_toolbar/src/popover/popover.stories.tsx @@ -6,36 +6,43 @@ * Side Public License, v 1. */ -import { EuiContextMenu } from '@elastic/eui'; -import { ButtonContentIconSide } from '@elastic/eui/src/components/button/button_content'; -import { Story } from '@storybook/react'; import React from 'react'; -import { ToolbarPopover } from './popover'; -import mdx from './popover.mdx'; + +import { EuiContextMenu } from '@elastic/eui'; + +import { ToolbarPopover as Component } from './popover'; +import mdx from '../../README.mdx'; + +const argTypes = { + iconSide: { + control: { + type: 'radio', + options: ['left', 'right', 'undefined'], + }, + }, +}; + +type Params = Record; export default { - title: 'Toolbar/Popover', + title: 'Button Toolbar', description: 'A popover that is a part of a toolbar.', parameters: { docs: { page: mdx, }, }, - argTypes: { - iconSide: { - control: { - type: 'radio', - options: ['left', 'right', 'undefined'], - }, - }, - }, + argTypes, }; -export const Component: Story<{ - iconSide: ButtonContentIconSide | undefined; -}> = ({ iconSide }) => { +export const Popover = ({ iconSide }: Params) => { return ( - + {() => ( )} - +
); }; -Component.args = { +Popover.args = { iconSide: 'left', }; diff --git a/packages/kbn-shared-ux-components/src/toolbar/popovers/popover.test.tsx b/packages/shared-ux/button_toolbar/src/popover/popover.test.tsx similarity index 81% rename from packages/kbn-shared-ux-components/src/toolbar/popovers/popover.test.tsx rename to packages/shared-ux/button_toolbar/src/popover/popover.test.tsx index fcbf3d3542a16..022ab3fe56f51 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/popovers/popover.test.tsx +++ b/packages/shared-ux/button_toolbar/src/popover/popover.test.tsx @@ -6,14 +6,15 @@ * Side Public License, v 1. */ -import { mount as enzymeMount } from 'enzyme'; import React from 'react'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; + import { ToolbarPopover } from './popover'; describe('', () => { test('is rendered', () => { const isOpen = true; - const component = enzymeMount( !isOpen} />); + const component = mountWithIntl( !isOpen} />); expect(component).toMatchSnapshot(); }); @@ -21,9 +22,11 @@ describe('', () => { test('accepts an onClick handler', () => { const isOpen = true; const mockHandler = jest.fn(); - const component = enzymeMount( + + const component = mountWithIntl( !isOpen} onClick={mockHandler} /> ); + component.simulate('click'); expect(mockHandler).toHaveBeenCalled(); }); diff --git a/packages/kbn-shared-ux-components/src/toolbar/popovers/popover.tsx b/packages/shared-ux/button_toolbar/src/popover/popover.tsx similarity index 86% rename from packages/kbn-shared-ux-components/src/toolbar/popovers/popover.tsx rename to packages/shared-ux/button_toolbar/src/popover/popover.tsx index ceae588b61941..fdf60c1f0d5fa 100644 --- a/packages/kbn-shared-ux-components/src/toolbar/popovers/popover.tsx +++ b/packages/shared-ux/button_toolbar/src/popover/popover.tsx @@ -10,7 +10,7 @@ import React, { useState } from 'react'; import { EuiPopover } from '@elastic/eui'; import { Props as EuiPopoverProps } from '@elastic/eui/src/components/popover/popover'; -import { ToolbarButton, Props as ButtonProps } from '../buttons/primary/primary'; +import { PrimaryButton, Props as ButtonProps } from '../buttons/primary/primary'; type AllowedButtonProps = Omit; type AllowedPopoverProps = Omit< @@ -18,18 +18,24 @@ type AllowedPopoverProps = Omit< 'button' | 'isOpen' | 'closePopover' | 'anchorPosition' >; +/** + * Props for `ToolbarPopover`. + */ export type Props = AllowedButtonProps & AllowedPopoverProps & { children: (arg: { closePopover: () => void }) => React.ReactNode; }; +/** + * A button which opens a popover of additional actions within the toolbar. + */ export const ToolbarPopover = ({ label, iconType, children, iconSide, ...popover }: Props) => { const [isOpen, setIsOpen] = useState(false); const onButtonClick = () => setIsOpen((status) => !status); const closePopover = () => setIsOpen(false); - const button = ; + const button = ; return ( // the following ts-ignore is needed until typings/* directory is exposed for consumption to packages diff --git a/packages/shared-ux/button_toolbar/tsconfig.json b/packages/shared-ux/button_toolbar/tsconfig.json new file mode 100644 index 0000000000000..384042fcd7bd4 --- /dev/null +++ b/packages/shared-ux/button_toolbar/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node", + "react", + "@kbn/ambient-ui-types" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/src/plugins/presentation_util/public/components/solution_toolbar/items/index.ts b/src/plugins/presentation_util/public/components/solution_toolbar/items/index.ts index 32972e4d2628d..cc6367bc3fcd5 100644 --- a/src/plugins/presentation_util/public/components/solution_toolbar/items/index.ts +++ b/src/plugins/presentation_util/public/components/solution_toolbar/items/index.ts @@ -10,7 +10,7 @@ export { SolutionToolbarButton } from './button'; export { SolutionToolbarPopover } from './popover'; export { AddFromLibraryButton } from './add_from_library'; export type { QuickButtonProps } from './quick_group'; -/** @deprecated use `IconButtonGroup` from `@kbn/shared-ux-components */ +/** @deprecated use `IconButtonGroup` from `@kbn/shared-ux-button-toolbar` */ export { QuickButtonGroup } from './quick_group'; export { PrimaryActionButton } from './primary_button'; export { PrimaryActionPopover } from './primary_popover'; diff --git a/src/plugins/presentation_util/public/index.ts b/src/plugins/presentation_util/public/index.ts index 35b13d248d8c8..cb1cbb60d4412 100644 --- a/src/plugins/presentation_util/public/index.ts +++ b/src/plugins/presentation_util/public/index.ts @@ -54,7 +54,7 @@ export { AddFromLibraryButton, PrimaryActionButton, PrimaryActionPopover, - /** @deprecated QuickButtonGroup - use `IconButtonGroup` from `@kbn/shared-ux-components */ + /** @deprecated QuickButtonGroup - use `IconButtonGroup` from `@kbn/shared-ux-button-toolbar` */ QuickButtonGroup, SolutionToolbar, SolutionToolbarButton, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index b2f095bd838cb..3c492c1443bf7 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -5343,7 +5343,7 @@ "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.title": "Contactez votre administrateur", "sharedUXComponents.noDataPage.elasticAgentCard.title": "Ajouter Elastic Agent", "sharedUXComponents.pageTemplate.noDataCard.description": "Continuer sans collecter de données", - "sharedUXComponents.toolbar.buttons.addFromLibrary.libraryButtonLabel": "Ajouter depuis la bibliothèque", + "sharedUXPackages.buttonToolbar.buttons.addFromLibrary.libraryButtonLabel": "Ajouter depuis la bibliothèque", "sharedUXPackages.noDataViewsPrompt.learnMore": "Envie d'en savoir plus ?", "sharedUXPackages.noDataViewsPrompt.readDocumentation": "Lisez les documents", "telemetry.callout.appliesSettingTitle": "Les modifications apportées à ce paramètre s'appliquent dans {allOfKibanaText} et sont enregistrées automatiquement.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index fecfabdb7b16a..fa1ce7b24c45c 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -5445,7 +5445,7 @@ "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.title": "管理者にお問い合わせください", "sharedUXComponents.noDataPage.elasticAgentCard.title": "Elasticエージェントの追加", "sharedUXComponents.pageTemplate.noDataCard.description": "データを収集せずに続行", - "sharedUXComponents.toolbar.buttons.addFromLibrary.libraryButtonLabel": "ライブラリから追加", + "sharedUXPackages.buttonToolbar.buttons.addFromLibrary.libraryButtonLabel": "ライブラリから追加", "sharedUXPackages.noDataViewsPrompt.learnMore": "詳細について", "sharedUXPackages.noDataViewsPrompt.readDocumentation": "ドキュメントを読む", "telemetry.callout.appliesSettingTitle": "この設定に加えた変更は {allOfKibanaText} に適用され、自動的に保存されます。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 1cc41035906d5..9bcc45a9ca1ab 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -5456,7 +5456,7 @@ "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.title": "请联系您的管理员", "sharedUXComponents.noDataPage.elasticAgentCard.title": "添加 Elastic 代理", "sharedUXComponents.pageTemplate.noDataCard.description": "继续,而不收集数据", - "sharedUXComponents.toolbar.buttons.addFromLibrary.libraryButtonLabel": "从库中添加", + "sharedUXPackages.buttonToolbar.buttons.addFromLibrary.libraryButtonLabel": "从库中添加", "sharedUXPackages.noDataViewsPrompt.learnMore": "希望了解详情?", "sharedUXPackages.noDataViewsPrompt.readDocumentation": "阅读文档", "telemetry.callout.appliesSettingTitle": "对此设置的更改将应用到{allOfKibanaText} 且会自动保存。", diff --git a/yarn.lock b/yarn.lock index 7d5e89b4f0ea7..649e628ecf74a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3375,6 +3375,10 @@ version "0.0.0" uid "" +"@kbn/shared-ux-button-toolbar@link:bazel-bin/packages/shared-ux/button_toolbar": + version "0.0.0" + uid "" + "@kbn/shared-ux-storybook@link:bazel-bin/packages/kbn-shared-ux-storybook": version "0.0.0" uid "" @@ -6742,6 +6746,10 @@ version "0.0.0" uid "" +"@types/kbn__shared-ux-button-toolbar@link:bazel-bin/packages/shared-ux/button_toolbar/npm_module_types": + version "0.0.0" + uid "" + "@types/kbn__shared-ux-storybook@link:bazel-bin/packages/kbn-shared-ux-storybook/npm_module_types": version "0.0.0" uid "" From 7410fbf4d89ad757e2e0a5747a886cc3bb1a896f Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Tue, 21 Jun 2022 09:05:23 +0200 Subject: [PATCH 20/50] [Discover] Hide "Add a field", "Edit" and "Create a data view" buttons in viewer mode (#134582) * [Discover] Hide "Add a field" button for read only access * [Discover] Hide "Create a data view" button for read only access on desktop * [Discover] Hide "Create a data view" and "Add a field" button for read only access on mobile * [Discover] Make sure that error message is shown when access rights were reduced for a user in meantime * [Discover] Make checks safe * [Discover] Update tests * [Discover] Streamline the logic * [Discover] Update tests * [Discover] Add tests * [Discover] Add tests * [Discover] Update code style Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/layout/discover_layout.tsx | 1 - .../components/sidebar/discover_field.tsx | 4 +- .../sidebar/discover_sidebar.test.tsx | 88 ++++++++++++++++++ .../components/sidebar/discover_sidebar.tsx | 58 +++++++----- .../discover_sidebar_responsive.test.tsx | 33 +++++++ .../sidebar/discover_sidebar_responsive.tsx | 91 ++++++++++--------- .../components/top_nav/discover_topnav.tsx | 52 +++++------ .../dataview_picker/change_dataview.test.tsx | 2 +- .../lens/public/app_plugin/app.test.tsx | 4 +- .../lens/public/app_plugin/lens_top_nav.tsx | 75 +++++++++------ 10 files changed, 272 insertions(+), 136 deletions(-) diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index e65d8a7db4e54..c9032001947ea 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -245,7 +245,6 @@ export function DiscoverLayout({ resetSavedSearch={resetSavedSearch} onChangeIndexPattern={onChangeIndexPattern} onEditRuntimeField={onEditRuntimeField} - useNewFieldsApi={useNewFieldsApi} /> ; /** - * Callback to edit a runtime field from index pattern + * Callback to edit a field from data view * @param fieldName name of the field to edit */ onEditField?: (fieldName: string) => void; /** - * Callback to delete a runtime field from index pattern + * Callback to delete a runtime field from data view * @param fieldName name of the field to delete */ onDeleteField?: (fieldName: string) => void; diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.test.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.test.tsx index 5a553dc67596a..34cfde26ff32c 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.test.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.test.tsx @@ -9,6 +9,7 @@ import { cloneDeep, each } from 'lodash'; import { ReactWrapper } from 'enzyme'; import { findTestSubject } from '@elastic/eui/lib/test'; +import { Action } from '@kbn/ui-actions-plugin/public'; // @ts-expect-error import realHits from '../../../../__fixtures__/real_hits'; @@ -29,6 +30,16 @@ import { BehaviorSubject } from 'rxjs'; import { FetchStatus } from '../../../types'; import { AvailableFields$ } from '../../hooks/use_saved_search'; +const mockGetActions = jest.fn>>, [string, { fieldName: string }]>( + () => Promise.resolve([]) +); + +jest.mock('../../../../kibana_services', () => ({ + getUiActions: () => ({ + getTriggerCompatibleActions: mockGetActions, + }), +})); + function getCompProps(): DiscoverSidebarProps { const indexPattern = stubLogstashIndexPattern; const hits = each(cloneDeep(realHits), (hit) => @@ -73,6 +84,7 @@ function getCompProps(): DiscoverSidebarProps { createNewDataView: jest.fn(), onDataViewCreated: jest.fn(), availableFields$, + useNewFieldsApi: true, }; } @@ -105,4 +117,80 @@ describe('discover sidebar', function () { findTestSubject(comp, 'fieldToggle-extension').simulate('click'); expect(props.onRemoveField).toHaveBeenCalledWith('extension'); }); + + it('should render "Add a field" button', () => { + const addFieldButton = findTestSubject(comp, 'indexPattern-add-field_btn'); + expect(addFieldButton.length).toBe(1); + addFieldButton.simulate('click'); + expect(props.editField).toHaveBeenCalledWith(); + }); + + it('should render "Edit field" button', () => { + findTestSubject(comp, 'field-bytes').simulate('click'); + const editFieldButton = findTestSubject(comp, 'discoverFieldListPanelEdit-bytes'); + expect(editFieldButton.length).toBe(1); + editFieldButton.simulate('click'); + expect(props.editField).toHaveBeenCalledWith('bytes'); + }); + + it('should not render Add/Edit field buttons in viewer mode', () => { + const compInViewerMode = mountWithIntl( + + + + ); + const addFieldButton = findTestSubject(compInViewerMode, 'indexPattern-add-field_btn'); + expect(addFieldButton.length).toBe(0); + findTestSubject(comp, 'field-bytes').simulate('click'); + const editFieldButton = findTestSubject(compInViewerMode, 'discoverFieldListPanelEdit-bytes'); + expect(editFieldButton.length).toBe(0); + }); + + it('should render buttons in data view picker correctly', async () => { + const compWithPicker = mountWithIntl( + + + + ); + // open data view picker + findTestSubject(compWithPicker, 'indexPattern-switch-link').simulate('click'); + expect(findTestSubject(compWithPicker, 'changeDataViewPopover').length).toBe(1); + // click "Add a field" + const addFieldButtonInDataViewPicker = findTestSubject( + compWithPicker, + 'indexPattern-add-field' + ); + expect(addFieldButtonInDataViewPicker.length).toBe(1); + addFieldButtonInDataViewPicker.simulate('click'); + expect(props.editField).toHaveBeenCalledWith(); + // click "Create a data view" + const createDataViewButton = findTestSubject(compWithPicker, 'dataview-create-new'); + expect(createDataViewButton.length).toBe(1); + createDataViewButton.simulate('click'); + expect(props.createNewDataView).toHaveBeenCalled(); + }); + + it('should not render buttons in data view picker when in viewer mode', async () => { + const compWithPickerInViewerMode = mountWithIntl( + + + + ); + // open data view picker + findTestSubject(compWithPickerInViewerMode, 'indexPattern-switch-link').simulate('click'); + expect(findTestSubject(compWithPickerInViewerMode, 'changeDataViewPopover').length).toBe(1); + // check that buttons are not present + const addFieldButtonInDataViewPicker = findTestSubject( + compWithPickerInViewerMode, + 'indexPattern-add-field' + ); + expect(addFieldButtonInDataViewPicker.length).toBe(0); + const createDataViewButton = findTestSubject(compWithPickerInViewerMode, 'dataview-create-new'); + expect(createDataViewButton.length).toBe(0); + }); }); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx index 23ba3e8e0cc71..0141aead76eff 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx @@ -68,9 +68,18 @@ export interface DiscoverSidebarProps extends Omit void | undefined) => void; - editField: (fieldName?: string) => void; + /** + * Handles "Edit field" action + * Buttons will be hidden if not provided + * @param fieldName + */ + editField?: (fieldName?: string) => void; - createNewDataView: () => void; + /** + * Handles "Create a data view action" action + * Buttons will be hidden if not provided + */ + createNewDataView?: () => void; /** * a statistics of the distribution of fields in the given hits @@ -113,9 +122,6 @@ export function DiscoverSidebarComponent({ }: DiscoverSidebarProps) { const { uiSettings, dataViewFieldEditor } = useDiscoverServices(); const [fields, setFields] = useState(null); - - const dataViewFieldEditPermission = dataViewFieldEditor?.userPermissions.editIndexPattern(); - const canEditDataViewField = !!dataViewFieldEditPermission && useNewFieldsApi; const [scrollContainer, setScrollContainer] = useState(null); const [fieldsToRender, setFieldsToRender] = useState(FIELDS_PER_PAGE); const [fieldsPerPage, setFieldsPerPage] = useState(FIELDS_PER_PAGE); @@ -258,7 +264,7 @@ export function DiscoverSidebarComponent({ const deleteField = useMemo( () => - canEditDataViewField && selectedIndexPattern + editField && selectedIndexPattern ? async (fieldName: string) => { const ref = dataViewFieldEditor.openDeleteModal({ ctx: { @@ -279,7 +285,7 @@ export function DiscoverSidebarComponent({ : undefined, [ selectedIndexPattern, - canEditDataViewField, + editField, setFieldEditorRef, closeFlyout, onEditRuntimeField, @@ -396,8 +402,8 @@ export function DiscoverSidebarComponent({ selected={true} trackUiMetric={trackUiMetric} multiFields={multiFields?.get(field.name)} - onEditField={canEditDataViewField ? editField : undefined} - onDeleteField={canEditDataViewField ? deleteField : undefined} + onEditField={editField} + onDeleteField={deleteField} showFieldStats={showFieldStats} /> @@ -456,8 +462,8 @@ export function DiscoverSidebarComponent({ getDetails={getDetailsByField} trackUiMetric={trackUiMetric} multiFields={multiFields?.get(field.name)} - onEditField={canEditDataViewField ? editField : undefined} - onDeleteField={canEditDataViewField ? deleteField : undefined} + onEditField={editField} + onDeleteField={deleteField} showFieldStats={showFieldStats} /> @@ -485,8 +491,8 @@ export function DiscoverSidebarComponent({ getDetails={getDetailsByField} trackUiMetric={trackUiMetric} multiFields={multiFields?.get(field.name)} - onEditField={canEditDataViewField ? editField : undefined} - onDeleteField={canEditDataViewField ? deleteField : undefined} + onEditField={editField} + onDeleteField={deleteField} showFieldStats={showFieldStats} /> @@ -498,18 +504,20 @@ export function DiscoverSidebarComponent({ )}
- - editField()} - size="s" - > - {i18n.translate('discover.fieldChooser.addField.label', { - defaultMessage: 'Add a field', - })} - - + {!!editField && ( + + editField()} + size="s" + > + {i18n.translate('discover.fieldChooser.addField.label', { + defaultMessage: 'Add a field', + })} + + + )} ); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx index b10285383468c..5dec34da3cfbe 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx @@ -52,6 +52,11 @@ const mockServices = { }, }, docLinks: { links: { discover: { fieldTypeHelp: '' } } }, + dataViewEditor: { + userPermissions: { + editDataView: jest.fn(() => true), + }, + }, } as unknown as DiscoverServices; const mockfieldCounts: Record = {}; @@ -111,6 +116,7 @@ function getCompProps(): DiscoverSidebarResponsiveProps { onEditRuntimeField: jest.fn(), viewMode: VIEW_MODE.DOCUMENT_LEVEL, onDataViewCreated: jest.fn(), + useNewFieldsApi: true, }; } @@ -160,4 +166,31 @@ describe('discover responsive sidebar', function () { expect(findTestSubject(comp, 'fieldList-unpopular').children().length).toBe(4); expect(mockCalcFieldCounts.mock.calls.length).toBe(1); }); + + it('should show "Add a field" button to create a runtime field', () => { + expect(mockServices.dataViewEditor.userPermissions.editDataView).toHaveBeenCalled(); + expect(findTestSubject(comp, 'indexPattern-add-field_btn').length).toBe(1); + }); + + it('should not show "Add a field" button in viewer mode', () => { + const mockedServicesInViewerMode = { + ...mockServices, + dataViewEditor: { + ...mockServices.dataViewEditor, + userPermissions: { + ...mockServices.dataViewEditor.userPermissions, + editDataView: jest.fn(() => false), + }, + }, + }; + const compInViewerMode = mountWithIntl( + + + + ); + expect( + mockedServicesInViewerMode.dataViewEditor.userPermissions.editDataView + ).toHaveBeenCalled(); + expect(findTestSubject(compInViewerMode, 'indexPattern-add-field_btn').length).toBe(0); + }); }); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx index a9121399c7e04..c6d8d05a23ad8 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { useEffect, useRef, useState, useCallback } from 'react'; +import React, { useEffect, useRef, useState, useCallback, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { UiCounterMetricType } from '@kbn/analytics'; @@ -89,7 +89,7 @@ export interface DiscoverSidebarResponsiveProps { /** * Read from the Fields API */ - useNewFieldsApi?: boolean; + useNewFieldsApi: boolean; /** * callback to execute on edit runtime field */ @@ -115,7 +115,7 @@ export interface DiscoverSidebarResponsiveProps { */ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) { const services = useDiscoverServices(); - const { selectedIndexPattern, onEditRuntimeField, useNewFieldsApi, onDataViewCreated } = props; + const { selectedIndexPattern, onEditRuntimeField, onDataViewCreated } = props; const [fieldFilter, setFieldFilter] = useState(getDefaultFieldFilter()); const [isFlyoutVisible, setIsFlyoutVisible] = useState(false); /** @@ -178,6 +178,8 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) const { dataViewFieldEditor, dataViewEditor } = services; const { availableFields$ } = props; + const canEditDataView = Boolean(dataViewEditor?.userPermissions.editDataView()); + useEffect( () => { // For an external embeddable like the Field stats @@ -203,57 +205,56 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) ] ); - const editField = useCallback( - (fieldName?: string) => { - const indexPatternFieldEditPermission = - dataViewFieldEditor?.userPermissions.editIndexPattern(); - const canEditIndexPatternField = !!indexPatternFieldEditPermission && useNewFieldsApi; - if (!canEditIndexPatternField || !selectedIndexPattern) { - return; - } - const ref = dataViewFieldEditor.openEditor({ - ctx: { - dataView: selectedIndexPattern, - }, - fieldName, - onSave: async () => { - onEditRuntimeField(); - }, - }); - if (setFieldEditorRef) { - setFieldEditorRef(ref); - } - if (closeFlyout) { - closeFlyout(); - } - }, + const editField = useMemo( + () => + canEditDataView && selectedIndexPattern + ? (fieldName?: string) => { + const ref = dataViewFieldEditor.openEditor({ + ctx: { + dataView: selectedIndexPattern, + }, + fieldName, + onSave: async () => { + onEditRuntimeField(); + }, + }); + if (setFieldEditorRef) { + setFieldEditorRef(ref); + } + if (closeFlyout) { + closeFlyout(); + } + } + : undefined, [ + canEditDataView, closeFlyout, dataViewFieldEditor, selectedIndexPattern, setFieldEditorRef, onEditRuntimeField, - useNewFieldsApi, ] ); - const createNewDataView = useCallback(() => { - const indexPatternFieldEditPermission = dataViewEditor.userPermissions.editDataView; - if (!indexPatternFieldEditPermission) { - return; - } - const ref = dataViewEditor.openEditor({ - onSave: async (dataView) => { - onDataViewCreated(dataView); - }, - }); - if (setDataViewEditorRef) { - setDataViewEditorRef(ref); - } - if (closeFlyout) { - closeFlyout(); - } - }, [dataViewEditor, setDataViewEditorRef, closeFlyout, onDataViewCreated]); + const createNewDataView = useMemo( + () => + canEditDataView + ? () => { + const ref = dataViewEditor.openEditor({ + onSave: async (dataView) => { + onDataViewCreated(dataView); + }, + }); + if (setDataViewEditorRef) { + setDataViewEditorRef(ref); + } + if (closeFlyout) { + closeFlyout(); + } + } + : undefined, + [canEditDataView, dataViewEditor, setDataViewEditorRef, closeFlyout, onDataViewCreated] + ); if (!selectedIndexPattern) { return null; diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index 265cec27d5344..01df8526641c5 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -27,7 +27,6 @@ export type DiscoverTopNavProps = Pick< resetSavedSearch: () => void; onChangeIndexPattern: (indexPattern: string) => void; onEditRuntimeField: () => void; - useNewFieldsApi?: boolean; }; export const DiscoverTopNav = ({ @@ -43,7 +42,6 @@ export const DiscoverTopNav = ({ resetSavedSearch, onChangeIndexPattern, onEditRuntimeField, - useNewFieldsApi = false, }: DiscoverTopNavProps) => { const history = useHistory(); const showDatePicker = useMemo( @@ -52,11 +50,9 @@ export const DiscoverTopNav = ({ ); const services = useDiscoverServices(); const { dataViewEditor, navigation, dataViewFieldEditor, data } = services; - const editPermission = useMemo( - () => dataViewFieldEditor.userPermissions.editIndexPattern(), - [dataViewFieldEditor] - ); - const canEditDataViewField = !!editPermission && useNewFieldsApi; + + const canEditDataView = Boolean(dataViewEditor?.userPermissions.editDataView()); + const closeFieldEditor = useRef<() => void | undefined>(); const closeDataViewEditor = useRef<() => void | undefined>(); @@ -87,7 +83,7 @@ export const DiscoverTopNav = ({ const editField = useMemo( () => - canEditDataViewField + canEditDataView ? async (fieldName?: string, uiAction: 'edit' | 'add' = 'edit') => { if (indexPattern?.id) { const indexPatternInstance = await data.dataViews.get(indexPattern.id); @@ -103,33 +99,29 @@ export const DiscoverTopNav = ({ } } : undefined, - [ - canEditDataViewField, - indexPattern?.id, - data.dataViews, - dataViewFieldEditor, - onEditRuntimeField, - ] + [canEditDataView, indexPattern?.id, data.dataViews, dataViewFieldEditor, onEditRuntimeField] ); const addField = useMemo( - () => (canEditDataViewField && editField ? () => editField(undefined, 'add') : undefined), - [editField, canEditDataViewField] + () => (canEditDataView && editField ? () => editField(undefined, 'add') : undefined), + [editField, canEditDataView] ); - const createNewDataView = useCallback(() => { - const indexPatternFieldEditPermission = dataViewEditor.userPermissions.editDataView; - if (!indexPatternFieldEditPermission) { - return; - } - closeDataViewEditor.current = dataViewEditor.openEditor({ - onSave: async (dataView) => { - if (dataView.id) { - onChangeIndexPattern(dataView.id); - } - }, - }); - }, [dataViewEditor, onChangeIndexPattern]); + const createNewDataView = useMemo( + () => + canEditDataView + ? () => { + closeDataViewEditor.current = dataViewEditor.openEditor({ + onSave: async (dataView) => { + if (dataView.id) { + onChangeIndexPattern(dataView.id); + } + }, + }); + } + : undefined, + [canEditDataView, dataViewEditor, onChangeIndexPattern] + ); const topNavMenu = useMemo( () => diff --git a/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx b/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx index d3081561a0c4e..f567f3b6ac47b 100644 --- a/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx +++ b/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx @@ -116,7 +116,7 @@ describe('DataView component', () => { await act(async () => { const component = mount(wrapDataViewComponentInContext(props, true)); findTestSubject(component, 'dataview-trigger').simulate('click'); - expect(component.find('[data-test-subj="idataview-create-new"]').length).toBe(0); + expect(component.find('[data-test-subj="dataview-create-new"]').length).toBe(0); }); }); diff --git a/x-pack/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx index fed226af7dde5..a693aa4ada745 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx @@ -409,7 +409,7 @@ describe('Lens App', () => { expect.objectContaining({ currentDataViewId: 'mockip', onChangeDataView: expect.any(Function), - onDataViewCreated: expect.any(Function), + onDataViewCreated: undefined, onAddField: undefined, }) ); @@ -417,7 +417,7 @@ describe('Lens App', () => { it('calls the nav component with the correct dataview picker props if permissions are given', async () => { const { instance, lensStore, services } = await mountWith({ preloadedState: {} }); - services.dataViewFieldEditor.userPermissions.editIndexPattern = () => true; + services.dataViewEditor.userPermissions.editDataView = () => true; const document = { savedObjectId: defaultSavedObjectId, state: { diff --git a/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx b/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx index b4657c4feaf55..82dd1884cb51e 100644 --- a/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx +++ b/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx @@ -244,7 +244,7 @@ export const LensTopNavMenu = ({ const [indexPatterns, setIndexPatterns] = useState([]); const [currentIndexPattern, setCurrentIndexPattern] = useState(); const [rejectedIndexPatterns, setRejectedIndexPatterns] = useState([]); - const editPermission = dataViewFieldEditor.userPermissions.editIndexPattern(); + const canEditDataView = Boolean(dataViewEditor?.userPermissions.editDataView()); const closeFieldEditor = useRef<() => void | undefined>(); const closeDataViewEditor = useRef<() => void | undefined>(); @@ -644,7 +644,7 @@ export const LensTopNavMenu = ({ const editField = useMemo( () => - editPermission + canEditDataView ? async (fieldName?: string, uiAction: 'edit' | 'add' = 'edit') => { if (currentIndexPattern?.id) { const indexPatternInstance = await data.dataViews.get(currentIndexPattern?.id); @@ -660,39 +660,54 @@ export const LensTopNavMenu = ({ } } : undefined, - [editPermission, currentIndexPattern?.id, data.dataViews, dataViewFieldEditor, refreshFieldList] + [ + canEditDataView, + currentIndexPattern?.id, + data.dataViews, + dataViewFieldEditor, + refreshFieldList, + ] ); const addField = useMemo( - () => (editPermission && editField ? () => editField(undefined, 'add') : undefined), - [editField, editPermission] + () => (canEditDataView && editField ? () => editField(undefined, 'add') : undefined), + [editField, canEditDataView] ); - const createNewDataView = useCallback(() => { - const dataViewEditPermission = dataViewEditor.userPermissions.editDataView; - if (!dataViewEditPermission) { - return; - } - closeDataViewEditor.current = dataViewEditor.openEditor({ - onSave: async (dataView) => { - if (dataView.id) { - handleIndexPatternChange({ - activeDatasources: Object.keys(datasourceStates).reduce( - (acc, datasourceId) => ({ - ...acc, - [datasourceId]: datasourceMap[datasourceId], - }), - {} - ), - datasourceStates, - indexPatternId: dataView.id, - setDatasourceState, - }); - refreshFieldList(); - } - }, - }); - }, [dataViewEditor, datasourceMap, datasourceStates, refreshFieldList, setDatasourceState]); + const createNewDataView = useMemo( + () => + canEditDataView + ? () => { + closeDataViewEditor.current = dataViewEditor.openEditor({ + onSave: async (dataView) => { + if (dataView.id) { + handleIndexPatternChange({ + activeDatasources: Object.keys(datasourceStates).reduce( + (acc, datasourceId) => ({ + ...acc, + [datasourceId]: datasourceMap[datasourceId], + }), + {} + ), + datasourceStates, + indexPatternId: dataView.id, + setDatasourceState, + }); + refreshFieldList(); + } + }, + }); + } + : undefined, + [ + dataViewEditor, + canEditDataView, + datasourceMap, + datasourceStates, + refreshFieldList, + setDatasourceState, + ] + ); const dataViewPickerProps = { trigger: { From d13d997d4c66528cb1f34647e3cc3e921fe418ba Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Tue, 21 Jun 2022 08:18:32 +0100 Subject: [PATCH 21/50] [Infra] Fix metric table fields and calculations (#134341) * [Infra] Fix metric table fields and calculations Fixes 133119 Fixes 133122 Fixes 133124 --- .../container_metrics_table.test.tsx | 6 +-- .../container/use_container_metrics_table.ts | 50 +++++++++---------- .../host/host_metrics_table.tsx | 2 +- .../host/use_host_metrics_table.ts | 29 ++++++----- .../pod/pod_metrics_table.test.tsx | 6 +-- .../pod/use_pod_metrics_table.ts | 50 +++++++++---------- .../shared/hooks/helpers.ts | 24 +++++++++ .../shared/hooks/index.ts | 3 +- .../shared/index.ts | 7 ++- 9 files changed, 100 insertions(+), 77 deletions(-) create mode 100644 x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/helpers.ts diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.test.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.test.tsx index bff812e7e7601..4ead102c9bae8 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.test.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.test.tsx @@ -111,7 +111,7 @@ function createFetchMock(): NodeMetricsTableFetchMock { function createContainer( name: string, - uptimeMs: number, + startTime: number, cpuUsagePct: number, memoryUsageBytes: number ): Partial { @@ -119,8 +119,8 @@ function createContainer( id: name, rows: [ { - [metricByField['kubernetes.container.start_time']]: uptimeMs, - [metricByField['kubernetes.container.cpu.usage.node.pct']]: cpuUsagePct, + [metricByField['kubernetes.container.start_time']]: startTime, + [metricByField['kubernetes.container.cpu.usage.limit.pct']]: cpuUsagePct, [metricByField['kubernetes.container.memory.usage.bytes']]: memoryUsageBytes, } as MetricsExplorerSeries['rows'][number], ], diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/use_container_metrics_table.ts b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/use_container_metrics_table.ts index 40cb1e0ee2763..6fea0b399b425 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/use_container_metrics_table.ts +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/use_container_metrics_table.ts @@ -12,14 +12,17 @@ import type { } from '../../../../common/http_api/metrics_explorer'; import type { MetricsQueryOptions, SortState, UseNodeMetricsTableOptions } from '../shared'; import { + averageOfValues, + createMetricByFieldLookup, + makeUnpackMetric, metricsToApiOptions, + scaleUpPercentage, useInfrastructureNodeMetrics, - createMetricByFieldLookup, } from '../shared'; type ContainerMetricsField = | 'kubernetes.container.start_time' - | 'kubernetes.container.cpu.usage.node.pct' + | 'kubernetes.container.cpu.usage.limit.pct' | 'kubernetes.container.memory.usage.bytes'; const containerMetricsQueryConfig: MetricsQueryOptions = { @@ -34,9 +37,9 @@ const containerMetricsQueryConfig: MetricsQueryOptions = aggregation: 'max', field: 'kubernetes.container.start_time', }, - 'kubernetes.container.cpu.usage.node.pct': { + 'kubernetes.container.cpu.usage.limit.pct': { aggregation: 'avg', - field: 'kubernetes.container.cpu.usage.node.pct', + field: 'kubernetes.container.cpu.usage.limit.pct', }, 'kubernetes.container.memory.usage.bytes': { aggregation: 'avg', @@ -46,6 +49,7 @@ const containerMetricsQueryConfig: MetricsQueryOptions = }; export const metricByField = createMetricByFieldLookup(containerMetricsQueryConfig.metricsMap); +const unpackMetric = makeUnpackMetric(metricByField); export interface ContainerNodeMetricsRow { name: string; @@ -114,17 +118,18 @@ function rowWithoutMetrics(name: string) { } function calculateMetricAverages(rows: MetricsExplorerRow[]) { - const { uptimeValues, averageCpuUsagePercentValues, averageMemoryUsageMegabytesValues } = + const { startTimeValues, averageCpuUsagePercentValues, averageMemoryUsageMegabytesValues } = collectMetricValues(rows); let uptime = null; - if (uptimeValues.length !== 0) { - uptime = averageOfValues(uptimeValues); + if (startTimeValues.length !== 0) { + const startTime = startTimeValues.at(-1); + uptime = Date.now() - startTime!; } let averageCpuUsagePercent = null; if (averageCpuUsagePercentValues.length !== 0) { - averageCpuUsagePercent = averageOfValues(averageCpuUsagePercentValues); + averageCpuUsagePercent = scaleUpPercentage(averageOfValues(averageCpuUsagePercentValues)); } let averageMemoryUsageMegabytes = null; @@ -142,15 +147,15 @@ function calculateMetricAverages(rows: MetricsExplorerRow[]) { } function collectMetricValues(rows: MetricsExplorerRow[]) { - const uptimeValues: number[] = []; + const startTimeValues: number[] = []; const averageCpuUsagePercentValues: number[] = []; const averageMemoryUsageMegabytesValues: number[] = []; rows.forEach((row) => { - const { uptime, averageCpuUsagePercent, averageMemoryUsageMegabytes } = unpackMetrics(row); + const { startTime, averageCpuUsagePercent, averageMemoryUsageMegabytes } = unpackMetrics(row); - if (uptime !== null) { - uptimeValues.push(uptime); + if (startTime !== null) { + startTimeValues.push(startTime); } if (averageCpuUsagePercent !== null) { @@ -163,25 +168,18 @@ function collectMetricValues(rows: MetricsExplorerRow[]) { }); return { - uptimeValues, + startTimeValues, averageCpuUsagePercentValues, averageMemoryUsageMegabytesValues, }; } -function unpackMetrics(row: MetricsExplorerRow): Omit { +function unpackMetrics( + row: MetricsExplorerRow +): Omit & { startTime: number | null } { return { - uptime: row[metricByField['kubernetes.container.start_time']] as number | null, - averageCpuUsagePercent: row[metricByField['kubernetes.container.cpu.usage.node.pct']] as - | number - | null, - averageMemoryUsageMegabytes: row[metricByField['kubernetes.container.memory.usage.bytes']] as - | number - | null, + startTime: unpackMetric(row, 'kubernetes.container.start_time'), + averageCpuUsagePercent: unpackMetric(row, 'kubernetes.container.cpu.usage.limit.pct'), + averageMemoryUsageMegabytes: unpackMetric(row, 'kubernetes.container.memory.usage.bytes'), }; } - -function averageOfValues(values: number[]) { - const sum = values.reduce((acc, value) => acc + value, 0); - return sum / values.length; -} diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx index 652af65e02a23..2c2cad4cf1222 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx @@ -129,7 +129,7 @@ function hostMetricsColumns( ), }, { - name: 'Memory total (avg.)', + name: 'Memory total', field: 'totalMemoryMegabytes', align: 'right', render: (totalMemoryMegabytes: number) => ( diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/use_host_metrics_table.ts b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/use_host_metrics_table.ts index 04212ce9c215b..602b5e519d25d 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/use_host_metrics_table.ts +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/use_host_metrics_table.ts @@ -12,9 +12,12 @@ import type { } from '../../../../common/http_api/metrics_explorer'; import type { MetricsQueryOptions, SortState, UseNodeMetricsTableOptions } from '../shared'; import { + averageOfValues, + createMetricByFieldLookup, + makeUnpackMetric, metricsToApiOptions, + scaleUpPercentage, useInfrastructureNodeMetrics, - createMetricByFieldLookup, } from '../shared'; type HostMetricsField = @@ -45,6 +48,7 @@ const hostsMetricsQueryConfig: MetricsQueryOptions = { }; export const metricByField = createMetricByFieldLookup(hostsMetricsQueryConfig.metricsMap); +const unpackMetric = makeUnpackMetric(metricByField); export interface HostNodeMetricsRow { name: string; @@ -121,24 +125,24 @@ function calculateMetricAverages(rows: MetricsExplorerRow[]) { let cpuCount = null; if (cpuCountValues.length !== 0) { - cpuCount = averageOfValues(cpuCountValues); + cpuCount = cpuCountValues.at(-1)!; } let averageCpuUsagePercent = null; if (averageCpuUsagePercentValues.length !== 0) { - averageCpuUsagePercent = averageOfValues(averageCpuUsagePercentValues); + averageCpuUsagePercent = scaleUpPercentage(averageOfValues(averageCpuUsagePercentValues)); } let totalMemoryMegabytes = null; if (totalMemoryMegabytesValues.length !== 0) { - const averageInBytes = averageOfValues(totalMemoryMegabytesValues); + const memoryInBytes = totalMemoryMegabytesValues.at(-1); const bytesPerMegabyte = 1000000; - totalMemoryMegabytes = Math.floor(averageInBytes / bytesPerMegabyte); + totalMemoryMegabytes = Math.floor(memoryInBytes! / bytesPerMegabyte); } let averageMemoryUsagePercent = null; if (averageMemoryUsagePercentValues.length !== 0) { - averageMemoryUsagePercent = averageOfValues(averageMemoryUsagePercentValues); + averageMemoryUsagePercent = scaleUpPercentage(averageOfValues(averageMemoryUsagePercentValues)); } return { @@ -186,14 +190,9 @@ function collectMetricValues(rows: MetricsExplorerRow[]) { function unpackMetrics(row: MetricsExplorerRow): Omit { return { - cpuCount: row[metricByField['system.cpu.cores']] as number | null, - averageCpuUsagePercent: row[metricByField['system.cpu.total.norm.pct']] as number | null, - totalMemoryMegabytes: row[metricByField['system.memory.total']] as number | null, - averageMemoryUsagePercent: row[metricByField['system.memory.used.pct']] as number | null, + cpuCount: unpackMetric(row, 'system.cpu.cores'), + averageCpuUsagePercent: unpackMetric(row, 'system.cpu.total.norm.pct'), + totalMemoryMegabytes: unpackMetric(row, 'system.memory.total'), + averageMemoryUsagePercent: unpackMetric(row, 'system.memory.used.pct'), }; } - -function averageOfValues(values: number[]) { - const sum = values.reduce((acc, value) => acc + value, 0); - return sum / values.length; -} diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.test.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.test.tsx index 3a39b5bccbb10..bc3b7199ecd5d 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.test.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.test.tsx @@ -112,7 +112,7 @@ function createFetchMock(): NodeMetricsTableFetchMock { function createPod( id: string, name: string, - uptimeMs: number, + startTime: number, cpuUsagePct: number, memoryUsageBytes: number ): Partial { @@ -121,8 +121,8 @@ function createPod( keys: [id, name], rows: [ { - [metricByField['kubernetes.pod.start_time']]: uptimeMs, - [metricByField['kubernetes.pod.cpu.usage.node.pct']]: cpuUsagePct, + [metricByField['kubernetes.pod.start_time']]: startTime, + [metricByField['kubernetes.pod.cpu.usage.limit.pct']]: cpuUsagePct, [metricByField['kubernetes.pod.memory.usage.bytes']]: memoryUsageBytes, } as MetricsExplorerSeries['rows'][number], ], diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/use_pod_metrics_table.ts b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/use_pod_metrics_table.ts index 116293a09a61c..cf097c52bc629 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/use_pod_metrics_table.ts +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/use_pod_metrics_table.ts @@ -12,14 +12,17 @@ import type { } from '../../../../common/http_api/metrics_explorer'; import type { MetricsQueryOptions, SortState, UseNodeMetricsTableOptions } from '../shared'; import { + averageOfValues, + createMetricByFieldLookup, + makeUnpackMetric, metricsToApiOptions, + scaleUpPercentage, useInfrastructureNodeMetrics, - createMetricByFieldLookup, } from '../shared'; type PodMetricsField = | 'kubernetes.pod.start_time' - | 'kubernetes.pod.cpu.usage.node.pct' + | 'kubernetes.pod.cpu.usage.limit.pct' | 'kubernetes.pod.memory.usage.bytes'; const podMetricsQueryConfig: MetricsQueryOptions = { @@ -34,9 +37,9 @@ const podMetricsQueryConfig: MetricsQueryOptions = { aggregation: 'max', field: 'kubernetes.pod.start_time', }, - 'kubernetes.pod.cpu.usage.node.pct': { + 'kubernetes.pod.cpu.usage.limit.pct': { aggregation: 'avg', - field: 'kubernetes.pod.cpu.usage.node.pct', + field: 'kubernetes.pod.cpu.usage.limit.pct', }, 'kubernetes.pod.memory.usage.bytes': { aggregation: 'avg', @@ -46,6 +49,7 @@ const podMetricsQueryConfig: MetricsQueryOptions = { }; export const metricByField = createMetricByFieldLookup(podMetricsQueryConfig.metricsMap); +const unpackMetric = makeUnpackMetric(metricByField); export interface PodNodeMetricsRow { id: string; @@ -115,17 +119,18 @@ function rowWithoutMetrics(id: string, name: string) { } function calculateMetricAverages(rows: MetricsExplorerRow[]) { - const { uptimeValues, averageCpuUsagePercentValues, averageMemoryUsageMegabytesValues } = + const { startTimeValues, averageCpuUsagePercentValues, averageMemoryUsageMegabytesValues } = collectMetricValues(rows); let uptime = null; - if (uptimeValues.length !== 0) { - uptime = averageOfValues(uptimeValues); + if (startTimeValues.length !== 0) { + const startTime = startTimeValues.at(-1); + uptime = Date.now() - startTime!; } let averageCpuUsagePercent = null; if (averageCpuUsagePercentValues.length !== 0) { - averageCpuUsagePercent = averageOfValues(averageCpuUsagePercentValues); + averageCpuUsagePercent = scaleUpPercentage(averageOfValues(averageCpuUsagePercentValues)); } let averageMemoryUsageMegabytes = null; @@ -143,15 +148,15 @@ function calculateMetricAverages(rows: MetricsExplorerRow[]) { } function collectMetricValues(rows: MetricsExplorerRow[]) { - const uptimeValues: number[] = []; + const startTimeValues: number[] = []; const averageCpuUsagePercentValues: number[] = []; const averageMemoryUsageMegabytesValues: number[] = []; rows.forEach((row) => { - const { uptime, averageCpuUsagePercent, averageMemoryUsageMegabytes } = unpackMetrics(row); + const { startTime, averageCpuUsagePercent, averageMemoryUsageMegabytes } = unpackMetrics(row); - if (uptime !== null) { - uptimeValues.push(uptime); + if (startTime !== null) { + startTimeValues.push(startTime); } if (averageCpuUsagePercent !== null) { @@ -164,25 +169,18 @@ function collectMetricValues(rows: MetricsExplorerRow[]) { }); return { - uptimeValues, + startTimeValues, averageCpuUsagePercentValues, averageMemoryUsageMegabytesValues, }; } -function unpackMetrics(row: MetricsExplorerRow): Omit { +function unpackMetrics( + row: MetricsExplorerRow +): Omit & { startTime: number | null } { return { - uptime: row[metricByField['kubernetes.pod.start_time']] as number | null, - averageCpuUsagePercent: row[metricByField['kubernetes.pod.cpu.usage.node.pct']] as - | number - | null, - averageMemoryUsageMegabytes: row[metricByField['kubernetes.pod.memory.usage.bytes']] as - | number - | null, + startTime: unpackMetric(row, 'kubernetes.pod.start_time'), + averageCpuUsagePercent: unpackMetric(row, 'kubernetes.pod.cpu.usage.limit.pct'), + averageMemoryUsageMegabytes: unpackMetric(row, 'kubernetes.pod.memory.usage.bytes'), }; } - -function averageOfValues(values: number[]) { - const sum = values.reduce((acc, value) => acc + value, 0); - return sum / values.length; -} diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/helpers.ts b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/helpers.ts new file mode 100644 index 0000000000000..4c475300658b7 --- /dev/null +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/helpers.ts @@ -0,0 +1,24 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { MetricsExplorerRow } from '../../../../../common/http_api/metrics_explorer'; + +export function averageOfValues(values: number[]) { + const sum = values.reduce((acc, value) => acc + value, 0); + return sum / values.length; +} + +export function makeUnpackMetric(metricByField: Record) { + // Make sure metrics are accessed as row[metricByField['FIELD_NAME']] + // Not row['FIELD_NAME'] by accident + return (row: MetricsExplorerRow, field: T) => row[metricByField[field]] as number | null; +} + +export function scaleUpPercentage(unscaled: number) { + // Scale e.g. 0.027 to 2.7 + return unscaled * 100; +} diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/index.ts b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/index.ts index 06599df168690..a60aae2952a65 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/index.ts +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/hooks/index.ts @@ -5,7 +5,8 @@ * 2.0. */ -export { metricsToApiOptions, createMetricByFieldLookup } from './metrics_to_api_options'; +export { averageOfValues, makeUnpackMetric, scaleUpPercentage } from './helpers'; +export { createMetricByFieldLookup, metricsToApiOptions } from './metrics_to_api_options'; export type { MetricsMap, MetricsQueryOptions } from './metrics_to_api_options'; export { useInfrastructureNodeMetrics } from './use_infrastructure_node_metrics'; export type { SortState } from './use_infrastructure_node_metrics'; diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/index.ts b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/index.ts index 25f78647fa026..12bc83c008e8f 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/index.ts +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/index.ts @@ -7,11 +7,14 @@ export { MetricsNodeDetailsLink, NumberCell, StepwisePagination, UptimeCell } from './components'; export { + averageOfValues, + createMetricByFieldLookup, + makeUnpackMetric, metricsToApiOptions, + scaleUpPercentage, useInfrastructureNodeMetrics, - createMetricByFieldLookup, } from './hooks'; -export type { MetricsMap, SortState, MetricsQueryOptions } from './hooks'; +export type { MetricsMap, MetricsQueryOptions, SortState } from './hooks'; export type { IntegratedNodeMetricsTableProps, SourceProviderProps, From e1f3aca0c8934ae8002a243f205e32c7fbf3b62c Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Tue, 21 Jun 2022 11:04:38 +0300 Subject: [PATCH 22/50] Improve CORS messages (#134659) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../servicenow/translations.ts | 8 +++++++ .../servicenow/use_get_app_info.test.tsx | 24 +++++++++++++++++++ .../servicenow/use_get_app_info.tsx | 13 ++++++++++ 3 files changed, 45 insertions(+) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts index 504e95636749b..7c6fab2b18792 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts @@ -146,6 +146,14 @@ export const API_INFO_ERROR = (status: number) => defaultMessage: 'Received status: {status} when attempting to get application information', }); +export const FETCH_ERROR = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.fetchErrorMsg', + { + defaultMessage: + 'Failed to fetch. Check the URL or the CORS configuration of your ServiceNow instance.', + } +); + export const INSTALLATION_CALLOUT_TITLE = i18n.translate( 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.installationCalloutTitle', { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.test.tsx index c8b1f3be71ff7..f8e9a2c4bac1a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.test.tsx @@ -99,4 +99,28 @@ describe('useGetAppInfo', () => { }) ).rejects.toThrow('An error occurred'); }); + + it('it throws an error when fetch fails', async () => { + expect.assertions(1); + getAppInfoMock.mockImplementation(() => { + const error = new Error('An error occurred'); + error.name = 'TypeError'; + throw error; + }); + + const { result } = renderHook(() => + useGetAppInfo({ + actionTypeId, + http, + }) + ); + + await expect(() => + act(async () => { + await result.current.fetchAppInfo(actionConnector); + }) + ).rejects.toThrow( + 'Failed to fetch. Check the URL or the CORS configuration of your ServiceNow instance.' + ); + }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.tsx index a086071a63487..b0b295c9b7269 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_app_info.tsx @@ -10,6 +10,7 @@ import { useState, useEffect, useRef, useCallback } from 'react'; import { HttpStart } from '@kbn/core/public'; import { getAppInfo } from './api'; import { AppInfo, RESTApiError, ServiceNowActionConnector } from './types'; +import { FETCH_ERROR } from './translations'; export interface UseGetAppInfoProps { actionTypeId?: string; @@ -56,6 +57,18 @@ export const useGetAppInfo = ({ actionTypeId, http }: UseGetAppInfoProps): UseGe if (!didCancel.current) { setIsLoading(false); } + + /** + * According to https://developer.mozilla.org/en-US/docs/Web/API/fetch#exceptions + * all network errors throw a TypeError. Usually fetch errors are happening + * due to CORS misconfiguration. By detecting fetch errors we can provide + * a better message about CORS. Adding a CORS rule to allow requests from the UI + * in the ServiceNow instance is needed by our ServiceNow applications. + */ + if (error.name === 'TypeError') { + throw new Error(FETCH_ERROR); + } + throw error; } }, From 69e125fb8b0d6999d6b771be521f2c56e1e3e657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Alvarez=20Pi=C3=B1eiro?= <95703246+emilioalvap@users.noreply.github.com> Date: Tue, 21 Jun 2022 10:18:08 +0200 Subject: [PATCH 23/50] Migrate client metrics from APM to UX (#133322) * Migrate client metrics from APM to UX * Add e2e test --- .../__snapshots__/queries.test.ts.snap | 75 +----------------- .../server/routes/rum_client/queries.test.ts | 15 ---- .../apm/server/routes/rum_client/route.ts | 32 -------- x-pack/plugins/ux/e2e/journeys/index.ts | 1 + .../e2e/journeys/ux_client_metrics.journey.ts | 78 +++++++++++++++++++ .../rum_dashboard/client_metrics/metrics.tsx | 33 +++----- .../public/hooks/use_client_metrics_query.ts | 59 ++++++++++++++ .../client_metrics_query.test.ts.snap | 76 ++++++++++++++++++ .../core_web_vitals_query.test.ts.snap | 7 ++ .../service_name_query.test.ts.snap | 7 ++ .../data/client_metrics_query.test.ts | 17 ++++ .../services/data/client_metrics_query.ts} | 46 +++-------- .../services/data/core_web_vitals_query.ts | 3 +- .../ux/public/services/data/projections.ts | 4 +- .../services/data/service_name_query.ts | 4 +- .../public/services/data/url_search_query.ts | 3 +- 16 files changed, 273 insertions(+), 187 deletions(-) create mode 100644 x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts create mode 100644 x-pack/plugins/ux/public/hooks/use_client_metrics_query.ts create mode 100644 x-pack/plugins/ux/public/services/data/__snapshots__/client_metrics_query.test.ts.snap create mode 100644 x-pack/plugins/ux/public/services/data/client_metrics_query.test.ts rename x-pack/plugins/{apm/server/routes/rum_client/get_client_metrics.ts => ux/public/services/data/client_metrics_query.ts} (55%) diff --git a/x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap b/x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap index 5931582340943..52c4c4b1d0333 100644 --- a/x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap +++ b/x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap @@ -1,78 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`rum client dashboard queries fetches client metrics 1`] = ` -Object { - "apm": Object { - "events": Array [ - "transaction", - ], - }, - "body": Object { - "aggs": Object { - "hasFetchStartField": Object { - "aggs": Object { - "backEnd": Object { - "percentiles": Object { - "field": "transaction.marks.agent.timeToFirstByte", - "hdr": Object { - "number_of_significant_value_digits": 3, - }, - "percents": Array [ - 50, - ], - }, - }, - "totalPageLoadDuration": Object { - "percentiles": Object { - "field": "transaction.duration.us", - "hdr": Object { - "number_of_significant_value_digits": 3, - }, - "percents": Array [ - 50, - ], - }, - }, - }, - "filter": Object { - "exists": Object { - "field": "transaction.marks.navigationTiming.fetchStart", - }, - }, - }, - }, - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "format": "epoch_millis", - "gte": 0, - "lte": 50000, - }, - }, - }, - Object { - "term": Object { - "transaction.type": "page-load", - }, - }, - Object { - "term": Object { - "service.environment": "staging", - }, - }, - ], - "must_not": Array [], - }, - }, - "size": 0, - "track_total_hits": true, - }, -} -`; - exports[`rum client dashboard queries fetches long task metrics 1`] = ` Object { "apm": Object { @@ -464,4 +391,4 @@ Object { "size": 0, }, } -`; +`; \ No newline at end of file diff --git a/x-pack/plugins/apm/server/routes/rum_client/queries.test.ts b/x-pack/plugins/apm/server/routes/rum_client/queries.test.ts index 43c115c75567c..a3725b0500c5f 100644 --- a/x-pack/plugins/apm/server/routes/rum_client/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/rum_client/queries.test.ts @@ -9,7 +9,6 @@ import { SearchParamsMock, inspectSearchParams, } from '../../utils/test_helpers'; -import { getClientMetrics } from './get_client_metrics'; import { getPageViewTrends } from './get_page_view_trends'; import { getPageLoadDistribution } from './get_page_load_distribution'; import { getLongTaskMetrics } from './get_long_task_metrics'; @@ -21,20 +20,6 @@ describe('rum client dashboard queries', () => { mock.teardown(); }); - it('fetches client metrics', async () => { - mock = await inspectSearchParams( - (setup) => - getClientMetrics({ - setup, - start: 0, - end: 50000, - }), - { uiFilters: { environment: 'staging' } } - ); - - expect(mock.params).toMatchSnapshot(); - }); - it('fetches page view trends', async () => { mock = await inspectSearchParams( (setup) => diff --git a/x-pack/plugins/apm/server/routes/rum_client/route.ts b/x-pack/plugins/apm/server/routes/rum_client/route.ts index b1312822aaaff..d7911ef4a0206 100644 --- a/x-pack/plugins/apm/server/routes/rum_client/route.ts +++ b/x-pack/plugins/apm/server/routes/rum_client/route.ts @@ -7,7 +7,6 @@ import * as t from 'io-ts'; import { Logger } from '@kbn/core/server'; import { setupRequest, Setup } from '../../lib/helpers/setup_request'; -import { getClientMetrics } from './get_client_metrics'; import { getLongTaskMetrics } from './get_long_task_metrics'; import { getPageLoadDistribution } from './get_page_load_distribution'; import { getPageViewTrends } from './get_page_view_trends'; @@ -57,36 +56,6 @@ const uxQueryRt = t.intersection([ t.partial({ urlQuery: t.string, percentile: t.string }), ]); -const rumClientMetricsRoute = createApmServerRoute({ - endpoint: 'GET /internal/apm/ux/client-metrics', - params: t.type({ - query: uxQueryRt, - }), - options: { tags: ['access:apm'] }, - handler: async ( - resources - ): Promise<{ - pageViews: { value: number }; - totalPageLoadDuration: { value: number }; - backEnd: { value: number }; - frontEnd: { value: number }; - }> => { - const setup = await setupUXRequest(resources); - - const { - query: { urlQuery, percentile, start, end }, - } = resources.params; - - return getClientMetrics({ - setup, - urlQuery, - percentile: percentile ? Number(percentile) : undefined, - start, - end, - }); - }, -}); - const rumPageLoadDistributionRoute = createApmServerRoute({ endpoint: 'GET /internal/apm/ux/page-load-distribution', params: t.type({ @@ -270,7 +239,6 @@ async function setupUXRequest( } export const rumRouteRepository = { - ...rumClientMetricsRoute, ...rumPageLoadDistributionRoute, ...rumPageLoadDistBreakdownRoute, ...rumPageViewsTrendRoute, diff --git a/x-pack/plugins/ux/e2e/journeys/index.ts b/x-pack/plugins/ux/e2e/journeys/index.ts index 7440afe377ac3..36976caaa458d 100644 --- a/x-pack/plugins/ux/e2e/journeys/index.ts +++ b/x-pack/plugins/ux/e2e/journeys/index.ts @@ -8,3 +8,4 @@ export * from './core_web_vitals'; export * from './url_ux_query.journey'; export * from './ux_js_errors.journey'; +export * from './ux_client_metrics.journey'; diff --git a/x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts new file mode 100644 index 0000000000000..7d0d426d5fd0d --- /dev/null +++ b/x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts @@ -0,0 +1,78 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { journey, step, expect, before } from '@elastic/synthetics'; +import { UXDashboardDatePicker } from '../page_objects/date_picker'; +import { byTestId, loginToKibana, waitForLoadingToFinish } from './utils'; + +const totalPageLoadValue = '4.24 s'; +const totalPageLoadLabel = `Total + +${totalPageLoadValue}`; +const backendLabel = `Backend + +359 ms`; +const frontendLabel = `Frontend + +3.88 s`; +const pageViewsLabel = `Total page views + +524`; + +journey('UX ClientMetrics', async ({ page, params }) => { + before(async () => { + await waitForLoadingToFinish({ page }); + }); + + const queryParams = { + percentile: '50', + rangeFrom: '2020-05-18T11:51:00.000Z', + rangeTo: '2021-10-30T06:37:15.536Z', + }; + const queryString = new URLSearchParams(queryParams).toString(); + + const baseUrl = `${params.kibanaUrl}/app/ux`; + + step('Go to UX Dashboard', async () => { + await page.goto(`${baseUrl}?${queryString}`, { + waitUntil: 'networkidle', + }); + await loginToKibana({ + page, + user: { username: 'viewer_user', password: 'changeme' }, + }); + }); + + step('Set date range', async () => { + const datePickerPage = new UXDashboardDatePicker(page); + await datePickerPage.setDefaultE2eRange(); + }); + + step('Confirm metrics values', async () => { + // Wait until chart data is loaded + page.waitForLoadState('networkidle'); + await page.waitForSelector(`text=${totalPageLoadValue}`); + + const totalPageLoad = await ( + await page.waitForSelector(byTestId('uxClientMetrics-totalPageLoad')) + ).innerText(); + const backend = await ( + await page.waitForSelector(byTestId('uxClientMetrics-backend')) + ).innerText(); + const frontend = await ( + await page.waitForSelector(byTestId('uxClientMetrics-frontend')) + ).innerText(); + const pageViews = await ( + await page.waitForSelector(byTestId('uxClientMetrics-pageViews')) + ).innerText(); + + expect(totalPageLoad).toBe(totalPageLoadLabel); + expect(backend).toBe(backendLabel); + expect(frontend).toBe(frontendLabel); + expect(pageViews).toBe(pageViewsLabel); + }); +}); diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/client_metrics/metrics.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/client_metrics/metrics.tsx index f8196db691073..d08cf258194d0 100644 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/client_metrics/metrics.tsx +++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/client_metrics/metrics.tsx @@ -16,9 +16,8 @@ import { EuiToolTip, EuiIconTip, } from '@elastic/eui'; -import { useFetcher } from '../../../../hooks/use_fetcher'; +import { useClientMetricsQuery } from '../../../../hooks/use_client_metrics_query'; import { I18LABELS } from '../translations'; -import { useUxQuery } from '../hooks/use_ux_query'; import { formatToSec } from '../ux_metrics/key_ux_metrics'; import { CsmSharedContext } from '../csm_shared_context'; @@ -49,23 +48,7 @@ function PageViewsTotalTitle({ pageViews }: { pageViews?: number }) { } export function Metrics() { - const uxQuery = useUxQuery(); - - const { data, status } = useFetcher( - (callApmApi) => { - if (uxQuery) { - return callApmApi('GET /internal/apm/ux/client-metrics', { - params: { - query: { - ...uxQuery, - }, - }, - }); - } - return Promise.resolve(null); - }, - [uxQuery] - ); + const { data, loading } = useClientMetricsQuery(); const { setSharedData } = useContext(CsmSharedContext); @@ -79,6 +62,7 @@ export function Metrics() { } - isLoading={status !== 'success'} + isLoading={!!loading} /> } - isLoading={status !== 'success'} + isLoading={!!loading} /> } - isLoading={status !== 'success'} + isLoading={!!loading} /> } description={I18LABELS.pageViews} - isLoading={status !== 'success'} + isLoading={!!loading} /> diff --git a/x-pack/plugins/ux/public/hooks/use_client_metrics_query.ts b/x-pack/plugins/ux/public/hooks/use_client_metrics_query.ts new file mode 100644 index 0000000000000..a28e59453b1ee --- /dev/null +++ b/x-pack/plugins/ux/public/hooks/use_client_metrics_query.ts @@ -0,0 +1,59 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEsSearch } from '@kbn/observability-plugin/public'; +import { useMemo } from 'react'; +import { useDataView } from '../components/app/rum_dashboard/local_uifilters/use_data_view'; +import { useLegacyUrlParams } from '../context/url_params_context/use_url_params'; +import { callDateMath } from '../services/data/call_date_math'; +import { clientMetricsQuery } from '../services/data/client_metrics_query'; + +export function useClientMetricsQuery() { + const { + rangeId, + urlParams: { start, end, percentile = 50, searchTerm }, + uxUiFilters, + } = useLegacyUrlParams(); + const { dataViewTitle } = useDataView(); + const { data: esQueryResponse, loading } = useEsSearch( + { + index: dataViewTitle, + ...clientMetricsQuery( + callDateMath(start), + callDateMath(end), + percentile, + searchTerm, + uxUiFilters + ), + }, + [start, end, percentile, searchTerm, uxUiFilters, dataViewTitle, rangeId], + { name: 'UxClientMetrics' } + ); + + const data = useMemo(() => { + if (!esQueryResponse) return {}; + + const { + hasFetchStartField: { backEnd, totalPageLoadDuration }, + } = esQueryResponse.aggregations!; + + const pkey = percentile.toFixed(1); + + const totalPageLoadDurationValue = totalPageLoadDuration.values[pkey] ?? 0; + const totalPageLoadDurationValueMs = totalPageLoadDurationValue / 1000; // Microseconds to milliseconds + const backendValue = backEnd.values[pkey] ?? 0; + + return { + pageViews: { value: (esQueryResponse.hits.total as any as number) ?? 0 }, + totalPageLoadDuration: { value: totalPageLoadDurationValueMs }, + backEnd: { value: backendValue }, + frontEnd: { value: totalPageLoadDurationValueMs - backendValue }, + }; + }, [esQueryResponse, percentile]); + + return { data, loading }; +} diff --git a/x-pack/plugins/ux/public/services/data/__snapshots__/client_metrics_query.test.ts.snap b/x-pack/plugins/ux/public/services/data/__snapshots__/client_metrics_query.test.ts.snap new file mode 100644 index 0000000000000..9957c50bf52c9 --- /dev/null +++ b/x-pack/plugins/ux/public/services/data/__snapshots__/client_metrics_query.test.ts.snap @@ -0,0 +1,76 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`clientMetricsQuery fetches client metrics 1`] = ` +Object { + "body": Object { + "aggs": Object { + "hasFetchStartField": Object { + "aggs": Object { + "backEnd": Object { + "percentiles": Object { + "field": "transaction.marks.agent.timeToFirstByte", + "hdr": Object { + "number_of_significant_value_digits": 3, + }, + "percents": Array [ + 50, + ], + }, + }, + "totalPageLoadDuration": Object { + "percentiles": Object { + "field": "transaction.duration.us", + "hdr": Object { + "number_of_significant_value_digits": 3, + }, + "percents": Array [ + 50, + ], + }, + }, + }, + "filter": Object { + "exists": Object { + "field": "transaction.marks.navigationTiming.fetchStart", + }, + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "format": "epoch_millis", + "gte": 0, + "lte": 50000, + }, + }, + }, + Object { + "term": Object { + "transaction.type": "page-load", + }, + }, + Object { + "terms": Object { + "processor.event": Array [ + "transaction", + ], + }, + }, + Object { + "term": Object { + "service.environment": "staging", + }, + }, + ], + "must_not": Array [], + }, + }, + "size": 0, + "track_total_hits": true, + }, +} +`; \ No newline at end of file diff --git a/x-pack/plugins/ux/public/services/data/__snapshots__/core_web_vitals_query.test.ts.snap b/x-pack/plugins/ux/public/services/data/__snapshots__/core_web_vitals_query.test.ts.snap index 8810a3e97aca8..510ee84a042e4 100644 --- a/x-pack/plugins/ux/public/services/data/__snapshots__/core_web_vitals_query.test.ts.snap +++ b/x-pack/plugins/ux/public/services/data/__snapshots__/core_web_vitals_query.test.ts.snap @@ -99,6 +99,13 @@ Object { "transaction.type": "page-load", }, }, + Object { + "terms": Object { + "processor.event": Array [ + "transaction", + ], + }, + }, Object { "exists": Object { "field": "transaction.marks.navigationTiming.fetchStart", diff --git a/x-pack/plugins/ux/public/services/data/__snapshots__/service_name_query.test.ts.snap b/x-pack/plugins/ux/public/services/data/__snapshots__/service_name_query.test.ts.snap index 45cebebe8f386..2a3fbbd8b120f 100644 --- a/x-pack/plugins/ux/public/services/data/__snapshots__/service_name_query.test.ts.snap +++ b/x-pack/plugins/ux/public/services/data/__snapshots__/service_name_query.test.ts.snap @@ -28,6 +28,13 @@ Object { "transaction.type": "page-load", }, }, + Object { + "terms": Object { + "processor.event": Array [ + "transaction", + ], + }, + }, Object { "exists": Object { "field": "transaction.marks.navigationTiming.fetchStart", diff --git a/x-pack/plugins/ux/public/services/data/client_metrics_query.test.ts b/x-pack/plugins/ux/public/services/data/client_metrics_query.test.ts new file mode 100644 index 0000000000000..7af6b0c7bcfd3 --- /dev/null +++ b/x-pack/plugins/ux/public/services/data/client_metrics_query.test.ts @@ -0,0 +1,17 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { clientMetricsQuery } from './client_metrics_query'; + +describe('clientMetricsQuery', () => { + it('fetches client metrics', () => { + const query = clientMetricsQuery(0, 50000, 50, '', { + environment: 'staging', + }); + expect(query).toMatchSnapshot(); + }); +}); diff --git a/x-pack/plugins/apm/server/routes/rum_client/get_client_metrics.ts b/x-pack/plugins/ux/public/services/data/client_metrics_query.ts similarity index 55% rename from x-pack/plugins/apm/server/routes/rum_client/get_client_metrics.ts rename to x-pack/plugins/ux/public/services/data/client_metrics_query.ts index 40352db9f18a6..1ab7eacb59855 100644 --- a/x-pack/plugins/apm/server/routes/rum_client/get_client_metrics.ts +++ b/x-pack/plugins/ux/public/services/data/client_metrics_query.ts @@ -5,27 +5,22 @@ * 2.0. */ -import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; -import { mergeProjection } from '../../projections/util/merge_projection'; -import { SetupUX } from './route'; +import { mergeProjection } from '../../../common/utils/merge_projection'; +import { SetupUX, UxUIFilters } from '../../../typings/ui_filters'; import { TRANSACTION_TIME_TO_FIRST_BYTE, TRANSACTION_DURATION, } from '../../../common/elasticsearch_fieldnames'; +import { getRumPageLoadTransactionsProjection } from './projections'; -export async function getClientMetrics({ - setup, - urlQuery, - percentile = 50, - start, - end, -}: { - setup: SetupUX; - urlQuery?: string; - percentile?: number; - start: number; - end: number; -}) { +export function clientMetricsQuery( + start: number, + end: number, + percentile: number = 50, + urlQuery?: string, + uiFilters?: UxUIFilters +) { + const setup: SetupUX = { uiFilters: uiFilters ? uiFilters : {} }; const projection = getRumPageLoadTransactionsProjection({ setup, urlQuery, @@ -68,22 +63,5 @@ export async function getClientMetrics({ }, }); - const { apmEventClient } = setup; - const response = await apmEventClient.search('get_client_metrics', params); - const { - hasFetchStartField: { backEnd, totalPageLoadDuration }, - } = response.aggregations!; - - const pkey = percentile.toFixed(1); - - const totalPageLoadDurationValue = totalPageLoadDuration.values[pkey] ?? 0; - const totalPageLoadDurationValueMs = totalPageLoadDurationValue / 1000; // Microseconds to milliseconds - const backendValue = backEnd.values[pkey] ?? 0; - - return { - pageViews: { value: response.hits.total.value ?? 0 }, - totalPageLoadDuration: { value: totalPageLoadDurationValueMs }, - backEnd: { value: backendValue }, - frontEnd: { value: totalPageLoadDurationValueMs - backendValue }, - }; + return params; } diff --git a/x-pack/plugins/ux/public/services/data/core_web_vitals_query.ts b/x-pack/plugins/ux/public/services/data/core_web_vitals_query.ts index 506727b315b3e..0f832eff6a2bd 100644 --- a/x-pack/plugins/ux/public/services/data/core_web_vitals_query.ts +++ b/x-pack/plugins/ux/public/services/data/core_web_vitals_query.ts @@ -158,6 +158,5 @@ export function coreWebVitalsQuery( }, }, }); - const { apm, ...rest } = params; - return rest; + return params; } diff --git a/x-pack/plugins/ux/public/services/data/projections.ts b/x-pack/plugins/ux/public/services/data/projections.ts index 35c5210a97e79..582639321b868 100644 --- a/x-pack/plugins/ux/public/services/data/projections.ts +++ b/x-pack/plugins/ux/public/services/data/projections.ts @@ -36,6 +36,7 @@ export function getRumPageLoadTransactionsProjection({ filter: [ ...rangeQuery(start, end), { term: { [TRANSACTION_TYPE]: TRANSACTION_PAGE_LOAD } }, + { terms: { [PROCESSOR_EVENT]: [ProcessorEvent.transaction] } }, ...(checkFetchStartFieldExists ? [ { @@ -62,9 +63,6 @@ export function getRumPageLoadTransactionsProjection({ }; return { - apm: { - events: [ProcessorEvent.transaction], - }, body: { query: { bool, diff --git a/x-pack/plugins/ux/public/services/data/service_name_query.ts b/x-pack/plugins/ux/public/services/data/service_name_query.ts index 1fa0809d0bd55..76eea53629e7e 100644 --- a/x-pack/plugins/ux/public/services/data/service_name_query.ts +++ b/x-pack/plugins/ux/public/services/data/service_name_query.ts @@ -37,6 +37,6 @@ export function serviceNameQuery( }, }, }); - const { apm, ...rest } = params; - return rest; + + return params; } diff --git a/x-pack/plugins/ux/public/services/data/url_search_query.ts b/x-pack/plugins/ux/public/services/data/url_search_query.ts index aa162e9174c01..e9f01ad6f827e 100644 --- a/x-pack/plugins/ux/public/services/data/url_search_query.ts +++ b/x-pack/plugins/ux/public/services/data/url_search_query.ts @@ -53,6 +53,5 @@ export function urlSearchQuery( }, }, }); - const { apm: _apm, ...rest } = params; - return rest; + return params; } From a59c0482ca87de4a65722f01cc2e713f2862ace1 Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Tue, 21 Jun 2022 09:27:35 +0100 Subject: [PATCH 24/50] [Infra] Connect metric tables to i81n (#134779) * [Infra] Connect metric tables to i81n --- .../container/container_metrics_table.tsx | 33 ++++++++--- .../host/host_metrics_table.tsx | 31 +++++++--- .../pod/pod_metrics_table.tsx | 27 ++++++--- .../shared/components/number_cell.tsx | 11 +++- .../shared/components/uptime_cell.tsx | 58 ++++++++++++++++--- 5 files changed, 130 insertions(+), 30 deletions(-) diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.tsx index 3ad7d18bc221c..445bfd7c107fb 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/container/container_metrics_table.tsx @@ -17,9 +17,10 @@ import { EuiLoadingSpinner, EuiSpacer, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import React, { useCallback, useMemo } from 'react'; -import { MetricsNodeDetailsLink, NumberCell, StepwisePagination, UptimeCell } from '../shared'; import type { SortState } from '../shared'; +import { MetricsNodeDetailsLink, NumberCell, StepwisePagination, UptimeCell } from '../shared'; import type { ContainerNodeMetricsRow } from './use_container_metrics_table'; export interface ContainerMetricsTableProps { @@ -78,7 +79,9 @@ export const ContainerMetricsTable = (props: ContainerMetricsTableProps) => { return ( <> { > { return [ { - name: 'Name', + name: i18n.translate('xpack.infra.metricsTable.container.nameColumnHeader', { + defaultMessage: 'Name', + }), field: 'name', truncateText: true, textOnly: true, @@ -122,13 +129,20 @@ function containerNodeColumns( }, }, { - name: 'Uptime', + name: i18n.translate('xpack.infra.metricsTable.container.uptimeColumnHeader', { + defaultMessage: 'Uptime', + }), field: 'uptime', align: 'right', render: (uptime: number) => , }, { - name: 'CPU usage (avg.)', + name: i18n.translate( + 'xpack.infra.metricsTable.container.averageCpuUsagePercentColumnHeader', + { + defaultMessage: 'CPU usage (avg.)', + } + ), field: 'averageCpuUsagePercent', align: 'right', render: (averageCpuUsagePercent: number) => ( @@ -136,7 +150,12 @@ function containerNodeColumns( ), }, { - name: 'Memory usage(avg.)', + name: i18n.translate( + 'xpack.infra.metricsTable.container.averageMemoryUsageMegabytesColumnHeader', + { + defaultMessage: 'Memory usage(avg.)', + } + ), field: 'averageMemoryUsageMegabytes', align: 'right', render: (averageMemoryUsageMegabytes: number) => ( diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx index 2c2cad4cf1222..043d9411bf284 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/host/host_metrics_table.tsx @@ -17,9 +17,10 @@ import { EuiLoadingSpinner, EuiSpacer, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import React, { useCallback, useMemo } from 'react'; -import { MetricsNodeDetailsLink, NumberCell, StepwisePagination } from '../shared'; import type { SortState } from '../shared'; +import { MetricsNodeDetailsLink, NumberCell, StepwisePagination } from '../shared'; import type { HostNodeMetricsRow } from './use_host_metrics_table'; export interface HostMetricsTableProps { @@ -78,7 +79,9 @@ export const HostMetricsTable = (props: HostMetricsTableProps) => { return ( <> { > { return [ { - name: 'Name', + name: i18n.translate('xpack.infra.metricsTable.host.nameColumnHeader', { + defaultMessage: 'Name', + }), field: 'name', truncateText: true, textOnly: true, @@ -115,13 +122,17 @@ function hostMetricsColumns( ), }, { - name: '# of CPUs', + name: i18n.translate('xpack.infra.metricsTable.host.CpuCountColumnHeader', { + defaultMessage: '# of CPUs', + }), field: 'cpuCount', align: 'right', render: (cpuCount: number) => , }, { - name: 'CPU usage (avg.)', + name: i18n.translate('xpack.infra.metricsTable.host.averageCpuUsagePercentColumnHeader', { + defaultMessage: 'CPU usage (avg.)', + }), field: 'averageCpuUsagePercent', align: 'right', render: (averageCpuUsagePercent: number) => ( @@ -129,7 +140,9 @@ function hostMetricsColumns( ), }, { - name: 'Memory total', + name: i18n.translate('xpack.infra.metricsTable.host.totalMemoryMegabytesColumnHeader', { + defaultMessage: 'Memory total', + }), field: 'totalMemoryMegabytes', align: 'right', render: (totalMemoryMegabytes: number) => ( @@ -137,7 +150,9 @@ function hostMetricsColumns( ), }, { - name: 'Memory usage (avg.)', + name: i18n.translate('xpack.infra.metricsTable.host.averageMemoryUsagePercentColumnHeader', { + defaultMessage: 'Memory usage (avg.)', + }), field: 'averageMemoryUsagePercent', align: 'right', render: (averageMemoryUsagePercent: number) => ( diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.tsx index 78edf32e1786b..9e8016ac1c2ef 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/pod/pod_metrics_table.tsx @@ -17,9 +17,10 @@ import { EuiLoadingSpinner, EuiSpacer, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import React, { useMemo } from 'react'; -import { MetricsNodeDetailsLink, NumberCell, StepwisePagination, UptimeCell } from '../shared'; import type { SortState } from '../shared'; +import { MetricsNodeDetailsLink, NumberCell, StepwisePagination, UptimeCell } from '../shared'; import type { PodNodeMetricsRow } from './use_pod_metrics_table'; export interface PodMetricsTableProps { @@ -76,7 +77,9 @@ export const PodMetricsTable = (props: PodMetricsTableProps) => { return ( <> { > { return [ { - name: 'Name', + name: i18n.translate('xpack.infra.metricsTable.pod.nameColumnHeader', { + defaultMessage: 'Name', + }), field: 'name', truncateText: true, textOnly: true, @@ -115,13 +122,17 @@ function podNodeColumns( }, }, { - name: 'Uptime', + name: i18n.translate('xpack.infra.metricsTable.pod.uptimeColumnHeader', { + defaultMessage: 'Uptime', + }), field: 'uptime', align: 'right', render: (uptime: number) => , }, { - name: 'CPU usage (avg.)', + name: i18n.translate('xpack.infra.metricsTable.pod.averageCpuUsagePercentColumnHeader', { + defaultMessage: 'CPU usage (avg.)', + }), field: 'averageCpuUsagePercent', align: 'right', render: (averageCpuUsagePercent: number) => ( @@ -129,7 +140,9 @@ function podNodeColumns( ), }, { - name: 'Memory usage (avg.)', + name: i18n.translate('xpack.infra.metricsTable.pod.averageMemoryUsageMegabytesColumnHeader', { + defaultMessage: 'Memory usage (avg.)', + }), field: 'averageMemoryUsageMegabytes', align: 'right', render: (averageMemoryUsageMegabytes: number) => ( diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/number_cell.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/number_cell.tsx index 368484b4af43d..77898a08268a0 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/number_cell.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/number_cell.tsx @@ -7,6 +7,7 @@ import { EuiI18nNumber, EuiTextColor } from '@elastic/eui'; import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; interface NumberCellProps { value?: number; @@ -15,7 +16,15 @@ interface NumberCellProps { export function NumberCell({ value, unit }: NumberCellProps) { if (value === null || value === undefined || isNaN(value)) { - return N/A; + return ( + + + + ); } if (!unit) { diff --git a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/uptime_cell.tsx b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/uptime_cell.tsx index 80b2ba4a755e1..38962bae0c84c 100644 --- a/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/uptime_cell.tsx +++ b/x-pack/plugins/infra/public/components/infrastructure_node_metrics_tables/shared/components/uptime_cell.tsx @@ -6,6 +6,8 @@ */ import { EuiTextColor } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; interface UptimeCellProps { @@ -14,7 +16,15 @@ interface UptimeCellProps { export function UptimeCell({ uptimeMs }: UptimeCellProps) { if (uptimeMs === null || uptimeMs === undefined || isNaN(uptimeMs)) { - return N/A; + return ( + + + + ); } return {formatUptime(uptimeMs)}; @@ -29,10 +39,18 @@ function formatUptime(uptimeMs: number): string { const minutes = Math.floor(uptimeMs / MS_PER_MINUTE); if (minutes > 0) { - return `${minutes}m`; + i18n.translate('xpack.infra.metricsTable.uptimeCell.minutesLabel', { + defaultMessage: '{minutes}m', + values: { + minutes, + }, + description: 'm is short for minutes', + }); } - return '< a minute'; + return i18n.translate('xpack.infra.metricsTable.uptimeCell.lessThanOneMinuteLabel', { + defaultMessage: '< a minute', + }); } if (uptimeMs < MS_PER_DAY) { @@ -41,10 +59,23 @@ function formatUptime(uptimeMs: number): string { const minutes = Math.floor(remainingUptimeMs / MS_PER_MINUTE); if (minutes > 0) { - return `${hours}h ${minutes}m`; + return i18n.translate('xpack.infra.metricsTable.uptimeCell.hoursAndMinutesLabel', { + defaultMessage: '{hours}h {minutes}m', + values: { + hours, + minutes, + }, + description: 'h is short for hours, m for minutes', + }); } - return `${hours}h`; + return i18n.translate('xpack.infra.metricsTable.uptimeCell.hoursLabel', { + defaultMessage: '{hours}h', + values: { + hours, + }, + description: 'h is short for hours', + }); } const days = Math.floor(uptimeMs / MS_PER_DAY); @@ -52,8 +83,21 @@ function formatUptime(uptimeMs: number): string { const hours = Math.floor(remainingUptimeMs / MS_PER_HOUR); if (hours > 0) { - return `${days}d ${hours}h`; + return i18n.translate('xpack.infra.metricsTable.uptimeCell.daysAndHoursLabel', { + defaultMessage: '{days}d {hours}h', + values: { + days, + hours, + }, + description: 'd is short for days, h for hours', + }); } - return `${days}d`; + return i18n.translate('xpack.infra.metricsTable.uptimeCell.daysLabel', { + defaultMessage: '{days}d', + values: { + days, + }, + description: 'd is short for days', + }); } From 7649da18cf5d5a7e8b34e4cf7eefa2a106353a50 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Tue, 21 Jun 2022 11:06:18 +0200 Subject: [PATCH 25/50] [Security Solution] Stateless FieldBrowser (#134495) * remove redux from field browser * test added Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../create_field_button/index.test.tsx | 4 +- .../create_field_button/index.tsx | 6 +- .../components/fields_browser/index.test.tsx | 33 ++++ .../components/fields_browser/index.tsx | 2 +- .../body/actions/header_actions.test.tsx | 141 ++++++++++++++++++ .../timeline/body/actions/header_actions.tsx | 37 ++++- .../body/column_headers/helpers.test.ts | 41 ++++- .../timeline/body/column_headers/helpers.ts | 14 ++ .../common/types/field_browser/index.ts | 6 +- .../public/components/field_browser/index.tsx | 30 +--- .../body/column_headers/helpers.test.tsx | 35 +++++ .../t_grid/body/column_headers/helpers.tsx | 14 ++ .../public/components/t_grid/body/index.tsx | 35 ++++- .../field_browser/field_browser.test.tsx | 103 +++---------- .../toolbar/field_browser/field_browser.tsx | 6 +- .../field_browser_modal.test.tsx | 69 ++------- .../field_browser/field_browser_modal.tsx | 41 ++--- .../toolbar/field_browser/field_items.tsx | 13 -- .../field_browser/field_table.test.tsx | 46 ++---- .../toolbar/field_browser/field_table.tsx | 32 +--- .../t_grid/toolbar/field_browser/helpers.tsx | 7 - .../toolbar/field_browser/search.test.tsx | 30 +--- .../t_grid/toolbar/field_browser/search.tsx | 25 ++-- .../timelines/public/methods/index.tsx | 4 +- x-pack/plugins/timelines/public/plugin.ts | 5 +- 25 files changed, 441 insertions(+), 338 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.test.tsx diff --git a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.test.tsx index 5f2f47073be6c..d1f7740268313 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.test.tsx @@ -19,7 +19,7 @@ const renderUseCreateFieldButton = (props: Partial = renderHook>( () => useCreateFieldButton({ - hasFieldEditPermission: true, + isAllowed: true, loading: false, openFieldEditor: mockOpenFieldEditor, ...props, @@ -40,7 +40,7 @@ describe('useCreateFieldButton', () => { }); it('should return the undefined when user do not has edit permissions', async () => { - const { result } = renderUseCreateFieldButton({ hasFieldEditPermission: false }); + const { result } = renderUseCreateFieldButton({ isAllowed: false }); expect(result.current).toBeUndefined(); }); diff --git a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.tsx index f20e7dce7d8bd..05bc3992791f6 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/create_field_button/index.tsx @@ -18,7 +18,7 @@ const StyledButton = styled(EuiButton)` `; export interface UseCreateFieldButtonProps { - hasFieldEditPermission: boolean; + isAllowed: boolean; loading: boolean; openFieldEditor: OpenFieldEditor; } @@ -30,7 +30,7 @@ export type UseCreateFieldButton = ( * Returns a memoised 'CreateFieldButton' with only an 'onClick' property. */ export const useCreateFieldButton: UseCreateFieldButton = ({ - hasFieldEditPermission, + isAllowed, loading, openFieldEditor, }) => { @@ -52,5 +52,5 @@ export const useCreateFieldButton: UseCreateFieldButton = ({ [loading, openFieldEditor] ); - return hasFieldEditPermission ? createFieldButton : undefined; + return isAllowed ? createFieldButton : undefined; }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.test.tsx index 8f4fc13ddbe3b..6539383639fe0 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.test.tsx @@ -34,6 +34,22 @@ let mockIndexPatternFieldEditor: Start; jest.mock('../../../common/lib/kibana'); const useKibanaMock = useKibana as jest.Mocked; +const defaultDataviewState: { + missingPatterns: string[]; + selectedDataViewId: string | null; +} = { + missingPatterns: [], + selectedDataViewId: 'security-solution', +}; +const mockScopeIdSelector = jest.fn(() => defaultDataviewState); +jest.mock('../../../common/store', () => { + const original = jest.requireActual('../../../common/store'); + return { + ...original, + sourcererSelectors: { scopeIdSelector: () => mockScopeIdSelector }, + }; +}); + const mockIndexFieldsSearch = jest.fn(); jest.mock('../../../common/containers/source/use_data_view', () => ({ useDataView: () => ({ @@ -100,6 +116,7 @@ describe('useFieldBrowserOptions', () => { ...useKibanaMock().services.application.capabilities, indexPatterns: { save: true }, }; + mockScopeIdSelector.mockReturnValue(defaultDataviewState); jest.clearAllMocks(); }); @@ -123,6 +140,22 @@ describe('useFieldBrowserOptions', () => { ); }); + it('should return the button when a dataView is present', async () => { + const { result } = renderUseFieldBrowserOptions(); + + expect(result.current.createFieldButton).toBeDefined(); + expect(result.current.getFieldTableColumns({ highlight: '', onHide: mockOnHide })).toHaveLength( + 5 + ); + }); + + it('should not return the button when a dataView is not present', () => { + mockScopeIdSelector.mockReturnValue({ missingPatterns: [], selectedDataViewId: null }); + const { result } = renderUseFieldBrowserOptions(); + + expect(result.current.createFieldButton).toBeUndefined(); + }); + it('should call onHide when button is pressed', async () => { useKibanaMock().services.data.dataViews.get = () => Promise.resolve({} as DataView); const { result } = await renderUpdatedUseFieldBrowserOptions(); diff --git a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.tsx index 35bb1f8e888fe..be67cb83e84b4 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/fields_browser/index.tsx @@ -155,7 +155,7 @@ export const useFieldBrowserOptions: UseFieldBrowserOptions = ({ ); const createFieldButton = useCreateFieldButton({ - hasFieldEditPermission, + isAllowed: hasFieldEditPermission && !!selectedDataViewId, loading: !dataView, openFieldEditor, }); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.test.tsx new file mode 100644 index 0000000000000..96931cf940793 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.test.tsx @@ -0,0 +1,141 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; + +import { TestProviders, mockTimelineModel } from '../../../../../common/mock'; +import { HeaderActions } from './header_actions'; +import { mockTimelines } from '../../../../../common/mock/mock_timelines_plugin'; +import { + ColumnHeaderOptions, + HeaderActionProps, + TimelineTabs, +} from '../../../../../../common/types/timeline'; +import { timelineActions } from '../../../../store/timeline'; +import { getColumnHeader } from '../column_headers/helpers'; + +jest.mock('../../../row_renderers_browser', () => ({ + StatefulRowRenderersBrowser: () => null, +})); + +const mockDispatch = jest.fn(); +jest.mock('react-redux', () => ({ + ...jest.requireActual('react-redux'), + useDispatch: () => mockDispatch, +})); + +jest.mock('../../../../../common/hooks/use_selector', () => ({ + useDeepEqualSelector: () => mockTimelineModel, + useShallowEqualSelector: jest.fn(), +})); + +const fieldId = 'test-field'; +const timelineId = 'test-timeline'; + +/* eslint-disable jsx-a11y/click-events-have-key-events */ +mockTimelines.getFieldBrowser.mockImplementation( + ({ + onToggleColumn, + onResetColumns, + }: { + onToggleColumn: (field: string) => void; + onResetColumns: () => void; + }) => ( +
+
onToggleColumn(fieldId)} /> +
+
+ ) +); + +jest.mock('../../../../../common/lib/kibana', () => ({ + useKibana: () => ({ + services: { + timelines: { ...mockTimelines }, + }, + }), +})); + +const defaultProps: HeaderActionProps = { + browserFields: {}, + columnHeaders: [], + isSelectAllChecked: false, + onSelectAll: jest.fn(), + showEventsSelect: false, + showSelectAllCheckbox: false, + sort: [], + tabType: TimelineTabs.query, + timelineId, + width: 10, +}; + +describe('HeaderActions', () => { + describe('FieldBrowser', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render the field browser', () => { + const result = render( + + + + ); + expect(result.getByTestId('mock-field-browser')).toBeInTheDocument(); + }); + + it('should dispatch upsertColumn when non existing column is toggled', () => { + const result = render( + + + + ); + result.getByTestId('mock-toggle-button').click(); + + expect(mockDispatch).toHaveBeenCalledWith( + timelineActions.upsertColumn({ + column: getColumnHeader(fieldId, []), + id: timelineId, + index: 1, + }) + ); + }); + + it('should dispatch removeColumn when existing column is toggled', () => { + const result = render( + + + + ); + result.getByTestId('mock-toggle-button').click(); + + expect(mockDispatch).toHaveBeenCalledWith( + timelineActions.removeColumn({ + columnId: fieldId, + id: timelineId, + }) + ); + }); + + it('should dispatch updateColumns when columns are reset', () => { + const result = render( + + + + ); + result.getByTestId('mock-reset-button').click(); + + expect(mockDispatch).toHaveBeenCalledWith( + timelineActions.updateColumns({ id: timelineId, columns: mockTimelineModel.defaultColumns }) + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.tsx index c45059c909761..6d05e5304150e 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/header_actions.tsx @@ -29,13 +29,15 @@ import { useGlobalFullScreen, useTimelineFullScreen, } from '../../../../../common/containers/use_full_screen'; +import { useDeepEqualSelector } from '../../../../../common/hooks/use_selector'; import { StatefulRowRenderersBrowser } from '../../../row_renderers_browser'; import { EventsTh, EventsThContent } from '../../styles'; import { EventsSelect } from '../column_headers/events_select'; import * as i18n from '../column_headers/translations'; -import { timelineActions } from '../../../../store/timeline'; +import { timelineActions, timelineSelectors } from '../../../../store/timeline'; import { isFullScreen } from '../column_headers'; import { useKibana } from '../../../../../common/lib/kibana'; +import { getColumnHeader } from '../column_headers/helpers'; const SortingColumnsContainer = styled.div` button { @@ -92,6 +94,10 @@ const HeaderActionsComponent: React.FC = ({ const { globalFullScreen, setGlobalFullScreen } = useGlobalFullScreen(); const { timelineFullScreen, setTimelineFullScreen } = useTimelineFullScreen(); const dispatch = useDispatch(); + + const getManageTimeline = useMemo(() => timelineSelectors.getManageTimelineById(), []); + const { defaultColumns } = useDeepEqualSelector((state) => getManageTimeline(state, timelineId)); + const toggleFullScreen = useCallback(() => { if (timelineId === TimelineId.active) { setTimelineFullScreen(!timelineFullScreen); @@ -168,6 +174,32 @@ const HeaderActionsComponent: React.FC = ({ [columnHeaders] ); + const onResetColumns = useCallback(() => { + dispatch(timelineActions.updateColumns({ id: timelineId, columns: defaultColumns })); + }, [defaultColumns, dispatch, timelineId]); + + const onToggleColumn = useCallback( + (fieldId: string) => { + if (columnHeaders.some(({ id }) => id === fieldId)) { + dispatch( + timelineActions.removeColumn({ + columnId: fieldId, + id: timelineId, + }) + ); + } else { + dispatch( + timelineActions.upsertColumn({ + column: getColumnHeader(fieldId, defaultColumns), + id: timelineId, + index: 1, + }) + ); + } + }, + [columnHeaders, dispatch, timelineId, defaultColumns] + ); + const ColumnSorting = useDataGridColumnSorting(myColumns, sortedColumns, {}, [], displayValues); return ( @@ -190,7 +222,8 @@ const HeaderActionsComponent: React.FC = ({ {timelinesUi.getFieldBrowser({ browserFields, columnHeaders, - timelineId, + onResetColumns, + onToggleColumn, options: fieldBrowserOptions, })} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.test.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.test.ts index 2a23b5e993637..012ec4a058841 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.test.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.test.ts @@ -11,7 +11,12 @@ import { BrowserFields } from '../../../../../../common/search_strategy'; import { ColumnHeaderOptions } from '../../../../../../common/types'; import { DEFAULT_COLUMN_MIN_WIDTH, DEFAULT_DATE_COLUMN_MIN_WIDTH } from '../constants'; import { defaultHeaders } from './default_headers'; -import { getColumnWidthFromType, getColumnHeaders, getRootCategory } from './helpers'; +import { + getColumnWidthFromType, + getColumnHeaders, + getRootCategory, + getColumnHeader, +} from './helpers'; describe('helpers', () => { describe('getColumnWidthFromType', () => { @@ -50,6 +55,40 @@ describe('helpers', () => { }); }); + describe('getColumnHeader', () => { + test('it should return column header non existing in defaultHeaders', () => { + const field = 'test_field_1'; + + expect(getColumnHeader(field, [])).toEqual({ + columnHeaderType: 'not-filtered', + id: field, + initialWidth: DEFAULT_COLUMN_MIN_WIDTH, + }); + }); + + test('it should return column header existing in defaultHeaders', () => { + const field = 'test_field_1'; + + expect( + getColumnHeader(field, [ + { + columnHeaderType: 'not-filtered', + id: field, + initialWidth: DEFAULT_DATE_COLUMN_MIN_WIDTH, + esTypes: ['date'], + type: 'date', + }, + ]) + ).toEqual({ + columnHeaderType: 'not-filtered', + id: field, + initialWidth: DEFAULT_DATE_COLUMN_MIN_WIDTH, + esTypes: ['date'], + type: 'date', + }); + }); + }); + describe('getColumnHeaders', () => { test('should return a full object of ColumnHeader from the default header', () => { const expectedData = [ diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts index 1779c39ce7b31..42c74042b58ca 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts @@ -10,6 +10,7 @@ import { ColumnHeaderOptions } from '../../../../../../common/types'; import { BrowserFields } from '../../../../../common/containers/source'; import { DEFAULT_COLUMN_MIN_WIDTH, DEFAULT_DATE_COLUMN_MIN_WIDTH } from '../constants'; +import { defaultColumnHeaderType } from './default_headers'; /** * Returns the root category for fields that are only one level, e.g. `_id` or `test_field_1` @@ -50,3 +51,16 @@ export const getColumnHeaders = ( export const getColumnWidthFromType = (type: string): number => type !== 'date' ? DEFAULT_COLUMN_MIN_WIDTH : DEFAULT_DATE_COLUMN_MIN_WIDTH; + +/** + * Returns the column header with field details from the defaultHeaders + */ +export const getColumnHeader = ( + fieldName: string, + defaultHeaders: ColumnHeaderOptions[] +): ColumnHeaderOptions => ({ + columnHeaderType: defaultColumnHeaderType, + id: fieldName, + initialWidth: DEFAULT_COLUMN_MIN_WIDTH, + ...(defaultHeaders.find((c) => c.id === fieldName) ?? {}), +}); diff --git a/x-pack/plugins/timelines/common/types/field_browser/index.ts b/x-pack/plugins/timelines/common/types/field_browser/index.ts index 9d2b5193c39fb..d365166f25f84 100644 --- a/x-pack/plugins/timelines/common/types/field_browser/index.ts +++ b/x-pack/plugins/timelines/common/types/field_browser/index.ts @@ -38,14 +38,16 @@ export interface FieldBrowserOptions { } export interface FieldBrowserProps { - /** The timeline associated with this field browser */ - timelineId: string; /** The timeline's current column headers */ columnHeaders: ColumnHeaderOptions[]; /** A map of categoryId -> metadata about the fields in that category */ browserFields: BrowserFields; /** When true, this Fields Browser is being used as an "events viewer" */ isEventViewer?: boolean; + /** Callback to reset the default columns */ + onResetColumns: () => void; + /** Callback to toggle a field column */ + onToggleColumn: (fieldId: string) => void; /** The options to customize the field browser, supporting columns rendering and button to create fields */ options?: FieldBrowserOptions; /** The width of the field browser */ diff --git a/x-pack/plugins/timelines/public/components/field_browser/index.tsx b/x-pack/plugins/timelines/public/components/field_browser/index.tsx index 1d577612a8b8c..b2d803d7ec188 100644 --- a/x-pack/plugins/timelines/public/components/field_browser/index.tsx +++ b/x-pack/plugins/timelines/public/components/field_browser/index.tsx @@ -5,12 +5,7 @@ * 2.0. */ -import React from 'react'; -import type { Store } from 'redux'; -import { Provider } from 'react-redux'; -import { I18nProvider } from '@kbn/i18n-react'; import { FieldBrowser } from '../t_grid/toolbar/field_browser'; -import { FieldBrowserProps } from '../../../common/types/field_browser'; export type { CreateFieldComponent, FieldBrowserOptions, @@ -18,28 +13,5 @@ export type { GetFieldTableColumns, } from '../../../common/types/field_browser'; -const EMPTY_BROWSER_FIELDS = {}; - -export type FieldBrowserWrappedComponentProps = FieldBrowserProps & { - store: Store; -}; - -export const FieldBrowserWrappedComponent = (props: FieldBrowserWrappedComponentProps) => { - const { store, ...restProps } = props; - const fieldBrowserProps = { - ...restProps, - browserFields: restProps.browserFields ?? EMPTY_BROWSER_FIELDS, - }; - return ( - - - - - - ); -}; - -FieldBrowserWrappedComponent.displayName = 'FieldBrowserWrappedComponent'; - // eslint-disable-next-line import/no-default-export -export { FieldBrowserWrappedComponent as default }; +export { FieldBrowser as default }; diff --git a/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.test.tsx b/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.test.tsx index c91189b509a37..66fd0e828aece 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.test.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.test.tsx @@ -16,6 +16,7 @@ import { getColumnWidthFromType, getColumnHeaders, getSchema, + getColumnHeader, } from './helpers'; import { DEFAULT_ACTION_BUTTON_WIDTH, @@ -72,6 +73,40 @@ describe('helpers', () => { }); }); + describe('getColumnHeader', () => { + test('it should return column header non existing in defaultHeaders', () => { + const field = 'test_field_1'; + + expect(getColumnHeader(field, [])).toEqual({ + columnHeaderType: 'not-filtered', + id: field, + initialWidth: DEFAULT_COLUMN_MIN_WIDTH, + }); + }); + + test('it should return column header existing in defaultHeaders', () => { + const field = 'test_field_1'; + + expect( + getColumnHeader(field, [ + { + columnHeaderType: 'not-filtered', + id: field, + initialWidth: DEFAULT_DATE_COLUMN_MIN_WIDTH, + esTypes: ['date'], + type: 'date', + }, + ]) + ).toEqual({ + columnHeaderType: 'not-filtered', + id: field, + initialWidth: DEFAULT_DATE_COLUMN_MIN_WIDTH, + esTypes: ['date'], + type: 'date', + }); + }); + }); + describe('getColumnHeaders', () => { // additional properties used by `EuiDataGrid`: const actions = { diff --git a/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.tsx b/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.tsx index 35fd814a7c2f4..ccd3bd3c0fa71 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/body/column_headers/helpers.tsx @@ -21,6 +21,7 @@ import { DEFAULT_DATE_COLUMN_MIN_WIDTH, } from '../constants'; import { allowSorting } from '../helpers'; +import { defaultColumnHeaderType } from './default_headers'; const defaultActions: EuiDataGridColumnActions = { showSortAsc: true, @@ -117,6 +118,19 @@ export const getColumnHeaders = ( : []; }; +/** + * Returns the column header with field details from the defaultHeaders + */ +export const getColumnHeader = ( + fieldName: string, + defaultHeaders: ColumnHeaderOptions[] +): ColumnHeaderOptions => ({ + columnHeaderType: defaultColumnHeaderType, + id: fieldName, + initialWidth: DEFAULT_COLUMN_MIN_WIDTH, + ...(defaultHeaders.find((c) => c.id === fieldName) ?? {}), +}); + export const getColumnWidthFromType = (type: string): number => type !== 'date' ? DEFAULT_COLUMN_MIN_WIDTH : DEFAULT_DATE_COLUMN_MIN_WIDTH; diff --git a/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx b/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx index 7f14f7452ad3b..308d7f6820efd 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx @@ -54,7 +54,7 @@ import { import type { TimelineItem, TimelineNonEcsData } from '../../../../common/search_strategy/timeline'; -import { getColumnHeaders } from './column_headers/helpers'; +import { getColumnHeader, getColumnHeaders } from './column_headers/helpers'; import { addBuildingBlockStyle, getEventIdToDataMapping, @@ -341,7 +341,7 @@ export const BodyComponent = React.memo( const dispatch = useDispatch(); const getManageTimeline = useMemo(() => tGridSelectors.getManageTimelineById(), []); - const { queryFields, selectAll } = useDeepEqualSelector((state) => + const { queryFields, selectAll, defaultColumns } = useDeepEqualSelector((state) => getManageTimeline(state, id) ); @@ -449,6 +449,32 @@ export const BodyComponent = React.memo( return (bulkActions?.customBulkActions?.length || bulkActions?.alertStatusActions) ?? true; }, [hasAlertsCrud, selectedCount, showCheckboxes, bulkActions]); + const onResetColumns = useCallback(() => { + dispatch(tGridActions.updateColumns({ id, columns: defaultColumns })); + }, [defaultColumns, dispatch, id]); + + const onToggleColumn = useCallback( + (fieldId: string) => { + if (columnHeaders.some(({ id: columnId }) => columnId === fieldId)) { + dispatch( + tGridActions.removeColumn({ + columnId: fieldId, + id, + }) + ); + } else { + dispatch( + tGridActions.upsertColumn({ + column: getColumnHeader(fieldId, defaultColumns), + id, + index: 1, + }) + ); + } + }, + [columnHeaders, dispatch, id, defaultColumns] + ); + const alertToolbar = useMemo( () => ( @@ -523,8 +549,9 @@ export const BodyComponent = React.memo( data-test-subj="field-browser" browserFields={browserFields} options={fieldBrowserOptions} - timelineId={id} columnHeaders={columnHeaders} + onResetColumns={onResetColumns} + onToggleColumn={onToggleColumn} /> )} @@ -556,6 +583,8 @@ export const BodyComponent = React.memo( indexNames, onAlertStatusActionSuccess, onAlertStatusActionFailure, + onResetColumns, + onToggleColumn, additionalBulkActions, refetch, additionalControls, diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.test.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.test.tsx index d75089fe86929..edc442e7b5a92 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.test.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.test.tsx @@ -13,49 +13,39 @@ import { mockBrowserFields, TestProviders } from '../../../../mock'; import { FIELD_BROWSER_WIDTH } from './helpers'; import { FieldBrowserComponent } from './field_browser'; +import { FieldBrowserProps } from '../../../field_browser'; + +const defaultProps: FieldBrowserProps = { + browserFields: mockBrowserFields, + columnHeaders: [], + onToggleColumn: jest.fn(), + onResetColumns: jest.fn(), +}; + +const renderComponent = (props: Partial = {}) => + render( + + + + ); describe('StatefulFieldsBrowser', () => { - const timelineId = 'test'; - it('should render the Fields button, which displays the fields browser on click', () => { - const result = render( - - - - ); + const result = renderComponent(); expect(result.getByTestId('show-field-browser')).toBeInTheDocument(); }); describe('toggleShow', () => { it('should NOT render the fields browser until the Fields button is clicked', () => { - const result = render( - - - - ); + const result = renderComponent(); expect(result.queryByTestId('fields-browser-container')).toBeNull(); }); it('should render the fields browser when the Fields button is clicked', async () => { - const result = render( - - - - ); + const result = renderComponent(); + result.getByTestId('show-field-browser').click(); await waitFor(() => { expect(result.getByTestId('fields-browser-container')).toBeInTheDocument(); @@ -65,15 +55,7 @@ describe('StatefulFieldsBrowser', () => { describe('updateSelectedCategoryIds', () => { it('should add a selected category, which creates the category badge', async () => { - const result = render( - - - - ); + const result = renderComponent(); result.getByTestId('show-field-browser').click(); await waitFor(() => { @@ -91,15 +73,7 @@ describe('StatefulFieldsBrowser', () => { }); it('should remove a selected category, which deletes the category badge', async () => { - const result = render( - - - - ); + const result = renderComponent(); result.getByTestId('show-field-browser').click(); await waitFor(() => { @@ -121,15 +95,7 @@ describe('StatefulFieldsBrowser', () => { }); it('should update the available categories according to the search input', async () => { - const result = render( - - - - ); + const result = renderComponent(); result.getByTestId('show-field-browser').click(); await waitFor(() => { @@ -149,17 +115,7 @@ describe('StatefulFieldsBrowser', () => { it('should render the Fields Browser button as a settings gear when the isEventViewer prop is true', () => { const isEventViewer = true; - - const result = render( - - - - ); + const result = renderComponent({ isEventViewer }); expect(result.getByTestId('show-field-browser')).toBeInTheDocument(); }); @@ -167,18 +123,7 @@ describe('StatefulFieldsBrowser', () => { it('should render the Fields Browser button as a settings gear when the isEventViewer prop is false', () => { const isEventViewer = false; - const result = render( - - - - ); - + const result = renderComponent({ isEventViewer, width: FIELD_BROWSER_WIDTH }); expect(result.getByTestId('show-field-browser')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.tsx index 899d0a10e2984..b683d251005ca 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser.tsx @@ -31,9 +31,10 @@ FieldBrowserButtonContainer.displayName = 'FieldBrowserButtonContainer'; * Manages the state of the field browser */ export const FieldBrowserComponent: React.FC = ({ - timelineId, columnHeaders, browserFields, + onResetColumns, + onToggleColumn, options, width, }) => { @@ -149,13 +150,14 @@ export const FieldBrowserComponent: React.FC = ({ setSelectedCategoryIds={setSelectedCategoryIds} onFilterSelectedChange={onFilterSelectedChange} onHide={onHide} + onResetColumns={onResetColumns} onSearchInputChange={updateFilter} + onToggleColumn={onToggleColumn} options={options} restoreFocusTo={customizeColumnsButtonRef} searchInput={filterInput} appliedFilterInput={appliedFilterInput} selectedCategoryIds={selectedCategoryIds} - timelineId={timelineId} width={width} /> )} diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.test.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.test.tsx index e027305530663..b1bdc8e58dd28 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.test.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.test.tsx @@ -9,24 +9,12 @@ import { mount } from 'enzyme'; import React from 'react'; import { TestProviders, mockBrowserFields, defaultHeaders } from '../../../../mock'; -import { mockGlobalState } from '../../../../mock/global_state'; -import { tGridActions } from '../../../../store/t_grid'; - import { FieldBrowserModal, FieldBrowserModalProps } from './field_browser_modal'; -import { createStore, State } from '../../../../types'; -import { createSecuritySolutionStorageMock } from '../../../../mock/mock_local_storage'; +const mockOnHide = jest.fn(); +const mockOnToggleColumn = jest.fn(); +const mockOnResetColumns = jest.fn(); -const mockDispatch = jest.fn(); -jest.mock('react-redux', () => { - const original = jest.requireActual('react-redux'); - return { - ...original, - useDispatch: () => mockDispatch, - }; -}); -const timelineId = 'test'; -const onHide = jest.fn(); const testProps: FieldBrowserModalProps = { columnHeaders: [], filteredBrowserFields: mockBrowserFields, @@ -34,15 +22,15 @@ const testProps: FieldBrowserModalProps = { appliedFilterInput: '', isSearching: false, setSelectedCategoryIds: jest.fn(), - onHide, + onHide: mockOnHide, + onResetColumns: mockOnResetColumns, onSearchInputChange: jest.fn(), + onToggleColumn: mockOnToggleColumn, restoreFocusTo: React.createRef(), selectedCategoryIds: [], - timelineId, filterSelectedEnabled: false, onFilterSelectedChange: jest.fn(), }; -const { storage } = createSecuritySolutionStorageMock(); describe('FieldBrowserModal', () => { beforeEach(() => { @@ -67,7 +55,7 @@ describe('FieldBrowserModal', () => { ); wrapper.find('[data-test-subj="close"]').first().simulate('click'); - expect(onHide).toBeCalled(); + expect(mockOnHide).toBeCalled(); }); test('it renders the Reset Fields button', () => { @@ -80,7 +68,7 @@ describe('FieldBrowserModal', () => { expect(wrapper.find('[data-test-subj="reset-fields"]').first().text()).toEqual('Reset Fields'); }); - test('it invokes updateColumns action when the user clicks the Reset Fields button', () => { + test('it invokes onResetColumns callback when the user clicks the Reset Fields button', () => { const wrapper = mount( @@ -88,13 +76,7 @@ describe('FieldBrowserModal', () => { ); wrapper.find('[data-test-subj="reset-fields"]').first().simulate('click'); - - expect(mockDispatch).toBeCalledWith( - tGridActions.updateColumns({ - id: timelineId, - columns: defaultHeaders, - }) - ); + expect(mockOnResetColumns).toHaveBeenCalled(); }); test('it invokes onHide when the user clicks the Reset Fields button', () => { @@ -106,7 +88,7 @@ describe('FieldBrowserModal', () => { wrapper.find('[data-test-subj="reset-fields"]').first().simulate('click'); - expect(onHide).toBeCalled(); + expect(mockOnHide).toBeCalled(); }); test('it renders the search', () => { @@ -173,7 +155,7 @@ describe('FieldBrowserModal', () => { expect(onSearchInputChange).toBeCalledWith(inputText); }); - test('does not render the CreateFieldButton when it is provided but does not have a dataViewId', () => { + test('it renders the CreateFieldButton when it is provided', () => { const MyTestComponent = () =>
{'test'}
; const wrapper = mount( @@ -187,35 +169,6 @@ describe('FieldBrowserModal', () => {
); - expect(wrapper.find(MyTestComponent).exists()).toBeFalsy(); - }); - - test('it renders the CreateFieldButton when it is provided and have a dataViewId', () => { - const state: State = { - ...mockGlobalState, - timelineById: { - ...mockGlobalState.timelineById, - test: { - ...mockGlobalState.timelineById.test, - dataViewId: 'security-solution-default', - }, - }, - }; - const store = createStore(state, storage); - - const MyTestComponent = () =>
{'test'}
; - - const wrapper = mount( - - - - ); - expect(wrapper.find(MyTestComponent).exists()).toBeTruthy(); }); }); diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.tsx index 47acb7ac4f15b..4a0be5f67a54a 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_browser_modal.tsx @@ -17,23 +17,23 @@ import { EuiButtonEmpty, EuiSpacer, } from '@elastic/eui'; -import React, { useCallback, useMemo } from 'react'; -import { useDispatch } from 'react-redux'; +import React, { useCallback } from 'react'; import type { BrowserFields } from '../../../../../common/search_strategy'; import type { FieldBrowserProps, ColumnHeaderOptions } from '../../../../../common/types'; import { Search } from './search'; import { CLOSE_BUTTON_CLASS_NAME, FIELD_BROWSER_WIDTH, RESET_FIELDS_CLASS_NAME } from './helpers'; -import { tGridActions, tGridSelectors } from '../../../../store/t_grid'; import * as i18n from './translations'; -import { useDeepEqualSelector } from '../../../../hooks/use_selector'; import { CategoriesSelector } from './categories_selector'; import { FieldTable } from './field_table'; import { CategoriesBadges } from './categories_badges'; -export type FieldBrowserModalProps = Pick & { +export type FieldBrowserModalProps = Pick< + FieldBrowserProps, + 'width' | 'onResetColumns' | 'onToggleColumn' | 'options' +> & { /** * The current timeline column headers */ @@ -93,6 +93,8 @@ const FieldBrowserModalComponent: React.FC = ({ filterSelectedEnabled, isSearching, onFilterSelectedChange, + onToggleColumn, + onResetColumns, setSelectedCategoryIds, onSearchInputChange, onHide, @@ -100,17 +102,8 @@ const FieldBrowserModalComponent: React.FC = ({ restoreFocusTo, searchInput, selectedCategoryIds, - timelineId, width = FIELD_BROWSER_WIDTH, }) => { - const dispatch = useDispatch(); - - const onUpdateColumns = useCallback( - (columns: ColumnHeaderOptions[]) => - dispatch(tGridActions.updateColumns({ id: timelineId, columns })), - [dispatch, timelineId] - ); - const closeAndRestoreFocus = useCallback(() => { onHide(); setTimeout(() => { @@ -119,15 +112,10 @@ const FieldBrowserModalComponent: React.FC = ({ }, 0); }, [onHide, restoreFocusTo]); - const getManageTimeline = useMemo(() => tGridSelectors.getManageTimelineById(), []); - const { dataViewId, defaultColumns } = useDeepEqualSelector((state) => - getManageTimeline(state, timelineId) - ); - - const onResetColumns = useCallback(() => { - onUpdateColumns(defaultColumns); + const resetColumns = useCallback(() => { + onResetColumns(); closeAndRestoreFocus(); - }, [onUpdateColumns, closeAndRestoreFocus, defaultColumns]); + }, [closeAndRestoreFocus, onResetColumns]); /** Invoked when the user types in the input to filter the field browser */ const onInputChange = useCallback( @@ -159,7 +147,6 @@ const FieldBrowserModalComponent: React.FC = ({ isSearching={isSearching} onSearchInputChange={onInputChange} searchInput={searchInput} - timelineId={timelineId} /> @@ -170,9 +157,7 @@ const FieldBrowserModalComponent: React.FC = ({ /> - {CreateFieldButton && dataViewId != null && dataViewId.length > 0 && ( - - )} + {CreateFieldButton && }
@@ -184,13 +169,13 @@ const FieldBrowserModalComponent: React.FC = ({ @@ -201,7 +186,7 @@ const FieldBrowserModalComponent: React.FC = ({ {i18n.RESET_FIELDS} diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_items.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_items.tsx index 5d255e6d6c2d2..e85285249c2f0 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_items.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_items.tsx @@ -29,12 +29,9 @@ import type { FieldTableColumns, GetFieldTableColumns, } from '../../../../../common/types'; -import { defaultColumnHeaderType } from '../../body/column_headers/default_headers'; -import { DEFAULT_COLUMN_MIN_WIDTH } from '../../body/constants'; import { TruncatableText } from '../../../truncatable_text'; import { FieldName } from './field_name'; import * as i18n from './translations'; -import { getAlertColumnHeader } from './helpers'; const TypeIcon = styled(EuiIcon)` margin: 0 4px; @@ -87,16 +84,6 @@ export const getFieldItems = ({ ); }; -/** - * Returns the column header for a field - */ -export const getColumnHeader = (timelineId: string, fieldName: string): ColumnHeaderOptions => ({ - columnHeaderType: defaultColumnHeaderType, - id: fieldName, - initialWidth: DEFAULT_COLUMN_MIN_WIDTH, - ...getAlertColumnHeader(timelineId, fieldName), -}); - const getDefaultFieldTableColumns = (highlight: string): FieldTableColumns => [ { field: 'name', diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.test.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.test.tsx index 77d5a754d6a97..5995870ce933a 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.test.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.test.tsx @@ -8,22 +8,12 @@ import React from 'react'; import { render, RenderResult } from '@testing-library/react'; import { mockBrowserFields, TestProviders } from '../../../../mock'; -import { tGridActions } from '../../../../store/t_grid'; import { defaultColumnHeaderType } from '../../body/column_headers/default_headers'; -import { DEFAULT_COLUMN_MIN_WIDTH, DEFAULT_DATE_COLUMN_MIN_WIDTH } from '../../body/constants'; +import { DEFAULT_DATE_COLUMN_MIN_WIDTH } from '../../body/constants'; import { ColumnHeaderOptions } from '../../../../../common'; import { FieldTable, FieldTableProps } from './field_table'; -const mockDispatch = jest.fn(); -jest.mock('react-redux', () => { - const original = jest.requireActual('react-redux'); - return { - ...original, - useDispatch: () => mockDispatch, - }; -}); - const timestampFieldId = '@timestamp'; const columnHeaders: ColumnHeaderOptions[] = [ @@ -39,16 +29,18 @@ const columnHeaders: ColumnHeaderOptions[] = [ initialWidth: DEFAULT_DATE_COLUMN_MIN_WIDTH, }, ]; -const timelineId = 'test'; + +const mockOnToggleColumn = jest.fn(); + const defaultProps: FieldTableProps = { selectedCategoryIds: [], columnHeaders: [], filteredBrowserFields: {}, searchInput: '', - timelineId, filterSelectedEnabled: false, onFilterSelectedChange: jest.fn(), onHide: jest.fn(), + onToggleColumn: mockOnToggleColumn, }; describe('FieldTable', () => { @@ -56,7 +48,7 @@ describe('FieldTable', () => { const defaultPageSize = 10; beforeEach(() => { - mockDispatch.mockClear(); + jest.clearAllMocks(); }); it('should render empty field table', () => { @@ -156,7 +148,7 @@ describe('FieldTable', () => { }); describe('selection', () => { - it('should dispatch remove column action on field unchecked', () => { + it('should call onToggleColumn callback when field unchecked', () => { const result = render( { result.getByTestId(`field-${timestampFieldId}-checkbox`).click(); - expect(mockDispatch).toHaveBeenCalledTimes(1); - expect(mockDispatch).toHaveBeenCalledWith( - tGridActions.removeColumn({ id: timelineId, columnId: timestampFieldId }) - ); + expect(mockOnToggleColumn).toHaveBeenCalledTimes(1); + expect(mockOnToggleColumn).toHaveBeenCalledWith(timestampFieldId); }); - it('should dispatch upsert column action on field checked', () => { + it('should call onToggleColumn callback when field checked', () => { const result = render( { result.getByTestId(`field-${timestampFieldId}-checkbox`).click(); - expect(mockDispatch).toHaveBeenCalledTimes(1); - expect(mockDispatch).toHaveBeenCalledWith( - tGridActions.upsertColumn({ - id: timelineId, - column: { - columnHeaderType: defaultColumnHeaderType, - id: timestampFieldId, - initialWidth: DEFAULT_COLUMN_MIN_WIDTH, - }, - index: 1, - }) - ); + expect(mockOnToggleColumn).toHaveBeenCalledTimes(1); + expect(mockOnToggleColumn).toHaveBeenCalledWith(timestampFieldId); }); }); @@ -241,7 +221,7 @@ describe('FieldTable', () => { changePage(result); result.getAllByRole('checkbox').at(0)?.click(); - expect(mockDispatch).toHaveBeenCalled(); // assert some field has been selected + expect(mockOnToggleColumn).toHaveBeenCalled(); // assert some field has been selected expect(isAtFirstPage(result)).toBeFalsy(); }); diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.tsx index e682324d7b1e6..99f3e641fc6f1 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/field_table.tsx @@ -8,11 +8,9 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import styled from 'styled-components'; import { EuiInMemoryTable, Pagination, Direction } from '@elastic/eui'; -import { useDispatch } from 'react-redux'; import { BrowserFields, ColumnHeaderOptions } from '../../../../../common'; -import { getColumnHeader, getFieldColumns, getFieldItems, isActionsColumn } from './field_items'; +import { getFieldColumns, getFieldItems, isActionsColumn } from './field_items'; import { CATEGORY_TABLE_CLASS_NAME, TABLE_HEIGHT } from './helpers'; -import { tGridActions } from '../../../../store/t_grid'; import type { GetFieldTableColumns } from '../../../../../common/types/field_browser'; import { FieldTableHeader } from './field_table_header'; @@ -22,7 +20,6 @@ const DEFAULT_SORTING: { field: string; direction: Direction } = { } as const; export interface FieldTableProps { - timelineId: string; columnHeaders: ColumnHeaderOptions[]; /** * A map of categoryId -> metadata about the fields in that category, @@ -33,6 +30,7 @@ export interface FieldTableProps { /** when true, show only the the selected field */ filterSelectedEnabled: boolean; onFilterSelectedChange: (enabled: boolean) => void; + onToggleColumn: (fieldId: string) => void; /** * Optional function to customize field table columns */ @@ -71,7 +69,7 @@ const FieldTableComponent: React.FC = ({ searchInput, selectedCategoryIds, onFilterSelectedChange, - timelineId, + onToggleColumn, onHide, }) => { const [pageIndex, setPageIndex] = useState(0); @@ -80,8 +78,6 @@ const FieldTableComponent: React.FC = ({ const [sortField, setSortField] = useState(DEFAULT_SORTING.field); const [sortDirection, setSortDirection] = useState(DEFAULT_SORTING.direction); - const dispatch = useDispatch(); - const fieldItems = useMemo( () => getFieldItems({ @@ -92,28 +88,6 @@ const FieldTableComponent: React.FC = ({ [columnHeaders, filteredBrowserFields, selectedCategoryIds] ); - const onToggleColumn = useCallback( - (fieldId: string) => { - if (columnHeaders.some(({ id }) => id === fieldId)) { - dispatch( - tGridActions.removeColumn({ - columnId: fieldId, - id: timelineId, - }) - ); - } else { - dispatch( - tGridActions.upsertColumn({ - column: getColumnHeader(timelineId, fieldId), - id: timelineId, - index: 1, - }) - ); - } - }, - [columnHeaders, dispatch, timelineId] - ); - /** * Pagination controls */ diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/helpers.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/helpers.tsx index fd590c468b7e7..d35eb49c9cc17 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/helpers.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/helpers.tsx @@ -8,9 +8,7 @@ import { EuiBadge, EuiLoadingSpinner } from '@elastic/eui'; import styled from 'styled-components'; -import { TimelineId } from '../../../../types'; import type { BrowserField, BrowserFields } from '../../../../../common/search_strategy'; -import { defaultHeaders } from '../../../../store/t_grid/defaults'; import { ColumnHeaderOptions } from '../../../../../common'; export const LoadingSpinner = styled(EuiLoadingSpinner)` @@ -149,11 +147,6 @@ export const filterSelectedBrowserFields = ({ return result; }; -export const getAlertColumnHeader = (timelineId: string, fieldId: string) => - timelineId === TimelineId.detectionsPage || timelineId === TimelineId.detectionsRulesDetailsPage - ? defaultHeaders.find((c) => c.id === fieldId) ?? {} - : {}; - export const CATEGORY_TABLE_CLASS_NAME = 'category-table'; export const CLOSE_BUTTON_CLASS_NAME = 'close-button'; export const RESET_FIELDS_CLASS_NAME = 'reset-fields'; diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.test.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.test.tsx index fb6363e244459..e3a6f2770af95 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.test.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.test.tsx @@ -10,18 +10,11 @@ import React from 'react'; import { TestProviders } from '../../../../mock'; import { Search } from './search'; -const timelineId = 'test'; - describe('Search', () => { test('it renders the field search input with the expected placeholder text when the searchInput prop is empty', () => { const wrapper = mount( - + ); @@ -35,12 +28,7 @@ describe('Search', () => { const wrapper = mount( - + ); @@ -50,12 +38,7 @@ describe('Search', () => { test('it renders the field search input with a spinner when isSearching is true', () => { const wrapper = mount( - + ); @@ -67,12 +50,7 @@ describe('Search', () => { const wrapper = mount( - + ); diff --git a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.tsx b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.tsx index 037dcdc9033d2..325d650b53f06 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/toolbar/field_browser/search.tsx @@ -12,22 +12,19 @@ interface Props { isSearching: boolean; onSearchInputChange: (event: React.ChangeEvent) => void; searchInput: string; - timelineId: string; } const inputRef = (node: HTMLInputElement | null) => node?.focus(); -export const Search = React.memo( - ({ isSearching, onSearchInputChange, searchInput, timelineId }) => ( - - ) -); +export const Search = React.memo(({ isSearching, onSearchInputChange, searchInput }) => ( + +)); Search.displayName = 'Search'; diff --git a/x-pack/plugins/timelines/public/methods/index.tsx b/x-pack/plugins/timelines/public/methods/index.tsx index c153039e815ee..1aec4aab20c4c 100644 --- a/x-pack/plugins/timelines/public/methods/index.tsx +++ b/x-pack/plugins/timelines/public/methods/index.tsx @@ -74,10 +74,10 @@ export const getLoadingPanelLazy = (props: LoadingPanelProps) => { }; const FieldBrowserLazy = lazy(() => import('../components/field_browser')); -export const getFieldBrowserLazy = (props: FieldBrowserProps, { store }: { store: Store }) => { +export const getFieldBrowserLazy = (props: FieldBrowserProps) => { return ( }> - + ); }; diff --git a/x-pack/plugins/timelines/public/plugin.ts b/x-pack/plugins/timelines/public/plugin.ts index d18d7320f7577..d0bb94a2b68fb 100644 --- a/x-pack/plugins/timelines/public/plugin.ts +++ b/x-pack/plugins/timelines/public/plugin.ts @@ -75,10 +75,7 @@ export class TimelinesPlugin implements Plugin { return getLastUpdatedLazy(props); }, getFieldBrowser: (props: FieldBrowserProps) => { - return getFieldBrowserLazy(props, { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - store: this._store!, - }); + return getFieldBrowserLazy(props); }, getUseAddToTimeline: () => { return useAddToTimeline; From a5205ed138a2802cccab329d2720f987ef05d61e Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Tue, 21 Jun 2022 11:38:48 +0200 Subject: [PATCH 26/50] convert series agg to Lens configuration (#134681) Co-authored-by: Stratoula Kalafateli Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/trigger_action/get_series.test.ts | 61 ++++++++++++++----- .../public/trigger_action/get_series.ts | 8 ++- .../public/trigger_action/get_series_agg.ts | 31 ++++++++++ .../public/trigger_action/index.test.ts | 12 +++- .../timeseries/public/trigger_action/index.ts | 10 +-- .../visualizations/public/vis_types/types.ts | 1 + .../public/xy_visualization/visualization.tsx | 3 +- 7 files changed, 102 insertions(+), 24 deletions(-) create mode 100644 src/plugins/vis_types/timeseries/public/trigger_action/get_series_agg.ts diff --git a/src/plugins/vis_types/timeseries/public/trigger_action/get_series.test.ts b/src/plugins/vis_types/timeseries/public/trigger_action/get_series.test.ts index 40fa06ba427a1..fe51f034f70c8 100644 --- a/src/plugins/vis_types/timeseries/public/trigger_action/get_series.test.ts +++ b/src/plugins/vis_types/timeseries/public/trigger_action/get_series.test.ts @@ -17,7 +17,7 @@ describe('getSeries', () => { field: 'day_of_week_i', }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'average', @@ -44,7 +44,7 @@ describe('getSeries', () => { }, }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'formula', @@ -71,7 +71,7 @@ describe('getSeries', () => { field: '123456', }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'formula', @@ -97,7 +97,7 @@ describe('getSeries', () => { field: '123456', }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'formula', @@ -122,7 +122,7 @@ describe('getSeries', () => { field: '123456', }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'cumulative_sum', @@ -147,7 +147,7 @@ describe('getSeries', () => { field: '123456', }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'formula', @@ -174,7 +174,7 @@ describe('getSeries', () => { unit: '1m', }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'differences', @@ -202,7 +202,7 @@ describe('getSeries', () => { window: 6, }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'moving_average', @@ -246,7 +246,7 @@ describe('getSeries', () => { window: 6, }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'formula', @@ -293,7 +293,7 @@ describe('getSeries', () => { ], }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'percentile', @@ -335,7 +335,7 @@ describe('getSeries', () => { colors: ['rgba(211,96,134,1)', 'rgba(155,33,230,1)', '#68BC00'], }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'percentile_rank', @@ -377,7 +377,7 @@ describe('getSeries', () => { order_by: 'timestamp', }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'last_value', @@ -390,6 +390,37 @@ describe('getSeries', () => { ]); }); + test('should split out the series agg metric and return it as a separate property', () => { + const metric = [ + { + id: '12345', + type: 'top_hit', + field: 'day_of_week_i', + size: 1, + order_by: 'timestamp', + }, + { + id: '6789', + type: 'series_agg', + function: 'mean', + }, + ] as Metric[]; + const config = getSeries(metric, 1)!; + expect(config).toStrictEqual({ + metrics: [ + { + agg: 'last_value', + fieldName: 'day_of_week_i', + isFullReference: false, + params: { + sortField: 'timestamp', + }, + }, + ], + seriesAgg: 'avg', + }); + }); + test('should return null for a top_hit size >1 aggregation', () => { const metric = [ { @@ -423,7 +454,7 @@ describe('getSeries', () => { value: '10', }, ] as Metric[]; - const config = getSeries(metric, 2); + const config = getSeries(metric, 2)!.metrics; expect(config).toStrictEqual([ { agg: 'static_value', @@ -490,7 +521,7 @@ describe('getSeries', () => { ], }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'formula', @@ -541,7 +572,7 @@ describe('getSeries', () => { ], }, ] as Metric[]; - const config = getSeries(metric, 1); + const config = getSeries(metric, 1)!.metrics; expect(config).toStrictEqual([ { agg: 'formula', diff --git a/src/plugins/vis_types/timeseries/public/trigger_action/get_series.ts b/src/plugins/vis_types/timeseries/public/trigger_action/get_series.ts index e180df5b4c1a9..74cbe3337af48 100644 --- a/src/plugins/vis_types/timeseries/public/trigger_action/get_series.ts +++ b/src/plugins/vis_types/timeseries/public/trigger_action/get_series.ts @@ -8,6 +8,7 @@ import type { VisualizeEditorLayersContext } from '@kbn/visualizations-plugin/public'; import type { Metric } from '../../common/types'; import { SUPPORTED_METRICS } from './supported_metrics'; +import { getSeriesAgg } from './get_series_agg'; import { getPercentilesSeries, getPercentileRankSeries, @@ -23,9 +24,10 @@ import { } from './metrics_helpers'; export const getSeries = ( - metrics: Metric[], + initialMetrics: Metric[], totalSeriesNum: number -): VisualizeEditorLayersContext['metrics'] | null => { +): { metrics: VisualizeEditorLayersContext['metrics']; seriesAgg?: string } | null => { + const { metrics, seriesAgg } = getSeriesAgg(initialMetrics); const metricIdx = metrics.length - 1; const aggregation = metrics[metricIdx].type; const fieldName = metrics[metricIdx].field; @@ -231,5 +233,5 @@ export const getSeries = ( ]; } } - return metricsArray; + return { metrics: metricsArray, seriesAgg }; }; diff --git a/src/plugins/vis_types/timeseries/public/trigger_action/get_series_agg.ts b/src/plugins/vis_types/timeseries/public/trigger_action/get_series_agg.ts new file mode 100644 index 0000000000000..07bfd071acbaa --- /dev/null +++ b/src/plugins/vis_types/timeseries/public/trigger_action/get_series_agg.ts @@ -0,0 +1,31 @@ +/* + * 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. + */ +import type { Metric } from '../../common/types'; + +const functionMap: Partial> = { + mean: 'avg', + min: 'min', + max: 'max', + sum: 'sum', +}; + +export const getSeriesAgg = (metrics: Metric[]) => { + const lastMetric = metrics[metrics.length - 1]; + + if (lastMetric.type === 'series_agg' && lastMetric.function && functionMap[lastMetric.function]) { + return { + metrics: metrics.slice(0, -1), + seriesAgg: functionMap[lastMetric.function], + }; + } else { + return { + metrics, + seriesAgg: undefined, + }; + } +}; diff --git a/src/plugins/vis_types/timeseries/public/trigger_action/index.test.ts b/src/plugins/vis_types/timeseries/public/trigger_action/index.test.ts index 25edcb389932e..4a22f8ed7db18 100644 --- a/src/plugins/vis_types/timeseries/public/trigger_action/index.test.ts +++ b/src/plugins/vis_types/timeseries/public/trigger_action/index.test.ts @@ -117,6 +117,7 @@ describe('triggerTSVBtoLensConfiguration', () => { '0': { axisPosition: 'left', chartType: 'line', + collapseFn: undefined, indexPatternId: 'test2', metrics: [ { @@ -219,12 +220,19 @@ describe('triggerTSVBtoLensConfiguration', () => { ]); }); - test('should return termsParams information if the chart is broken down by terms', async () => { + test('should return termsParams information if the chart is broken down by terms including series agg collapse fn', async () => { const modelWithTerms = { ...model, series: [ { ...model.series[0], + metrics: [ + ...model.series[0].metrics, + { + type: 'series_agg', + function: 'sum', + }, + ], split_mode: 'terms', terms_size: 6, terms_direction: 'desc', @@ -233,6 +241,7 @@ describe('triggerTSVBtoLensConfiguration', () => { ] as unknown as Series[], }; const triggerOptions = await triggerTSVBtoLensConfiguration(modelWithTerms); + expect(triggerOptions?.layers[0]?.collapseFn).toStrictEqual('sum'); expect(triggerOptions?.layers[0]?.termsParams).toStrictEqual({ size: 6, otherBucket: false, @@ -290,6 +299,7 @@ describe('triggerTSVBtoLensConfiguration', () => { '0': { axisPosition: 'right', chartType: 'area_stacked', + collapseFn: undefined, indexPatternId: 'test2', metrics: [ { diff --git a/src/plugins/vis_types/timeseries/public/trigger_action/index.ts b/src/plugins/vis_types/timeseries/public/trigger_action/index.ts index 80ef6500c130c..91af800ca16a1 100644 --- a/src/plugins/vis_types/timeseries/public/trigger_action/index.ts +++ b/src/plugins/vis_types/timeseries/public/trigger_action/index.ts @@ -69,10 +69,11 @@ export const triggerTSVBtoLensConfiguration = async ( } // handle multiple metrics - let metricsArray = getSeries(layer.metrics, seriesNum); - if (!metricsArray) { + const series = getSeries(layer.metrics, seriesNum); + if (!series) { return null; } + const { metrics: metricsArray, seriesAgg } = series; let filter: { kql?: string | { [key: string]: any } | undefined; lucene?: string | { [key: string]: any } | undefined; @@ -85,7 +86,7 @@ export const triggerTSVBtoLensConfiguration = async ( } } - metricsArray = metricsArray.map((metric) => { + const metricsWithParams = metricsArray.map((metric) => { return { ...metric, color: metric.color ?? layer.color, @@ -146,7 +147,8 @@ export const triggerTSVBtoLensConfiguration = async ( parentFormat: { id: 'terms' }, }, }), - metrics: [...metricsArray], + collapseFn: seriesAgg, + metrics: [...metricsWithParams], timeInterval: model.interval && !model.interval?.includes('=') ? model.interval : 'auto', ...(SUPPORTED_FORMATTERS.includes(layer.formatter) && { format: layer.formatter }), ...(layer.label && { label: layer.label }), diff --git a/src/plugins/visualizations/public/vis_types/types.ts b/src/plugins/visualizations/public/vis_types/types.ts index 8f6dc309a7145..3d7ef35d0fd2c 100644 --- a/src/plugins/visualizations/public/vis_types/types.ts +++ b/src/plugins/visualizations/public/vis_types/types.ts @@ -97,6 +97,7 @@ export interface VisualizeEditorLayersContext { termsParams?: Record; splitFields?: string[]; splitMode?: string; + collapseFn?: string; splitFilters?: SplitByFilters[]; palette?: PaletteOutput; metrics: VisualizeEditorMetricContext[]; diff --git a/x-pack/plugins/lens/public/xy_visualization/visualization.tsx b/x-pack/plugins/lens/public/xy_visualization/visualization.tsx index c275d0da7697f..4f89ba1fdcedf 100644 --- a/x-pack/plugins/lens/public/xy_visualization/visualization.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/visualization.tsx @@ -337,7 +337,7 @@ export const getXyVisualization = ({ }, updateLayersConfigurationFromContext({ prevState, layerId, context }) { - const { chartType, axisPosition, palette, metrics } = context; + const { chartType, axisPosition, palette, metrics, collapseFn } = context; const foundLayer = prevState?.layers.find((l) => l.layerId === layerId); if (!foundLayer || !isDataLayer(foundLayer)) { return prevState; @@ -356,6 +356,7 @@ export const getXyVisualization = ({ ...foundLayer, ...(chartType && { seriesType: chartType as SeriesType }), ...(palette && { palette }), + collapseFn, yConfig, layerType: isReferenceLine ? layerTypes.REFERENCELINE : layerTypes.DATA, } as XYLayerConfig; From 798adb7a4d984ae2d982755ebf84a1196961bba3 Mon Sep 17 00:00:00 2001 From: Michael Dokolin Date: Tue, 21 Jun 2022 12:06:06 +0200 Subject: [PATCH 27/50] [Expressions] Add logging capabilities to the expressions (#134705) * Remove dead executor forking method * Add logging in non-strict mode * Add logging of deprecations --- .../expressions/common/execution/execution.ts | 26 ++++++--- .../executor/executor.execution.test.ts | 6 ++- .../common/executor/executor.test.ts | 2 +- .../expressions/common/executor/executor.ts | 54 +++++-------------- .../common/service/expressions_services.ts | 5 +- src/plugins/expressions/public/plugin.ts | 13 ++++- src/plugins/expressions/server/plugin.ts | 8 ++- 7 files changed, 59 insertions(+), 55 deletions(-) diff --git a/src/plugins/expressions/common/execution/execution.ts b/src/plugins/expressions/common/execution/execution.ts index 2fda462929ff4..b4ef83389ce28 100644 --- a/src/plugins/expressions/common/execution/execution.ts +++ b/src/plugins/expressions/common/execution/execution.ts @@ -7,6 +7,7 @@ */ import { i18n } from '@kbn/i18n'; +import type { Logger } from '@kbn/logging'; import { isPromise } from '@kbn/std'; import { ObservableLike, UnwrapObservable } from '@kbn/utility-types'; import { keys, last, mapValues, reduce, zipObject } from 'lodash'; @@ -187,7 +188,7 @@ export class Execution< return this.context.inspectorAdapters; } - constructor(public readonly execution: ExecutionParams) { + constructor(public readonly execution: ExecutionParams, private readonly logger?: Logger) { const { executor } = execution; this.contract = new ExecutionContract(this); @@ -331,6 +332,10 @@ export class Execution< }); } + if (fn.deprecated) { + this.logger?.warn(`Function '${fnName}' is deprecated`); + } + if (this.execution.params.debug) { link.debug = { args: {}, @@ -448,12 +453,16 @@ export class Execution< } validate(value: Type, argDef: ExpressionFunctionParameter): void { - if (argDef.strict && argDef.options?.length && !argDef.options.includes(value)) { - throw new Error( - `Value '${value}' is not among the allowed options for argument '${ - argDef.name - }': '${argDef.options.join("', '")}'` - ); + if (argDef.options?.length && !argDef.options.includes(value)) { + const message = `Value '${value}' is not among the allowed options for argument '${ + argDef.name + }': '${argDef.options.join("', '")}'`; + + if (argDef.strict) { + throw new Error(message); + } + + this.logger?.warn(message); } } @@ -474,6 +483,9 @@ export class Execution< if (!argDef) { throw new Error(`Unknown argument '${argName}' passed to function '${fnDef.name}'`); } + if (argDef.deprecated && !acc[argDef.name]) { + this.logger?.warn(`Argument '${argName}' is deprecated in function '${fnDef.name}'`); + } acc[argDef.name] = (acc[argDef.name] || []).concat(argAst); return acc; }, diff --git a/src/plugins/expressions/common/executor/executor.execution.test.ts b/src/plugins/expressions/common/executor/executor.execution.test.ts index ad7e6e6a014c1..ea906881e9738 100644 --- a/src/plugins/expressions/common/executor/executor.execution.test.ts +++ b/src/plugins/expressions/common/executor/executor.execution.test.ts @@ -26,7 +26,8 @@ describe('Executor mocked execution tests', () => { executor.createExecution('foo bar="baz"'); expect(Execution).toHaveBeenCalledWith( - expect.objectContaining({ expression: 'foo bar="baz"' }) + expect.objectContaining({ expression: 'foo bar="baz"' }), + undefined ); }); }); @@ -38,7 +39,8 @@ describe('Executor mocked execution tests', () => { executor.createExecution(ast); expect(Execution).toHaveBeenCalledWith( - expect.not.objectContaining({ expression: expect.anything() }) + expect.not.objectContaining({ expression: expect.anything() }), + undefined ); }); }); diff --git a/src/plugins/expressions/common/executor/executor.test.ts b/src/plugins/expressions/common/executor/executor.test.ts index ea7116a5307ba..6f9dae491e5b2 100644 --- a/src/plugins/expressions/common/executor/executor.test.ts +++ b/src/plugins/expressions/common/executor/executor.test.ts @@ -111,7 +111,7 @@ describe('Executor', () => { test('Execution inherits context from Executor', () => { const foo = {}; - const executor = new Executor({ context: { foo }, functions: {}, types: {} }); + const executor = new Executor(undefined, { context: { foo }, functions: {}, types: {} }); const execution = executor.createExecution('foo bar="baz"'); expect(execution.context).toHaveProperty('foo', foo); diff --git a/src/plugins/expressions/common/executor/executor.ts b/src/plugins/expressions/common/executor/executor.ts index 4071f8f7f003f..e8d01b15fd81d 100644 --- a/src/plugins/expressions/common/executor/executor.ts +++ b/src/plugins/expressions/common/executor/executor.ts @@ -10,6 +10,7 @@ import { cloneDeep, mapValues } from 'lodash'; import { Observable } from 'rxjs'; +import type { Logger } from '@kbn/logging'; import type { SerializableRecord } from '@kbn/utility-types'; import { SavedObjectReference } from '@kbn/core/types'; import { @@ -87,9 +88,10 @@ export class Executor = Record { static createWithDefaults = Record>( + logger?: Logger, state?: ExecutorState ): Executor { - const executor = new Executor(state); + const executor = new Executor(logger, state); for (const type of typeSpecs) executor.registerType(type); return executor; @@ -107,34 +109,14 @@ export class Executor = Record; - - constructor(state?: ExecutorState) { + constructor(private readonly logger?: Logger, state?: ExecutorState) { this.functions = new FunctionsRegistry(this as Executor); this.types = new TypesRegistry(this as Executor); this.container = createExecutorContainer(state); } public get state(): ExecutorState { - const parent = this.parent?.state; - const state = this.container.get(); - - return { - ...(parent ?? {}), - ...state, - types: { - ...(parent?.types ?? {}), - ...state.types, - }, - functions: { - ...(parent?.functions ?? {}), - ...state.functions, - }, - context: { - ...(parent?.context ?? {}), - ...state.context, - }, - }; + return this.container.get(); } public registerFunction( @@ -148,7 +130,10 @@ export class Executor = Record { @@ -170,21 +155,15 @@ export class Executor = Record { - return { - ...(this.parent?.getTypes() ?? {}), - ...this.container.get().types, - }; + return this.container.get().types; } public get context(): Record { - return { - ...(this.parent?.context ?? {}), - ...this.container.selectors.getContext(), - }; + return this.container.selectors.getContext(); } /** @@ -215,7 +194,7 @@ export class Executor = Record(executionParams); + const execution = new Execution(executionParams, this.logger); return execution; } @@ -369,11 +348,4 @@ export class Executor = Record { - const fork = new Executor(); - fork.parent = this; - - return fork; - } } diff --git a/src/plugins/expressions/common/service/expressions_services.ts b/src/plugins/expressions/common/service/expressions_services.ts index d4bac702bd6e0..d2824a7894642 100644 --- a/src/plugins/expressions/common/service/expressions_services.ts +++ b/src/plugins/expressions/common/service/expressions_services.ts @@ -7,6 +7,7 @@ */ import { Observable } from 'rxjs'; +import type { Logger } from '@kbn/logging'; import type { SerializableRecord } from '@kbn/utility-types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import type { KibanaRequest } from '@kbn/core/server'; @@ -270,6 +271,7 @@ export interface ExpressionsServiceStart { export interface ExpressionServiceParams { executor?: Executor; + logger?: Logger; renderers?: ExpressionRendererRegistry; } @@ -306,7 +308,8 @@ export class ExpressionsService public readonly renderers: ExpressionRendererRegistry; constructor({ - executor = Executor.createWithDefaults(), + logger, + executor = Executor.createWithDefaults(logger), renderers = new ExpressionRendererRegistry(), }: ExpressionServiceParams = {}) { this.executor = executor; diff --git a/src/plugins/expressions/public/plugin.ts b/src/plugins/expressions/public/plugin.ts index 338783c0a5ba4..6b16a9e91d6c8 100644 --- a/src/plugins/expressions/public/plugin.ts +++ b/src/plugins/expressions/public/plugin.ts @@ -35,7 +35,18 @@ export interface ExpressionsStart extends ExpressionsServiceStart { } export class ExpressionsPublicPlugin implements Plugin { - private readonly expressions: ExpressionsService = new ExpressionsService(); + private static logger = { + ...console, + // eslint-disable-next-line no-console + fatal: console.error, + get() { + return this; + }, + }; + + private readonly expressions: ExpressionsService = new ExpressionsService({ + logger: ExpressionsPublicPlugin.logger, + }); constructor(initializerContext: PluginInitializerContext) {} diff --git a/src/plugins/expressions/server/plugin.ts b/src/plugins/expressions/server/plugin.ts index 750d61ec5eb03..2672e316b596c 100644 --- a/src/plugins/expressions/server/plugin.ts +++ b/src/plugins/expressions/server/plugin.ts @@ -17,9 +17,13 @@ export type ExpressionsServerStart = ExpressionsServiceStart; export class ExpressionsServerPlugin implements Plugin { - readonly expressions: ExpressionsService = new ExpressionsService(); + readonly expressions: ExpressionsService; - constructor(initializerContext: PluginInitializerContext) {} + constructor(context: PluginInitializerContext) { + this.expressions = new ExpressionsService({ + logger: context.logger.get('expressions'), + }); + } public setup(core: CoreSetup): ExpressionsServerSetup { const setup = this.expressions.setup(pick(core, 'getStartServices')); From 39deb018b2cff5ef975039e1169514f6249ba569 Mon Sep 17 00:00:00 2001 From: Najmieh Sadat <98463228+najmiehsa@users.noreply.github.com> Date: Tue, 21 Jun 2022 14:54:30 +0430 Subject: [PATCH 28/50] Edited the link phrase (#134649) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../settings/components/settings_page/settings_section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/settings_section.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/settings_section.tsx index 13d3657276335..a5a970dbdb98c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/settings_section.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/settings_section.tsx @@ -54,7 +54,7 @@ export const SettingsSection: React.FunctionComponent = ({ ), From e0446dac822f55f75c1d97b6d9c3f4647c445973 Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Tue, 21 Jun 2022 12:34:51 +0200 Subject: [PATCH 29/50] [Fleet] bulk reassign kuery optimize (#134673) * reassign kuery optimize * fix test * renamed to withoutManaged, added time measurement * try catch to fix test * unenroll improvement * removed logging * refactored to filter hosted agents in memory * fixed tests * removed withoutManaged * added unit test * revert plugin.ts changes Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../services/agents/agent_service.test.ts | 4 +- .../services/agents/hosted_agent.test.ts | 63 +++++++++++++++++++ .../server/services/agents/hosted_agent.ts | 36 +++++++++++ .../fleet/server/services/agents/reassign.ts | 27 ++++---- .../fleet/server/services/agents/unenroll.ts | 24 +++---- .../fleet/server/services/agents/upgrade.ts | 21 ++----- .../apis/agents/reassign.ts | 3 +- 7 files changed, 137 insertions(+), 41 deletions(-) create mode 100644 x-pack/plugins/fleet/server/services/agents/hosted_agent.test.ts create mode 100644 x-pack/plugins/fleet/server/services/agents/hosted_agent.ts diff --git a/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts b/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts index 3a49fb99dfb0e..be4ca37260b8a 100644 --- a/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts @@ -149,7 +149,9 @@ function expectApisToCallServicesSuccessfully( await expect(agentClient.listAgents({ showInactive: true })).resolves.toEqual( 'getAgentsByKuery success' ); - expect(mockGetAgentsByKuery).toHaveBeenCalledWith(mockEsClient, { showInactive: true }); + expect(mockGetAgentsByKuery).toHaveBeenCalledWith(mockEsClient, { + showInactive: true, + }); }); test('client.getAgent calls getAgentById and returns results', async () => { diff --git a/x-pack/plugins/fleet/server/services/agents/hosted_agent.test.ts b/x-pack/plugins/fleet/server/services/agents/hosted_agent.test.ts new file mode 100644 index 0000000000000..997bb0817351c --- /dev/null +++ b/x-pack/plugins/fleet/server/services/agents/hosted_agent.test.ts @@ -0,0 +1,63 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { savedObjectsClientMock } from '@kbn/core/server/mocks'; + +import type { Agent } from '../../types'; + +import { getHostedPolicies, isHostedAgent } from './hosted_agent'; + +jest.mock('../agent_policy', () => { + return { + agentPolicyService: { + getByIDs: jest.fn().mockResolvedValue([ + { id: 'hosted-policy', is_managed: true }, + { id: 'regular-policy', is_managed: false }, + ]), + }, + }; +}); + +describe('hosted agent helpers', () => { + const soClientMock = savedObjectsClientMock.create(); + const expectedHostedPolicies = { + 'hosted-policy': true, + 'regular-policy': false, + }; + + it('should query unique managed policies', async () => { + const result = await getHostedPolicies(soClientMock, [ + { policy_id: 'hosted-policy' } as Agent, + { policy_id: 'hosted-policy' } as Agent, + { policy_id: 'regular-policy' } as Agent, + { policy_id: 'regular-policy' } as Agent, + ]); + expect(result).toEqual(expectedHostedPolicies); + }); + + it('should return true for hosted policy', () => { + const isHosted = isHostedAgent(expectedHostedPolicies, { policy_id: 'hosted-policy' } as Agent); + expect(isHosted).toBeTruthy(); + }); + + it('should return false for regular policy', () => { + const isHosted = isHostedAgent(expectedHostedPolicies, { + policy_id: 'regular-policy', + } as Agent); + expect(isHosted).toBeFalsy(); + }); + + it('should return false for missing policy_id', () => { + const isHosted = isHostedAgent(expectedHostedPolicies, {} as Agent); + expect(isHosted).toBeFalsy(); + }); + + it('should return false for non existing policy', () => { + const isHosted = isHostedAgent(expectedHostedPolicies, { policy_id: 'dummy-policy' } as Agent); + expect(isHosted).toBeFalsy(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/agents/hosted_agent.ts b/x-pack/plugins/fleet/server/services/agents/hosted_agent.ts new file mode 100644 index 0000000000000..0c26e09575ac3 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/agents/hosted_agent.ts @@ -0,0 +1,36 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectsClientContract } from '@kbn/core/server'; + +import type { Agent } from '../../types'; +import { agentPolicyService } from '../agent_policy'; + +export async function getHostedPolicies( + soClient: SavedObjectsClientContract, + agents: Agent[] +): Promise<{ [key: string]: boolean }> { + // get any policy ids from upgradable agents + const policyIdsToGet = new Set( + agents.filter((agent) => agent.policy_id).map((agent) => agent.policy_id!) + ); + + // get the agent policies for those ids + const agentPolicies = await agentPolicyService.getByIDs(soClient, Array.from(policyIdsToGet), { + fields: ['is_managed'], + }); + const hostedPolicies = agentPolicies.reduce>((acc, policy) => { + acc[policy.id] = policy.is_managed; + return acc; + }, {}); + + return hostedPolicies; +} + +export function isHostedAgent(hostedPolicies: { [key: string]: boolean }, agent: Agent) { + return agent.policy_id && hostedPolicies[agent.policy_id]; +} diff --git a/x-pack/plugins/fleet/server/services/agents/reassign.ts b/x-pack/plugins/fleet/server/services/agents/reassign.ts index c842bfb8f72c7..e077e7e47294b 100644 --- a/x-pack/plugins/fleet/server/services/agents/reassign.ts +++ b/x-pack/plugins/fleet/server/services/agents/reassign.ts @@ -22,6 +22,7 @@ import { import type { GetAgentsOptions } from '.'; import { createAgentAction } from './actions'; import { searchHitToAgent } from './helpers'; +import { getHostedPolicies, isHostedAgent } from './hosted_agent'; export async function reassignAgent( soClient: SavedObjectsClientContract, @@ -80,10 +81,15 @@ export async function reassignAgents( options: ({ agents: Agent[] } | GetAgentsOptions) & { force?: boolean }, newAgentPolicyId: string ): Promise<{ items: BulkActionResult[] }> { - const agentPolicy = await agentPolicyService.get(soClient, newAgentPolicyId); - if (!agentPolicy) { + const newAgentPolicy = await agentPolicyService.get(soClient, newAgentPolicyId); + if (!newAgentPolicy) { throw Boom.notFound(`Agent policy not found: ${newAgentPolicyId}`); } + if (newAgentPolicy.is_managed) { + throw new HostedAgentPolicyRestrictionRelatedError( + `Cannot reassign an agent to hosted agent policy ${newAgentPolicy.id}` + ); + } const outgoingErrors: Record = {}; let givenAgents: Agent[] = []; @@ -106,6 +112,8 @@ export async function reassignAgents( const givenOrder = 'agentIds' in options ? options.agentIds : givenAgents.map((agent) => agent.id); + const hostedPolicies = await getHostedPolicies(soClient, givenAgents); + // which are allowed to unenroll const agentResults = await Promise.allSettled( givenAgents.map(async (agent, index) => { @@ -113,16 +121,13 @@ export async function reassignAgents( throw new AgentReassignmentError(`${agent.id} is already assigned to ${newAgentPolicyId}`); } - const isAllowed = await reassignAgentIsAllowed( - soClient, - esClient, - agent.id, - newAgentPolicyId - ); - if (isAllowed) { - return agent; + if (isHostedAgent(hostedPolicies, agent)) { + throw new HostedAgentPolicyRestrictionRelatedError( + `Cannot reassign an agent from hosted agent policy ${agent.policy_id}` + ); } - throw new AgentReassignmentError(`${agent.id} may not be reassigned to ${newAgentPolicyId}`); + + return agent; }) ); diff --git a/x-pack/plugins/fleet/server/services/agents/unenroll.ts b/x-pack/plugins/fleet/server/services/agents/unenroll.ts index 92dd0f1ba22f8..893fb5f20c76a 100644 --- a/x-pack/plugins/fleet/server/services/agents/unenroll.ts +++ b/x-pack/plugins/fleet/server/services/agents/unenroll.ts @@ -20,6 +20,7 @@ import { getAgentPolicyForAgent, bulkUpdateAgents, } from './crud'; +import { getHostedPolicies, isHostedAgent } from './hosted_agent'; async function unenrollAgentIsAllowed( soClient: SavedObjectsClientContract, @@ -80,21 +81,22 @@ export async function unenrollAgents( } return !agent.unenrollment_started_at && !agent.unenrolled_at; }); - // And which are allowed to unenroll - const agentResults = await Promise.allSettled( - agentsEnrolled.map((agent) => - unenrollAgentIsAllowed(soClient, esClient, agent.id).then((_) => agent) - ) - ); + + const hostedPolicies = await getHostedPolicies(soClient, agentsEnrolled); + const outgoingErrors: Record = {}; + + // And which are allowed to unenroll const agentsToUpdate = options.force ? agentsEnrolled - : agentResults.reduce((agents, result, index) => { - if (result.status === 'fulfilled') { - agents.push(result.value); - } else { + : agentsEnrolled.reduce((agents, agent, index) => { + if (isHostedAgent(hostedPolicies, agent)) { const id = givenAgents[index].id; - outgoingErrors[id] = result.reason; + outgoingErrors[id] = new HostedAgentPolicyRestrictionRelatedError( + `Cannot unenroll ${agent.id} from a hosted agent policy ${agent.policy_id}` + ); + } else { + agents.push(agent); } return agents; }, []); diff --git a/x-pack/plugins/fleet/server/services/agents/upgrade.ts b/x-pack/plugins/fleet/server/services/agents/upgrade.ts index 2c839bdd7bb09..f5db132815fb7 100644 --- a/x-pack/plugins/fleet/server/services/agents/upgrade.ts +++ b/x-pack/plugins/fleet/server/services/agents/upgrade.ts @@ -10,7 +10,6 @@ import moment from 'moment'; import pMap from 'p-map'; import type { Agent, BulkActionResult, FleetServerAgentAction, CurrentUpgrade } from '../../types'; -import { agentPolicyService } from '..'; import { AgentReassignmentError, HostedAgentPolicyRestrictionRelatedError, @@ -30,6 +29,7 @@ import { getAgentPolicyForAgent, } from './crud'; import { searchHitToAgent } from './helpers'; +import { getHostedPolicies, isHostedAgent } from './hosted_agent'; const MINIMUM_EXECUTION_DURATION_SECONDS = 1800; // 30m @@ -107,26 +107,13 @@ export async function sendUpgradeAgentsActions( givenAgents = await getAgents(esClient, options); } - // get any policy ids from upgradable agents - const policyIdsToGet = new Set( - givenAgents.filter((agent) => agent.policy_id).map((agent) => agent.policy_id!) - ); - - // get the agent policies for those ids - const agentPolicies = await agentPolicyService.getByIDs(soClient, Array.from(policyIdsToGet), { - fields: ['is_managed'], - }); - const hostedPolicies = agentPolicies.reduce>((acc, policy) => { - acc[policy.id] = policy.is_managed; - return acc; - }, {}); - const isHostedAgent = (agent: Agent) => agent.policy_id && hostedPolicies[agent.policy_id]; + const hostedPolicies = await getHostedPolicies(soClient, givenAgents); // results from getAgents with options.kuery '' (or even 'active:false') may include hosted agents // filter them out unless options.force const agentsToCheckUpgradeable = 'kuery' in options && !options.force - ? givenAgents.filter((agent: Agent) => !isHostedAgent(agent)) + ? givenAgents.filter((agent: Agent) => !isHostedAgent(hostedPolicies, agent)) : givenAgents; const kibanaVersion = appContextService.getKibanaVersion(); @@ -139,7 +126,7 @@ export async function sendUpgradeAgentsActions( throw new IngestManagerError(`${agent.id} is not upgradeable`); } - if (!options.force && isHostedAgent(agent)) { + if (!options.force && isHostedAgent(hostedPolicies, agent)) { throw new HostedAgentPolicyRestrictionRelatedError( `Cannot upgrade agent in hosted agent policy ${agent.policy_id}` ); diff --git a/x-pack/test/fleet_api_integration/apis/agents/reassign.ts b/x-pack/test/fleet_api_integration/apis/agents/reassign.ts index 6ba5bbc3b965a..52251a5f40133 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/reassign.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/reassign.ts @@ -16,7 +16,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - describe('reassign agent(s)', () => { + describe('fleet_reassign_agent', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); }); @@ -190,6 +190,7 @@ export default function (providerContext: FtrProviderContext) { policy_id: 'policy2', }) .expect(200); + const { body } = await supertest.get(`/api/fleet/agents`).set('kbn-xsrf', 'xxx'); expect(body.total).to.eql(4); body.items.forEach((agent: any) => { From a8095ce11adcee821e10458c1ed1dc30173cc5a3 Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Tue, 21 Jun 2022 13:09:44 +0200 Subject: [PATCH 30/50] Remove deprecated es-query re-imports from data plugin (#134600) --- .../public/search_sessions/app.tsx | 2 +- .../public/search_sessions/app_locator.ts | 3 +- .../public/with_data_services/app.tsx | 3 +- .../control_types/options_list/types.ts | 3 +- src/plugins/controls/common/types.ts | 3 +- .../public/services/kibana/options_list.ts | 3 +- src/plugins/dashboard/public/locator.ts | 9 +- src/plugins/dashboard/public/services/data.ts | 1 + src/plugins/data/common/es_query/index.ts | 385 ------------------ .../common/es_query/stubs/exists_filter.ts | 2 +- src/plugins/data/common/index.ts | 54 +-- .../data/common/query/timefilter/get_time.ts | 4 +- .../data/common/search/aggs/agg_configs.ts | 5 +- .../search/aggs/buckets/date_histogram.ts | 10 +- .../date_interval_utils/to_absolute_dates.ts | 2 +- .../expressions/esaggs/create_filter.ts | 2 +- .../esaggs/request_handler.test.ts | 2 +- .../expressions/esaggs/request_handler.ts | 3 +- .../create_search_source.test.ts | 2 +- .../data/common/search/search_source/types.ts | 2 +- .../create_filters_from_range_select.ts | 6 +- .../create_filters_from_value_click.ts | 9 +- src/plugins/data/public/deprecated.ts | 140 ------- src/plugins/data/public/index.ts | 9 +- .../filter_manager/filter_manager.test.ts | 3 +- .../query/filter_manager/filter_manager.ts | 3 +- .../lib/generate_mapping_chain.test.ts | 2 +- .../lib/generate_mapping_chain.ts | 2 +- .../filter_manager/lib/get_display_value.ts | 2 +- .../lib/get_index_pattern_from_filter.ts | 2 +- .../lib/map_and_flatten_filters.test.ts | 2 +- .../filter_manager/lib/map_filter.test.ts | 2 +- .../lib/mappers/map_default.test.ts | 2 +- .../lib/mappers/map_exists.test.ts | 3 +- .../lib/mappers/map_phrase.test.ts | 2 +- .../lib/mappers/map_query_string.test.ts | 2 +- .../lib/mappers/map_range.test.ts | 2 +- .../lib/mappers/map_spatial_filter.test.ts | 2 +- .../filter_manager/lib/sort_filters.test.ts | 2 +- .../query/filter_manager/lib/sort_filters.ts | 2 +- .../test_helpers/get_filters_array.ts | 2 +- .../test_helpers/get_stub_filter.ts | 2 +- .../data/public/query/query_service.ts | 4 +- .../query_string/query_string_manager.ts | 3 +- .../data/public/query/saved_query/types.ts | 3 +- .../state_sync/connect_to_query_state.ts | 3 +- .../state_sync/sync_state_with_url.test.ts | 3 +- .../query/state_sync/sync_state_with_url.ts | 2 +- .../timefilter/lib/validate_timerange.ts | 2 +- .../public/query/timefilter/time_history.ts | 2 +- .../query/timefilter/timefilter.test.ts | 3 +- .../public/query/timefilter/timefilter.ts | 2 +- .../timefilter/timefilter_service.mock.ts | 2 +- .../data/public/query/timefilter/types.ts | 3 +- src/plugins/data/server/deprecated.ts | 68 ---- src/plugins/data/server/index.ts | 5 - .../query/route_handler_context.test.ts | 3 +- .../session/check_non_persisted_sessions.ts | 3 +- .../session/check_persisted_sessions.ts | 3 +- .../session/expire_persisted_sessions.ts | 3 +- .../search/session/get_search_session_page.ts | 7 +- .../search/session/session_service.test.ts | 3 +- .../data/server/search/session/types.ts | 3 +- .../services/context.predecessors.test.ts | 3 +- .../services/context.successors.test.ts | 3 +- .../field_stats_table/field_stats_table.tsx | 3 +- .../main/components/layout/types.ts | 3 +- .../top_nav/discover_topnav.test.tsx | 3 +- .../components/top_nav/discover_topnav.tsx | 2 +- .../main/services/discover_state.ts | 9 +- .../view_alert/view_alert_route.tsx | 2 +- .../embeddable/saved_search_embeddable.tsx | 10 +- .../embeddable/search_embeddable_factory.ts | 2 +- .../discover/public/embeddable/types.ts | 3 +- src/plugins/discover/public/locator.test.ts | 2 +- src/plugins/discover/public/locator.ts | 9 +- .../public/utils/migrate_legacy_query.ts | 2 +- .../public/can_inherit_time_range.ts | 2 +- .../public/custom_time_range_action.tsx | 2 +- .../public/custom_time_range_badge.tsx | 2 +- .../public/customize_time_range_modal.tsx | 2 +- .../test_helpers/time_range_container.ts | 2 +- .../test_helpers/time_range_embeddable.ts | 2 +- .../time_range_embeddable_factory.ts | 2 +- .../query_string_input/query_bar_top_row.tsx | 9 +- .../query_string_input/query_string_input.tsx | 3 +- .../public/search_bar/create_search_bar.tsx | 2 +- .../populate_state_from_saved_query.test.ts | 2 +- .../lib/use_query_string_manager.ts | 2 +- .../public/test_helpers/get_stub_filter.ts | 3 +- .../public/components/agg.tsx | 3 +- .../public/components/agg_group.tsx | 3 +- .../public/components/controls/filter.tsx | 3 +- .../public/components/controls/filters.tsx | 3 +- .../public/components/sidebar/data_tab.tsx | 9 +- .../public/components/sidebar/sidebar.tsx | 2 +- .../helpers/timelion_request_handler.ts | 4 +- .../timelion/public/timelion_vis_fn.ts | 4 +- .../application/components/annotation_row.tsx | 3 +- .../lib/convert_series_to_datatable.ts | 2 +- .../application/components/vis_editor.tsx | 2 +- .../public/trigger_action/metrics_helpers.ts | 2 +- .../vega/public/data_model/time_cache.ts | 2 +- src/plugins/vis_types/vega/public/vega_fn.ts | 3 +- .../vega/public/vega_request_handler.ts | 4 +- .../visualizations/common/locator.test.ts | 2 +- src/plugins/visualizations/common/locator.ts | 4 +- .../embeddable/visualize_embeddable.tsx | 4 +- .../visualizations/public/vis_types/types.ts | 3 +- .../public/visualize_app/types.ts | 4 +- .../utils/migrate_legacy_query.ts | 2 +- .../find_and_cleanup_tasks.test.ts | 4 +- .../components/shared/kuery_bar/index.tsx | 6 +- .../functions/external/saved_lens.ts | 2 +- .../common/lib/build_embeddable_filters.ts | 2 +- .../canvas/public/functions/timelion.ts | 2 +- x-pack/plugins/canvas/types/embeddables.ts | 2 +- .../utils/markdown_plugins/lens/serializer.ts | 2 +- .../common/utils/markdown_plugins/utils.ts | 2 +- ...embeddable_to_dashboard_drilldown.test.tsx | 3 +- .../embeddable_to_dashboard_drilldown.tsx | 10 +- .../date_picker_wrapper.tsx | 3 +- .../results_links/results_links.tsx | 3 +- .../index_data_visualizer_view.tsx | 4 +- .../components/search_panel/search_panel.tsx | 2 +- .../grid_embeddable/grid_embeddable.tsx | 2 +- .../index_data_visualizer/locator/locator.ts | 4 +- .../explore_data_context_menu_action.ts | 2 +- .../url_drilldown/public/lib/test/data.ts | 2 +- .../public/lib/url_drilldown.tsx | 2 +- .../public/lib/variables/context_variables.ts | 2 +- .../components/agent_logs/agent_logs.tsx | 2 +- .../graph/public/components/search_bar.tsx | 4 +- .../log_stream/log_stream_embeddable.tsx | 2 +- .../hooks/use_kibana_timefilter_time.tsx | 3 +- .../use_log_entry_rate_results_url_state.tsx | 2 +- .../expressions/time_scale/time_scale.test.ts | 3 +- .../lens/public/app_plugin/app.test.tsx | 3 +- .../public/embeddable/embeddable.test.tsx | 4 +- .../lens/public/embeddable/embeddable.tsx | 4 +- .../dimension_panel/filtering.tsx | 2 +- .../dimension_panel/time_shift.tsx | 3 +- .../indexpattern_datasource/field_item.tsx | 4 +- .../fields_accordion.tsx | 2 +- .../operations/definitions/column_types.ts | 2 +- .../definitions/filters/filter_popover.tsx | 2 +- .../definitions/filters/filters.tsx | 3 +- .../operations/definitions/formula/util.ts | 4 +- .../definitions/formula/validation.ts | 2 +- .../operations/layer_helpers.ts | 2 +- .../indexpattern_datasource/query_input.tsx | 2 +- .../public/persistence/saved_object_store.ts | 3 +- .../state_management/lens_slice.test.ts | 2 +- .../lens/public/state_management/types.ts | 4 +- .../open_in_discover_drilldown.tsx | 3 +- x-pack/plugins/lens/public/types.ts | 2 +- .../data_request_descriptor_types.ts | 2 +- .../layer_descriptor_types.ts | 3 +- .../source_descriptor_types.ts | 3 +- .../maps/public/actions/layer_actions.ts | 2 +- .../maps/public/actions/map_actions.ts | 2 +- .../maps/public/classes/joins/inner_join.ts | 2 +- .../maps/public/classes/layers/layer.tsx | 2 +- .../create_layer_descriptor.ts | 2 +- .../es_search_source/es_search_source.tsx | 4 +- .../classes/sources/es_source/es_source.ts | 2 +- .../sources/es_term_source/es_term_source.ts | 3 +- .../sources/vector_source/vector_source.tsx | 2 +- .../edit_layer_panel/filter_editor/index.ts | 2 +- .../timeslider/timeslider.tsx | 2 +- .../maps/public/embeddable/map_component.tsx | 2 +- .../maps/public/embeddable/map_embeddable.tsx | 4 +- .../plugins/maps/public/embeddable/types.ts | 2 +- .../region_map/region_map_fn.ts | 2 +- .../region_map/region_map_visualization.tsx | 2 +- .../tile_map/tile_map_fn.ts | 2 +- .../tile_map/tile_map_visualization.tsx | 2 +- x-pack/plugins/maps/public/locators.ts | 9 +- .../plugins/maps/public/reducers/map/types.ts | 2 +- .../public/routes/map_page/map_app/index.ts | 2 +- .../routes/map_page/map_app/map_app.tsx | 4 +- .../public/routes/map_page/saved_map/types.ts | 2 +- .../map_page/url_state/app_state_manager.ts | 2 +- .../routes/map_page/url_state/global_sync.ts | 4 +- .../maps/public/selectors/map_selectors.ts | 2 +- x-pack/plugins/ml/common/util/date_utils.ts | 2 +- .../full_time_range_selector.test.tsx | 2 +- .../date_picker_wrapper.tsx | 3 +- .../exploration_query_bar.tsx | 2 +- .../explorer_query_bar/explorer_query_bar.tsx | 2 +- .../new_job/job_from_lens/route_resolver.ts | 2 +- .../anomaly_explorer_charts_service.ts | 3 +- .../services/anomaly_timeline_service.ts | 3 +- .../ml/public/application/util/index_utils.ts | 2 +- x-pack/plugins/ml/public/embeddables/types.ts | 4 +- .../apply_entity_filters_action.tsx | 3 +- .../apply_influencer_filters_action.tsx | 3 +- .../contexts/global_state_context.tsx | 3 +- x-pack/plugins/monitoring/public/url_state.ts | 3 +- .../public/common/hooks/use_discover_link.tsx | 2 +- .../packs/pack_queries_status_table.tsx | 3 +- .../common/components/query_bar/index.tsx | 3 +- .../common/components/search_bar/index.tsx | 4 +- .../geo_containment/query_builder/index.tsx | 2 +- .../alert_types/geo_containment/types.ts | 2 +- .../overview/query_bar/use_query_bar.ts | 2 +- .../step_define/hooks/use_search_bar.ts | 2 +- 207 files changed, 296 insertions(+), 959 deletions(-) delete mode 100644 src/plugins/data/public/deprecated.ts delete mode 100644 src/plugins/data/server/deprecated.ts diff --git a/examples/search_examples/public/search_sessions/app.tsx b/examples/search_examples/public/search_sessions/app.tsx index 31ffcc2b9a0f3..5fe519f005bf0 100644 --- a/examples/search_examples/public/search_sessions/app.tsx +++ b/examples/search_examples/public/search_sessions/app.tsx @@ -34,6 +34,7 @@ import { lastValueFrom, of } from 'rxjs'; import { CoreStart } from '@kbn/core/public'; import { mountReactNode } from '@kbn/core/public/utils'; +import type { TimeRange } from '@kbn/es-query'; import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import { @@ -45,7 +46,6 @@ import { isErrorResponse, QueryState, SearchSessionState, - TimeRange, } from '@kbn/data-plugin/public'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; diff --git a/examples/search_examples/public/search_sessions/app_locator.ts b/examples/search_examples/public/search_sessions/app_locator.ts index c7f805ed0d5f2..8fb1f15f12f9b 100644 --- a/examples/search_examples/public/search_sessions/app_locator.ts +++ b/examples/search_examples/public/search_sessions/app_locator.ts @@ -7,8 +7,7 @@ */ import { SerializableRecord } from '@kbn/utility-types'; -import { Filter, Query, isFilterPinned } from '@kbn/es-query'; -import type { TimeRange } from '@kbn/data-plugin/public'; +import { Filter, Query, isFilterPinned, TimeRange } from '@kbn/es-query'; import { getStatesFromKbnUrl, setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; import { LocatorDefinition } from '@kbn/share-plugin/common'; diff --git a/examples/state_containers_examples/public/with_data_services/app.tsx b/examples/state_containers_examples/public/with_data_services/app.tsx index b61e1fe98f83b..04d41cb6aa6a5 100644 --- a/examples/state_containers_examples/public/with_data_services/app.tsx +++ b/examples/state_containers_examples/public/with_data_services/app.tsx @@ -18,14 +18,13 @@ import { EuiText, EuiTitle, } from '@elastic/eui'; -import { Filter, FilterStateStore } from '@kbn/es-query'; +import { Filter, FilterStateStore, Query } from '@kbn/es-query'; import { CoreStart } from '@kbn/core/public'; import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import { connectToQueryState, DataPublicPluginStart, - Query, QueryState, syncQueryStateWithUrl, } from '@kbn/data-plugin/public'; diff --git a/src/plugins/controls/common/control_types/options_list/types.ts b/src/plugins/controls/common/control_types/options_list/types.ts index 7ab1c3c4f67a0..4b805210f37d3 100644 --- a/src/plugins/controls/common/control_types/options_list/types.ts +++ b/src/plugins/controls/common/control_types/options_list/types.ts @@ -6,8 +6,7 @@ * Side Public License, v 1. */ -import { TimeRange } from '@kbn/data-plugin/common'; -import { Filter, Query, BoolQuery } from '@kbn/es-query'; +import type { Filter, Query, BoolQuery, TimeRange } from '@kbn/es-query'; import { FieldSpec, DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { DataControlInput } from '../../types'; diff --git a/src/plugins/controls/common/types.ts b/src/plugins/controls/common/types.ts index 7d70f53c32933..e98a46ff7a1af 100644 --- a/src/plugins/controls/common/types.ts +++ b/src/plugins/controls/common/types.ts @@ -6,8 +6,7 @@ * Side Public License, v 1. */ -import { Filter, Query } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { EmbeddableInput } from '@kbn/embeddable-plugin/common/types'; export type ControlWidth = 'small' | 'medium' | 'large'; diff --git a/src/plugins/controls/public/services/kibana/options_list.ts b/src/plugins/controls/public/services/kibana/options_list.ts index 050972f6234ef..aa3f28e24ab16 100644 --- a/src/plugins/controls/public/services/kibana/options_list.ts +++ b/src/plugins/controls/public/services/kibana/options_list.ts @@ -9,8 +9,7 @@ import { memoize } from 'lodash'; import dateMath from '@kbn/datemath'; -import { buildEsQuery } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/public'; +import { buildEsQuery, type TimeRange } from '@kbn/es-query'; import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; import { diff --git a/src/plugins/dashboard/public/locator.ts b/src/plugins/dashboard/public/locator.ts index ebf7b13a9563a..240723ca47bce 100644 --- a/src/plugins/dashboard/public/locator.ts +++ b/src/plugins/dashboard/public/locator.ts @@ -8,13 +8,8 @@ import type { SerializableRecord } from '@kbn/utility-types'; import { flow } from 'lodash'; -import { type Filter } from '@kbn/es-query'; -import type { - TimeRange, - Query, - GlobalQueryStateFromUrl, - RefreshInterval, -} from '@kbn/data-plugin/public'; +import type { Filter, TimeRange, Query } from '@kbn/es-query'; +import type { GlobalQueryStateFromUrl, RefreshInterval } from '@kbn/data-plugin/public'; import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; import { SerializableControlGroupInput } from '@kbn/controls-plugin/common'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; diff --git a/src/plugins/dashboard/public/services/data.ts b/src/plugins/dashboard/public/services/data.ts index da5f4e12299db..1e0c02cc3d401 100644 --- a/src/plugins/dashboard/public/services/data.ts +++ b/src/plugins/dashboard/public/services/data.ts @@ -6,4 +6,5 @@ * Side Public License, v 1. */ +export type { Query, TimeRange, Filter } from '@kbn/es-query'; export * from '@kbn/data-plugin/public'; diff --git a/src/plugins/data/common/es_query/index.ts b/src/plugins/data/common/es_query/index.ts index b548fd9390592..d844c3acdadf5 100644 --- a/src/plugins/data/common/es_query/index.ts +++ b/src/plugins/data/common/es_query/index.ts @@ -7,388 +7,3 @@ */ export { getEsQueryConfig } from './get_es_query_config'; - -// NOTE: Trick to deprecate exports https://stackoverflow.com/a/49152018/372086 -import { - enableFilter as oldEnableFilter, - pinFilter as oldPinFilter, - toggleFilterDisabled as oldToggleFilterDisabled, - isFilterDisabled as oldIsFilterDisabled, - disableFilter as oldDisableFilter, - fromKueryExpression as oldFromKueryExpression, - toElasticsearchQuery as oldToElasticsearchQuery, - buildEsQuery as oldBuildEsQuery, - buildQueryFromFilters as oldBuildQueryFromFilters, - luceneStringToDsl as oldLuceneStringToDsl, - decorateQuery as olddecorateQuery, - getPhraseFilterField as oldgetPhraseFilterField, - getPhraseFilterValue as oldgetPhraseFilterValue, - isFilterPinned as oldIsFilterPinned, - nodeBuilder as oldNodeBuilder, - isFilters as oldIsFilters, - isExistsFilter as oldIsExistsFilter, - isMatchAllFilter as oldIsMatchAllFilter, - isPhraseFilter as oldIsPhraseFilter, - isPhrasesFilter as oldIsPhrasesFilter, - isRangeFilter as oldIsRangeFilter, - isQueryStringFilter as oldIsQueryStringFilter, - buildQueryFilter as oldBuildQueryFilter, - buildPhrasesFilter as oldBuildPhrasesFilter, - buildPhraseFilter as oldBuildPhraseFilter, - buildRangeFilter as oldBuildRangeFilter, - buildCustomFilter as oldBuildCustomFilter, - buildFilter as oldBuildFilter, - buildEmptyFilter as oldBuildEmptyFilter, - buildExistsFilter as oldBuildExistsFilter, - toggleFilterNegated as oldtoggleFilterNegated, - Filter as oldFilter, - RangeFilterParams as oldRangeFilterParams, - ExistsFilter as oldExistsFilter, - PhraseFilter as oldPhraseFilter, - MatchAllFilter as oldMatchAllFilter, - RangeFilter as oldRangeFilter, - KueryNode as oldKueryNode, - TimeRange as oldTimeRange, - FilterMeta as oldFilterMeta, - FILTERS as oldFILTERS, - EsQueryConfig as oldEsQueryConfig, - compareFilters as oldCompareFilters, - COMPARE_ALL_OPTIONS as OLD_COMPARE_ALL_OPTIONS, - dedupFilters as oldDedupFilters, - onlyDisabledFiltersChanged as oldOnlyDisabledFiltersChanged, - uniqFilters as oldUniqFilters, - FilterStateStore, -} from '@kbn/es-query'; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isFilterDisabled = oldIsFilterDisabled; -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const disableFilter = oldDisableFilter; -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const fromKueryExpression = oldFromKueryExpression; -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const toElasticsearchQuery = oldToElasticsearchQuery; -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildEsQuery = oldBuildEsQuery; -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildQueryFromFilters = oldBuildQueryFromFilters; -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const luceneStringToDsl = oldLuceneStringToDsl; -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const decorateQuery = olddecorateQuery; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const getPhraseFilterField = oldgetPhraseFilterField; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const getPhraseFilterValue = oldgetPhraseFilterValue; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isFilterPinned = oldIsFilterPinned; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const nodeBuilder = oldNodeBuilder; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isFilters = oldIsFilters; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const uniqFilters = oldUniqFilters; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const onlyDisabledFiltersChanged = oldOnlyDisabledFiltersChanged; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isExistsFilter = oldIsExistsFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isMatchAllFilter = oldIsMatchAllFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isPhraseFilter = oldIsPhraseFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isPhrasesFilter = oldIsPhrasesFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isRangeFilter = oldIsRangeFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const isQueryStringFilter = oldIsQueryStringFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildQueryFilter = oldBuildQueryFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildPhrasesFilter = oldBuildPhrasesFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildPhraseFilter = oldBuildPhraseFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildRangeFilter = oldBuildRangeFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildCustomFilter = oldBuildCustomFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildFilter = oldBuildFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildEmptyFilter = oldBuildEmptyFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const buildExistsFilter = oldBuildExistsFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const toggleFilterNegated = oldtoggleFilterNegated; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const enableFilter = oldEnableFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const pinFilter = oldPinFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const toggleFilterDisabled = oldToggleFilterDisabled; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const compareFilters = oldCompareFilters; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const dedupFilters = oldDedupFilters; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const COMPARE_ALL_OPTIONS = OLD_COMPARE_ALL_OPTIONS; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -const FILTERS = oldFILTERS; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type Filter = oldFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type RangeFilterParams = oldRangeFilterParams; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type ExistsFilter = oldExistsFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type PhraseFilter = oldPhraseFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type MatchAllFilter = oldMatchAllFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type RangeFilter = oldRangeFilter; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type KueryNode = oldKueryNode; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type FilterMeta = oldFilterMeta; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -type EsQueryConfig = oldEsQueryConfig; - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ - -/** - * @deprecated Import from the "@kbn/es-query" package directly instead. - * @removeBy 8.3 - */ -type TimeRange = oldTimeRange; - -export type { - Filter, - RangeFilterParams, - ExistsFilter, - PhraseFilter, - MatchAllFilter, - RangeFilter, - KueryNode, - FilterMeta, - EsQueryConfig, - TimeRange, -}; -export { - COMPARE_ALL_OPTIONS, - compareFilters, - enableFilter, - pinFilter, - toggleFilterDisabled, - disableFilter, - fromKueryExpression, - toElasticsearchQuery, - buildEsQuery, - buildQueryFromFilters, - luceneStringToDsl, - decorateQuery, - getPhraseFilterField, - getPhraseFilterValue, - isFilterPinned, - nodeBuilder, - isFilters, - isExistsFilter, - isMatchAllFilter, - isPhraseFilter, - isPhrasesFilter, - isRangeFilter, - isQueryStringFilter, - buildQueryFilter, - buildPhrasesFilter, - buildPhraseFilter, - buildRangeFilter, - buildCustomFilter, - buildFilter, - buildEmptyFilter, - buildExistsFilter, - toggleFilterNegated, - FILTERS, - isFilterDisabled, - dedupFilters, - onlyDisabledFiltersChanged, - uniqFilters, - FilterStateStore, -}; diff --git a/src/plugins/data/common/es_query/stubs/exists_filter.ts b/src/plugins/data/common/es_query/stubs/exists_filter.ts index 82df9b73abdd3..89ab73f185495 100644 --- a/src/plugins/data/common/es_query/stubs/exists_filter.ts +++ b/src/plugins/data/common/es_query/stubs/exists_filter.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { ExistsFilter, FilterStateStore } from '..'; +import { ExistsFilter, FilterStateStore } from '@kbn/es-query'; export const existsFilter: ExistsFilter = { meta: { diff --git a/src/plugins/data/common/index.ts b/src/plugins/data/common/index.ts index 4f88c6accea83..478d6d23d7b96 100644 --- a/src/plugins/data/common/index.ts +++ b/src/plugins/data/common/index.ts @@ -12,59 +12,7 @@ export { DEFAULT_QUERY_LANGUAGE, KIBANA_USER_QUERY_LANGUAGE_KEY, UI_SETTINGS } from './constants'; export type { ValueSuggestionsMethod } from './constants'; export { DatatableUtilitiesService } from './datatable_utilities'; -export { - buildEmptyFilter, - buildCustomFilter, - buildExistsFilter, - buildPhraseFilter, - buildPhrasesFilter, - buildQueryFilter, - buildQueryFromFilters, - buildRangeFilter, - buildFilter, - buildEsQuery, - getPhraseFilterField, - getPhraseFilterValue, - isExistsFilter, - compareFilters, - dedupFilters, - disableFilter, - enableFilter, - isPhraseFilter, - isFilters, - isQueryStringFilter, - isRangeFilter, - isPhrasesFilter, - decorateQuery, - fromKueryExpression, - isFilterDisabled, - isFilterPinned, - isMatchAllFilter, - FilterStateStore, - COMPARE_ALL_OPTIONS, - FILTERS, - getEsQueryConfig, - luceneStringToDsl, - nodeBuilder, - onlyDisabledFiltersChanged, - pinFilter, - toElasticsearchQuery, - toggleFilterDisabled, - toggleFilterNegated, - uniqFilters, -} from './es_query'; -export type { - ExistsFilter, - Filter, - MatchAllFilter, - FilterMeta, - PhraseFilter, - RangeFilter, - RangeFilterParams, - KueryNode, - EsQueryConfig, - TimeRange, -} from './es_query'; +export { getEsQueryConfig } from './es_query'; export { KbnFieldType } from './kbn_field_types'; export { calculateBounds, diff --git a/src/plugins/data/common/query/timefilter/get_time.ts b/src/plugins/data/common/query/timefilter/get_time.ts index 447d4b16e799f..3c5d7a6d37d35 100644 --- a/src/plugins/data/common/query/timefilter/get_time.ts +++ b/src/plugins/data/common/query/timefilter/get_time.ts @@ -9,10 +9,10 @@ import { KBN_FIELD_TYPES } from '@kbn/field-types'; import dateMath from '@kbn/datemath'; import { omitBy } from 'lodash'; -import { buildRangeFilter } from '@kbn/es-query'; +import { buildRangeFilter, TimeRange, RangeFilterParams } from '@kbn/es-query'; import type { Moment } from 'moment'; import type { DataView } from '@kbn/data-views-plugin/common'; -import type { TimeRange, TimeRangeBounds, RangeFilterParams } from '../..'; +import type { TimeRangeBounds } from '../..'; export interface CalculateBoundsOptions { forceNow?: Date; diff --git a/src/plugins/data/common/search/aggs/agg_configs.ts b/src/plugins/data/common/search/aggs/agg_configs.ts index 65238ee7b4db1..7d1b6e7b03cad 100644 --- a/src/plugins/data/common/search/aggs/agg_configs.ts +++ b/src/plugins/data/common/search/aggs/agg_configs.ts @@ -10,7 +10,7 @@ import moment from 'moment-timezone'; import _, { cloneDeep } from 'lodash'; import { i18n } from '@kbn/i18n'; import type { Assign } from '@kbn/utility-types'; -import { isRangeFilter } from '@kbn/es-query'; +import { isRangeFilter, TimeRange, RangeFilter } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/common'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { IndexPatternLoadExpressionFunctionDefinition } from '@kbn/data-views-plugin/common'; @@ -20,7 +20,6 @@ import type { IEsSearchResponse, ISearchOptions, ISearchSource, - RangeFilter, // eslint-disable-next-line @kbn/eslint/no-restricted-paths } from '../../../public'; import type { EsaggsExpressionFunctionDefinition } from '../expressions'; @@ -29,7 +28,7 @@ import type { IAggType } from './agg_type'; import type { AggTypesRegistryStart } from './agg_types_registry'; import { AggGroupNames } from './agg_groups'; import { AggTypesDependencies, GetConfigFn, getUserTimeZone } from '../..'; -import { TimeRange, getTime, calculateBounds } from '../..'; +import { getTime, calculateBounds } from '../..'; import type { IBucketAggConfig } from './buckets'; import { insertTimeShiftSplit, mergeTimeShifts } from './utils/time_splits'; diff --git a/src/plugins/data/common/search/aggs/buckets/date_histogram.ts b/src/plugins/data/common/search/aggs/buckets/date_histogram.ts index d72a0a3f22922..deb676fe96a1b 100644 --- a/src/plugins/data/common/search/aggs/buckets/date_histogram.ts +++ b/src/plugins/data/common/search/aggs/buckets/date_histogram.ts @@ -9,15 +9,9 @@ import { get, noop, find, every, omitBy, isNil } from 'lodash'; import moment from 'moment-timezone'; import { i18n } from '@kbn/i18n'; -import { DataViewFieldBase } from '@kbn/es-query'; +import { DataViewFieldBase, TimeRange } from '@kbn/es-query'; -import { - AggTypesDependencies, - KBN_FIELD_TYPES, - TimeRange, - TimeRangeBounds, - UI_SETTINGS, -} from '../../..'; +import { AggTypesDependencies, KBN_FIELD_TYPES, TimeRangeBounds, UI_SETTINGS } from '../../..'; import { ExtendedBounds, extendedBoundsToAst, timerangeToAst } from '../../expressions'; import { intervalOptions, autoInterval, isAutoInterval } from './_interval_options'; diff --git a/src/plugins/data/common/search/aggs/utils/date_interval_utils/to_absolute_dates.ts b/src/plugins/data/common/search/aggs/utils/date_interval_utils/to_absolute_dates.ts index 308f46551af30..85d7e852b468c 100644 --- a/src/plugins/data/common/search/aggs/utils/date_interval_utils/to_absolute_dates.ts +++ b/src/plugins/data/common/search/aggs/utils/date_interval_utils/to_absolute_dates.ts @@ -7,7 +7,7 @@ */ import dateMath from '@kbn/datemath'; -import { TimeRange } from '../../../..'; +import type { TimeRange } from '@kbn/es-query'; export function toAbsoluteDates(range: TimeRange) { const fromDate = dateMath.parse(range.from); diff --git a/src/plugins/data/common/search/expressions/esaggs/create_filter.ts b/src/plugins/data/common/search/expressions/esaggs/create_filter.ts index 9030cd7623ef7..4673468fcc306 100644 --- a/src/plugins/data/common/search/expressions/esaggs/create_filter.ts +++ b/src/plugins/data/common/search/expressions/esaggs/create_filter.ts @@ -7,7 +7,7 @@ */ import { Datatable } from '@kbn/expressions-plugin/common'; -import { Filter } from '../../../es_query'; +import type { Filter } from '@kbn/es-query'; import { IAggConfig } from '../../aggs'; const getOtherBucketFilterTerms = (table: Datatable, columnIndex: number, rowIndex: number) => { diff --git a/src/plugins/data/common/search/expressions/esaggs/request_handler.test.ts b/src/plugins/data/common/search/expressions/esaggs/request_handler.test.ts index 4f112c3f64206..2c91a8f5ecfc7 100644 --- a/src/plugins/data/common/search/expressions/esaggs/request_handler.test.ts +++ b/src/plugins/data/common/search/expressions/esaggs/request_handler.test.ts @@ -8,7 +8,7 @@ import { from } from 'rxjs'; import type { MockedKeys } from '@kbn/utility-types-jest'; -import type { Filter } from '../../../es_query'; +import type { Filter } from '@kbn/es-query'; import type { IAggConfigs } from '../../aggs'; import type { ISearchSource } from '../../search_source'; import { searchSourceCommonMock, searchSourceInstanceMock } from '../../search_source/mocks'; diff --git a/src/plugins/data/common/search/expressions/esaggs/request_handler.ts b/src/plugins/data/common/search/expressions/esaggs/request_handler.ts index 8caa93c4461ef..7e92f0633d045 100644 --- a/src/plugins/data/common/search/expressions/esaggs/request_handler.ts +++ b/src/plugins/data/common/search/expressions/esaggs/request_handler.ts @@ -11,8 +11,9 @@ import { defer } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; import { Adapters } from '@kbn/inspector-plugin/common'; import type { DataView } from '@kbn/data-views-plugin/common'; +import type { Filter, TimeRange } from '@kbn/es-query'; -import { calculateBounds, Filter, Query, TimeRange } from '../../..'; +import { calculateBounds, Query } from '../../..'; import { IAggConfigs } from '../../aggs'; import { ISearchStartSearchSource } from '../../search_source'; diff --git a/src/plugins/data/common/search/search_source/create_search_source.test.ts b/src/plugins/data/common/search/search_source/create_search_source.test.ts index c67e8a21b4f9a..491673dc8ebca 100644 --- a/src/plugins/data/common/search/search_source/create_search_source.test.ts +++ b/src/plugins/data/common/search/search_source/create_search_source.test.ts @@ -9,7 +9,7 @@ import { createSearchSource as createSearchSourceFactory } from './create_search_source'; import { SearchSourceDependencies } from './search_source'; import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/common'; -import { Filter } from '../../es_query'; +import type { Filter } from '@kbn/es-query'; describe('createSearchSource', () => { const indexPatternMock: DataView = {} as DataView; diff --git a/src/plugins/data/common/search/search_source/types.ts b/src/plugins/data/common/search/search_source/types.ts index 3861ef18da6ce..3f199c6b338c4 100644 --- a/src/plugins/data/common/search/search_source/types.ts +++ b/src/plugins/data/common/search/search_source/types.ts @@ -9,11 +9,11 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { SerializableRecord } from '@kbn/utility-types'; import { PersistableStateService } from '@kbn/kibana-utils-plugin/common'; +import type { Filter } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/common'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { AggConfigSerialized, IAggConfigs } from '../../../public'; import { Query } from '../..'; -import { Filter } from '../../es_query'; import type { SearchSource } from './search_source'; /** diff --git a/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts b/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts index bcfdf46772dc5..a3211867d94ba 100644 --- a/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts @@ -9,10 +9,10 @@ import { last } from 'lodash'; import moment from 'moment'; import { Datatable } from '@kbn/expressions-plugin'; -import { DataViewFieldBase } from '@kbn/es-query'; -import { esFilters, RangeFilterParams } from '../..'; +import { buildRangeFilter, DataViewFieldBase, RangeFilterParams } from '@kbn/es-query'; import { getIndexPatterns, getSearchService } from '../../services'; import { AggConfigSerialized } from '../../../common/search/aggs'; +import { mapAndFlattenFilters } from '../../query'; interface RangeSelectDataContext { table: Datatable; @@ -58,5 +58,5 @@ export async function createFiltersFromRangeSelectAction(event: RangeSelectDataC range.format = 'strict_date_optional_time'; } - return esFilters.mapAndFlattenFilters([esFilters.buildRangeFilter(field, range, indexPattern)]); + return mapAndFlattenFilters([buildRangeFilter(field, range, indexPattern)]); } diff --git a/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts b/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts index 1c7ffe5edf58f..d985639dd08c5 100644 --- a/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts @@ -8,9 +8,10 @@ import _ from 'lodash'; import { Datatable } from '@kbn/expressions-plugin/public'; -import { esFilters, Filter } from '../..'; +import { compareFilters, COMPARE_ALL_OPTIONS, Filter, toggleFilterNegated } from '@kbn/es-query'; import { getIndexPatterns, getSearchService } from '../../services'; import { AggConfigSerialized } from '../../../common/search/aggs'; +import { mapAndFlattenFilters } from '../../query'; interface ValueClickDataContext { data: Array<{ @@ -135,7 +136,7 @@ export const createFiltersFromValueClickAction = async ({ if (filter) { filter.forEach((f) => { if (negate) { - f = esFilters.toggleFilterNegated(f); + f = toggleFilterNegated(f); } filters.push(f); }); @@ -143,7 +144,7 @@ export const createFiltersFromValueClickAction = async ({ }) ); - return _.uniqWith(esFilters.mapAndFlattenFilters(filters), (a, b) => - esFilters.compareFilters(a, b, esFilters.COMPARE_ALL_OPTIONS) + return _.uniqWith(mapAndFlattenFilters(filters), (a, b) => + compareFilters(a, b, COMPARE_ALL_OPTIONS) ); }; diff --git a/src/plugins/data/public/deprecated.ts b/src/plugins/data/public/deprecated.ts deleted file mode 100644 index 6565e1a1b8cb9..0000000000000 --- a/src/plugins/data/public/deprecated.ts +++ /dev/null @@ -1,140 +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. - */ - -/* - * Filters: - */ - -import { - getPhraseFilterField, - getPhraseFilterValue, - isExistsFilter, - isFilterPinned, - isMatchAllFilter, - isPhraseFilter, - isPhrasesFilter, - isQueryStringFilter, - isRangeFilter, - toggleFilterNegated, - buildEmptyFilter, - buildExistsFilter, - buildPhraseFilter, - buildPhrasesFilter, - buildQueryFilter, - buildRangeFilter, - disableFilter, - fromKueryExpression, - toElasticsearchQuery, - buildEsQuery, - buildQueryFromFilters, - luceneStringToDsl, - decorateQuery, - FILTERS, - isFilters, - KueryNode, - RangeFilter, - RangeFilterParams, - ExistsFilter, - PhraseFilter, - MatchAllFilter, - EsQueryConfig, - FilterStateStore, - compareFilters, - COMPARE_ALL_OPTIONS, - onlyDisabledFiltersChanged, - getEsQueryConfig, - TimeRange, -} from '../common'; - -import { - getDisplayValueFromFilter, - generateFilters, - mapAndFlattenFilters as oldMapAndFlattenFilters, -} from './query'; - -/** - * @deprecated This import will be removed. - * @removeBy 8.1 - */ -const mapAndFlattenFilters = oldMapAndFlattenFilters; - -/** - * Filter helpers namespace: - * @deprecated Import helpers from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -export const esFilters = { - FILTERS, - FilterStateStore, - - buildEmptyFilter, - buildPhrasesFilter, - buildExistsFilter, - buildPhraseFilter, - buildQueryFilter, - buildRangeFilter, - - isPhraseFilter, - isExistsFilter, - isPhrasesFilter, - isRangeFilter, - isMatchAllFilter, - isQueryStringFilter, - isFilterPinned, - - toggleFilterNegated, - disableFilter, - getPhraseFilterField, - getPhraseFilterValue, - getDisplayValueFromFilter, - - compareFilters, - COMPARE_ALL_OPTIONS, - generateFilters, - onlyDisabledFiltersChanged, - - mapAndFlattenFilters, -}; - -/** - * Deprecated type exports - */ -export type { - KueryNode, - RangeFilter, - RangeFilterParams, - ExistsFilter, - PhraseFilter, - MatchAllFilter, - EsQueryConfig, - TimeRange, -}; -export { isFilters }; - -/** - * @deprecated Import helpers from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -export const esKuery = { - fromKueryExpression, - toElasticsearchQuery, -}; - -/** - * @deprecated Import helpers from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -export const esQuery = { - buildEsQuery, - getEsQueryConfig, - buildQueryFromFilters, - luceneStringToDsl, - decorateQuery, -}; - -export type { Filter, Query } from '../common'; diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts index 89f02906657ef..c26b5a6ad8114 100644 --- a/src/plugins/data/public/index.ts +++ b/src/plugins/data/public/index.ts @@ -6,19 +6,14 @@ * Side Public License, v 1. */ -// TODO: https://github.com/elastic/kibana/issues/109904 -/* eslint-disable @kbn/eslint/no_export_all */ - import { PluginInitializerContext } from '@kbn/core/public'; import { ConfigSchema } from '../config'; -export * from './deprecated'; - /* * Filters: */ -export { getEsQueryConfig, FilterStateStore } from '../common'; +export { getEsQueryConfig } from '../common'; export { getDisplayValueFromFilter, getFieldDisplayValueFromFilter, @@ -236,7 +231,7 @@ export const search = { * Types to be shared externally * @public */ -export type { RefreshInterval, TimeRange } from '../common'; +export type { RefreshInterval } from '../common'; export { createSavedQueryService, diff --git a/src/plugins/data/public/query/filter_manager/filter_manager.test.ts b/src/plugins/data/public/query/filter_manager/filter_manager.test.ts index 9620d79295220..9f72efaec9cda 100644 --- a/src/plugins/data/public/query/filter_manager/filter_manager.test.ts +++ b/src/plugins/data/public/query/filter_manager/filter_manager.test.ts @@ -8,12 +8,13 @@ import _ from 'lodash'; import sinon from 'sinon'; +import { Filter, FilterStateStore } from '@kbn/es-query'; import { Subscription } from 'rxjs'; import { FilterManager } from './filter_manager'; import { getFilter } from './test_helpers/get_stub_filter'; import { getFiltersArray } from './test_helpers/get_filters_array'; -import { Filter, FilterStateStore, UI_SETTINGS } from '../../../common'; +import { UI_SETTINGS } from '../../../common'; import { coreMock } from '@kbn/core/public/mocks'; const setupMock = coreMock.createSetup(); diff --git a/src/plugins/data/public/query/filter_manager/filter_manager.ts b/src/plugins/data/public/query/filter_manager/filter_manager.ts index cf9ad750d2809..c3a2c52ac60df 100644 --- a/src/plugins/data/public/query/filter_manager/filter_manager.ts +++ b/src/plugins/data/public/query/filter_manager/filter_manager.ts @@ -10,6 +10,7 @@ import _ from 'lodash'; import { Subject } from 'rxjs'; import { IUiSettingsClient } from '@kbn/core/public'; +import { FilterStateStore } from '@kbn/es-query'; import { isFilterPinned, @@ -23,7 +24,7 @@ import { PersistableStateService } from '@kbn/kibana-utils-plugin/common/persist import { sortFilters } from './lib/sort_filters'; import { mapAndFlattenFilters } from './lib/map_and_flatten_filters'; -import { FilterStateStore, UI_SETTINGS } from '../../../common'; +import { UI_SETTINGS } from '../../../common'; import { getAllMigrations, inject, diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts index 1aa14f89a88e7..7c86581b42a6b 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts @@ -8,7 +8,7 @@ import sinon from 'sinon'; import { generateMappingChain } from './generate_mapping_chain'; -import { buildEmptyFilter } from '../../../../common'; +import { buildEmptyFilter } from '@kbn/es-query'; describe('filter manager utilities', () => { let mapping: any; diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts index b152a4d3ac2a8..2a67e72b5e41f 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { Filter } from '../../../../common'; +import { Filter } from '@kbn/es-query'; const noop = () => { throw new Error('No mappings have been found for filter.'); diff --git a/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts b/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts index 944a8fc73064a..40bbe9a89c992 100644 --- a/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts +++ b/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; -import { Filter } from '../../../../common'; +import { Filter } from '@kbn/es-query'; import { getIndexPatternFromFilter } from './get_index_pattern_from_filter'; function getValueFormatter(indexPattern?: DataView, key?: string) { diff --git a/src/plugins/data/public/query/filter_manager/lib/get_index_pattern_from_filter.ts b/src/plugins/data/public/query/filter_manager/lib/get_index_pattern_from_filter.ts index 5ecd02b6f9d85..c4da427ed9780 100644 --- a/src/plugins/data/public/query/filter_manager/lib/get_index_pattern_from_filter.ts +++ b/src/plugins/data/public/query/filter_manager/lib/get_index_pattern_from_filter.ts @@ -7,7 +7,7 @@ */ import { DataView } from '@kbn/data-views-plugin/public'; -import { Filter } from '../../../../common'; +import { Filter } from '@kbn/es-query'; export function getIndexPatternFromFilter( filter: Filter, diff --git a/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts b/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts index 113ae15d8284b..e7b4067881656 100644 --- a/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts @@ -7,7 +7,7 @@ */ import { mapAndFlattenFilters } from './map_and_flatten_filters'; -import { Filter } from '../../../../common'; +import type { Filter } from '@kbn/es-query'; describe('filter manager utilities', () => { describe('mapAndFlattenFilters()', () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts b/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts index 0deabd6412475..be94e69f74f9d 100644 --- a/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts @@ -7,7 +7,7 @@ */ import { mapFilter } from './map_filter'; -import { Filter } from '../../../../common'; +import type { Filter } from '@kbn/es-query'; describe('filter manager utilities', () => { function getDisplayName(filter: Filter) { diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts index 84b8bcc1226e9..74a932ad970a5 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ +import { buildQueryFilter, buildEmptyFilter } from '@kbn/es-query'; import { mapDefault } from './map_default'; -import { buildQueryFilter, buildEmptyFilter } from '../../../../../common'; describe('filter manager utilities', () => { describe('mapDefault()', () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts index 6cac5352af016..0e642b3f99dcc 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts @@ -6,10 +6,9 @@ * Side Public License, v 1. */ +import { buildExistsFilter, buildEmptyFilter, DataViewFieldBase } from '@kbn/es-query'; import { mapExists } from './map_exists'; import { mapQueryString } from './map_query_string'; -import { buildExistsFilter, buildEmptyFilter } from '../../../../../common'; -import { DataViewFieldBase } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/common'; describe('filter manager utilities', () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts index 2cf4a67a0e401..c63a8f82f1704 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts @@ -7,7 +7,7 @@ */ import { mapPhrase } from './map_phrase'; -import { PhraseFilter, Filter } from '../../../../../common'; +import type { PhraseFilter, Filter } from '@kbn/es-query'; describe('filter manager utilities', () => { describe('mapPhrase()', () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts index bdacc3db9007d..f54cea3164919 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts @@ -7,7 +7,7 @@ */ import { mapQueryString } from './map_query_string'; -import { buildQueryFilter, buildEmptyFilter, Filter } from '../../../../../common'; +import { buildQueryFilter, buildEmptyFilter, Filter } from '@kbn/es-query'; describe('filter manager utilities', () => { describe('mapQueryString()', () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts index 98d70dc86bb35..3b82ee6ef0f1c 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts @@ -7,7 +7,7 @@ */ import { mapRange } from './map_range'; -import { FilterMeta, RangeFilter, Filter } from '../../../../../common'; +import { FilterMeta, RangeFilter, Filter } from '@kbn/es-query'; describe('filter manager utilities', () => { describe('mapRange()', () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts index 0ae1513ae5d1b..9065ccfa17856 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts @@ -7,7 +7,7 @@ */ import { mapSpatialFilter } from './map_spatial_filter'; -import { FilterMeta, Filter, FILTERS } from '../../../../../common'; +import { FilterMeta, Filter, FILTERS } from '@kbn/es-query'; describe('mapSpatialFilter()', () => { test('should return the key for matching multi polygon filter', async () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts b/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts index da765aec708b1..6a17c945e457c 100644 --- a/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts @@ -7,7 +7,7 @@ */ import { sortFilters } from './sort_filters'; -import { FilterStateStore, buildQueryFilter } from '../../../../common'; +import { FilterStateStore, buildQueryFilter } from '@kbn/es-query'; describe('sortFilters', () => { describe('sortFilters()', () => { diff --git a/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts b/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts index c23f116a0eb54..e5ebb80db9b9e 100644 --- a/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { Filter, FilterStateStore } from '../../../../common'; +import { Filter, FilterStateStore } from '@kbn/es-query'; /** * Sort filters according to their store - global filters go first diff --git a/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts b/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts index edd730e1e68b5..14fc6cc9ffdbf 100644 --- a/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts +++ b/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { Filter } from '../../../../common'; +import type { Filter } from '@kbn/es-query'; export function getFiltersArray(): Filter[] { return [ diff --git a/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts b/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts index e41a9b7d5364f..6a4ba160eb6ab 100644 --- a/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts +++ b/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { Filter, FilterStateStore } from '../../../../common'; +import { Filter, FilterStateStore } from '@kbn/es-query'; export function getFilter( store: FilterStateStore, diff --git a/src/plugins/data/public/query/query_service.ts b/src/plugins/data/public/query/query_service.ts index 07511c8acec19..894db102aa041 100644 --- a/src/plugins/data/public/query/query_service.ts +++ b/src/plugins/data/public/query/query_service.ts @@ -10,7 +10,7 @@ import { share } from 'rxjs/operators'; import { HttpStart, IUiSettingsClient } from '@kbn/core/public'; import { PersistableStateService, VersionedState } from '@kbn/kibana-utils-plugin/common'; import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; -import { buildEsQuery } from '@kbn/es-query'; +import { buildEsQuery, TimeRange } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/common'; import { FilterManager } from './filter_manager'; import { createAddToQueryLog } from './lib'; @@ -24,7 +24,7 @@ import { import { getQueryState, QueryState } from './query_state'; import type { QueryStringContract } from './query_string'; import { QueryStringManager } from './query_string'; -import { getEsQueryConfig, TimeRange } from '../../common'; +import { getEsQueryConfig } from '../../common'; import { getUiSettings } from '../services'; import { NowProviderInternalContract } from '../now_provider'; import { diff --git a/src/plugins/data/public/query/query_string/query_string_manager.ts b/src/plugins/data/public/query/query_string/query_string_manager.ts index fb9c2b1a734fa..f8d9025ad0db4 100644 --- a/src/plugins/data/public/query/query_string/query_string_manager.ts +++ b/src/plugins/data/public/query/query_string/query_string_manager.ts @@ -10,8 +10,9 @@ import { BehaviorSubject } from 'rxjs'; import { skip } from 'rxjs/operators'; import { PublicMethodsOf } from '@kbn/utility-types'; import { CoreStart } from '@kbn/core/public'; +import type { Query } from '@kbn/es-query'; import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; -import { KIBANA_USER_QUERY_LANGUAGE_KEY, Query, UI_SETTINGS } from '../../../common'; +import { KIBANA_USER_QUERY_LANGUAGE_KEY, UI_SETTINGS } from '../../../common'; export class QueryStringManager { private query$: BehaviorSubject; diff --git a/src/plugins/data/public/query/saved_query/types.ts b/src/plugins/data/public/query/saved_query/types.ts index 0f1763433e72a..eac7bd3aa30b1 100644 --- a/src/plugins/data/public/query/saved_query/types.ts +++ b/src/plugins/data/public/query/saved_query/types.ts @@ -6,7 +6,8 @@ * Side Public License, v 1. */ -import { RefreshInterval, TimeRange, Query, Filter } from '../..'; +import type { TimeRange, Query, Filter } from '@kbn/es-query'; +import { RefreshInterval } from '../..'; export type SavedQueryTimeFilter = TimeRange & { refreshInterval: RefreshInterval; diff --git a/src/plugins/data/public/query/state_sync/connect_to_query_state.ts b/src/plugins/data/public/query/state_sync/connect_to_query_state.ts index a625dff04b0a3..41e386ac370d2 100644 --- a/src/plugins/data/public/query/state_sync/connect_to_query_state.ts +++ b/src/plugins/data/public/query/state_sync/connect_to_query_state.ts @@ -9,12 +9,11 @@ import { Subscription } from 'rxjs'; import { filter, map } from 'rxjs/operators'; import _ from 'lodash'; -import { COMPARE_ALL_OPTIONS, compareFilters } from '@kbn/es-query'; +import { COMPARE_ALL_OPTIONS, compareFilters, FilterStateStore } from '@kbn/es-query'; import { BaseStateContainer } from '@kbn/kibana-utils-plugin/public'; import { QuerySetup, QueryStart } from '../query_service'; import { QueryState } from '../query_state'; import { QueryStateChange } from './types'; -import { FilterStateStore } from '../../../common'; import { validateTimeRange } from '../timefilter'; /** diff --git a/src/plugins/data/public/query/state_sync/sync_state_with_url.test.ts b/src/plugins/data/public/query/state_sync/sync_state_with_url.test.ts index feb9fc5238ab6..10cbe1bd25c5b 100644 --- a/src/plugins/data/public/query/state_sync/sync_state_with_url.test.ts +++ b/src/plugins/data/public/query/state_sync/sync_state_with_url.test.ts @@ -8,9 +8,10 @@ import { Subscription } from 'rxjs'; import { createBrowserHistory, History } from 'history'; +import { Filter, FilterStateStore } from '@kbn/es-query'; import { FilterManager } from '../filter_manager'; import { getFilter } from '../filter_manager/test_helpers/get_stub_filter'; -import { Filter, FilterStateStore, UI_SETTINGS } from '../../../common'; +import { UI_SETTINGS } from '../../../common'; import { coreMock } from '@kbn/core/public/mocks'; import { createKbnUrlStateStorage, diff --git a/src/plugins/data/public/query/state_sync/sync_state_with_url.ts b/src/plugins/data/public/query/state_sync/sync_state_with_url.ts index 030cc1f91d4fe..c4bee3b66fe51 100644 --- a/src/plugins/data/public/query/state_sync/sync_state_with_url.ts +++ b/src/plugins/data/public/query/state_sync/sync_state_with_url.ts @@ -11,9 +11,9 @@ import { IKbnUrlStateStorage, syncState, } from '@kbn/kibana-utils-plugin/public'; +import { FilterStateStore } from '@kbn/es-query'; import { QuerySetup, QueryStart } from '../query_service'; import { connectToQueryState } from './connect_to_query_state'; -import { FilterStateStore } from '../../../common'; import { GlobalQueryStateFromUrl } from './types'; const GLOBAL_STATE_STORAGE_KEY = '_g'; diff --git a/src/plugins/data/public/query/timefilter/lib/validate_timerange.ts b/src/plugins/data/public/query/timefilter/lib/validate_timerange.ts index e9eb97d004c91..47ea6c338ad94 100644 --- a/src/plugins/data/public/query/timefilter/lib/validate_timerange.ts +++ b/src/plugins/data/public/query/timefilter/lib/validate_timerange.ts @@ -7,7 +7,7 @@ */ import dateMath from '@kbn/datemath'; -import { TimeRange } from '../../../../common'; +import { TimeRange } from '@kbn/es-query'; export function validateTimeRange(time?: TimeRange): boolean { if (!time) return false; diff --git a/src/plugins/data/public/query/timefilter/time_history.ts b/src/plugins/data/public/query/timefilter/time_history.ts index 548973ab815d2..2b84039238b13 100644 --- a/src/plugins/data/public/query/timefilter/time_history.ts +++ b/src/plugins/data/public/query/timefilter/time_history.ts @@ -9,8 +9,8 @@ import moment from 'moment'; import { PublicMethodsOf } from '@kbn/utility-types'; import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; +import { TimeRange } from '@kbn/es-query'; import { PersistedLog } from '../persisted_log'; -import { TimeRange } from '../../../common'; export class TimeHistory { private history: PersistedLog; diff --git a/src/plugins/data/public/query/timefilter/timefilter.test.ts b/src/plugins/data/public/query/timefilter/timefilter.test.ts index c7cd5318730af..0152076c7b8a6 100644 --- a/src/plugins/data/public/query/timefilter/timefilter.test.ts +++ b/src/plugins/data/public/query/timefilter/timefilter.test.ts @@ -10,9 +10,10 @@ jest.useFakeTimers(); import sinon from 'sinon'; import moment from 'moment'; +import { TimeRange } from '@kbn/es-query'; import { AutoRefreshDoneFn, Timefilter } from './timefilter'; import { Subscription } from 'rxjs'; -import { TimeRange, RefreshInterval } from '../../../common'; +import { RefreshInterval } from '../../../common'; import { createNowProviderMock } from '../../now_provider/mocks'; import { timefilterServiceMock } from './timefilter_service.mock'; diff --git a/src/plugins/data/public/query/timefilter/timefilter.ts b/src/plugins/data/public/query/timefilter/timefilter.ts index c0fddfb3bd608..11c44bd296640 100644 --- a/src/plugins/data/public/query/timefilter/timefilter.ts +++ b/src/plugins/data/public/query/timefilter/timefilter.ts @@ -10,6 +10,7 @@ import _ from 'lodash'; import { Subject, BehaviorSubject } from 'rxjs'; import moment from 'moment'; import { PublicMethodsOf } from '@kbn/utility-types'; +import { TimeRange } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/common'; import { areRefreshIntervalsDifferent, areTimeRangesDifferent } from './lib/diff_time_picker_vals'; import type { TimefilterConfig, InputTimeRange, TimeRangeBounds } from './types'; @@ -20,7 +21,6 @@ import { getTime, getRelativeTime, RefreshInterval, - TimeRange, } from '../../../common'; import { TimeHistoryContract } from './time_history'; import { createAutoRefreshLoop, AutoRefreshDoneFn } from './lib/auto_refresh_loop'; diff --git a/src/plugins/data/public/query/timefilter/timefilter_service.mock.ts b/src/plugins/data/public/query/timefilter/timefilter_service.mock.ts index 6a16924a0f20b..523b03d6f06c1 100644 --- a/src/plugins/data/public/query/timefilter/timefilter_service.mock.ts +++ b/src/plugins/data/public/query/timefilter/timefilter_service.mock.ts @@ -7,9 +7,9 @@ */ import type { PublicMethodsOf } from '@kbn/utility-types'; +import type { TimeRange } from '@kbn/es-query'; import { TimefilterService, TimeHistoryContract, TimefilterContract } from '.'; import { Observable } from 'rxjs'; -import { TimeRange } from '../../../common'; export type TimefilterServiceClientContract = PublicMethodsOf; diff --git a/src/plugins/data/public/query/timefilter/types.ts b/src/plugins/data/public/query/timefilter/types.ts index 3c35ae2d79ae5..1392022768fa7 100644 --- a/src/plugins/data/public/query/timefilter/types.ts +++ b/src/plugins/data/public/query/timefilter/types.ts @@ -8,7 +8,8 @@ import { Moment } from 'moment'; -import { TimeRange, RefreshInterval } from '../../../common'; +import { TimeRange } from '@kbn/es-query'; +import { RefreshInterval } from '../../../common'; export interface TimefilterConfig { timeDefaults: TimeRange; diff --git a/src/plugins/data/server/deprecated.ts b/src/plugins/data/server/deprecated.ts deleted file mode 100644 index ac1fdf4d8abf5..0000000000000 --- a/src/plugins/data/server/deprecated.ts +++ /dev/null @@ -1,68 +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. - */ - -import { - buildQueryFilter, - buildCustomFilter, - buildEmptyFilter, - buildExistsFilter, - buildFilter, - buildPhraseFilter, - buildPhrasesFilter, - buildRangeFilter, - isFilterDisabled, - fromKueryExpression, - toElasticsearchQuery, - buildEsQuery, - buildQueryFromFilters, -} from '../common'; -/* - * Filter helper namespace: - * @deprecated Import helpers from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -export const esFilters = { - buildQueryFilter, - buildCustomFilter, - buildEmptyFilter, - buildExistsFilter, - buildFilter, - buildPhraseFilter, - buildPhrasesFilter, - buildRangeFilter, - isFilterDisabled, -}; - -/* - * esQuery and esKuery: - */ - -import { getEsQueryConfig } from '../common'; - -/* - * Filter helper namespace - * @deprecated Import helpers from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -export const esKuery = { - fromKueryExpression, - toElasticsearchQuery, -}; - -/* - * Filter helper namespace - * @deprecated Import helpers from the "@kbn/es-query" package directly instead. - * @removeBy 8.1 - */ -export const esQuery = { - buildQueryFromFilters, - getEsQueryConfig, - buildEsQuery, -}; - -export type { Filter, Query, EsQueryConfig, KueryNode } from '../common'; diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts index 21c4fd42831c1..52e480665f00f 100644 --- a/src/plugins/data/server/index.ts +++ b/src/plugins/data/server/index.ts @@ -6,14 +6,10 @@ * Side Public License, v 1. */ -// TODO: https://github.com/elastic/kibana/issues/109904 -/* eslint-disable @kbn/eslint/no_export_all */ - import { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; import { ConfigSchema, configSchema } from '../config'; import { DataServerPlugin, DataPluginSetup, DataPluginStart } from './plugin'; -export * from './deprecated'; export { getEsQueryConfig, DEFAULT_QUERY_LANGUAGE } from '../common'; export { getRequestAbortedSignal } from './lib'; @@ -93,7 +89,6 @@ export const search = { * @public */ -export type { TimeRange } from '../common'; export { getTime, parseInterval } from '../common'; /** diff --git a/src/plugins/data/server/query/route_handler_context.test.ts b/src/plugins/data/server/query/route_handler_context.test.ts index c0db432ce3fd9..33d4597ecff0b 100644 --- a/src/plugins/data/server/query/route_handler_context.test.ts +++ b/src/plugins/data/server/query/route_handler_context.test.ts @@ -7,7 +7,8 @@ */ import { coreMock } from '@kbn/core/server/mocks'; -import { DATA_VIEW_SAVED_OBJECT_TYPE, FilterStateStore } from '../../common'; +import { FilterStateStore } from '@kbn/es-query'; +import { DATA_VIEW_SAVED_OBJECT_TYPE } from '../../common'; import type { SavedObject, SavedQueryAttributes } from '../../common'; import { registerSavedQueryRouteHandlerContext } from './route_handler_context'; import { SavedObjectsFindResponse, SavedObjectsUpdateResponse } from '@kbn/core/server'; diff --git a/src/plugins/data/server/search/session/check_non_persisted_sessions.ts b/src/plugins/data/server/search/session/check_non_persisted_sessions.ts index 86f377db57d23..f6314611afdbc 100644 --- a/src/plugins/data/server/search/session/check_non_persisted_sessions.ts +++ b/src/plugins/data/server/search/session/check_non_persisted_sessions.ts @@ -10,13 +10,12 @@ import { SavedObjectsFindResult } from '@kbn/core/server'; import moment from 'moment'; import { EMPTY } from 'rxjs'; import { catchError, concatMap } from 'rxjs/operators'; +import { nodeBuilder, KueryNode } from '@kbn/es-query'; import { - nodeBuilder, ENHANCED_ES_SEARCH_STRATEGY, SEARCH_SESSION_TYPE, SearchSessionSavedObjectAttributes, SearchSessionStatus, - KueryNode, } from '../../../common'; import { checkSearchSessionsByPage, getSearchSessionsPage$ } from './get_search_session_page'; import { CheckSearchSessionsDeps, SearchStatus } from './types'; diff --git a/src/plugins/data/server/search/session/check_persisted_sessions.ts b/src/plugins/data/server/search/session/check_persisted_sessions.ts index 915d8af3fe80f..ace921a56a052 100644 --- a/src/plugins/data/server/search/session/check_persisted_sessions.ts +++ b/src/plugins/data/server/search/session/check_persisted_sessions.ts @@ -8,7 +8,8 @@ import { EMPTY, Observable } from 'rxjs'; import { catchError, concatMap } from 'rxjs/operators'; -import { nodeBuilder, SEARCH_SESSION_TYPE, SearchSessionStatus, KueryNode } from '../../../common'; +import { nodeBuilder, KueryNode } from '@kbn/es-query'; +import { SEARCH_SESSION_TYPE, SearchSessionStatus } from '../../../common'; import { checkSearchSessionsByPage, getSearchSessionsPage$ } from './get_search_session_page'; import { CheckSearchSessionsDeps, SearchSessionsResponse } from './types'; import { bulkUpdateSessions, getAllSessionsStatusUpdates } from './update_session_status'; diff --git a/src/plugins/data/server/search/session/expire_persisted_sessions.ts b/src/plugins/data/server/search/session/expire_persisted_sessions.ts index 77ae9d3f5a155..1c7ad8ff3e346 100644 --- a/src/plugins/data/server/search/session/expire_persisted_sessions.ts +++ b/src/plugins/data/server/search/session/expire_persisted_sessions.ts @@ -8,7 +8,8 @@ import { EMPTY, Observable } from 'rxjs'; import { catchError, concatMap } from 'rxjs/operators'; -import { nodeBuilder, SEARCH_SESSION_TYPE, SearchSessionStatus, KueryNode } from '../../../common'; +import { nodeBuilder, KueryNode } from '@kbn/es-query'; +import { SEARCH_SESSION_TYPE, SearchSessionStatus } from '../../../common'; import { checkSearchSessionsByPage, getSearchSessionsPage$ } from './get_search_session_page'; import { CheckSearchSessionsDeps, SearchSessionsResponse } from './types'; import { bulkUpdateSessions, getAllSessionsStatusUpdates } from './update_session_status'; diff --git a/src/plugins/data/server/search/session/get_search_session_page.ts b/src/plugins/data/server/search/session/get_search_session_page.ts index 30dc72eaa6813..d98d513c9e73f 100644 --- a/src/plugins/data/server/search/session/get_search_session_page.ts +++ b/src/plugins/data/server/search/session/get_search_session_page.ts @@ -9,11 +9,8 @@ import { SavedObjectsClientContract, Logger } from '@kbn/core/server'; import { from, Observable, EMPTY } from 'rxjs'; import { concatMap } from 'rxjs/operators'; -import { - SearchSessionSavedObjectAttributes, - SEARCH_SESSION_TYPE, - KueryNode, -} from '../../../common'; +import type { KueryNode } from '@kbn/es-query'; +import { SearchSessionSavedObjectAttributes, SEARCH_SESSION_TYPE } from '../../../common'; import { CheckSearchSessionsDeps, CheckSearchSessionsFn } from './types'; import { SearchSessionsConfigSchema } from '../../../config'; diff --git a/src/plugins/data/server/search/session/session_service.test.ts b/src/plugins/data/server/search/session/session_service.test.ts index 9f780239ea023..c19731d370803 100644 --- a/src/plugins/data/server/search/session/session_service.test.ts +++ b/src/plugins/data/server/search/session/session_service.test.ts @@ -12,6 +12,7 @@ import { SavedObjectsErrorHelpers, } from '@kbn/core/server'; import { savedObjectsClientMock } from '@kbn/core/server/mocks'; +import { nodeBuilder } from '@kbn/es-query'; import { SearchSessionService } from './session_service'; import { createRequestHash } from './utils'; import moment from 'moment'; @@ -19,7 +20,7 @@ import { coreMock } from '@kbn/core/server/mocks'; import { ConfigSchema } from '../../../config'; import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; import type { AuthenticatedUser } from '@kbn/security-plugin/common/model'; -import { nodeBuilder, SEARCH_SESSION_TYPE, SearchSessionStatus } from '../../../common'; +import { SEARCH_SESSION_TYPE, SearchSessionStatus } from '../../../common'; import type { TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; const MAX_UPDATE_RETRIES = 3; diff --git a/src/plugins/data/server/search/session/types.ts b/src/plugins/data/server/search/session/types.ts index e564a8cef9e79..1571136891106 100644 --- a/src/plugins/data/server/search/session/types.ts +++ b/src/plugins/data/server/search/session/types.ts @@ -22,7 +22,8 @@ import type { TaskManagerSetupContract, TaskManagerStartContract, } from '@kbn/task-manager-plugin/server'; -import { KueryNode, SearchSessionSavedObjectAttributes } from '../../../common'; +import { KueryNode } from '@kbn/es-query'; +import { SearchSessionSavedObjectAttributes } from '../../../common'; import { IKibanaSearchRequest, ISearchOptions } from '../../../common/search'; import { SearchSessionsConfigSchema, ConfigSchema } from '../../../config'; diff --git a/src/plugins/discover/public/application/context/services/context.predecessors.test.ts b/src/plugins/discover/public/application/context/services/context.predecessors.test.ts index 3b04e7801da4d..d9b55303ad507 100644 --- a/src/plugins/discover/public/application/context/services/context.predecessors.test.ts +++ b/src/plugins/discover/public/application/context/services/context.predecessors.test.ts @@ -10,9 +10,10 @@ import moment from 'moment'; import { get, last } from 'lodash'; import type { DataView } from '@kbn/data-views-plugin/public'; import { SortDirection } from '@kbn/data-plugin/public'; +import { Query } from '@kbn/es-query'; import { createContextSearchSourceStub } from './_stubs'; import { fetchSurroundingDocs, SurrDocType } from './context'; -import { DataPublicPluginStart, Query } from '@kbn/data-plugin/public'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { EsHitRecord, EsHitRecordList } from '../../types'; const MS_PER_DAY = 24 * 60 * 60 * 1000; diff --git a/src/plugins/discover/public/application/context/services/context.successors.test.ts b/src/plugins/discover/public/application/context/services/context.successors.test.ts index 08e5013f1ed80..c9f819c6497d9 100644 --- a/src/plugins/discover/public/application/context/services/context.successors.test.ts +++ b/src/plugins/discover/public/application/context/services/context.successors.test.ts @@ -11,7 +11,8 @@ import { get, last } from 'lodash'; import { SortDirection } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { createContextSearchSourceStub } from './_stubs'; -import { DataPublicPluginStart, Query } from '@kbn/data-plugin/public'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { Query } from '@kbn/es-query'; import { fetchSurroundingDocs, SurrDocType } from './context'; import { EsHitRecord, EsHitRecordList } from '../../types'; diff --git a/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx b/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx index 7838190608a97..be6e2dd54e9d9 100644 --- a/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx +++ b/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx @@ -7,9 +7,8 @@ */ import React, { useEffect, useMemo, useRef, useState } from 'react'; -import type { Filter } from '@kbn/es-query'; +import type { Filter, Query } from '@kbn/es-query'; import { METRIC_TYPE, UiCounterMetricType } from '@kbn/analytics'; -import type { Query } from '@kbn/data-plugin/public'; import type { DataViewField, DataView } from '@kbn/data-views-plugin/public'; import { EmbeddableInput, diff --git a/src/plugins/discover/public/application/main/components/layout/types.ts b/src/plugins/discover/public/application/main/components/layout/types.ts index 52343c8611bdd..e7bcfb3bc3971 100644 --- a/src/plugins/discover/public/application/main/components/layout/types.ts +++ b/src/plugins/discover/public/application/main/components/layout/types.ts @@ -6,7 +6,8 @@ * Side Public License, v 1. */ -import type { Query, TimeRange, SavedObject } from '@kbn/data-plugin/public'; +import type { Query, TimeRange } from '@kbn/es-query'; +import type { SavedObject } from '@kbn/data-plugin/public'; import type { DataView, DataViewAttributes } from '@kbn/data-views-plugin/public'; import { ISearchSource } from '@kbn/data-plugin/public'; import { RequestAdapter } from '@kbn/inspector-plugin'; diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx index 7b8831f734279..f228c17341ac1 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx @@ -12,7 +12,8 @@ import { indexPatternMock } from '../../../../__mocks__/index_pattern'; import { savedSearchMock } from '../../../../__mocks__/saved_search'; import { DiscoverTopNav, DiscoverTopNavProps } from './discover_topnav'; import { TopNavMenuData } from '@kbn/navigation-plugin/public'; -import { ISearchSource, Query } from '@kbn/data-plugin/public'; +import { ISearchSource } from '@kbn/data-plugin/public'; +import { Query } from '@kbn/es-query'; import { GetStateReturn } from '../../services/discover_state'; import { setHeaderActionMenuMounter } from '../../../../kibana_services'; import { discoverServiceMock } from '../../../../__mocks__/services'; diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index 01df8526641c5..cb305bf109235 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -7,7 +7,7 @@ */ import React, { useCallback, useMemo, useRef, useEffect } from 'react'; import { useHistory } from 'react-router-dom'; -import { Query, TimeRange } from '@kbn/data-plugin/public'; +import type { Query, TimeRange } from '@kbn/es-query'; import { DataViewType } from '@kbn/data-views-plugin/public'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { DiscoverLayoutProps } from '../layout/types'; diff --git a/src/plugins/discover/public/application/main/services/discover_state.ts b/src/plugins/discover/public/application/main/services/discover_state.ts index 81f25e6151c99..bc33b2f1ff09d 100644 --- a/src/plugins/discover/public/application/main/services/discover_state.ts +++ b/src/plugins/discover/public/application/main/services/discover_state.ts @@ -10,7 +10,13 @@ import { isEqual, cloneDeep } from 'lodash'; import { i18n } from '@kbn/i18n'; import { History } from 'history'; import { NotificationsStart, IUiSettingsClient } from '@kbn/core/public'; -import { Filter, FilterStateStore, compareFilters, COMPARE_ALL_OPTIONS } from '@kbn/es-query'; +import { + Filter, + FilterStateStore, + compareFilters, + COMPARE_ALL_OPTIONS, + Query, +} from '@kbn/es-query'; import { createKbnUrlStateStorage, createStateContainer, @@ -24,7 +30,6 @@ import { connectToQueryState, DataPublicPluginStart, FilterManager, - Query, SearchSessionInfoProvider, syncQueryStateWithUrl, } from '@kbn/data-plugin/public'; diff --git a/src/plugins/discover/public/application/view_alert/view_alert_route.tsx b/src/plugins/discover/public/application/view_alert/view_alert_route.tsx index 1e99b318cd55e..2178a99d28251 100644 --- a/src/plugins/discover/public/application/view_alert/view_alert_route.tsx +++ b/src/plugins/discover/public/application/view_alert/view_alert_route.tsx @@ -12,7 +12,7 @@ import { sha256 } from 'js-sha256'; import type { Rule } from '@kbn/alerting-plugin/common'; import { getTime } from '@kbn/data-plugin/common'; import type { DataView } from '@kbn/data-views-plugin/public'; -import type { Filter } from '@kbn/data-plugin/public'; +import type { Filter } from '@kbn/es-query'; import { DiscoverAppLocatorParams } from '../../locator'; import { useDiscoverServices } from '../../hooks/use_discover_services'; import { getAlertUtils, QueryParams, SearchThresholdAlertParams } from './view_alert_utils'; diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx index 48461e5165762..0cd179768df0a 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx @@ -7,7 +7,13 @@ */ import { lastValueFrom, Subscription } from 'rxjs'; -import { onlyDisabledFiltersChanged, Filter } from '@kbn/es-query'; +import { + onlyDisabledFiltersChanged, + Filter, + Query, + TimeRange, + FilterStateStore, +} from '@kbn/es-query'; import React from 'react'; import ReactDOM from 'react-dom'; import { i18n } from '@kbn/i18n'; @@ -17,7 +23,7 @@ import type { KibanaExecutionContext } from '@kbn/core/public'; import { Container, Embeddable } from '@kbn/embeddable-plugin/public'; import { Adapters, RequestAdapter } from '@kbn/inspector-plugin/common'; import { APPLY_FILTER_TRIGGER, FilterManager, generateFilters } from '@kbn/data-plugin/public'; -import { ISearchSource, Query, TimeRange, FilterStateStore } from '@kbn/data-plugin/public'; +import { ISearchSource } from '@kbn/data-plugin/public'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; diff --git a/src/plugins/discover/public/embeddable/search_embeddable_factory.ts b/src/plugins/discover/public/embeddable/search_embeddable_factory.ts index eeb2200b1f7e7..74467a961f96e 100644 --- a/src/plugins/discover/public/embeddable/search_embeddable_factory.ts +++ b/src/plugins/discover/public/embeddable/search_embeddable_factory.ts @@ -14,7 +14,7 @@ import { ErrorEmbeddable, } from '@kbn/embeddable-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { SearchInput, SearchOutput } from './types'; import { SEARCH_EMBEDDABLE_TYPE } from './constants'; diff --git a/src/plugins/discover/public/embeddable/types.ts b/src/plugins/discover/public/embeddable/types.ts index 10f99e301b0ea..5b09082729049 100644 --- a/src/plugins/discover/public/embeddable/types.ts +++ b/src/plugins/discover/public/embeddable/types.ts @@ -12,9 +12,8 @@ import { EmbeddableOutput, IEmbeddable, } from '@kbn/embeddable-plugin/public'; -import type { Filter } from '@kbn/es-query'; +import type { Filter, TimeRange, Query } from '@kbn/es-query'; import { DataView } from '@kbn/data-views-plugin/public'; -import type { TimeRange, Query } from '@kbn/data-plugin/public'; import { SavedSearch } from '../services/saved_searches'; import { SortOrder } from '../components/doc_table/components/table_header/helpers'; diff --git a/src/plugins/discover/public/locator.test.ts b/src/plugins/discover/public/locator.test.ts index f4b55172e97c1..cc448e9e77d84 100644 --- a/src/plugins/discover/public/locator.test.ts +++ b/src/plugins/discover/public/locator.test.ts @@ -8,7 +8,7 @@ import { hashedItemStore, getStatesFromKbnUrl } from '@kbn/kibana-utils-plugin/public'; import { mockStorage } from '@kbn/kibana-utils-plugin/public/storage/hashed_item_store/mock'; -import { FilterStateStore } from '@kbn/data-plugin/public'; +import { FilterStateStore } from '@kbn/es-query'; import { DiscoverAppLocatorDefinition } from './locator'; import { SerializableRecord } from '@kbn/utility-types'; diff --git a/src/plugins/discover/public/locator.ts b/src/plugins/discover/public/locator.ts index eb4731bd44e64..459c124d46453 100644 --- a/src/plugins/discover/public/locator.ts +++ b/src/plugins/discover/public/locator.ts @@ -7,13 +7,8 @@ */ import type { SerializableRecord } from '@kbn/utility-types'; -import type { Filter } from '@kbn/es-query'; -import type { - TimeRange, - Query, - GlobalQueryStateFromUrl, - RefreshInterval, -} from '@kbn/data-plugin/public'; +import type { Filter, TimeRange, Query } from '@kbn/es-query'; +import type { GlobalQueryStateFromUrl, RefreshInterval } from '@kbn/data-plugin/public'; import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; import type { VIEW_MODE } from './components/view_mode_toggle'; diff --git a/src/plugins/discover/public/utils/migrate_legacy_query.ts b/src/plugins/discover/public/utils/migrate_legacy_query.ts index f9f22c6383c57..2f7c38e7ebe09 100644 --- a/src/plugins/discover/public/utils/migrate_legacy_query.ts +++ b/src/plugins/discover/public/utils/migrate_legacy_query.ts @@ -7,7 +7,7 @@ */ import { has } from 'lodash'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; /** * Creates a standardized query object from old queries that were either strings or pure ES query DSL diff --git a/src/plugins/ui_actions_enhanced/public/can_inherit_time_range.ts b/src/plugins/ui_actions_enhanced/public/can_inherit_time_range.ts index 3dd8d658b3906..e3b2122398632 100644 --- a/src/plugins/ui_actions_enhanced/public/can_inherit_time_range.ts +++ b/src/plugins/ui_actions_enhanced/public/can_inherit_time_range.ts @@ -7,7 +7,7 @@ */ import { Embeddable, IContainer, ContainerInput } from '@kbn/embeddable-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { TimeRangeInput } from './custom_time_range_action'; interface ContainerTimeRangeInput extends ContainerInput { diff --git a/src/plugins/ui_actions_enhanced/public/custom_time_range_action.tsx b/src/plugins/ui_actions_enhanced/public/custom_time_range_action.tsx index df22733a4d494..6d84e52f5344c 100644 --- a/src/plugins/ui_actions_enhanced/public/custom_time_range_action.tsx +++ b/src/plugins/ui_actions_enhanced/public/custom_time_range_action.tsx @@ -14,8 +14,8 @@ import { EmbeddableInput, EmbeddableOutput, } from '@kbn/embeddable-plugin/public'; +import { TimeRange } from '@kbn/es-query'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; import { OpenModal, CommonlyUsedRange } from './types'; export const CUSTOM_TIME_RANGE = 'CUSTOM_TIME_RANGE'; diff --git a/src/plugins/ui_actions_enhanced/public/custom_time_range_badge.tsx b/src/plugins/ui_actions_enhanced/public/custom_time_range_badge.tsx index 4f5b5b6cb6be8..ffed76649d8ca 100644 --- a/src/plugins/ui_actions_enhanced/public/custom_time_range_badge.tsx +++ b/src/plugins/ui_actions_enhanced/public/custom_time_range_badge.tsx @@ -11,7 +11,7 @@ import { renderToString } from 'react-dom/server'; import { PrettyDuration } from '@elastic/eui'; import { IEmbeddable, Embeddable, EmbeddableInput } from '@kbn/embeddable-plugin/public'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { doesInheritTimeRange } from './does_inherit_time_range'; import { OpenModal, CommonlyUsedRange } from './types'; diff --git a/src/plugins/ui_actions_enhanced/public/customize_time_range_modal.tsx b/src/plugins/ui_actions_enhanced/public/customize_time_range_modal.tsx index 57b8a433d42ef..0bcd36741d8c6 100644 --- a/src/plugins/ui_actions_enhanced/public/customize_time_range_modal.tsx +++ b/src/plugins/ui_actions_enhanced/public/customize_time_range_modal.tsx @@ -21,8 +21,8 @@ import { EuiFlexItem, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import type { TimeRange } from '@kbn/es-query'; import { Embeddable, IContainer, ContainerInput } from '@kbn/embeddable-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; import { TimeRangeInput } from './custom_time_range_action'; import { doesInheritTimeRange } from './does_inherit_time_range'; import { CommonlyUsedRange } from './types'; diff --git a/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_container.ts b/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_container.ts index f04f89e19e039..0e6044ba9291e 100644 --- a/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_container.ts +++ b/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_container.ts @@ -12,7 +12,7 @@ import { ContainerOutput, EmbeddableStart, } from '@kbn/embeddable-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; /** * interfaces are not allowed to specify a sub-set of the required types until diff --git a/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable.ts b/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable.ts index b650bfc33ebae..7829c432d3c6c 100644 --- a/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable.ts +++ b/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable.ts @@ -12,7 +12,7 @@ import { EmbeddableInput, IContainer, } from '@kbn/embeddable-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; interface EmbeddableTimeRangeInput extends EmbeddableInput { timeRange: TimeRange; diff --git a/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable_factory.ts b/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable_factory.ts index ce04ee022c684..413215eb2796e 100644 --- a/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable_factory.ts +++ b/src/plugins/ui_actions_enhanced/public/test_helpers/time_range_embeddable_factory.ts @@ -11,7 +11,7 @@ import { IContainer, EmbeddableFactoryDefinition, } from '@kbn/embeddable-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { TIME_RANGE_EMBEDDABLE, TimeRangeEmbeddable } from './time_range_embeddable'; interface EmbeddableTimeRangeInput extends EmbeddableInput { diff --git a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx index f982f4cc2280f..52eb26bf737a3 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx @@ -11,7 +11,7 @@ import classNames from 'classnames'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import deepEqual from 'fast-deep-equal'; import useObservable from 'react-use/lib/useObservable'; -import type { Filter, TimeRange } from '@kbn/es-query'; +import type { Filter, TimeRange, Query } from '@kbn/es-query'; import { EMPTY } from 'rxjs'; import { map } from 'rxjs/operators'; import { @@ -25,12 +25,7 @@ import { useIsWithinBreakpoints, EuiSuperUpdateButton, } from '@elastic/eui'; -import { - IDataPluginServices, - TimeHistoryContract, - Query, - getQueryLog, -} from '@kbn/data-plugin/public'; +import { IDataPluginServices, TimeHistoryContract, getQueryLog } from '@kbn/data-plugin/public'; import { i18n } from '@kbn/i18n'; import { DataView } from '@kbn/data-views-plugin/public'; import type { PersistedLog } from '@kbn/data-plugin/public'; diff --git a/src/plugins/unified_search/public/query_string_input/query_string_input.tsx b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx index dc606690fb7dd..301ad1dba432a 100644 --- a/src/plugins/unified_search/public/query_string_input/query_string_input.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx @@ -29,7 +29,8 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import { compact, debounce, isEmpty, isEqual, isFunction } from 'lodash'; import { Toast } from '@kbn/core/public'; -import { IDataPluginServices, Query, getQueryLog } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import { IDataPluginServices, getQueryLog } from '@kbn/data-plugin/public'; import { DataView } from '@kbn/data-views-plugin/public'; import type { PersistedLog } from '@kbn/data-plugin/public'; import { getFieldSubtypeNested, KIBANA_USER_QUERY_LANGUAGE_KEY } from '@kbn/data-plugin/common'; diff --git a/src/plugins/unified_search/public/search_bar/create_search_bar.tsx b/src/plugins/unified_search/public/search_bar/create_search_bar.tsx index a4e1988c0dfee..7fbb9df37b741 100644 --- a/src/plugins/unified_search/public/search_bar/create_search_bar.tsx +++ b/src/plugins/unified_search/public/search_bar/create_search_bar.tsx @@ -12,7 +12,7 @@ import { CoreStart } from '@kbn/core/public'; import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { QueryStart, SavedQuery, DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { Query } from '@kbn/data-plugin/common'; +import type { Query } from '@kbn/es-query'; import type { Filter, TimeRange } from '@kbn/es-query'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import { SearchBar } from '.'; diff --git a/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.test.ts b/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.test.ts index 67a2e4ea71c6a..8cbab63956384 100644 --- a/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.test.ts +++ b/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.test.ts @@ -10,7 +10,7 @@ import { populateStateFromSavedQuery } from './populate_state_from_saved_query'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { DataPublicPluginStart, SavedQuery } from '@kbn/data-plugin/public'; import { getFilter } from '../../test_helpers/get_stub_filter'; -import { FilterStateStore } from '@kbn/data-plugin/common'; +import { FilterStateStore } from '@kbn/es-query'; describe('populateStateFromSavedQuery', () => { let dataMock: jest.Mocked; diff --git a/src/plugins/unified_search/public/search_bar/lib/use_query_string_manager.ts b/src/plugins/unified_search/public/search_bar/lib/use_query_string_manager.ts index 10b2c7b64e97c..e3e6ceb350812 100644 --- a/src/plugins/unified_search/public/search_bar/lib/use_query_string_manager.ts +++ b/src/plugins/unified_search/public/search_bar/lib/use_query_string_manager.ts @@ -8,7 +8,7 @@ import { useState, useEffect, useMemo } from 'react'; import { Subscription } from 'rxjs'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import type { QueryStringContract } from '@kbn/data-plugin/public'; interface UseQueryStringProps { diff --git a/src/plugins/unified_search/public/test_helpers/get_stub_filter.ts b/src/plugins/unified_search/public/test_helpers/get_stub_filter.ts index 10444d1d19055..4e0a5037158b6 100644 --- a/src/plugins/unified_search/public/test_helpers/get_stub_filter.ts +++ b/src/plugins/unified_search/public/test_helpers/get_stub_filter.ts @@ -6,8 +6,7 @@ * Side Public License, v 1. */ -import { FilterStateStore } from '@kbn/data-plugin/public'; -import type { Filter } from '@kbn/es-query'; +import { type Filter, FilterStateStore } from '@kbn/es-query'; export function getFilter( store: FilterStateStore, diff --git a/src/plugins/vis_default_editor/public/components/agg.tsx b/src/plugins/vis_default_editor/public/components/agg.tsx index 3413eb46a9c34..e3794077b005d 100644 --- a/src/plugins/vis_default_editor/public/components/agg.tsx +++ b/src/plugins/vis_default_editor/public/components/agg.tsx @@ -16,7 +16,8 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { IAggConfig, TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { IAggConfig } from '@kbn/data-plugin/public'; import { DefaultEditorAggParams } from './agg_params'; import { DefaultEditorAggCommonProps } from './agg_common_props'; import { AGGS_ACTION_KEYS, AggsAction } from './agg_group_state'; diff --git a/src/plugins/vis_default_editor/public/components/agg_group.tsx b/src/plugins/vis_default_editor/public/components/agg_group.tsx index 26304ba7f17f0..7f09431d2ea7f 100644 --- a/src/plugins/vis_default_editor/public/components/agg_group.tsx +++ b/src/plugins/vis_default_editor/public/components/agg_group.tsx @@ -19,7 +19,8 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { AggGroupNames, AggGroupLabels, IAggConfig, TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { AggGroupNames, AggGroupLabels, IAggConfig } from '@kbn/data-plugin/public'; import type { Schema } from '@kbn/visualizations-plugin/public'; import { DefaultEditorAgg } from './agg'; import { DefaultEditorAggAdd } from './agg_add'; diff --git a/src/plugins/vis_default_editor/public/components/controls/filter.tsx b/src/plugins/vis_default_editor/public/components/controls/filter.tsx index 9796179ed2a9c..95740cbaa9624 100644 --- a/src/plugins/vis_default_editor/public/components/controls/filter.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/filter.tsx @@ -10,7 +10,8 @@ import React, { useState } from 'react'; import { EuiForm, EuiButtonIcon, EuiFieldText, EuiFormRow, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { IAggConfig, Query, DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import { IAggConfig, DataPublicPluginStart } from '@kbn/data-plugin/public'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; diff --git a/src/plugins/vis_default_editor/public/components/controls/filters.tsx b/src/plugins/vis_default_editor/public/components/controls/filters.tsx index 3236e16903b9f..8b878d4362def 100644 --- a/src/plugins/vis_default_editor/public/components/controls/filters.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/filters.tsx @@ -12,7 +12,8 @@ import { htmlIdGenerator, EuiButton, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import useMount from 'react-use/lib/useMount'; -import { Query, DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { IUiSettingsClient } from '@kbn/core/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { FilterRow } from './filter'; diff --git a/src/plugins/vis_default_editor/public/components/sidebar/data_tab.tsx b/src/plugins/vis_default_editor/public/components/sidebar/data_tab.tsx index c7b2878e2656b..c68359606f1b8 100644 --- a/src/plugins/vis_default_editor/public/components/sidebar/data_tab.tsx +++ b/src/plugins/vis_default_editor/public/components/sidebar/data_tab.tsx @@ -10,13 +10,8 @@ import React, { useMemo, useCallback } from 'react'; import { findLast } from 'lodash'; import { EuiSpacer } from '@elastic/eui'; -import { - AggGroupNames, - IAggConfig, - IMetricAggType, - search, - TimeRange, -} from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { AggGroupNames, IAggConfig, IMetricAggType, search } from '@kbn/data-plugin/public'; import type { ISchemas } from '@kbn/visualizations-plugin/public'; import { DefaultEditorAggGroup } from '../agg_group'; import { diff --git a/src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx b/src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx index bb8d6d9ecf97f..e1bafe8e67fea 100644 --- a/src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx +++ b/src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx @@ -25,7 +25,7 @@ import { VisualizeEmbeddableContract, } from '@kbn/visualizations-plugin/public'; import type { Schema } from '@kbn/visualizations-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { SavedSearch } from '@kbn/discover-plugin/public'; import { DefaultEditorNavBar } from './navbar'; import { DefaultEditorControls } from './controls'; diff --git a/src/plugins/vis_types/timelion/public/helpers/timelion_request_handler.ts b/src/plugins/vis_types/timelion/public/helpers/timelion_request_handler.ts index b31de9e7c9383..487ad390a62dc 100644 --- a/src/plugins/vis_types/timelion/public/helpers/timelion_request_handler.ts +++ b/src/plugins/vis_types/timelion/public/helpers/timelion_request_handler.ts @@ -9,8 +9,8 @@ import { i18n } from '@kbn/i18n'; import type { KibanaExecutionContext } from '@kbn/core/public'; import { DataView } from '@kbn/data-plugin/common'; -import { Filter, buildEsQuery } from '@kbn/es-query'; -import { KibanaContext, TimeRange, Query, getEsQueryConfig } from '@kbn/data-plugin/public'; +import { Filter, buildEsQuery, TimeRange, Query } from '@kbn/es-query'; +import { KibanaContext, getEsQueryConfig } from '@kbn/data-plugin/public'; import { TimelionVisDependencies } from '../plugin'; import { getTimezone } from './get_timezone'; import { TimelionVisParams } from '../timelion_vis_fn'; diff --git a/src/plugins/vis_types/timelion/public/timelion_vis_fn.ts b/src/plugins/vis_types/timelion/public/timelion_vis_fn.ts index 6f92d02682b53..3a268e61690a1 100644 --- a/src/plugins/vis_types/timelion/public/timelion_vis_fn.ts +++ b/src/plugins/vis_types/timelion/public/timelion_vis_fn.ts @@ -8,9 +8,9 @@ import { get } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { Filter } from '@kbn/es-query'; +import { Filter, Query, TimeRange } from '@kbn/es-query'; import { ExpressionFunctionDefinition, Render } from '@kbn/expressions-plugin/public'; -import { KibanaContext, Query, TimeRange } from '@kbn/data-plugin/public'; +import { KibanaContext } from '@kbn/data-plugin/public'; import { TimelionSuccessResponse } from './helpers/timelion_request_handler'; import { TIMELION_VIS_NAME } from './timelion_vis_type'; import { TimelionVisDependencies } from './plugin'; diff --git a/src/plugins/vis_types/timeseries/public/application/components/annotation_row.tsx b/src/plugins/vis_types/timeseries/public/application/components/annotation_row.tsx index 3b7de8c4e4a7f..49ae7ea348f5a 100644 --- a/src/plugins/vis_types/timeseries/public/application/components/annotation_row.tsx +++ b/src/plugins/vis_types/timeseries/public/application/components/annotation_row.tsx @@ -21,7 +21,8 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { KBN_FIELD_TYPES, Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import { KBN_FIELD_TYPES } from '@kbn/data-plugin/public'; import { getDataViewsStart } from '../../services'; import { AddDeleteButtons } from './add_delete_buttons'; diff --git a/src/plugins/vis_types/timeseries/public/application/components/lib/convert_series_to_datatable.ts b/src/plugins/vis_types/timeseries/public/application/components/lib/convert_series_to_datatable.ts index 1219a7fde22cc..c3b096f0eef01 100644 --- a/src/plugins/vis_types/timeseries/public/application/components/lib/convert_series_to_datatable.ts +++ b/src/plugins/vis_types/timeseries/public/application/components/lib/convert_series_to_datatable.ts @@ -7,7 +7,7 @@ */ import { DataView } from '@kbn/data-views-plugin/public'; import { DatatableRow, DatatableColumn, DatatableColumnType } from '@kbn/expressions-plugin/public'; -import { Query } from '@kbn/data-plugin/common'; +import type { Query } from '@kbn/es-query'; import { BUCKET_TYPES as DATA_PLUGIN_BUCKET_TYPES, MultiFieldKey } from '@kbn/data-plugin/common'; import { TimeseriesVisParams } from '../../../types'; import type { PanelData, Metric } from '../../../../common/types'; diff --git a/src/plugins/vis_types/timeseries/public/application/components/vis_editor.tsx b/src/plugins/vis_types/timeseries/public/application/components/vis_editor.tsx index 4ccaf99415267..587c665c89041 100644 --- a/src/plugins/vis_types/timeseries/public/application/components/vis_editor.tsx +++ b/src/plugins/vis_types/timeseries/public/application/components/vis_editor.tsx @@ -18,7 +18,7 @@ import type { Vis, VisualizeEmbeddableContract } from '@kbn/visualizations-plugi import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; -import type { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import type { EditorRenderProps } from '@kbn/visualizations-plugin/public'; import type { IndexPatternValue, TimeseriesVisData } from '../../../common/types'; diff --git a/src/plugins/vis_types/timeseries/public/trigger_action/metrics_helpers.ts b/src/plugins/vis_types/timeseries/public/trigger_action/metrics_helpers.ts index f6a368382b5b4..7eebd9a5c440b 100644 --- a/src/plugins/vis_types/timeseries/public/trigger_action/metrics_helpers.ts +++ b/src/plugins/vis_types/timeseries/public/trigger_action/metrics_helpers.ts @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { Query } from '@kbn/data-plugin/common'; +import type { Query } from '@kbn/es-query'; import type { Metric, MetricType } from '../../common/types'; import { SUPPORTED_METRICS } from './supported_metrics'; diff --git a/src/plugins/vis_types/vega/public/data_model/time_cache.ts b/src/plugins/vis_types/vega/public/data_model/time_cache.ts index 8ce622755cb83..d5f470f419b68 100644 --- a/src/plugins/vis_types/vega/public/data_model/time_cache.ts +++ b/src/plugins/vis_types/vega/public/data_model/time_cache.ts @@ -7,7 +7,7 @@ */ import { TimefilterContract } from '@kbn/data-plugin/public'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { CacheBounds } from './types'; /** diff --git a/src/plugins/vis_types/vega/public/vega_fn.ts b/src/plugins/vis_types/vega/public/vega_fn.ts index f8e9eff3bf555..6dbd7c9792502 100644 --- a/src/plugins/vis_types/vega/public/vega_fn.ts +++ b/src/plugins/vis_types/vega/public/vega_fn.ts @@ -14,7 +14,8 @@ import { ExpressionFunctionDefinition, Render, } from '@kbn/expressions-plugin/public'; -import { KibanaContext, TimeRange, Query } from '@kbn/data-plugin/public'; +import { TimeRange, Query } from '@kbn/es-query'; +import { KibanaContext } from '@kbn/data-plugin/public'; import { VegaVisualizationDependencies } from './plugin'; import { VegaInspectorAdapters } from './vega_inspector'; import { VegaParser } from './data_model/vega_parser'; diff --git a/src/plugins/vis_types/vega/public/vega_request_handler.ts b/src/plugins/vis_types/vega/public/vega_request_handler.ts index 84b5663df0be6..6665b204ae929 100644 --- a/src/plugins/vis_types/vega/public/vega_request_handler.ts +++ b/src/plugins/vis_types/vega/public/vega_request_handler.ts @@ -7,8 +7,8 @@ */ import type { KibanaExecutionContext } from '@kbn/core/public'; import type { DataView } from '@kbn/data-views-plugin/common'; -import { Filter, buildEsQuery } from '@kbn/es-query'; -import { getEsQueryConfig, TimeRange, Query } from '@kbn/data-plugin/public'; +import { Filter, buildEsQuery, TimeRange, Query } from '@kbn/es-query'; +import { getEsQueryConfig } from '@kbn/data-plugin/public'; import { SearchAPI } from './data_model/search_api'; import { TimeCache } from './data_model/time_cache'; diff --git a/src/plugins/visualizations/common/locator.test.ts b/src/plugins/visualizations/common/locator.test.ts index 7dcdd7191d60b..4c851704dfbee 100644 --- a/src/plugins/visualizations/common/locator.test.ts +++ b/src/plugins/visualizations/common/locator.test.ts @@ -7,7 +7,7 @@ */ import { VisualizeLocatorDefinition } from './locator'; -import { FilterStateStore } from '@kbn/data-plugin/common'; +import { FilterStateStore } from '@kbn/es-query'; describe('visualize locator', () => { let definition: VisualizeLocatorDefinition; diff --git a/src/plugins/visualizations/common/locator.ts b/src/plugins/visualizations/common/locator.ts index 60ac8230090fb..fdb2800ec3a96 100644 --- a/src/plugins/visualizations/common/locator.ts +++ b/src/plugins/visualizations/common/locator.ts @@ -7,8 +7,8 @@ */ import type { SerializableRecord } from '@kbn/utility-types'; -import { Filter } from '@kbn/es-query'; -import type { Query, RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import type { RefreshInterval } from '@kbn/data-plugin/common'; import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/common'; import type { SavedVisState } from './types'; diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx index 8616a2c72c431..66f888df25010 100644 --- a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx +++ b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx @@ -12,10 +12,10 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; import { render } from 'react-dom'; import { EuiLoadingChart } from '@elastic/eui'; -import { Filter, onlyDisabledFiltersChanged } from '@kbn/es-query'; +import { Filter, onlyDisabledFiltersChanged, Query, TimeRange } from '@kbn/es-query'; import type { KibanaExecutionContext, SavedObjectAttributes } from '@kbn/core/public'; import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -import { Query, TimefilterContract, TimeRange } from '@kbn/data-plugin/public'; +import { TimefilterContract } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { Adapters, diff --git a/src/plugins/visualizations/public/vis_types/types.ts b/src/plugins/visualizations/public/vis_types/types.ts index 3d7ef35d0fd2c..970a9c1d730fb 100644 --- a/src/plugins/visualizations/public/vis_types/types.ts +++ b/src/plugins/visualizations/public/vis_types/types.ts @@ -10,7 +10,8 @@ import type { IconType } from '@elastic/eui'; import type { ReactNode } from 'react'; import type { PaletteOutput } from '@kbn/coloring'; import type { Adapters } from '@kbn/inspector-plugin'; -import type { AggGroupNames, AggParam, AggGroupName, Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import type { AggGroupNames, AggParam, AggGroupName } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { Vis, VisEditorOptionsProps, VisParams, VisToExpressionAst } from '../types'; import { VisGroups } from './vis_groups_enum'; diff --git a/src/plugins/visualizations/public/visualize_app/types.ts b/src/plugins/visualizations/public/visualize_app/types.ts index a940063067e89..cf46e0fc4ff1e 100644 --- a/src/plugins/visualizations/public/visualize_app/types.ts +++ b/src/plugins/visualizations/public/visualize_app/types.ts @@ -28,8 +28,8 @@ import type { import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; import type { NavigationPublicPluginStart as NavigationStart } from '@kbn/navigation-plugin/public'; -import type { Filter } from '@kbn/es-query'; -import type { Query, DataPublicPluginStart, TimeRange } from '@kbn/data-plugin/public'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { EmbeddableStart, EmbeddableStateTransfer } from '@kbn/embeddable-plugin/public'; diff --git a/src/plugins/visualizations/public/visualize_app/utils/migrate_legacy_query.ts b/src/plugins/visualizations/public/visualize_app/utils/migrate_legacy_query.ts index 9c7beafdeb22d..417c20b9d6967 100644 --- a/src/plugins/visualizations/public/visualize_app/utils/migrate_legacy_query.ts +++ b/src/plugins/visualizations/public/visualize_app/utils/migrate_legacy_query.ts @@ -7,7 +7,7 @@ */ import { has } from 'lodash'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; /** * Creates a standardized query object from old queries that were either strings or pure ES query DSL diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.test.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.test.ts index 6dd2075f648d9..579432e69030b 100644 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.test.ts +++ b/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.test.ts @@ -10,7 +10,7 @@ import { schema } from '@kbn/config-schema'; import { ActionsConfig } from '../config'; import { ActionsPluginsStart } from '../plugin'; import { spacesMock } from '@kbn/spaces-plugin/server/mocks'; -import { esKuery } from '@kbn/data-plugin/server'; +import { toElasticsearchQuery } from '@kbn/es-query'; import { loggingSystemMock, savedObjectsRepositoryMock, @@ -95,7 +95,7 @@ describe('findAndCleanupTasks', () => { sortField: 'runAt', sortOrder: 'asc', }); - expect(esKuery.toElasticsearchQuery(savedObjectsRepository.find.mock.calls[0][0].filter)) + expect(toElasticsearchQuery(savedObjectsRepository.find.mock.calls[0][0].filter)) .toMatchInlineSnapshot(` Object { "bool": Object { diff --git a/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx b/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx index 7a335964d5ccc..cf39561a5037b 100644 --- a/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx @@ -11,7 +11,7 @@ import { uniqueId } from 'lodash'; import React, { useState } from 'react'; import { useHistory, useLocation } from 'react-router-dom'; import { QuerySuggestion } from '@kbn/unified-search-plugin/public'; -import { esKuery } from '@kbn/data-plugin/public'; +import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/public'; import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; import { useLegacyUrlParams } from '../../../context/url_params_context/use_url_params'; @@ -29,8 +29,8 @@ interface State { } function convertKueryToEsQuery(kuery: string, dataView: DataView) { - const ast = esKuery.fromKueryExpression(kuery); - return esKuery.toElasticsearchQuery(ast, dataView); + const ast = fromKueryExpression(kuery); + return toElasticsearchQuery(ast, dataView); } export function KueryBar(props: { diff --git a/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts b/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts index 2d8dab316ede2..a69ecb724a641 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts +++ b/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts @@ -8,7 +8,7 @@ import { ExpressionFunctionDefinition } from '@kbn/expressions-plugin/common'; import type { PaletteOutput } from '@kbn/coloring'; import { Filter as DataFilter } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { SavedObjectReference } from '@kbn/core/types'; import { getQueryFilters } from '../../../common/lib/build_embeddable_filters'; import { ExpressionValueFilter, EmbeddableInput, TimeRange as TimeRangeArg } from '../../../types'; diff --git a/x-pack/plugins/canvas/common/lib/build_embeddable_filters.ts b/x-pack/plugins/canvas/common/lib/build_embeddable_filters.ts index 6b8ef6e6ccdee..d726cc6db6e3d 100644 --- a/x-pack/plugins/canvas/common/lib/build_embeddable_filters.ts +++ b/x-pack/plugins/canvas/common/lib/build_embeddable_filters.ts @@ -8,7 +8,7 @@ import { buildQueryFilter, Filter } from '@kbn/es-query'; import dateMath from '@kbn/datemath'; import { maxBy, minBy } from 'lodash'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { ExpressionValueFilter } from '../../types'; // @ts-expect-error untyped local import { buildBoolArray } from './build_bool_array'; diff --git a/x-pack/plugins/canvas/public/functions/timelion.ts b/x-pack/plugins/canvas/public/functions/timelion.ts index f457bad07f92e..ee3a9ca7c0351 100644 --- a/x-pack/plugins/canvas/public/functions/timelion.ts +++ b/x-pack/plugins/canvas/public/functions/timelion.ts @@ -9,7 +9,7 @@ import { flatten } from 'lodash'; import moment from 'moment-timezone'; import { i18n } from '@kbn/i18n'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { ExpressionFunctionDefinition, DatatableRow } from '@kbn/expressions-plugin/public'; import { fetch } from '../../common/lib/fetch'; // @ts-expect-error untyped local diff --git a/x-pack/plugins/canvas/types/embeddables.ts b/x-pack/plugins/canvas/types/embeddables.ts index b548a2f0627a0..92e66b1e4e7a4 100644 --- a/x-pack/plugins/canvas/types/embeddables.ts +++ b/x-pack/plugins/canvas/types/embeddables.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { Filter } from '@kbn/es-query'; import { EmbeddableInput as Input } from '@kbn/embeddable-plugin/common'; diff --git a/x-pack/plugins/cases/common/utils/markdown_plugins/lens/serializer.ts b/x-pack/plugins/cases/common/utils/markdown_plugins/lens/serializer.ts index 52863d5dd8d1f..e99d9a8adc547 100644 --- a/x-pack/plugins/cases/common/utils/markdown_plugins/lens/serializer.ts +++ b/x-pack/plugins/cases/common/utils/markdown_plugins/lens/serializer.ts @@ -6,7 +6,7 @@ */ import { Plugin } from 'unified'; -import type { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { LENS_ID } from './constants'; export interface LensSerializerProps { diff --git a/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts b/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts index a91970bc97295..96d1f478c19aa 100644 --- a/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts +++ b/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts @@ -12,7 +12,7 @@ import remarkStringify from 'remark-stringify'; import unified from 'unified'; import { SerializableRecord } from '@kbn/utility-types'; -import type { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { LENS_ID, LensParser, LensSerializer } from './lens'; import { TimelineSerializer, TimelineParser } from './timeline'; diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.test.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.test.tsx index abc2c8b33e5de..c529eb11d0855 100644 --- a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.test.tsx +++ b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.test.tsx @@ -5,11 +5,10 @@ * 2.0. */ -import type { Filter, RangeFilter } from '@kbn/es-query'; +import { Filter, RangeFilter, FilterStateStore, Query, TimeRange } from '@kbn/es-query'; import { EmbeddableToDashboardDrilldown } from './embeddable_to_dashboard_drilldown'; import { AbstractDashboardDrilldownConfig as Config } from '../abstract_dashboard_drilldown'; import { savedObjectsServiceMock } from '@kbn/core/public/mocks'; -import { FilterStateStore, Query, TimeRange } from '@kbn/data-plugin/common'; import { ApplyGlobalFilterActionContext } from '@kbn/unified-search-plugin/public'; import { DashboardAppLocatorDefinition, diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.tsx index 2849ef4a580fa..e18a8a37cf22e 100644 --- a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.tsx +++ b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/embeddable_to_dashboard_drilldown/embeddable_to_dashboard_drilldown.tsx @@ -4,17 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { type Filter, isFilters, isFilterPinned } from '@kbn/es-query'; +import { type Filter, isFilters, isFilterPinned, Query, TimeRange } from '@kbn/es-query'; import type { KibanaLocation } from '@kbn/share-plugin/public'; import { DashboardAppLocatorParams, cleanEmptyKeys } from '@kbn/dashboard-plugin/public'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; -import { - APPLY_FILTER_TRIGGER, - isQuery, - isTimeRange, - Query, - TimeRange, -} from '@kbn/data-plugin/public'; +import { APPLY_FILTER_TRIGGER, isQuery, isTimeRange } from '@kbn/data-plugin/public'; import { extractTimeRange } from '@kbn/es-query'; import { ApplyGlobalFilterActionContext } from '@kbn/unified-search-plugin/public'; import { IEmbeddable, EmbeddableInput } from '@kbn/embeddable-plugin/public'; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/date_picker_wrapper/date_picker_wrapper.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/date_picker_wrapper/date_picker_wrapper.tsx index 34885090d643f..7130841d0a6ac 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/date_picker_wrapper/date_picker_wrapper.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/date_picker_wrapper/date_picker_wrapper.tsx @@ -10,7 +10,8 @@ import { Subscription } from 'rxjs'; import { debounce } from 'lodash'; import { EuiSuperDatePicker, OnRefreshProps } from '@elastic/eui'; -import { TimeHistoryContract, TimeRange, UI_SETTINGS } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { TimeHistoryContract, UI_SETTINGS } from '@kbn/data-plugin/public'; import { useUrlState } from '../../util/url_state'; import { useDataVisualizerKibana } from '../../../kibana_context'; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx index 64b0097401ef6..387c41f2b44f9 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx @@ -9,7 +9,8 @@ import React, { FC, useState, useEffect } from 'react'; import moment from 'moment'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFlexGroup, EuiFlexItem, EuiCard, EuiIcon } from '@elastic/eui'; -import { TimeRange, RefreshInterval } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { RefreshInterval } from '@kbn/data-plugin/public'; import { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; import type { FileUploadPluginStart } from '@kbn/file-upload-plugin/public'; import { flatten } from 'lodash'; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index da12e152e325d..d54b102e26e82 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -20,8 +20,8 @@ import { } from '@elastic/eui'; import { Required } from 'utility-types'; import { i18n } from '@kbn/i18n'; -import { Filter } from '@kbn/es-query'; -import { Query, generateFilters } from '@kbn/data-plugin/public'; +import { Filter, Query } from '@kbn/es-query'; +import { generateFilters } from '@kbn/data-plugin/public'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { FullTimeRangeSelector } from '../full_time_range_selector'; import { usePageUrlState, useUrlState } from '../../../common/util/url_state'; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_panel.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_panel.tsx index 7d218d98afa39..5dc3eee801abd 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_panel.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_panel.tsx @@ -9,7 +9,7 @@ import React, { FC, useEffect, useState } from 'react'; import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { Query, Filter } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { ShardSizeFilter } from './shard_size_select'; import { DataVisualizerFieldNamesFilter } from './field_name_filter'; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx index b50428100675c..dab72c508b106 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx @@ -21,7 +21,7 @@ import { IContainer, } from '@kbn/embeddable-plugin/public'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -import { Query } from '@kbn/data-plugin/common'; +import type { Query } from '@kbn/es-query'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { SavedSearch } from '@kbn/discover-plugin/public'; import { DATA_VISUALIZER_GRID_EMBEDDABLE_TYPE } from './constants'; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts index 0b3176154c5ff..a08a468bab656 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts @@ -7,8 +7,8 @@ import { encode } from 'rison-node'; import { stringify } from 'query-string'; import { SerializableRecord } from '@kbn/utility-types'; -import { Filter } from '@kbn/es-query'; -import { RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; +import { Filter, TimeRange } from '@kbn/es-query'; +import { RefreshInterval } from '@kbn/data-plugin/common'; import { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/common'; import { GlobalQueryStateFromUrl } from '@kbn/data-plugin/public'; import { Dictionary, isRisonSerializationRequired } from '../../common/util/url_state'; diff --git a/x-pack/plugins/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.ts b/x-pack/plugins/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.ts index ce0d6e8c912fa..f3e8fa6c393a0 100644 --- a/x-pack/plugins/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.ts +++ b/x-pack/plugins/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.ts @@ -7,7 +7,7 @@ import type { Filter } from '@kbn/es-query'; import { Action } from '@kbn/ui-actions-plugin/public'; import { EmbeddableContext, EmbeddableInput, IEmbeddable } from '@kbn/embeddable-plugin/public'; -import { Query, TimeRange } from '@kbn/data-plugin/public'; +import type { Query, TimeRange } from '@kbn/es-query'; import { DiscoverAppLocatorParams } from '@kbn/discover-plugin/public'; import { KibanaLocation } from '@kbn/share-plugin/public'; import * as shared from './shared'; diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/test/data.ts b/x-pack/plugins/drilldowns/url_drilldown/public/lib/test/data.ts index 22ec6ed873fa1..aa68763daee62 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/test/data.ts +++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/test/data.ts @@ -6,7 +6,7 @@ */ import { DatatableColumnType } from '@kbn/expressions-plugin/common'; -import { Query, Filter, TimeRange } from '@kbn/data-plugin/public'; +import type { Query, Filter, TimeRange } from '@kbn/es-query'; import { Embeddable, EmbeddableInput, EmbeddableOutput } from '@kbn/embeddable-plugin/public'; export const createPoint = ({ diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx index eebd8afc5460d..7ecdd4250cbc9 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx +++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx @@ -16,7 +16,7 @@ import { VALUE_CLICK_TRIGGER, } from '@kbn/embeddable-plugin/public'; import { ROW_CLICK_TRIGGER } from '@kbn/ui-actions-plugin/public'; -import { Query, Filter, TimeRange } from '@kbn/data-plugin/public'; +import type { Query, Filter, TimeRange } from '@kbn/es-query'; import { CollectConfigProps as CollectConfigPropsBase } from '@kbn/kibana-utils-plugin/public'; import { reactToUiComponent, diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/variables/context_variables.ts b/x-pack/plugins/drilldowns/url_drilldown/public/lib/variables/context_variables.ts index 6940fb61ed38d..4a2d5d28c4027 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/variables/context_variables.ts +++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/variables/context_variables.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { monaco } from '@kbn/monaco'; import { getFlattenedObject } from '@kbn/std'; -import type { Filter, Query, TimeRange } from '@kbn/data-plugin/public'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { EmbeddableInput, EmbeddableOutput } from '@kbn/embeddable-plugin/public'; import type { UrlTemplateEditorVariable } from '@kbn/kibana-react-plugin/public'; import { txtValue } from './i18n'; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/agent_logs.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/agent_logs.tsx index cc7a9bec975ef..947cb050f3c16 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/agent_logs.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/agent_logs.tsx @@ -29,7 +29,7 @@ import semverCoerce from 'semver/functions/coerce'; import { createStateContainerReactHelpers } from '@kbn/kibana-utils-plugin/public'; import { RedirectAppLinks } from '@kbn/kibana-react-plugin/public'; -import type { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { LogStream } from '@kbn/infra-plugin/public'; import type { Agent, AgentPolicy } from '../../../../../types'; diff --git a/x-pack/plugins/graph/public/components/search_bar.tsx b/x-pack/plugins/graph/public/components/search_bar.tsx index 046ed05977c79..4eccff31c644b 100644 --- a/x-pack/plugins/graph/public/components/search_bar.tsx +++ b/x-pack/plugins/graph/public/components/search_bar.tsx @@ -10,9 +10,9 @@ import React, { useState, useEffect } from 'react'; import { i18n } from '@kbn/i18n'; import { connect } from 'react-redux'; -import { toElasticsearchQuery, fromKueryExpression } from '@kbn/es-query'; +import { toElasticsearchQuery, fromKueryExpression, Query } from '@kbn/es-query'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { IDataPluginServices, Query } from '@kbn/data-plugin/public'; +import { IDataPluginServices } from '@kbn/data-plugin/public'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { IndexPatternSavedObject, IndexPatternProvider, WorkspaceField } from '../types'; diff --git a/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx b/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx index 2cdc7c803b93d..ee97c488b2443 100644 --- a/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx +++ b/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx @@ -10,7 +10,7 @@ import { CoreStart } from '@kbn/core/public'; import React from 'react'; import ReactDOM from 'react-dom'; import { Subscription } from 'rxjs'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { Embeddable, EmbeddableInput, IContainer } from '@kbn/embeddable-plugin/public'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { CoreProviders } from '../../apps/common_providers'; diff --git a/x-pack/plugins/infra/public/hooks/use_kibana_timefilter_time.tsx b/x-pack/plugins/infra/public/hooks/use_kibana_timefilter_time.tsx index 4128c2b17f624..5e1b73b018881 100644 --- a/x-pack/plugins/infra/public/hooks/use_kibana_timefilter_time.tsx +++ b/x-pack/plugins/infra/public/hooks/use_kibana_timefilter_time.tsx @@ -9,7 +9,8 @@ import { useCallback, useEffect } from 'react'; import useUpdateEffect from 'react-use/lib/useUpdateEffect'; import useMount from 'react-use/lib/useMount'; -import { TimeRange, TimefilterContract } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { TimefilterContract } from '@kbn/data-plugin/public'; import { useKibanaContextForPlugin } from './use_kibana'; export const useKibanaTimefilterTime = ({ diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_rate_results_url_state.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_rate_results_url_state.tsx index eb130a2e38c5d..0368b659fd6d8 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_rate_results_url_state.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_rate_results_url_state.tsx @@ -10,7 +10,7 @@ import useInterval from 'react-use/lib/useInterval'; import datemath from '@kbn/datemath'; import moment from 'moment'; import * as rt from 'io-ts'; -import { TimeRange as KibanaTimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange as KibanaTimeRange } from '@kbn/es-query'; import { TimeRange } from '../../../../common/time/time_range'; import { useUrlState } from '../../../utils/use_url_state'; import { diff --git a/x-pack/plugins/lens/common/expressions/time_scale/time_scale.test.ts b/x-pack/plugins/lens/common/expressions/time_scale/time_scale.test.ts index 46ec1f9cdc70c..0ca76ba61abbb 100644 --- a/x-pack/plugins/lens/common/expressions/time_scale/time_scale.test.ts +++ b/x-pack/plugins/lens/common/expressions/time_scale/time_scale.test.ts @@ -7,8 +7,9 @@ import moment from 'moment'; import type { Datatable } from '@kbn/expressions-plugin/common'; + +import type { TimeRange } from '@kbn/es-query'; import { createDatatableUtilitiesMock } from '@kbn/data-plugin/common/mocks'; -import type { TimeRange } from '@kbn/data-plugin/common'; import { functionWrapper } from '@kbn/expressions-plugin/common/expression_functions/specs/tests/utils'; // mock the specific inner variable: diff --git a/x-pack/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx index a693aa4ada745..ba5811dfd6ba4 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx @@ -24,7 +24,8 @@ import { I18nProvider } from '@kbn/i18n-react'; import { SavedObjectSaveModal } from '@kbn/saved-objects-plugin/public'; import { checkForDuplicateTitle } from '../persistence'; import { createMemoryHistory } from 'history'; -import { FilterManager, Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import { FilterManager } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { buildExistsFilter, FilterStateStore } from '@kbn/es-query'; import type { FieldSpec } from '@kbn/data-plugin/common'; diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx index 6cb724b592bf1..a493447b2785b 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx @@ -16,8 +16,8 @@ import { } from './embeddable'; import { ReactExpressionRendererProps } from '@kbn/expressions-plugin/public'; import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; -import { Filter } from '@kbn/es-query'; -import { Query, TimeRange, FilterManager } from '@kbn/data-plugin/public'; +import { Filter, Query, TimeRange } from '@kbn/es-query'; +import { FilterManager } from '@kbn/data-plugin/public'; import type { DataViewsContract } from '@kbn/data-views-plugin/public'; import { Document } from '../persistence'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index 6befe841363c2..6c139917cca43 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -9,14 +9,12 @@ import { isEqual, uniqBy } from 'lodash'; import React from 'react'; import { i18n } from '@kbn/i18n'; import { render, unmountComponentAtNode } from 'react-dom'; -import { DataViewBase, Filter } from '@kbn/es-query'; +import type { DataViewBase, Filter, Query, TimeRange } from '@kbn/es-query'; import type { PaletteOutput } from '@kbn/coloring'; import { DataPublicPluginStart, ExecutionContextSearch, - Query, TimefilterContract, - TimeRange, FilterManager, } from '@kbn/data-plugin/public'; import type { Start as InspectorStart } from '@kbn/inspector-plugin/public'; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/filtering.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/filtering.tsx index d026df5fff4f2..d478267092606 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/filtering.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/filtering.tsx @@ -18,7 +18,7 @@ import { EuiPopoverProps, EuiIconTip, } from '@elastic/eui'; -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { GenericIndexPatternColumn, operationDefinitionMap } from '../operations'; import { validateQuery } from '../operations/definitions/filters'; import { QueryInput } from '../query_input'; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/time_shift.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/time_shift.tsx index ae94a09e41218..6900df51ccbba 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/time_shift.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/time_shift.tsx @@ -10,7 +10,8 @@ import { EuiFormRow, EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect, useRef, useState } from 'react'; -import { Query } from '@kbn/data-plugin/public'; + +import type { Query } from '@kbn/es-query'; import { DatatableUtilitiesService, parseTimeShift } from '@kbn/data-plugin/common'; import { adjustTimeScaleLabelSuffix, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx index e3d10c61c5caa..5e26e49a8ef17 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx @@ -39,8 +39,8 @@ import { i18n } from '@kbn/i18n'; import { FieldButton } from '@kbn/react-field'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { EuiHighlight } from '@elastic/eui'; -import { Filter, buildEsQuery } from '@kbn/es-query'; -import { Query, KBN_FIELD_TYPES, ES_FIELD_TYPES, getEsQueryConfig } from '@kbn/data-plugin/public'; +import { Filter, buildEsQuery, Query } from '@kbn/es-query'; +import { KBN_FIELD_TYPES, ES_FIELD_TYPES, getEsQueryConfig } from '@kbn/data-plugin/public'; import { ChartsPluginSetup } from '@kbn/charts-plugin/public'; import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { DragDrop, DragDropIdentifier } from '../drag_drop'; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx index 509106f683984..33413bf0ba59b 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx @@ -19,7 +19,7 @@ import { import classNames from 'classnames'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { Filter } from '@kbn/es-query'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { ChartsPluginSetup } from '@kbn/charts-plugin/public'; import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { IndexPatternField } from './types'; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts index 21ba19d5fb047..47222b51fc012 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import type { Operation } from '../../../types'; import type { TimeScaleUnit } from '../../../../common/expressions'; import type { OperationType } from '.'; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filter_popover.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filter_popover.tsx index 46d69a550adfa..7166da0a3c0df 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filter_popover.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filter_popover.tsx @@ -9,7 +9,7 @@ import './filter_popover.scss'; import React from 'react'; import { EuiPopover, EuiSpacer } from '@elastic/eui'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { FilterValue, defaultLabel, isQueryValid } from '.'; import { IndexPattern } from '../../../types'; import { LabelInput } from '../shared_components'; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.tsx index 8b5f8e0c3dcc7..d3eea6e223401 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.tsx @@ -11,7 +11,8 @@ import { fromKueryExpression, luceneStringToDsl, toElasticsearchQuery } from '@k import { omit } from 'lodash'; import { i18n } from '@kbn/i18n'; import { EuiFormRow, EuiLink, htmlIdGenerator } from '@elastic/eui'; -import type { AggFunctionsMapping, Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import type { AggFunctionsMapping } from '@kbn/data-plugin/public'; import { queryFilterToAst } from '@kbn/data-plugin/common'; import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; import { updateColumnParam } from '../../layer_helpers'; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/util.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/util.ts index 1af1537162885..ca6e5cd971349 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/util.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/util.ts @@ -13,7 +13,7 @@ import type { TinymathNamedArgument, TinymathVariable, } from '@kbn/tinymath'; -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import type { OperationDefinition, GenericIndexPatternColumn, @@ -498,7 +498,7 @@ Example: Calculate area based on side length help: i18n.translate('xpack.lens.formula.maxFunction.markdown', { defaultMessage: ` Finds the maximum value between two numbers. - + Example: Find the maximum between two fields averages \`pick_max(average(bytes), average(memory))\` `, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts index be034b7de46f4..5936b90c095ec 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import { parse, TinymathLocation, TinymathVariable } from '@kbn/tinymath'; import type { TinymathAST, TinymathFunction, TinymathNamedArgument } from '@kbn/tinymath'; import { luceneStringToDsl, toElasticsearchQuery, fromKueryExpression } from '@kbn/es-query'; -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { parseTimeShift } from '@kbn/data-plugin/common'; import { findMathNodes, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts index 8e8b56d7d862d..8376a57ddc19d 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts @@ -7,7 +7,7 @@ import { partition, mapValues, pickBy, isArray } from 'lodash'; import { CoreStart } from '@kbn/core/public'; -import { Query } from '@kbn/data-plugin/common'; +import type { Query } from '@kbn/es-query'; import memoizeOne from 'memoize-one'; import type { VisualizeEditorLayersContext } from '@kbn/visualizations-plugin/public'; import type { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/query_input.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/query_input.tsx index 850f9d096d232..6d69760d51d87 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/query_input.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/query_input.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { isEqual } from 'lodash'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import { useDebouncedValue } from '../shared_components'; diff --git a/x-pack/plugins/lens/public/persistence/saved_object_store.ts b/x-pack/plugins/lens/public/persistence/saved_object_store.ts index fe0601c525016..ae2c55f66cc51 100644 --- a/x-pack/plugins/lens/public/persistence/saved_object_store.ts +++ b/x-pack/plugins/lens/public/persistence/saved_object_store.ts @@ -5,14 +5,13 @@ * 2.0. */ -import { Filter } from '@kbn/es-query'; +import { Filter, Query } from '@kbn/es-query'; import { SavedObjectAttributes, SavedObjectsClientContract, SavedObjectReference, ResolvedSimpleSavedObject, } from '@kbn/core/public'; -import { Query } from '@kbn/data-plugin/public'; import { DOC_TYPE } from '../../common'; import { LensSavedObjectAttributes } from '../async_services'; diff --git a/x-pack/plugins/lens/public/state_management/lens_slice.test.ts b/x-pack/plugins/lens/public/state_management/lens_slice.test.ts index 1896db481dbed..d38c0aed16676 100644 --- a/x-pack/plugins/lens/public/state_management/lens_slice.test.ts +++ b/x-pack/plugins/lens/public/state_management/lens_slice.test.ts @@ -6,7 +6,7 @@ */ import { EnhancedStore } from '@reduxjs/toolkit'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { switchDatasource, switchVisualization, diff --git a/x-pack/plugins/lens/public/state_management/types.ts b/x-pack/plugins/lens/public/state_management/types.ts index c11215d4a9f8e..4c6f4adc59ff5 100644 --- a/x-pack/plugins/lens/public/state_management/types.ts +++ b/x-pack/plugins/lens/public/state_management/types.ts @@ -7,8 +7,8 @@ import { VisualizeFieldContext } from '@kbn/ui-actions-plugin/public'; import { EmbeddableEditorState } from '@kbn/embeddable-plugin/public'; -import { Filter } from '@kbn/es-query'; -import { Query, SavedQuery } from '@kbn/data-plugin/public'; +import { Filter, Query } from '@kbn/es-query'; +import { SavedQuery } from '@kbn/data-plugin/public'; import { Document } from '../persistence'; import { TableInspectorAdapter } from '../editor_frame_service/types'; diff --git a/x-pack/plugins/lens/public/trigger_actions/open_in_discover_drilldown.tsx b/x-pack/plugins/lens/public/trigger_actions/open_in_discover_drilldown.tsx index 1ce9956bc148b..8ea28819ce59e 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_in_discover_drilldown.tsx +++ b/x-pack/plugins/lens/public/trigger_actions/open_in_discover_drilldown.tsx @@ -7,7 +7,8 @@ import React from 'react'; import { IEmbeddable, EmbeddableInput } from '@kbn/embeddable-plugin/public'; -import { Query, Filter, TimeRange, APPLY_FILTER_TRIGGER } from '@kbn/data-plugin/public'; +import type { Query, Filter, TimeRange } from '@kbn/es-query'; +import { APPLY_FILTER_TRIGGER } from '@kbn/data-plugin/public'; import { CollectConfigProps as CollectConfigPropsBase } from '@kbn/kibana-utils-plugin/public'; import { reactToUiComponent } from '@kbn/kibana-react-plugin/public'; import { diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index 4c2f0785e7a3e..873159562dc8f 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -22,7 +22,7 @@ import type { Datatable, } from '@kbn/expressions-plugin/public'; import type { VisualizeEditorLayersContext } from '@kbn/visualizations-plugin/public'; -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import type { UiActionsStart, RowClickContext, diff --git a/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts b/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts index a560114d71b4f..fb87553113d88 100644 --- a/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts +++ b/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts @@ -9,7 +9,7 @@ import type { Query } from '@kbn/data-plugin/common'; import type { Filter } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { MapExtent } from './map_descriptor'; export type Timeslice = { diff --git a/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts b/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts index 1456fd2acd25b..36325c561b19a 100644 --- a/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts +++ b/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts @@ -7,8 +7,7 @@ /* eslint-disable @typescript-eslint/consistent-type-definitions */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { Feature } from 'geojson'; import { EMSVectorTileStyleDescriptor, diff --git a/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts b/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts index 06dde68b8ff00..8ca9f2acb49d6 100644 --- a/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts +++ b/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts @@ -8,8 +8,7 @@ /* eslint-disable @typescript-eslint/consistent-type-definitions */ import { FeatureCollection } from 'geojson'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { SortDirection } from '@kbn/data-plugin/common/search'; import { AGG_TYPE, diff --git a/x-pack/plugins/maps/public/actions/layer_actions.ts b/x-pack/plugins/maps/public/actions/layer_actions.ts index 6ffd9d59b1434..fee8754b48d7e 100644 --- a/x-pack/plugins/maps/public/actions/layer_actions.ts +++ b/x-pack/plugins/maps/public/actions/layer_actions.ts @@ -7,7 +7,7 @@ import { AnyAction, Dispatch } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { Adapters } from '@kbn/inspector-plugin/common/adapters'; import { MapStoreState } from '../reducers/store'; import { diff --git a/x-pack/plugins/maps/public/actions/map_actions.ts b/x-pack/plugins/maps/public/actions/map_actions.ts index c23b77326f293..8a14bc50dc975 100644 --- a/x-pack/plugins/maps/public/actions/map_actions.ts +++ b/x-pack/plugins/maps/public/actions/map_actions.ts @@ -12,7 +12,7 @@ import { ThunkDispatch } from 'redux-thunk'; import turfBboxPolygon from '@turf/bbox-polygon'; import turfBooleanContains from '@turf/boolean-contains'; import { Filter } from '@kbn/es-query'; -import { Query, TimeRange } from '@kbn/data-plugin/public'; +import type { Query, TimeRange } from '@kbn/es-query'; import { Geometry, Position } from 'geojson'; import { asyncForEach, asyncMap } from '@kbn/std'; import { DRAW_MODE, DRAW_SHAPE, LAYER_STYLE_TYPE } from '../../common/constants'; diff --git a/x-pack/plugins/maps/public/classes/joins/inner_join.ts b/x-pack/plugins/maps/public/classes/joins/inner_join.ts index 5276d5fcdae30..b8b96352625fc 100644 --- a/x-pack/plugins/maps/public/classes/joins/inner_join.ts +++ b/x-pack/plugins/maps/public/classes/joins/inner_join.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { Feature, GeoJsonProperties } from 'geojson'; import { ESTermSource } from '../sources/es_term_source'; import { getComputedFieldNamePrefix } from '../styles/vector/style_util'; diff --git a/x-pack/plugins/maps/public/classes/layers/layer.tsx b/x-pack/plugins/maps/public/classes/layers/layer.tsx index 369f3a0099d66..b01f2b9b8ca04 100644 --- a/x-pack/plugins/maps/public/classes/layers/layer.tsx +++ b/x-pack/plugins/maps/public/classes/layers/layer.tsx @@ -8,7 +8,7 @@ /* eslint-disable @typescript-eslint/consistent-type-definitions */ import type { Map as MbMap } from '@kbn/mapbox-gl'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import _ from 'lodash'; import React, { ReactElement } from 'react'; import { EuiIcon } from '@elastic/eui'; diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts b/x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts index 81e80c7cf739f..26b95a95e6660 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { LayerDescriptor } from '../../../../common/descriptor_types'; import { ES_GEO_FIELD_TYPE, SCALING_TYPES } from '../../../../common/constants'; import { ESSearchSource } from './es_search_source'; diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx index 734c8cfb04892..078369ea3c32e 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx @@ -9,11 +9,11 @@ import _ from 'lodash'; import React, { ReactElement } from 'react'; import { i18n } from '@kbn/i18n'; import { GeoJsonProperties, Geometry, Position } from 'geojson'; -import { type Filter, buildPhraseFilter } from '@kbn/es-query'; +import { type Filter, buildPhraseFilter, type TimeRange } from '@kbn/es-query'; import type { DataViewField, DataView } from '@kbn/data-plugin/common'; import { lastValueFrom } from 'rxjs'; import { Adapters } from '@kbn/inspector-plugin/common/adapters'; -import { SortDirection, SortDirectionNumeric, TimeRange } from '@kbn/data-plugin/common'; +import { SortDirection, SortDirectionNumeric } from '@kbn/data-plugin/common'; import { AbstractESSource } from '../es_source'; import { getHttp, diff --git a/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts b/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts index e524f546ecc68..1272438e11e39 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts @@ -14,7 +14,7 @@ import type { Query } from '@kbn/data-plugin/common'; import type { KibanaExecutionContext } from '@kbn/core/public'; import { RequestAdapter } from '@kbn/inspector-plugin/common/adapters/request'; import { lastValueFrom } from 'rxjs'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { AbstractVectorSource, BoundsRequestMeta } from '../vector_source'; import { getAutocompleteService, diff --git a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts index 0f5f60ba28601..5447910dc524a 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts @@ -7,7 +7,8 @@ import _ from 'lodash'; import { i18n } from '@kbn/i18n'; -import { ISearchSource, Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; +import { ISearchSource } from '@kbn/data-plugin/public'; import { Adapters } from '@kbn/inspector-plugin/common/adapters'; import { AGG_TYPE, diff --git a/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx b/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx index 8c2323521fb28..64082a85df6b7 100644 --- a/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx @@ -18,7 +18,7 @@ import { i18n } from '@kbn/i18n'; import type { Query } from '@kbn/data-plugin/common'; import type { MapGeoJSONFeature } from '@kbn/mapbox-gl'; import { Filter } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { Adapters } from '@kbn/inspector-plugin/common/adapters'; import { ActionExecutionContext, Action } from '@kbn/ui-actions-plugin/public'; import { GEO_JSON_TYPE, VECTOR_SHAPE_TYPE } from '../../../../common/constants'; diff --git a/x-pack/plugins/maps/public/connected_components/edit_layer_panel/filter_editor/index.ts b/x-pack/plugins/maps/public/connected_components/edit_layer_panel/filter_editor/index.ts index 51b19e7b05c96..09c9cd5f9482c 100644 --- a/x-pack/plugins/maps/public/connected_components/edit_layer_panel/filter_editor/index.ts +++ b/x-pack/plugins/maps/public/connected_components/edit_layer_panel/filter_editor/index.ts @@ -8,7 +8,7 @@ import { AnyAction } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; import { connect } from 'react-redux'; -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { FilterEditor } from './filter_editor'; import { getEditState, getSelectedLayer } from '../../../selectors/map_selectors'; import { setLayerQuery, updateSourceProp } from '../../../actions'; diff --git a/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx b/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx index ee5a534f7c6f0..d2ed9d640b140 100644 --- a/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx +++ b/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx @@ -12,7 +12,7 @@ import { EuiRangeTick } from '@elastic/eui/src/components/form/range/range_ticks import { i18n } from '@kbn/i18n'; import { Observable, Subscription } from 'rxjs'; import { first } from 'rxjs/operators'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { epochToKbnDateFormat, getInterval, getTicks } from './time_utils'; import { getTimeFilter } from '../../kibana_services'; import { Timeslice } from '../../../common/descriptor_types'; diff --git a/x-pack/plugins/maps/public/embeddable/map_component.tsx b/x-pack/plugins/maps/public/embeddable/map_component.tsx index f9bc8423f44e0..4709255927734 100644 --- a/x-pack/plugins/maps/public/embeddable/map_component.tsx +++ b/x-pack/plugins/maps/public/embeddable/map_component.tsx @@ -9,7 +9,7 @@ import React, { Component, RefObject } from 'react'; import uuid from 'uuid/v4'; import { EuiLoadingChart } from '@elastic/eui'; import type { Filter } from '@kbn/es-query'; -import type { Query, TimeRange } from '@kbn/data-plugin/common'; +import type { Query, TimeRange } from '@kbn/es-query'; import type { LayerDescriptor, MapCenterAndZoom } from '../../common/descriptor_types'; import type { MapEmbeddableType } from './types'; import type { LazyLoadedMapModules } from '../lazy_load_bundle'; diff --git a/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx b/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx index 97c8c190479fd..0b2d2e4f9bbc6 100644 --- a/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx +++ b/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx @@ -14,7 +14,7 @@ import { render, unmountComponentAtNode } from 'react-dom'; import { Subscription } from 'rxjs'; import { Unsubscribe } from 'redux'; import { EuiEmptyPrompt } from '@elastic/eui'; -import { type Filter, compareFilters } from '@kbn/es-query'; +import { type Filter, compareFilters, type TimeRange, type Query } from '@kbn/es-query'; import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; import { Embeddable, @@ -25,7 +25,7 @@ import { omitGenericEmbeddableInput, } from '@kbn/embeddable-plugin/public'; import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public'; -import { APPLY_FILTER_TRIGGER, TimeRange, Query } from '@kbn/data-plugin/public'; +import { APPLY_FILTER_TRIGGER } from '@kbn/data-plugin/public'; import { ACTION_GLOBAL_APPLY_FILTER } from '@kbn/unified-search-plugin/public'; import { createExtentFilter } from '../../common/elasticsearch_util'; import { diff --git a/x-pack/plugins/maps/public/embeddable/types.ts b/x-pack/plugins/maps/public/embeddable/types.ts index 3b51756dba260..bf1691efde2d6 100644 --- a/x-pack/plugins/maps/public/embeddable/types.ts +++ b/x-pack/plugins/maps/public/embeddable/types.ts @@ -13,7 +13,7 @@ import { EmbeddableOutput, SavedObjectEmbeddableInput, } from '@kbn/embeddable-plugin/public'; -import { Query, TimeRange } from '@kbn/data-plugin/common'; +import type { Query, TimeRange } from '@kbn/es-query'; import { MapCenterAndZoom, MapExtent } from '../../common/descriptor_types'; import { MapSavedObjectAttributes } from '../../common/map_saved_object_type'; import { MapSettings } from '../reducers/map'; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts index acbbf25c8a49f..79bfc0ce0d8fd 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { Filter } from '@kbn/es-query'; -import type { Query, TimeRange } from '@kbn/data-plugin/common'; +import type { Query, TimeRange } from '@kbn/es-query'; import type { ExpressionValueSearchContext } from '@kbn/data-plugin/common/search/expressions/kibana_context_type'; import type { ExpressionFunctionDefinition, Render } from '@kbn/expressions-plugin/public'; import { REGION_MAP_RENDER, REGION_MAP_VIS_TYPE, RegionMapVisConfig } from './types'; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx index 8c51e5c38a197..2334b9af1996c 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx @@ -7,7 +7,7 @@ import React from 'react'; import type { Filter } from '@kbn/es-query'; -import type { Query, TimeRange } from '@kbn/data-plugin/common'; +import type { Query, TimeRange } from '@kbn/es-query'; import { RegionMapVisConfig } from './types'; import type { LazyLoadedMapModules } from '../../lazy_load_bundle'; import { MapComponent } from '../../embeddable/map_component'; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_fn.ts b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_fn.ts index 8239a017bf0fa..116b3375eba76 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_fn.ts +++ b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_fn.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { Filter } from '@kbn/es-query'; -import type { Query, TimeRange } from '@kbn/data-plugin/common'; +import type { Query, TimeRange } from '@kbn/es-query'; import type { ExpressionValueSearchContext } from '@kbn/data-plugin/common/search/expressions/kibana_context_type'; import type { ExpressionFunctionDefinition, Render } from '@kbn/expressions-plugin/public'; import { TILE_MAP_RENDER, TILE_MAP_VIS_TYPE, TileMapVisConfig } from './types'; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx index abe5c571c1c39..fd5f916baf4c6 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx +++ b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx @@ -7,7 +7,7 @@ import React from 'react'; import type { Filter } from '@kbn/es-query'; -import type { Query, TimeRange } from '@kbn/data-plugin/common'; +import type { Query, TimeRange } from '@kbn/es-query'; import { TileMapVisConfig } from './types'; import type { LazyLoadedMapModules } from '../../lazy_load_bundle'; import { MapComponent } from '../../embeddable/map_component'; diff --git a/x-pack/plugins/maps/public/locators.ts b/x-pack/plugins/maps/public/locators.ts index 7cfdb7a0d3fb1..b08c68ec96d61 100644 --- a/x-pack/plugins/maps/public/locators.ts +++ b/x-pack/plugins/maps/public/locators.ts @@ -9,13 +9,8 @@ import rison from 'rison-node'; import type { SerializableRecord } from '@kbn/utility-types'; -import { type Filter, isFilterPinned } from '@kbn/es-query'; -import type { - TimeRange, - Query, - GlobalQueryStateFromUrl, - RefreshInterval, -} from '@kbn/data-plugin/public'; +import { type Filter, isFilterPinned, type TimeRange, type Query } from '@kbn/es-query'; +import type { GlobalQueryStateFromUrl, RefreshInterval } from '@kbn/data-plugin/public'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; import type { LayerDescriptor } from '../common/descriptor_types'; diff --git a/x-pack/plugins/maps/public/reducers/map/types.ts b/x-pack/plugins/maps/public/reducers/map/types.ts index c2ed508992500..9495a52e888c3 100644 --- a/x-pack/plugins/maps/public/reducers/map/types.ts +++ b/x-pack/plugins/maps/public/reducers/map/types.ts @@ -9,7 +9,7 @@ import type { Query } from '@kbn/data-plugin/common'; import { Filter } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { CustomIcon, DrawState, diff --git a/x-pack/plugins/maps/public/routes/map_page/map_app/index.ts b/x-pack/plugins/maps/public/routes/map_page/map_app/index.ts index f99d7cee0869f..af9054cd99570 100644 --- a/x-pack/plugins/maps/public/routes/map_page/map_app/index.ts +++ b/x-pack/plugins/maps/public/routes/map_page/map_app/index.ts @@ -9,7 +9,7 @@ import { connect } from 'react-redux'; import { ThunkDispatch } from 'redux-thunk'; import { AnyAction } from 'redux'; import { Filter } from '@kbn/es-query'; -import { Query, TimeRange } from '@kbn/data-plugin/public'; +import type { Query, TimeRange } from '@kbn/es-query'; import { MapApp } from './map_app'; import { getFlyoutDisplay, getIsFullScreen } from '../../../selectors/ui_selectors'; import { diff --git a/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx b/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx index 0f95c5530e466..e508cb37d45af 100644 --- a/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx +++ b/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx @@ -12,8 +12,8 @@ import { i18n } from '@kbn/i18n'; import { AppLeaveAction, AppMountParameters } from '@kbn/core/public'; import { Adapters } from '@kbn/embeddable-plugin/public'; import { Subscription } from 'rxjs'; -import { type Filter, FilterStateStore } from '@kbn/es-query'; -import type { Query, TimeRange, DataView } from '@kbn/data-plugin/common'; +import { type Filter, FilterStateStore, type Query, type TimeRange } from '@kbn/es-query'; +import type { DataView } from '@kbn/data-plugin/common'; import { SavedQuery, QueryStateChange, QueryState } from '@kbn/data-plugin/public'; import { getData, diff --git a/x-pack/plugins/maps/public/routes/map_page/saved_map/types.ts b/x-pack/plugins/maps/public/routes/map_page/saved_map/types.ts index 64a4b19675873..27ec99bbf2374 100644 --- a/x-pack/plugins/maps/public/routes/map_page/saved_map/types.ts +++ b/x-pack/plugins/maps/public/routes/map_page/saved_map/types.ts @@ -7,7 +7,7 @@ import type { Query } from '@kbn/data-plugin/common'; import { Filter } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { MapCenter } from '../../../../common/descriptor_types'; import { MapSettings } from '../../../reducers/map'; diff --git a/x-pack/plugins/maps/public/routes/map_page/url_state/app_state_manager.ts b/x-pack/plugins/maps/public/routes/map_page/url_state/app_state_manager.ts index b9cd9ddc78a3c..ff4989fd56c77 100644 --- a/x-pack/plugins/maps/public/routes/map_page/url_state/app_state_manager.ts +++ b/x-pack/plugins/maps/public/routes/map_page/url_state/app_state_manager.ts @@ -7,7 +7,7 @@ import { Subject } from 'rxjs'; import { Filter } from '@kbn/es-query'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; export interface MapsAppState { query?: Query | null; diff --git a/x-pack/plugins/maps/public/routes/map_page/url_state/global_sync.ts b/x-pack/plugins/maps/public/routes/map_page/url_state/global_sync.ts index a2070e594424a..eb9510c6bed23 100644 --- a/x-pack/plugins/maps/public/routes/map_page/url_state/global_sync.ts +++ b/x-pack/plugins/maps/public/routes/map_page/url_state/global_sync.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { Filter } from '@kbn/es-query'; -import { TimeRange, RefreshInterval } from '@kbn/data-plugin/public'; +import type { Filter, TimeRange } from '@kbn/es-query'; +import { RefreshInterval } from '@kbn/data-plugin/public'; import { syncQueryStateWithUrl } from '@kbn/data-plugin/public'; import { getData } from '../../../kibana_services'; import { kbnUrlStateStorage } from '../../../render_app'; diff --git a/x-pack/plugins/maps/public/selectors/map_selectors.ts b/x-pack/plugins/maps/public/selectors/map_selectors.ts index d1e4f2f021ff5..06897f469b48f 100644 --- a/x-pack/plugins/maps/public/selectors/map_selectors.ts +++ b/x-pack/plugins/maps/public/selectors/map_selectors.ts @@ -10,7 +10,7 @@ import { FeatureCollection } from 'geojson'; import _ from 'lodash'; import type { Query } from '@kbn/data-plugin/common'; import { Filter } from '@kbn/es-query'; -import { TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; import { RasterTileLayer } from '../classes/layers/raster_tile_layer/raster_tile_layer'; import { EmsVectorTileLayer } from '../classes/layers/ems_vector_tile_layer/ems_vector_tile_layer'; import { diff --git a/x-pack/plugins/ml/common/util/date_utils.ts b/x-pack/plugins/ml/common/util/date_utils.ts index d6605e5856d8b..b0ed853fe24db 100644 --- a/x-pack/plugins/ml/common/util/date_utils.ts +++ b/x-pack/plugins/ml/common/util/date_utils.ts @@ -9,7 +9,7 @@ import dateMath from '@kbn/datemath'; import { formatDate } from '@elastic/eui'; -import { TimeRange } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; import { TIME_FORMAT } from '../constants/time_format'; export function formatHumanReadableDate(ts: number) { diff --git a/x-pack/plugins/ml/public/application/components/full_time_range_selector/full_time_range_selector.test.tsx b/x-pack/plugins/ml/public/application/components/full_time_range_selector/full_time_range_selector.test.tsx index 5e4d87901c979..0d20267f33ecb 100644 --- a/x-pack/plugins/ml/public/application/components/full_time_range_selector/full_time_range_selector.test.tsx +++ b/x-pack/plugins/ml/public/application/components/full_time_range_selector/full_time_range_selector.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { shallowWithIntl } from '@kbn/test-jest-helpers'; import { FullTimeRangeSelector } from '.'; -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/public'; // Create a mock for the setFullTimeRange function in the service. diff --git a/x-pack/plugins/ml/public/application/components/navigation_menu/date_picker_wrapper/date_picker_wrapper.tsx b/x-pack/plugins/ml/public/application/components/navigation_menu/date_picker_wrapper/date_picker_wrapper.tsx index 6f87de917a0cb..3cd74d2a53fe7 100644 --- a/x-pack/plugins/ml/public/application/components/navigation_menu/date_picker_wrapper/date_picker_wrapper.tsx +++ b/x-pack/plugins/ml/public/application/components/navigation_menu/date_picker_wrapper/date_picker_wrapper.tsx @@ -19,7 +19,8 @@ import { OnRefreshProps, OnTimeChangeProps, } from '@elastic/eui'; -import { TimeHistoryContract, TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { TimeHistoryContract } from '@kbn/data-plugin/public'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; import { wrapWithTheme, toMountPoint } from '@kbn/kibana-react-plugin/public'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx index 141be7cb00ebf..c186903686015 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx @@ -13,7 +13,7 @@ import { debounce } from 'lodash'; import { fromKueryExpression, luceneStringToDsl, toElasticsearchQuery } from '@kbn/es-query'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { DataView } from '@kbn/data-views-plugin/common'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import { Dictionary } from '../../../../../../../common/types/common'; diff --git a/x-pack/plugins/ml/public/application/explorer/components/explorer_query_bar/explorer_query_bar.tsx b/x-pack/plugins/ml/public/application/explorer/components/explorer_query_bar/explorer_query_bar.tsx index 7b66b38ca6bff..40d39fefc1b86 100644 --- a/x-pack/plugins/ml/public/application/explorer/components/explorer_query_bar/explorer_query_bar.tsx +++ b/x-pack/plugins/ml/public/application/explorer/components/explorer_query_bar/explorer_query_bar.tsx @@ -9,7 +9,7 @@ import React, { FC, useState, useEffect } from 'react'; import { EuiCode, EuiInputPopover } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { fromKueryExpression, luceneStringToDsl, toElasticsearchQuery } from '@kbn/es-query'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/common'; import { SEARCH_QUERY_LANGUAGE, ErrorMessage } from '../../../../../common/constants/search'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/route_resolver.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/route_resolver.ts index b305c69c47d87..a9819812601fa 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/route_resolver.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/route_resolver.ts @@ -6,7 +6,7 @@ */ import rison from 'rison-node'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { Filter } from '@kbn/es-query'; import type { LensSavedObjectAttributes } from '@kbn/lens-plugin/public'; import { canCreateAndStashADJob } from './create_job'; diff --git a/x-pack/plugins/ml/public/application/services/anomaly_explorer_charts_service.ts b/x-pack/plugins/ml/public/application/services/anomaly_explorer_charts_service.ts index 25b1b6b0f14a7..0ed3b511b669e 100644 --- a/x-pack/plugins/ml/public/application/services/anomaly_explorer_charts_service.ts +++ b/x-pack/plugins/ml/public/application/services/anomaly_explorer_charts_service.ts @@ -7,7 +7,8 @@ import { Observable, of } from 'rxjs'; import { map as mapObservable } from 'rxjs/operators'; -import type { TimefilterContract, TimeRange } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import type { TimefilterContract } from '@kbn/data-plugin/public'; import type { RecordForInfluencer } from './results_service/results_service'; import type { EntityField } from '../../../common/util/anomaly_utils'; import type { CombinedJob } from '../../../common/types/anomaly_detection_jobs'; diff --git a/x-pack/plugins/ml/public/application/services/anomaly_timeline_service.ts b/x-pack/plugins/ml/public/application/services/anomaly_timeline_service.ts index d91bd4b497391..cbe4017a02835 100644 --- a/x-pack/plugins/ml/public/application/services/anomaly_timeline_service.ts +++ b/x-pack/plugins/ml/public/application/services/anomaly_timeline_service.ts @@ -6,7 +6,8 @@ */ import { IUiSettingsClient } from '@kbn/core/public'; -import { TimefilterContract, TimeRange, UI_SETTINGS } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { TimefilterContract, UI_SETTINGS } from '@kbn/data-plugin/public'; import { getBoundsRoundedToInterval, TimeBuckets, diff --git a/x-pack/plugins/ml/public/application/util/index_utils.ts b/x-pack/plugins/ml/public/application/util/index_utils.ts index 89b35624f11a9..df9be6535da3e 100644 --- a/x-pack/plugins/ml/public/application/util/index_utils.ts +++ b/x-pack/plugins/ml/public/application/util/index_utils.ts @@ -6,7 +6,7 @@ */ import { i18n } from '@kbn/i18n'; -import type { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/public'; import type { SavedSearchSavedObject } from '../../../common/types/kibana'; import { getToastNotifications, getSavedObjectsClient } from './dependency_cache'; diff --git a/x-pack/plugins/ml/public/embeddables/types.ts b/x-pack/plugins/ml/public/embeddables/types.ts index 228ce092d4cec..2ba4af15f7466 100644 --- a/x-pack/plugins/ml/public/embeddables/types.ts +++ b/x-pack/plugins/ml/public/embeddables/types.ts @@ -6,8 +6,8 @@ */ import type { CoreStart } from '@kbn/core/public'; -import type { Filter, Query } from '@kbn/es-query'; -import type { RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import type { RefreshInterval } from '@kbn/data-plugin/common'; import type { EmbeddableInput, EmbeddableOutput, IEmbeddable } from '@kbn/embeddable-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { JobId } from '../../common/types/anomaly_detection_jobs'; diff --git a/x-pack/plugins/ml/public/ui_actions/apply_entity_filters_action.tsx b/x-pack/plugins/ml/public/ui_actions/apply_entity_filters_action.tsx index 61556df53db2e..ad62b94419f20 100644 --- a/x-pack/plugins/ml/public/ui_actions/apply_entity_filters_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/apply_entity_filters_action.tsx @@ -5,10 +5,9 @@ * 2.0. */ -import { Filter } from '@kbn/es-query'; +import { Filter, FilterStateStore } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { createAction } from '@kbn/ui-actions-plugin/public'; -import { FilterStateStore } from '@kbn/data-plugin/common'; import { MlCoreSetup } from '../plugin'; import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, diff --git a/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx b/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx index 3b07b1bf06d95..dc574b48849e4 100644 --- a/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx @@ -5,10 +5,9 @@ * 2.0. */ -import { Filter } from '@kbn/es-query'; +import { Filter, FilterStateStore } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { createAction } from '@kbn/ui-actions-plugin/public'; -import { FilterStateStore } from '@kbn/data-plugin/common'; import { MlCoreSetup } from '../plugin'; import { SWIMLANE_TYPE, VIEW_BY_JOB_LABEL } from '../application/explorer/explorer_constants'; import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, SwimLaneDrilldownContext } from '../embeddables'; diff --git a/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx b/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx index 6abbc5718ad61..71180f2c2c92d 100644 --- a/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx +++ b/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx @@ -5,7 +5,8 @@ * 2.0. */ import React, { createContext } from 'react'; -import { TimeRange, RefreshInterval } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { RefreshInterval } from '@kbn/data-plugin/public'; import { GlobalState } from '../../url_state'; import { MonitoringStartPluginDependencies, MonitoringStartServices } from '../../types'; import { Legacy } from '../../legacy_shims'; diff --git a/x-pack/plugins/monitoring/public/url_state.ts b/x-pack/plugins/monitoring/public/url_state.ts index e19758d882124..9c2e4b6ce7ce3 100644 --- a/x-pack/plugins/monitoring/public/url_state.ts +++ b/x-pack/plugins/monitoring/public/url_state.ts @@ -6,7 +6,8 @@ */ import { Subscription } from 'rxjs'; import { History, createHashHistory } from 'history'; -import { RefreshInterval, TimeRange, syncQueryStateWithUrl } from '@kbn/data-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { RefreshInterval, syncQueryStateWithUrl } from '@kbn/data-plugin/public'; import { createStateContainer, createKbnUrlStateStorage, diff --git a/x-pack/plugins/osquery/public/common/hooks/use_discover_link.tsx b/x-pack/plugins/osquery/public/common/hooks/use_discover_link.tsx index ca294c044d05b..c53117f0c9484 100644 --- a/x-pack/plugins/osquery/public/common/hooks/use_discover_link.tsx +++ b/x-pack/plugins/osquery/public/common/hooks/use_discover_link.tsx @@ -7,7 +7,7 @@ import { useCallback, useEffect, useState } from 'react'; -import { FilterStateStore } from '@kbn/data-plugin/common'; +import { FilterStateStore } from '@kbn/es-query'; import { useKibana, isModifiedEvent, isLeftClickEvent } from '../lib/kibana'; interface UseDiscoverLink { diff --git a/x-pack/plugins/osquery/public/packs/pack_queries_status_table.tsx b/x-pack/plugins/osquery/public/packs/pack_queries_status_table.tsx index dc54be07f49eb..2dd2a0b85d590 100644 --- a/x-pack/plugins/osquery/public/packs/pack_queries_status_table.tsx +++ b/x-pack/plugins/osquery/public/packs/pack_queries_status_table.tsx @@ -31,7 +31,8 @@ import type { TermsIndexPatternColumn, } from '@kbn/lens-plugin/public'; import { DOCUMENT_FIELD_NAME as RECORDS_FIELD } from '@kbn/lens-plugin/common/constants'; -import { FilterStateStore, DataView } from '@kbn/data-plugin/common'; +import { FilterStateStore } from '@kbn/es-query'; +import { DataView } from '@kbn/data-plugin/common'; import { removeMultilines } from '../../common/utils/build_query/remove_multilines'; import { useKibana } from '../common/lib/kibana'; import { OsqueryManagerPackagePolicyInputStream } from '../../common/types'; diff --git a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx index 02da384556c78..feb9cf30afc4f 100644 --- a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx @@ -8,11 +8,10 @@ import React, { memo, useMemo, useCallback } from 'react'; import deepEqual from 'fast-deep-equal'; -import type { DataViewBase, Filter, Query } from '@kbn/es-query'; +import type { DataViewBase, Filter, Query, TimeRange } from '@kbn/es-query'; import { FilterManager, TimeHistory, - TimeRange, SavedQuery, SavedQueryTimeFilter, } from '@kbn/data-plugin/public'; diff --git a/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx index d5e9fba36361a..2c2e1c5cfcc19 100644 --- a/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx @@ -13,8 +13,8 @@ import { Dispatch } from 'redux'; import { Subscription } from 'rxjs'; import deepEqual from 'fast-deep-equal'; -import type { DataViewBase, Filter, Query } from '@kbn/es-query'; -import type { FilterManager, TimeRange, SavedQuery } from '@kbn/data-plugin/public'; +import type { DataViewBase, Filter, Query, TimeRange } from '@kbn/es-query'; +import type { FilterManager, SavedQuery } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { OnTimeChangeProps } from '@elastic/eui'; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx b/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx index e569bf7b93991..d0739baa1ec7a 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx +++ b/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx @@ -12,7 +12,7 @@ import { i18n } from '@kbn/i18n'; import { fromKueryExpression, luceneStringToDsl } from '@kbn/es-query'; import { RuleTypeParamsExpressionProps } from '@kbn/triggers-actions-ui-plugin/public'; import { DataView } from '@kbn/data-plugin/common'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import { GeoContainmentAlertParams } from '../types'; import { EntityIndexExpression } from './expressions/entity_index_expression'; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/types.ts b/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/types.ts index 719a70858b341..949ebe6ff1e39 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/types.ts +++ b/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/types.ts @@ -6,7 +6,7 @@ */ import { RuleTypeParams } from '@kbn/alerting-plugin/common'; -import { Query } from '@kbn/data-plugin/common'; +import type { Query } from '@kbn/es-query'; export interface GeoContainmentAlertParams extends RuleTypeParams { index: string; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts b/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts index 75351e5872f35..23dd326b7e18b 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts +++ b/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts @@ -8,7 +8,7 @@ import React, { useCallback, useState } from 'react'; import useDebounce from 'react-use/lib/useDebounce'; import { useDispatch } from 'react-redux'; -import { Query } from '@kbn/data-plugin/common'; +import type { Query } from '@kbn/es-query'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { useGetUrlParams, diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_search_bar.ts b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_search_bar.ts index 486e9e4da79e2..4ea56b557c7ee 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_search_bar.ts +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_search_bar.ts @@ -8,7 +8,7 @@ import { useState } from 'react'; import { toElasticsearchQuery, fromKueryExpression, luceneStringToDsl } from '@kbn/es-query'; -import { Query } from '@kbn/data-plugin/public'; +import type { Query } from '@kbn/es-query'; import { getPivotQuery } from '../../../../../common'; From 8b444ef6e5ed460bcee090a8f9cbf9a40205931b Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Tue, 21 Jun 2022 15:30:16 +0300 Subject: [PATCH 31/50] [Cloud Posture] Using Eui theme with eui charts (#134759) --- .../cloud_security_posture/kibana.json | 2 +- .../cloud_posture_score_chart.tsx | 28 ++++++++++++++----- .../public/pages/findings/findings.test.tsx | 9 ++++-- .../latest_findings_container.test.tsx | 2 ++ .../public/test/test_provider.tsx | 8 +++++- .../cloud_security_posture/public/types.ts | 4 ++- 6 files changed, 41 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/kibana.json b/x-pack/plugins/cloud_security_posture/kibana.json index ec1452310bfe3..123e1e6ccf0e8 100755 --- a/x-pack/plugins/cloud_security_posture/kibana.json +++ b/x-pack/plugins/cloud_security_posture/kibana.json @@ -10,6 +10,6 @@ "description": "The cloud security posture plugin", "server": true, "ui": true, - "requiredPlugins": ["navigation", "data", "fleet", "unifiedSearch", "taskManager", "security"], + "requiredPlugins": ["navigation", "data", "fleet", "unifiedSearch", "taskManager", "security", "charts"], "requiredBundles": ["kibanaReact"] } diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx index 9fd7806d27665..98a3b140aa233 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx @@ -25,6 +25,7 @@ import { statusColors } from '../../../common/constants'; import type { PostureTrend, Stats } from '../../../../common/types'; import { CompactFormattedNumber } from '../../../components/compact_formatted_number'; import { RULE_FAILED, RULE_PASSED } from '../../../../common/constants'; +import { useKibana } from '../../../common/hooks/use_kibana'; interface CloudPostureScoreChartProps { trend: PostureTrend[]; @@ -44,18 +45,26 @@ const ScoreChart = ({ { label: RULE_PASSED, value: totalPassed }, { label: RULE_FAILED, value: totalFailed }, ]; + const { + services: { charts }, + } = useKibana(); return ( ({ const ComplianceTrendChart = ({ trend }: { trend: PostureTrend[] }) => { const epochTimeTrend = trend.map(convertTrendToEpochTime); + const { + services: { charts }, + } = useKibana(); return ( { const Wrapper = ({ data = dataPluginMock.createStartContract(), unifiedSearch = unifiedSearchPluginMock.createStartContract(), + charts = chartPluginMock.createStartContract(), }: { data: DataPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; + charts: ChartsPluginStart; }) => ( - + ); @@ -44,6 +48,7 @@ describe.skip('', () => { it("renders the success state component when 'latest findings' DataView exists and request status is 'success'", async () => { const data = dataPluginMock.createStartContract(); const unifiedSearch = unifiedSearchPluginMock.createStartContract(); + const charts = chartPluginMock.createStartContract(); const source = await data.search.searchSource.create(); (useCisKubernetesIntegration as jest.Mock).mockImplementation(() => ({ @@ -60,7 +65,7 @@ describe.skip('', () => { }), } as UseQueryResult); - render(); + render(); expect(await screen.findByTestId(TEST_SUBJECTS.FINDINGS_CONTAINER)).toBeInTheDocument(); }); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx index fb74aba060892..3e9fd0941495e 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx @@ -21,6 +21,7 @@ import { RisonObject } from 'rison-node'; import { buildEsQuery } from '@kbn/es-query'; import { getPaginationQuery } from '../utils'; import { FindingsEsPitContext } from '../es_pit/findings_es_pit_context'; +import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; jest.mock('../../../common/api/use_latest_findings_data_view'); jest.mock('../../../common/api/use_cis_kubernetes_integration'); @@ -64,6 +65,7 @@ describe('', () => { deps={{ data: dataMock, unifiedSearch: unifiedSearchPluginMock.createStartContract(), + charts: chartPluginMock.createStartContract(), }} > diff --git a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx index 068285abacdcc..d0a925069a884 100755 --- a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx +++ b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx @@ -12,11 +12,17 @@ import { QueryClient, QueryClientProvider } from 'react-query'; import { coreMock } from '@kbn/core/public/mocks'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; +import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import type { CspAppDeps } from '../application/app'; export const TestProvider: React.FC> = ({ core = coreMock.createStart(), - deps = { data: dataPluginMock.createStartContract() }, + deps = { + data: dataPluginMock.createStartContract(), + unifiedSearch: unifiedSearchPluginMock.createStartContract(), + charts: chartPluginMock.createStartContract(), + }, params = coreMock.createAppMountParameters(), children, } = {}) => { diff --git a/x-pack/plugins/cloud_security_posture/public/types.ts b/x-pack/plugins/cloud_security_posture/public/types.ts index 54cd9e22eb45f..f5fbb2766e6b9 100755 --- a/x-pack/plugins/cloud_security_posture/public/types.ts +++ b/x-pack/plugins/cloud_security_posture/public/types.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; +import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { ChartsPluginStart } from '@kbn/charts-plugin/public'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface CspClientPluginSetup {} @@ -24,5 +25,6 @@ export interface CspClientPluginStartDeps { // required data: DataPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; + charts: ChartsPluginStart; // optional } From 0c61eb481f8f19a94b03abd84efc4900a336c7d6 Mon Sep 17 00:00:00 2001 From: Kevin Lacabane Date: Tue, 21 Jun 2022 15:07:12 +0200 Subject: [PATCH 32/50] [Stack Monitoring] Query persistent queue size for metricbeat documents (#134569) * query metricbeat queue size * update snapshot * update integration tests Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../__snapshots__/metrics.test.js.snap | 54 +- .../server/lib/metrics/logstash/classes.ts | 31 +- .../server/lib/metrics/logstash/metrics.ts | 2 + .../es_archives/logstash_8/data.json.gz | Bin 0 -> 8210 bytes .../es_archives/logstash_8/mappings.json | 779 +++++++++ .../logstash/fixtures/node_detail_8.json | 1523 +++++++++++++++++ .../fixtures/node_detail_advanced_8.json | 1521 ++++++++++++++++ .../monitoring/logstash/node_detail_mb.js | 24 +- 8 files changed, 3916 insertions(+), 18 deletions(-) create mode 100644 x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8/data.json.gz create mode 100644 x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8/mappings.json create mode 100644 x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_8.json create mode 100644 x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_advanced_8.json diff --git a/x-pack/plugins/monitoring/server/lib/metrics/__snapshots__/metrics.test.js.snap b/x-pack/plugins/monitoring/server/lib/metrics/__snapshots__/metrics.test.js.snap index 91f4779509af2..068b849f0a1a1 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/__snapshots__/metrics.test.js.snap +++ b/x-pack/plugins/monitoring/server/lib/metrics/__snapshots__/metrics.test.js.snap @@ -6034,6 +6034,31 @@ Object { "path": "logstash_stats.pipelines", }, }, + "pipelines_mb": Object { + "aggs": Object { + "pipeline_by_id": Object { + "aggs": Object { + "queue_size_field": Object { + "max": Object { + "field": "logstash.node.stats.pipelines.queue.max_queue_size_in_bytes", + }, + }, + }, + "terms": Object { + "field": "logstash.node.stats.pipelines.id", + "size": 1000, + }, + }, + "total_queue_size_for_node": Object { + "sum_bucket": Object { + "buckets_path": "pipeline_by_id>queue_size_field", + }, + }, + }, + "nested": Object { + "path": "logstash.node.stats.pipelines", + }, + }, }, "derivative": false, "description": "Maximum size set for the persistent queues on this node.", @@ -6044,7 +6069,7 @@ Object { "getDateHistogramSubAggs": undefined, "isNotSupportedInInternalCollection": undefined, "label": "Max Queue Size", - "mbField": undefined, + "mbField": "logstash.node.stats.pipelines.queue.max_queue_size_in_bytes", "metricAgg": undefined, "periodsField": undefined, "quotaField": undefined, @@ -6083,6 +6108,31 @@ Object { "path": "logstash_stats.pipelines", }, }, + "pipelines_mb": Object { + "aggs": Object { + "pipeline_by_id": Object { + "aggs": Object { + "queue_size_field": Object { + "max": Object { + "field": "logstash.node.stats.pipelines.queue.queue_size_in_bytes", + }, + }, + }, + "terms": Object { + "field": "logstash.node.stats.pipelines.id", + "size": 1000, + }, + }, + "total_queue_size_for_node": Object { + "sum_bucket": Object { + "buckets_path": "pipeline_by_id>queue_size_field", + }, + }, + }, + "nested": Object { + "path": "logstash.node.stats.pipelines", + }, + }, }, "derivative": false, "description": "Current size of all persistent queues in the Logstash pipelines on this node.", @@ -6093,7 +6143,7 @@ Object { "getDateHistogramSubAggs": undefined, "isNotSupportedInInternalCollection": undefined, "label": "Queue Size", - "mbField": undefined, + "mbField": "logstash.node.stats.pipelines.queue.queue_size_in_bytes", "metricAgg": undefined, "periodsField": undefined, "quotaField": undefined, diff --git a/x-pack/plugins/monitoring/server/lib/metrics/logstash/classes.ts b/x-pack/plugins/monitoring/server/lib/metrics/logstash/classes.ts index 6fcd757e3c6c3..790f761637dbd 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/logstash/classes.ts +++ b/x-pack/plugins/monitoring/server/lib/metrics/logstash/classes.ts @@ -240,7 +240,7 @@ export class LogstashEventsRateMetric extends LogstashMetric { type LogstashPipelineQueueSizeMetricOptions = Pick< MetricOptions, - 'field' | 'label' | 'description' | 'format' | 'units' + 'field' | 'label' | 'description' | 'format' | 'units' | 'mbField' > & Partial>; @@ -274,9 +274,36 @@ export class LogstashPipelineQueueSizeMetric extends LogstashMetric { }, }, }, + pipelines_mb: { + nested: { + path: 'logstash.node.stats.pipelines', + }, + aggs: { + pipeline_by_id: { + terms: { + field: 'logstash.node.stats.pipelines.id', + size: 1000, + }, + aggs: { + queue_size_field: { + max: { + field: this.mbField, + }, + }, + }, + }, + total_queue_size_for_node: { + sum_bucket: { + buckets_path: 'pipeline_by_id>queue_size_field', + }, + }, + }, + }, }; this.calculation = (bucket: object) => { - return _.get(bucket, 'pipelines.total_queue_size_for_node.value'); + const legacyQueueSize = _.get(bucket, 'pipelines.total_queue_size_for_node.value'); + const mbQueueSize = _.get(bucket, 'pipelines_mb.total_queue_size_for_node.value'); + return Math.max(legacyQueueSize, mbQueueSize); }; } } diff --git a/x-pack/plugins/monitoring/server/lib/metrics/logstash/metrics.ts b/x-pack/plugins/monitoring/server/lib/metrics/logstash/metrics.ts index 87024a6de86ab..97119289d2139 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/logstash/metrics.ts +++ b/x-pack/plugins/monitoring/server/lib/metrics/logstash/metrics.ts @@ -402,6 +402,7 @@ export const metrics = { }), logstash_pipeline_queue_size: new LogstashPipelineQueueSizeMetric({ field: 'logstash_stats.pipelines.queue.queue_size_in_bytes', + mbField: 'logstash.node.stats.pipelines.queue.queue_size_in_bytes', label: i18n.translate('xpack.monitoring.metrics.logstashInstance.queueSizeLabel', { defaultMessage: 'Queue Size', }), @@ -417,6 +418,7 @@ export const metrics = { }), logstash_pipeline_max_queue_size: new LogstashPipelineQueueSizeMetric({ field: 'logstash_stats.pipelines.queue.max_queue_size_in_bytes', + mbField: 'logstash.node.stats.pipelines.queue.max_queue_size_in_bytes', label: i18n.translate('xpack.monitoring.metrics.logstashInstance.maxQueueSizeLabel', { defaultMessage: 'Max Queue Size', }), diff --git a/x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8/data.json.gz b/x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8/data.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d7f08e190b6e59c7a5b341ed9fdb79055c7b44c GIT binary patch literal 8210 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 YqYVjN6nnteySsnC--!9|03NRY0wvU&wEzGB literal 0 HcmV?d00001 diff --git a/x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8/mappings.json b/x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8/mappings.json new file mode 100644 index 0000000000000..af532355fae7a --- /dev/null +++ b/x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8/mappings.json @@ -0,0 +1,779 @@ +{ + "type": "data_stream", + "value": { + "data_stream": ".monitoring-logstash-8-mb", + "template": { + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + ".monitoring-logstash-8-*" + ], + "name": ".monitoring-logstash-mb", + "template": { + "mappings": { + "dynamic": false, + "properties": { + "@timestamp": { + "type": "date" + }, + "cluster_uuid": { + "path": "logstash.elasticsearch.cluster.id", + "type": "alias" + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reason": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "logstash": { + "properties": { + "elasticsearch": { + "properties": { + "cluster": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "node": { + "properties": { + "host": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "jvm": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "properties": { + "pipeline": { + "properties": { + "batch_size": { + "type": "long" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "representation": { + "properties": { + "graph": { + "properties": { + "edges": { + "type": "object" + }, + "vertices": { + "type": "object" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "workers": { + "type": "long" + } + } + } + } + }, + "stats": { + "properties": { + "events": { + "properties": { + "duration_in_millis": { + "type": "long" + }, + "filtered": { + "type": "long" + }, + "in": { + "type": "long" + }, + "out": { + "type": "long" + } + } + }, + "jvm": { + "properties": { + "mem": { + "properties": { + "heap_max_in_bytes": { + "type": "long" + }, + "heap_used_in_bytes": { + "type": "long" + } + } + }, + "uptime_in_millis": { + "type": "long" + } + } + }, + "logstash": { + "properties": { + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "cgroup": { + "properties": { + "cpu": { + "properties": { + "stat": { + "properties": { + "number_of_elapsed_periods": { + "type": "long" + }, + "number_of_times_throttled": { + "type": "long" + }, + "time_throttled_nanos": { + "type": "long" + } + } + } + } + }, + "cpuacct": { + "properties": { + "usage_nanos": { + "type": "long" + } + } + } + } + }, + "cpu": { + "properties": { + "load_average": { + "properties": { + "15m": { + "type": "long" + }, + "1m": { + "type": "long" + }, + "5m": { + "type": "long" + } + } + } + } + } + } + }, + "pipelines": { + "properties": { + "ephemeral_id": { + "type": "keyword" + }, + "events": { + "properties": { + "duration_in_millis": { + "type": "long" + }, + "filtered": { + "type": "long" + }, + "in": { + "type": "long" + }, + "out": { + "type": "long" + }, + "queue_push_duration_in_millis": { + "type": "long" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "queue": { + "properties": { + "events_count": { + "type": "long" + }, + "max_queue_size_in_bytes": { + "type": "long" + }, + "queue_size_in_bytes": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "reloads": { + "properties": { + "failures": { + "type": "long" + }, + "successes": { + "type": "long" + } + } + }, + "vertices": { + "properties": { + "duration_in_millis": { + "type": "long" + }, + "events_in": { + "type": "long" + }, + "events_out": { + "type": "long" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "long_counters": { + "properties": { + "name": { + "type": "keyword" + }, + "value": { + "type": "long" + } + }, + "type": "nested" + }, + "pipeline_ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "queue_push_duration_in_millis": { + "type": "long" + } + }, + "type": "nested" + } + }, + "type": "nested" + }, + "process": { + "properties": { + "cpu": { + "properties": { + "percent": { + "type": "double" + } + } + } + } + }, + "queue": { + "properties": { + "events_count": { + "type": "long" + } + } + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "logstash_state": { + "properties": { + "pipeline": { + "properties": { + "hash": { + "path": "logstash.node.state.pipeline.hash", + "type": "alias" + }, + "id": { + "path": "logstash.node.state.pipeline.id", + "type": "alias" + } + } + } + } + }, + "logstash_stats": { + "properties": { + "events": { + "properties": { + "duration_in_millis": { + "path": "logstash.node.stats.events.duration_in_millis", + "type": "alias" + }, + "in": { + "path": "logstash.node.stats.events.in", + "type": "alias" + }, + "out": { + "path": "logstash.node.stats.events.out", + "type": "alias" + } + } + }, + "jvm": { + "properties": { + "mem": { + "properties": { + "heap_max_in_bytes": { + "path": "logstash.node.stats.jvm.mem.heap_max_in_bytes", + "type": "alias" + }, + "heap_used_in_bytes": { + "path": "logstash.node.stats.jvm.mem.heap_used_in_bytes", + "type": "alias" + } + } + }, + "uptime_in_millis": { + "path": "logstash.node.stats.jvm.uptime_in_millis", + "type": "alias" + } + } + }, + "logstash": { + "properties": { + "uuid": { + "path": "logstash.node.stats.logstash.uuid", + "type": "alias" + }, + "version": { + "path": "logstash.node.stats.logstash.version", + "type": "alias" + } + } + }, + "os": { + "properties": { + "cgroup": { + "properties": { + "cpuacct": { + "properties": { + "usage_nanos": { + "path": "logstash.node.stats.os.cgroup.cpuacct.usage_nanos", + "type": "alias" + } + } + } + } + }, + "cpu": { + "properties": { + "load_average": { + "properties": { + "15m": { + "path": "logstash.node.stats.os.cpu.load_average.15m", + "type": "alias" + }, + "1m": { + "path": "logstash.node.stats.os.cpu.load_average.1m", + "type": "alias" + }, + "5m": { + "path": "logstash.node.stats.os.cpu.load_average.5m", + "type": "alias" + } + } + }, + "stat": { + "properties": { + "number_of_elapsed_periods": { + "path": "logstash.node.stats.os.cgroup.cpu.stat.number_of_elapsed_periods", + "type": "alias" + }, + "number_of_times_throttled": { + "path": "logstash.node.stats.os.cgroup.cpu.stat.number_of_times_throttled", + "type": "alias" + }, + "time_throttled_nanos": { + "path": "logstash.node.stats.os.cgroup.cpu.stat.time_throttled_nanos", + "type": "alias" + } + } + } + } + } + } + }, + "pipelines": { + "type": "nested" + }, + "process": { + "properties": { + "cpu": { + "properties": { + "percent": { + "path": "logstash.node.stats.process.cpu.percent", + "type": "alias" + } + } + } + } + }, + "queue": { + "properties": { + "events_count": { + "path": "logstash.node.stats.queue.events_count", + "type": "alias" + } + } + }, + "timestamp": { + "path": "@timestamp", + "type": "alias" + } + } + }, + "metricset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "period": { + "type": "long" + } + } + }, + "process": { + "properties": { + "pid": { + "type": "long" + } + } + }, + "service": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "path": "@timestamp", + "type": "alias" + } + } + }, + "settings": { + "index": { + "lifecycle": { + "name": ".monitoring-8-ilm-policy" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + } + } + } + }, + "version": 8000101 + } + } +} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_8.json b/x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_8.json new file mode 100644 index 0000000000000..e283406909808 --- /dev/null +++ b/x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_8.json @@ -0,0 +1,1523 @@ +{ + "metrics": { + "logstash_os_load": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.os.cpu.load_average.1m", + "metricAgg": "max", + "label": "1m", + "title": "System Load", + "description": "Load average over the last minute.", + "units": "", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 3 + ], + [ + 1655471950000, + 3 + ], + [ + 1655471960000, + 3 + ], + [ + 1655471970000, + 3 + ], + [ + 1655471980000, + 2 + ], + [ + 1655471990000, + 2 + ], + [ + 1655472000000, + 2 + ], + [ + 1655472010000, + 2 + ], + [ + 1655472020000, + 2 + ], + [ + 1655472030000, + 2 + ], + [ + 1655472040000, + 2 + ], + [ + 1655472050000, + 2 + ], + [ + 1655472060000, + 2 + ], + [ + 1655472070000, + 2 + ], + [ + 1655472080000, + 2 + ], + [ + 1655472090000, + 2 + ], + [ + 1655472100000, + 2 + ], + [ + 1655472110000, + 2 + ], + [ + 1655472120000, + 1 + ], + [ + 1655472130000, + 1 + ], + [ + 1655472140000, + 1 + ], + [ + 1655472150000, + 1 + ], + [ + 1655472160000, + 1 + ], + [ + 1655472170000, + 2 + ], + [ + 1655472180000, + 2 + ], + [ + 1655472190000, + 2 + ], + [ + 1655472200000, + 2 + ], + [ + 1655472210000, + 2 + ], + [ + 1655472220000, + 2 + ], + [ + 1655472230000, + 2 + ], + [ + 1655472240000, + 3 + ], + [ + 1655472250000, + 3 + ], + [ + 1655472260000, + 2 + ], + [ + 1655472270000, + 2 + ], + [ + 1655472280000, + 2 + ], + [ + 1655472290000, + 2 + ] + ] + }, + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.os.cpu.load_average.5m", + "metricAgg": "max", + "label": "5m", + "title": "System Load", + "description": "Load average over the last 5 minutes.", + "units": "", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + null + ], + [ + 1655471960000, + null + ], + [ + 1655471970000, + null + ], + [ + 1655471980000, + null + ], + [ + 1655471990000, + null + ], + [ + 1655472000000, + null + ], + [ + 1655472010000, + null + ], + [ + 1655472020000, + null + ], + [ + 1655472030000, + null + ], + [ + 1655472040000, + null + ], + [ + 1655472050000, + null + ], + [ + 1655472060000, + null + ], + [ + 1655472070000, + null + ], + [ + 1655472080000, + null + ], + [ + 1655472090000, + null + ], + [ + 1655472100000, + null + ], + [ + 1655472110000, + null + ], + [ + 1655472120000, + null + ], + [ + 1655472130000, + null + ], + [ + 1655472140000, + null + ], + [ + 1655472150000, + null + ], + [ + 1655472160000, + null + ], + [ + 1655472170000, + null + ], + [ + 1655472180000, + null + ], + [ + 1655472190000, + null + ], + [ + 1655472200000, + null + ], + [ + 1655472210000, + null + ], + [ + 1655472220000, + null + ], + [ + 1655472230000, + null + ], + [ + 1655472240000, + null + ], + [ + 1655472250000, + null + ], + [ + 1655472260000, + null + ], + [ + 1655472270000, + null + ], + [ + 1655472280000, + null + ], + [ + 1655472290000, + null + ] + ] + }, + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.os.cpu.load_average.15m", + "metricAgg": "max", + "label": "15m", + "title": "System Load", + "description": "Load average over the last 15 minutes.", + "units": "", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + null + ], + [ + 1655471960000, + null + ], + [ + 1655471970000, + null + ], + [ + 1655471980000, + null + ], + [ + 1655471990000, + null + ], + [ + 1655472000000, + null + ], + [ + 1655472010000, + null + ], + [ + 1655472020000, + null + ], + [ + 1655472030000, + null + ], + [ + 1655472040000, + null + ], + [ + 1655472050000, + null + ], + [ + 1655472060000, + null + ], + [ + 1655472070000, + null + ], + [ + 1655472080000, + null + ], + [ + 1655472090000, + null + ], + [ + 1655472100000, + null + ], + [ + 1655472110000, + null + ], + [ + 1655472120000, + null + ], + [ + 1655472130000, + null + ], + [ + 1655472140000, + null + ], + [ + 1655472150000, + null + ], + [ + 1655472160000, + null + ], + [ + 1655472170000, + null + ], + [ + 1655472180000, + null + ], + [ + 1655472190000, + null + ], + [ + 1655472200000, + null + ], + [ + 1655472210000, + null + ], + [ + 1655472220000, + null + ], + [ + 1655472230000, + null + ], + [ + 1655472240000, + null + ], + [ + 1655472250000, + null + ], + [ + 1655472260000, + null + ], + [ + 1655472270000, + null + ], + [ + 1655472280000, + null + ], + [ + 1655472290000, + null + ] + ] + } + ], + "logstash_events_input_rate": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.events.in", + "metricAgg": "max", + "label": "Events Received Rate", + "description": "Number of events received per second by the Logstash node at the inputs stage.", + "units": "/s", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": true + }, + "data": [ + [ + 1655471940000, + 10 + ], + [ + 1655471950000, + 10 + ], + [ + 1655471960000, + 10 + ], + [ + 1655471970000, + 10 + ], + [ + 1655471980000, + 10 + ], + [ + 1655471990000, + 10 + ], + [ + 1655472000000, + 10 + ], + [ + 1655472010000, + 10 + ], + [ + 1655472020000, + 10 + ], + [ + 1655472030000, + 10 + ], + [ + 1655472040000, + 10 + ], + [ + 1655472050000, + 10 + ], + [ + 1655472060000, + 10 + ], + [ + 1655472070000, + 10 + ], + [ + 1655472080000, + 10 + ], + [ + 1655472090000, + 10 + ], + [ + 1655472100000, + 10 + ], + [ + 1655472110000, + 10 + ], + [ + 1655472120000, + 10 + ], + [ + 1655472130000, + 10 + ], + [ + 1655472140000, + 10 + ], + [ + 1655472150000, + 10 + ], + [ + 1655472160000, + 10 + ], + [ + 1655472170000, + 10 + ], + [ + 1655472180000, + 10 + ], + [ + 1655472190000, + 10 + ], + [ + 1655472200000, + 10 + ], + [ + 1655472210000, + 10 + ], + [ + 1655472220000, + 10 + ], + [ + 1655472230000, + 10 + ], + [ + 1655472240000, + 10 + ], + [ + 1655472250000, + 10 + ], + [ + 1655472260000, + 10 + ], + [ + 1655472270000, + 10 + ], + [ + 1655472280000, + 10 + ], + [ + 1655472290000, + 10 + ] + ] + } + ], + "logstash_events_output_rate": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.events.out", + "metricAgg": "max", + "label": "Events Emitted Rate", + "description": "Number of events emitted per second by the Logstash node at the outputs stage.", + "units": "/s", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": true + }, + "data": [ + [ + 1655471940000, + 7 + ], + [ + 1655471950000, + 4.3 + ], + [ + 1655471960000, + 7.3 + ], + [ + 1655471970000, + 8.2 + ], + [ + 1655471980000, + 6 + ], + [ + 1655471990000, + 3.7 + ], + [ + 1655472000000, + 10.3 + ], + [ + 1655472010000, + 10.5 + ], + [ + 1655472020000, + 6.2 + ], + [ + 1655472030000, + 4.4 + ], + [ + 1655472040000, + 2.1 + ], + [ + 1655472050000, + 10.8 + ], + [ + 1655472060000, + 12.9 + ], + [ + 1655472070000, + 4.4 + ], + [ + 1655472080000, + 0 + ], + [ + 1655472090000, + 5.9 + ], + [ + 1655472100000, + 10.4 + ], + [ + 1655472110000, + 10.8 + ], + [ + 1655472120000, + 0.7 + ], + [ + 1655472130000, + 5.6 + ], + [ + 1655472140000, + 8.3 + ], + [ + 1655472150000, + 9.3 + ], + [ + 1655472160000, + 10.7 + ], + [ + 1655472170000, + 1.3 + ], + [ + 1655472180000, + 4.3 + ], + [ + 1655472190000, + 13.7 + ], + [ + 1655472200000, + 13.1 + ], + [ + 1655472210000, + 4.2 + ], + [ + 1655472220000, + 0 + ], + [ + 1655472230000, + 3.7 + ], + [ + 1655472240000, + 10.2 + ], + [ + 1655472250000, + 0 + ], + [ + 1655472260000, + 8.2 + ], + [ + 1655472270000, + 5.9 + ], + [ + 1655472280000, + 8.8 + ], + [ + 1655472290000, + 2.5 + ] + ] + } + ], + "logstash_events_latency": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.events.out", + "metricAgg": "sum", + "label": "Event Latency", + "description": "Average time spent by events in the filter and output stages, which is the total time it takes to process events divided by number of events emitted.", + "units": "ms", + "format": "0,0.[00]", + "hasCalculation": true, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + 2003.279069767442 + ], + [ + 1655471960000, + 2003.150684931507 + ], + [ + 1655471970000, + 1978.9146341463418 + ], + [ + 1655471980000, + 1969.45 + ], + [ + 1655471990000, + 2003.4864864864862 + ], + [ + 1655472000000, + 2002.9708737864075 + ], + [ + 1655472010000, + 1984.1809523809525 + ], + [ + 1655472020000, + 1970.5483870967741 + ], + [ + 1655472030000, + 2002.7954545454543 + ], + [ + 1655472040000, + 2002.6666666666667 + ], + [ + 1655472050000, + 2002.9629629629628 + ], + [ + 1655472060000, + 2002.7519379844962 + ], + [ + 1655472070000, + 2002.931818181818 + ], + [ + 1655472080000, + 0 + ], + [ + 1655472090000, + 2002.6440677966102 + ], + [ + 1655472100000, + 1983.9326923076924 + ], + [ + 1655472110000, + 2002.8425925925926 + ], + [ + 1655472120000, + 2003.4285714285718 + ], + [ + 1655472130000, + 2002.964285714286 + ], + [ + 1655472140000, + 2002.9518072289154 + ], + [ + 1655472150000, + 2002.9462365591398 + ], + [ + 1655472160000, + 2003.0093457943926 + ], + [ + 1655472170000, + 2002.5384615384617 + ], + [ + 1655472180000, + 2002.7906976744187 + ], + [ + 1655472190000, + 1973.7956204379564 + ], + [ + 1655472200000, + 1957.0381679389313 + ], + [ + 1655472210000, + 2002.6666666666667 + ], + [ + 1655472220000, + 0 + ], + [ + 1655472230000, + 2003.2432432432431 + ], + [ + 1655472240000, + 2003.029411764706 + ], + [ + 1655472250000, + 0 + ], + [ + 1655472260000, + 2003.0243902439024 + ], + [ + 1655472270000, + 2003.0338983050847 + ], + [ + 1655472280000, + 2002.9772727272727 + ], + [ + 1655472290000, + 2002.6799999999998 + ] + ] + } + ], + "logstash_node_cpu_metric": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.process.cpu.percent", + "metricAgg": "max", + "label": "CPU Utilization", + "description": "Percentage of CPU usage reported by the OS (100% is the max).", + "units": "%", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 0 + ], + [ + 1655471950000, + 0 + ], + [ + 1655471960000, + 0 + ], + [ + 1655471970000, + 0 + ], + [ + 1655471980000, + 0 + ], + [ + 1655471990000, + 0 + ], + [ + 1655472000000, + 0 + ], + [ + 1655472010000, + 0 + ], + [ + 1655472020000, + 0 + ], + [ + 1655472030000, + 0 + ], + [ + 1655472040000, + 0 + ], + [ + 1655472050000, + 0 + ], + [ + 1655472060000, + 0 + ], + [ + 1655472070000, + 0 + ], + [ + 1655472080000, + 0 + ], + [ + 1655472090000, + 0 + ], + [ + 1655472100000, + 0 + ], + [ + 1655472110000, + 0 + ], + [ + 1655472120000, + 0 + ], + [ + 1655472130000, + 0 + ], + [ + 1655472140000, + 0 + ], + [ + 1655472150000, + 0 + ], + [ + 1655472160000, + 0 + ], + [ + 1655472170000, + 0 + ], + [ + 1655472180000, + 0 + ], + [ + 1655472190000, + 0 + ], + [ + 1655472200000, + 0 + ], + [ + 1655472210000, + 0 + ], + [ + 1655472220000, + 0 + ], + [ + 1655472230000, + 0 + ], + [ + 1655472240000, + 0 + ], + [ + 1655472250000, + 0 + ], + [ + 1655472260000, + 0 + ], + [ + 1655472270000, + 0 + ], + [ + 1655472280000, + 0 + ], + [ + 1655472290000, + 0 + ] + ] + } + ], + "logstash_jvm_usage": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.jvm.mem.heap_max_in_bytes", + "metricAgg": "max", + "label": "Max Heap", + "title": "JVM Heap", + "description": "Total heap available to Logstash running in the JVM.", + "units": "B", + "format": "0.0 b", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 1037959168 + ], + [ + 1655471950000, + 1037959168 + ], + [ + 1655471960000, + 1037959168 + ], + [ + 1655471970000, + 1037959168 + ], + [ + 1655471980000, + 1037959168 + ], + [ + 1655471990000, + 1037959168 + ], + [ + 1655472000000, + 1037959168 + ], + [ + 1655472010000, + 1037959168 + ], + [ + 1655472020000, + 1037959168 + ], + [ + 1655472030000, + 1037959168 + ], + [ + 1655472040000, + 1037959168 + ], + [ + 1655472050000, + 1037959168 + ], + [ + 1655472060000, + 1037959168 + ], + [ + 1655472070000, + 1037959168 + ], + [ + 1655472080000, + 1037959168 + ], + [ + 1655472090000, + 1037959168 + ], + [ + 1655472100000, + 1037959168 + ], + [ + 1655472110000, + 1037959168 + ], + [ + 1655472120000, + 1037959168 + ], + [ + 1655472130000, + 1037959168 + ], + [ + 1655472140000, + 1037959168 + ], + [ + 1655472150000, + 1037959168 + ], + [ + 1655472160000, + 1037959168 + ], + [ + 1655472170000, + 1037959168 + ], + [ + 1655472180000, + 1037959168 + ], + [ + 1655472190000, + 1037959168 + ], + [ + 1655472200000, + 1037959168 + ], + [ + 1655472210000, + 1037959168 + ], + [ + 1655472220000, + 1037959168 + ], + [ + 1655472230000, + 1037959168 + ], + [ + 1655472240000, + 1037959168 + ], + [ + 1655472250000, + 1037959168 + ], + [ + 1655472260000, + 1037959168 + ], + [ + 1655472270000, + 1037959168 + ], + [ + 1655472280000, + 1037959168 + ], + [ + 1655472290000, + 1037959168 + ] + ] + }, + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.jvm.mem.heap_used_in_bytes", + "metricAgg": "max", + "label": "Used Heap", + "title": "JVM Heap", + "description": "Total heap used by Logstash running in the JVM.", + "units": "B", + "format": "0.0 b", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 248983808 + ], + [ + 1655471950000, + 254463104 + ], + [ + 1655471960000, + 260278488 + ], + [ + 1655471970000, + 265273976 + ], + [ + 1655471980000, + 269846232 + ], + [ + 1655471990000, + 274251248 + ], + [ + 1655472000000, + 278416256 + ], + [ + 1655472010000, + 282938928 + ], + [ + 1655472020000, + 287769440 + ], + [ + 1655472030000, + 292220848 + ], + [ + 1655472040000, + 295623816 + ], + [ + 1655472050000, + 299332480 + ], + [ + 1655472060000, + 305022864 + ], + [ + 1655472070000, + 310001816 + ], + [ + 1655472080000, + 312599256 + ], + [ + 1655472090000, + 317015008 + ], + [ + 1655472100000, + 320427488 + ], + [ + 1655472110000, + 325544640 + ], + [ + 1655472120000, + 329544016 + ], + [ + 1655472130000, + 332205376 + ], + [ + 1655472140000, + 337552416 + ], + [ + 1655472150000, + 341823888 + ], + [ + 1655472160000, + 345948696 + ], + [ + 1655472170000, + 348979208 + ], + [ + 1655472180000, + 353352704 + ], + [ + 1655472190000, + 358819752 + ], + [ + 1655472200000, + 363752360 + ], + [ + 1655472210000, + 367726528 + ], + [ + 1655472220000, + 371043320 + ], + [ + 1655472230000, + 374659232 + ], + [ + 1655472240000, + 379147672 + ], + [ + 1655472250000, + 383031600 + ], + [ + 1655472260000, + 392741408 + ], + [ + 1655472270000, + 395632912 + ], + [ + 1655472280000, + 400452624 + ], + [ + 1655472290000, + 405401144 + ] + ] + } + ] + }, + "nodeSummary": { + "ephemeral_id": "88c01586-1891-4a0e-a2ca-ca5c988f8cbb", + "host": "kevins-macbook-pro.home", + "http_address": "127.0.0.1:9600", + "name": "kevins-macbook-pro.home", + "pipeline": { + "batch_size": 125, + "workers": 16 + }, + "snapshot": false, + "status": "green", + "uuid": "f9efd237-3bbf-4a9b-9ce7-a16141b9d981", + "version": "8.2.2", + "availability": false, + "events": { + "duration_in_millis": 5145881, + "filtered": 2579, + "in": 3978, + "out": 2579 + }, + "reloads": { + "failures": 0, + "successes": 0 + }, + "uptime": 407358 + } +} diff --git a/x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_advanced_8.json b/x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_advanced_8.json new file mode 100644 index 0000000000000..41760111cf055 --- /dev/null +++ b/x-pack/test/api_integration/apis/monitoring/logstash/fixtures/node_detail_advanced_8.json @@ -0,0 +1,1521 @@ +{ + "metrics": { + "logstash_node_cpu_utilization": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.process.cpu.percent", + "metricAgg": "max", + "label": "CPU Utilization", + "description": "Percentage of CPU usage reported by the OS (100% is the max).", + "units": "%", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 0 + ], + [ + 1655471950000, + 0 + ], + [ + 1655471960000, + 0 + ], + [ + 1655471970000, + 0 + ], + [ + 1655471980000, + 0 + ], + [ + 1655471990000, + 0 + ], + [ + 1655472000000, + 0 + ], + [ + 1655472010000, + 0 + ], + [ + 1655472020000, + 0 + ], + [ + 1655472030000, + 0 + ], + [ + 1655472040000, + 0 + ], + [ + 1655472050000, + 0 + ], + [ + 1655472060000, + 0 + ], + [ + 1655472070000, + 0 + ], + [ + 1655472080000, + 0 + ], + [ + 1655472090000, + 0 + ], + [ + 1655472100000, + 0 + ], + [ + 1655472110000, + 0 + ], + [ + 1655472120000, + 0 + ], + [ + 1655472130000, + 0 + ], + [ + 1655472140000, + 0 + ], + [ + 1655472150000, + 0 + ], + [ + 1655472160000, + 0 + ], + [ + 1655472170000, + 0 + ], + [ + 1655472180000, + 0 + ], + [ + 1655472190000, + 0 + ], + [ + 1655472200000, + 0 + ], + [ + 1655472210000, + 0 + ], + [ + 1655472220000, + 0 + ], + [ + 1655472230000, + 0 + ], + [ + 1655472240000, + 0 + ], + [ + 1655472250000, + 0 + ], + [ + 1655472260000, + 0 + ], + [ + 1655472270000, + 0 + ], + [ + 1655472280000, + 0 + ], + [ + 1655472290000, + 0 + ] + ] + }, + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.process.cpu.percent", + "metricAgg": "max", + "label": "Cgroup CPU Utilization", + "title": "CPU Utilization", + "description": "CPU Usage time compared to the CPU quota shown in percentage. If CPU quotas are not set, then no data will be shown.", + "units": "%", + "format": "0,0.[00]", + "hasCalculation": true, + "isDerivative": true + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + null + ], + [ + 1655471960000, + null + ], + [ + 1655471970000, + null + ], + [ + 1655471980000, + null + ], + [ + 1655471990000, + null + ], + [ + 1655472000000, + null + ], + [ + 1655472010000, + null + ], + [ + 1655472020000, + null + ], + [ + 1655472030000, + null + ], + [ + 1655472040000, + null + ], + [ + 1655472050000, + null + ], + [ + 1655472060000, + null + ], + [ + 1655472070000, + null + ], + [ + 1655472080000, + null + ], + [ + 1655472090000, + null + ], + [ + 1655472100000, + null + ], + [ + 1655472110000, + null + ], + [ + 1655472120000, + null + ], + [ + 1655472130000, + null + ], + [ + 1655472140000, + null + ], + [ + 1655472150000, + null + ], + [ + 1655472160000, + null + ], + [ + 1655472170000, + null + ], + [ + 1655472180000, + null + ], + [ + 1655472190000, + null + ], + [ + 1655472200000, + null + ], + [ + 1655472210000, + null + ], + [ + 1655472220000, + null + ], + [ + 1655472230000, + null + ], + [ + 1655472240000, + null + ], + [ + 1655472250000, + null + ], + [ + 1655472260000, + null + ], + [ + 1655472270000, + null + ], + [ + 1655472280000, + null + ], + [ + 1655472290000, + null + ] + ] + } + ], + "logstash_node_cgroup_cpu": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.os.cgroup.cpuacct.usage_nanos", + "metricAgg": "max", + "label": "Cgroup Usage", + "title": "Cgroup CPU Performance", + "description": "The usage, reported in nanoseconds, of the Cgroup. Compare this with the throttling to discover issues.", + "units": "ns", + "format": "0,0.[0]a", + "hasCalculation": false, + "isDerivative": true + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + null + ], + [ + 1655471960000, + null + ], + [ + 1655471970000, + null + ], + [ + 1655471980000, + null + ], + [ + 1655471990000, + null + ], + [ + 1655472000000, + null + ], + [ + 1655472010000, + null + ], + [ + 1655472020000, + null + ], + [ + 1655472030000, + null + ], + [ + 1655472040000, + null + ], + [ + 1655472050000, + null + ], + [ + 1655472060000, + null + ], + [ + 1655472070000, + null + ], + [ + 1655472080000, + null + ], + [ + 1655472090000, + null + ], + [ + 1655472100000, + null + ], + [ + 1655472110000, + null + ], + [ + 1655472120000, + null + ], + [ + 1655472130000, + null + ], + [ + 1655472140000, + null + ], + [ + 1655472150000, + null + ], + [ + 1655472160000, + null + ], + [ + 1655472170000, + null + ], + [ + 1655472180000, + null + ], + [ + 1655472190000, + null + ], + [ + 1655472200000, + null + ], + [ + 1655472210000, + null + ], + [ + 1655472220000, + null + ], + [ + 1655472230000, + null + ], + [ + 1655472240000, + null + ], + [ + 1655472250000, + null + ], + [ + 1655472260000, + null + ], + [ + 1655472270000, + null + ], + [ + 1655472280000, + null + ], + [ + 1655472290000, + null + ] + ] + }, + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.os.cgroup.cpu.stat.time_throttled_nanos", + "metricAgg": "max", + "label": "Cgroup Throttling", + "title": "Cgroup CPU Performance", + "description": "The amount of throttled time, reported in nanoseconds, of the Cgroup.", + "units": "ns", + "format": "0,0.[0]a", + "hasCalculation": false, + "isDerivative": true + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + null + ], + [ + 1655471960000, + null + ], + [ + 1655471970000, + null + ], + [ + 1655471980000, + null + ], + [ + 1655471990000, + null + ], + [ + 1655472000000, + null + ], + [ + 1655472010000, + null + ], + [ + 1655472020000, + null + ], + [ + 1655472030000, + null + ], + [ + 1655472040000, + null + ], + [ + 1655472050000, + null + ], + [ + 1655472060000, + null + ], + [ + 1655472070000, + null + ], + [ + 1655472080000, + null + ], + [ + 1655472090000, + null + ], + [ + 1655472100000, + null + ], + [ + 1655472110000, + null + ], + [ + 1655472120000, + null + ], + [ + 1655472130000, + null + ], + [ + 1655472140000, + null + ], + [ + 1655472150000, + null + ], + [ + 1655472160000, + null + ], + [ + 1655472170000, + null + ], + [ + 1655472180000, + null + ], + [ + 1655472190000, + null + ], + [ + 1655472200000, + null + ], + [ + 1655472210000, + null + ], + [ + 1655472220000, + null + ], + [ + 1655472230000, + null + ], + [ + 1655472240000, + null + ], + [ + 1655472250000, + null + ], + [ + 1655472260000, + null + ], + [ + 1655472270000, + null + ], + [ + 1655472280000, + null + ], + [ + 1655472290000, + null + ] + ] + } + ], + "logstash_node_cgroup_stats": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.os.cgroup.cpu.stat.number_of_elapsed_periods", + "metricAgg": "max", + "label": "Cgroup Elapsed Periods", + "title": "Cgroup CFS Stats", + "description": "The number of sampling periods from the Completely Fair Scheduler (CFS). Compare against the number of times throttled.", + "units": "", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": true + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + null + ], + [ + 1655471960000, + null + ], + [ + 1655471970000, + null + ], + [ + 1655471980000, + null + ], + [ + 1655471990000, + null + ], + [ + 1655472000000, + null + ], + [ + 1655472010000, + null + ], + [ + 1655472020000, + null + ], + [ + 1655472030000, + null + ], + [ + 1655472040000, + null + ], + [ + 1655472050000, + null + ], + [ + 1655472060000, + null + ], + [ + 1655472070000, + null + ], + [ + 1655472080000, + null + ], + [ + 1655472090000, + null + ], + [ + 1655472100000, + null + ], + [ + 1655472110000, + null + ], + [ + 1655472120000, + null + ], + [ + 1655472130000, + null + ], + [ + 1655472140000, + null + ], + [ + 1655472150000, + null + ], + [ + 1655472160000, + null + ], + [ + 1655472170000, + null + ], + [ + 1655472180000, + null + ], + [ + 1655472190000, + null + ], + [ + 1655472200000, + null + ], + [ + 1655472210000, + null + ], + [ + 1655472220000, + null + ], + [ + 1655472230000, + null + ], + [ + 1655472240000, + null + ], + [ + 1655472250000, + null + ], + [ + 1655472260000, + null + ], + [ + 1655472270000, + null + ], + [ + 1655472280000, + null + ], + [ + 1655472290000, + null + ] + ] + }, + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.os.cgroup.cpu.stat.number_of_times_throttled", + "metricAgg": "max", + "label": "Cgroup Throttled Count", + "title": "Cgroup CFS Stats", + "description": "The number of times that the CPU was throttled by the Cgroup.", + "units": "", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": true + }, + "data": [ + [ + 1655471940000, + null + ], + [ + 1655471950000, + null + ], + [ + 1655471960000, + null + ], + [ + 1655471970000, + null + ], + [ + 1655471980000, + null + ], + [ + 1655471990000, + null + ], + [ + 1655472000000, + null + ], + [ + 1655472010000, + null + ], + [ + 1655472020000, + null + ], + [ + 1655472030000, + null + ], + [ + 1655472040000, + null + ], + [ + 1655472050000, + null + ], + [ + 1655472060000, + null + ], + [ + 1655472070000, + null + ], + [ + 1655472080000, + null + ], + [ + 1655472090000, + null + ], + [ + 1655472100000, + null + ], + [ + 1655472110000, + null + ], + [ + 1655472120000, + null + ], + [ + 1655472130000, + null + ], + [ + 1655472140000, + null + ], + [ + 1655472150000, + null + ], + [ + 1655472160000, + null + ], + [ + 1655472170000, + null + ], + [ + 1655472180000, + null + ], + [ + 1655472190000, + null + ], + [ + 1655472200000, + null + ], + [ + 1655472210000, + null + ], + [ + 1655472220000, + null + ], + [ + 1655472230000, + null + ], + [ + 1655472240000, + null + ], + [ + 1655472250000, + null + ], + [ + 1655472260000, + null + ], + [ + 1655472270000, + null + ], + [ + 1655472280000, + null + ], + [ + 1655472290000, + null + ] + ] + } + ], + "logstash_queue_events_count": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.queue.events_count", + "metricAgg": "max", + "label": "Events Queued", + "title": "Persistent Queue Events", + "description": "Average number of events in the persistent queue waiting to be processed by the filter and output stages.", + "units": "", + "format": "0,0.[00]", + "hasCalculation": false, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 7 + ], + [ + 1655471950000, + 2 + ], + [ + 1655471960000, + 0 + ], + [ + 1655471970000, + 15 + ], + [ + 1655471980000, + 7 + ], + [ + 1655471990000, + 2 + ], + [ + 1655472000000, + 2 + ], + [ + 1655472010000, + 14 + ], + [ + 1655472020000, + 28 + ], + [ + 1655472030000, + 21 + ], + [ + 1655472040000, + 61 + ], + [ + 1655472050000, + 14 + ], + [ + 1655472060000, + 6 + ], + [ + 1655472070000, + 0 + ], + [ + 1655472080000, + 101 + ], + [ + 1655472090000, + 76 + ], + [ + 1655472100000, + 6 + ], + [ + 1655472110000, + 23 + ], + [ + 1655472120000, + 23 + ], + [ + 1655472130000, + 123 + ], + [ + 1655472140000, + 51 + ], + [ + 1655472150000, + 23 + ], + [ + 1655472160000, + 2 + ], + [ + 1655472170000, + 102 + ], + [ + 1655472180000, + 78 + ], + [ + 1655472190000, + 22 + ], + [ + 1655472200000, + 17 + ], + [ + 1655472210000, + 14 + ], + [ + 1655472220000, + 70 + ], + [ + 1655472230000, + 45 + ], + [ + 1655472240000, + 17 + ], + [ + 1655472250000, + 75 + ], + [ + 1655472260000, + 52 + ], + [ + 1655472270000, + 153 + ], + [ + 1655472280000, + 1 + ], + [ + 1655472290000, + 16 + ] + ] + } + ], + "logstash_pipeline_queue_size": [ + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.pipelines.queue.queue_size_in_bytes", + "label": "Queue Size", + "title": "Persistent Queue Size", + "description": "Current size of all persistent queues in the Logstash pipelines on this node.", + "units": "B", + "format": "0,0.0 b", + "hasCalculation": true, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 141265 + ], + [ + 1655471950000, + 173965 + ], + [ + 1655471960000, + 206665 + ], + [ + 1655471970000, + 239692 + ], + [ + 1655471980000, + 272392 + ], + [ + 1655471990000, + 305092 + ], + [ + 1655472000000, + 337792 + ], + [ + 1655472010000, + 370489 + ], + [ + 1655472020000, + 403189 + ], + [ + 1655472030000, + 435886 + ], + [ + 1655472040000, + 468586 + ], + [ + 1655472050000, + 501286 + ], + [ + 1655472060000, + 533986 + ], + [ + 1655472070000, + 566686 + ], + [ + 1655472080000, + 599713 + ], + [ + 1655472090000, + 632413 + ], + [ + 1655472100000, + 665110 + ], + [ + 1655472110000, + 697810 + ], + [ + 1655472120000, + 730510 + ], + [ + 1655472130000, + 763210 + ], + [ + 1655472140000, + 795910 + ], + [ + 1655472150000, + 828610 + ], + [ + 1655472160000, + 861307 + ], + [ + 1655472170000, + 894007 + ], + [ + 1655472180000, + 927034 + ], + [ + 1655472190000, + 959731 + ], + [ + 1655472200000, + 992431 + ], + [ + 1655472210000, + 1025131 + ], + [ + 1655472220000, + 1057831 + ], + [ + 1655472230000, + 1090531 + ], + [ + 1655472240000, + 1123231 + ], + [ + 1655472250000, + 1155931 + ], + [ + 1655472260000, + 1188631 + ], + [ + 1655472270000, + 1221331 + ], + [ + 1655472280000, + 1254358 + ], + [ + 1655472290000, + 1287058 + ] + ] + }, + { + "bucket_size": "10 seconds", + "timeRange": { + "min": 1655471940000, + "max": 1655472300000 + }, + "metric": { + "app": "logstash", + "field": "logstash_stats.pipelines.queue.max_queue_size_in_bytes", + "label": "Max Queue Size", + "description": "Maximum size set for the persistent queues on this node.", + "units": "B", + "format": "0,0.0 b", + "hasCalculation": true, + "isDerivative": false + }, + "data": [ + [ + 1655471940000, + 1073741824 + ], + [ + 1655471950000, + 1073741824 + ], + [ + 1655471960000, + 1073741824 + ], + [ + 1655471970000, + 1073741824 + ], + [ + 1655471980000, + 1073741824 + ], + [ + 1655471990000, + 1073741824 + ], + [ + 1655472000000, + 1073741824 + ], + [ + 1655472010000, + 1073741824 + ], + [ + 1655472020000, + 1073741824 + ], + [ + 1655472030000, + 1073741824 + ], + [ + 1655472040000, + 1073741824 + ], + [ + 1655472050000, + 1073741824 + ], + [ + 1655472060000, + 1073741824 + ], + [ + 1655472070000, + 1073741824 + ], + [ + 1655472080000, + 1073741824 + ], + [ + 1655472090000, + 1073741824 + ], + [ + 1655472100000, + 1073741824 + ], + [ + 1655472110000, + 1073741824 + ], + [ + 1655472120000, + 1073741824 + ], + [ + 1655472130000, + 1073741824 + ], + [ + 1655472140000, + 1073741824 + ], + [ + 1655472150000, + 1073741824 + ], + [ + 1655472160000, + 1073741824 + ], + [ + 1655472170000, + 1073741824 + ], + [ + 1655472180000, + 1073741824 + ], + [ + 1655472190000, + 1073741824 + ], + [ + 1655472200000, + 1073741824 + ], + [ + 1655472210000, + 1073741824 + ], + [ + 1655472220000, + 1073741824 + ], + [ + 1655472230000, + 1073741824 + ], + [ + 1655472240000, + 1073741824 + ], + [ + 1655472250000, + 1073741824 + ], + [ + 1655472260000, + 1073741824 + ], + [ + 1655472270000, + 1073741824 + ], + [ + 1655472280000, + 1073741824 + ], + [ + 1655472290000, + 1073741824 + ] + ] + } + ] + }, + "nodeSummary": { + "uuid": "f9efd237-3bbf-4a9b-9ce7-a16141b9d981", + "ephemeral_id": "88c01586-1891-4a0e-a2ca-ca5c988f8cbb", + "version": "8.2.2", + "snapshot": false, + "http_address": "127.0.0.1:9600", + "name": "kevins-macbook-pro.home", + "host": "kevins-macbook-pro.home", + "status": "green", + "pipeline": { + "workers": 16, + "batch_size": 125 + }, + "availability": false, + "events": { + "duration_in_millis": 5145881, + "in": 3978, + "filtered": 2579, + "out": 2579 + }, + "reloads": { + "failures": 0, + "successes": 0 + }, + "uptime": 407358 + } +} diff --git a/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js b/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js index ad4fdcb462fd9..e5f242909be14 100644 --- a/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js +++ b/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js @@ -6,53 +6,49 @@ */ import expect from '@kbn/expect'; -import { normalizeDataTypeDifferences } from '../normalize_data_type_differences'; -import nodeDetailFixture from './fixtures/node_detail.json'; -import nodeDetailAdvancedFixture from './fixtures/node_detail_advanced.json'; -import { getLifecycleMethods } from '../data_stream'; +import nodeDetailFixture from './fixtures/node_detail_8.json'; +import nodeDetailAdvancedFixture from './fixtures/node_detail_advanced_8.json'; export default function ({ getService }) { const supertest = getService('supertest'); - const { setup, tearDown } = getLifecycleMethods(getService); + const esArchiver = getService('esArchiver'); describe('node detail mb', () => { - const archive = 'x-pack/test/functional/es_archives/monitoring/logstash_pipelines_mb'; + const archive = 'x-pack/test/api_integration/apis/monitoring/es_archives/logstash_8'; const timeRange = { - min: '2018-01-22T09:33:13.000Z', - max: '2018-01-22T09:41:04.000Z', + min: '2022-06-17T13:19:00.000Z', + max: '2022-06-17T13:25:00.000Z', }; before('load archive', () => { - return setup(archive); + return esArchiver.load(archive); }); after('unload archive', () => { - return tearDown(); + // return esArchiver.unload(archive); }); it('should summarize the Logstash node with non-advanced chart data metrics', async () => { const { body } = await supertest .post( - '/api/monitoring/v1/clusters/1rhApLfQShSh3JsNqYCkmA/logstash/node/838a2ada-1951-4043-8a23-4b450f6160a4' + '/api/monitoring/v1/clusters/__standalone_cluster__/logstash/node/f9efd237-3bbf-4a9b-9ce7-a16141b9d981' ) .set('kbn-xsrf', 'xxx') .send({ timeRange, is_advanced: false }) .expect(200); - body.metrics = normalizeDataTypeDifferences(body.metrics, nodeDetailFixture); expect(body).to.eql(nodeDetailFixture); }); it('should summarize the Logstash node with advanced chart data metrics', async () => { const { body } = await supertest .post( - '/api/monitoring/v1/clusters/1rhApLfQShSh3JsNqYCkmA/logstash/node/838a2ada-1951-4043-8a23-4b450f6160a4' + '/api/monitoring/v1/clusters/__standalone_cluster__/logstash/node/f9efd237-3bbf-4a9b-9ce7-a16141b9d981' ) .set('kbn-xsrf', 'xxx') .send({ timeRange, is_advanced: true }) .expect(200); - body.metrics = normalizeDataTypeDifferences(body.metrics, nodeDetailAdvancedFixture); expect(body).to.eql(nodeDetailAdvancedFixture); }); }); From 8ecba9bf28ae88cb5f0e2ef45abe212280022bcf Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Tue, 21 Jun 2022 15:23:12 +0200 Subject: [PATCH 33/50] [Enterprise Search] Kea guidelines (#134458) * [Enterprise Search] Kea guidelines --- x-pack/plugins/enterprise_search/KEA.md | 190 ++++++++++++++++++ x-pack/plugins/enterprise_search/README.md | 8 +- .../enterprise_search/common/types/api.ts | 40 ++++ x-pack/plugins/enterprise_search/jest.sh | 0 .../add_custom_source_api_logic.test.ts | 155 ++++++++++++++ .../add_custom_source_api_logic.ts | 80 ++++++++ .../add_custom_source_logic.test.ts | 118 +++-------- .../add_custom_source_logic.ts | 57 +++--- 8 files changed, 521 insertions(+), 127 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/KEA.md create mode 100644 x-pack/plugins/enterprise_search/common/types/api.ts mode change 100644 => 100755 x-pack/plugins/enterprise_search/jest.sh create mode 100644 x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.test.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.ts diff --git a/x-pack/plugins/enterprise_search/KEA.md b/x-pack/plugins/enterprise_search/KEA.md new file mode 100644 index 0000000000000..17ae7cf71f833 --- /dev/null +++ b/x-pack/plugins/enterprise_search/KEA.md @@ -0,0 +1,190 @@ +# Kea State Management +Enterprise Search uses [Kea.js](https://github.com/keajs/kea) to manage our React/Redux state for us. Kea state is handled in our `*Logic` files and exposes [values](https://kea.js.org/docs/guide/concepts#values) and [actions](https://kea.js.org/docs/guide/concepts#actions) for our components to get and set state with. + +To make sure we have a consistent way of dealing with state, we have a few guidelines we follow. Note that these are guidelines, not hard and fast rules, and you can deviate from them if it makes sense. In addition, there's a lot of legacy code in our codebase that does not adhere to these standards. New code is expected to follow these guidelines as much as possible. + +## Only use Kea when necessary + +Redux and Kea are excellent tools for state management in complex applications, to maintain consistent state across different components and decouple their functionality from APIs and complex application state considerations. However, overuse of state management tools can have the opposite effect of creating a highly-coupled application where any changes to the state logic have unintended consequences across the codebase. In addition, components that rely on Kea are harder to test than those that don't. Be mindful of where you apply these tools. + +A few indications your component does need Kea or complex state management: +- Your component is not interactive and only displays data it is passed from a parent +- Your component's interactivity is limited to the way it displays its data (eg: toggling between different views) +- Your component's interactivity is limited to a small slice of the larger application + +A few indications you do need Kea: +- Your component has no logical parent to inherit its data from +- Your component needs to pull data from a number of different APIs or data sources +- Your component's input data had to travel down through multiple components that only passed it along +- Your component's interactivity alters state that other components rely on +- Your component directly interacts with APIs, particularly when fetching data +- You're pushing events up or down through multiple components - avoid this and use Kea wherever possible + +Slicing up components into smaller chunks, designing clear interfaces for those components and lifting state up can be a better solution than making state global through Kea. + +## Separate API calls from components + +State management tools are most powerful when used to coordinate state across an entire application, or large slices of that application. To do that well, state needs to be shared and it needs to be clear where in the existing state to find what information. We do this by separating API data from component data. + +This means API interactions and their data should live in their own logic files, and the resulting data and API status should be imported by other logic files or directly by components consuming that data. Those API logic files should contain all interactions with APIs, and the current status of those API requests. Our idiomatic way of doing this follows: + +```typescript +import { kea, MakeLogicType } from 'kea'; + +import { ApiStatus, HttpError } from '../../../../../../../../common/types/api'; +import { flashAPIErrors, clearFlashMessages } from '../../../../../../shared/flash_messages'; +import { HttpLogic } from '../../../../../../shared/http'; + +export interface AddCustomSourceActions { + fetchSource(): void; + fetchSourceError(code: number, error: string): HttpError; + fetchSourceSuccess(source: CustomSource): CustomSource; +} + +interface CustomSource { + name: string; +} + +interface AddCustomSourceValues { + sourceApiStatus: ApiStatus; +} + +export const AddCustomSourceLogic = kea< + MakeLogicType +>({ + path: ['enterprise_search', 'workplace_search', 'add_custom_source_logic'], + actions: { + fetchSource: true, + fetchSourceError: (code, error) => ({ code, error }), + fetchSourceSuccess: (customSource) => customSource, + }, + reducers: () => ({ + sourceApiStatus: [ + { + status: 'IDLE', + }, + { + fetchSource: () => ({ + status: 'PENDING', + }), + fetchSourceError: (_, error) => ({ + status: 'ERROR', + error, + }), + fetchSourceSuccess: (_, data) => ({ + status: 'SUCCESS', + data, + }), + }, + ], + }), + listeners: ({ actions }) => ({ + fetchSource: async () => { + clearFlashMessages(); + + try { + const response = await HttpLogic.values.http.post('/api/source'); + actions.fetchSourceSuccess(response); + } catch (e) { + flashAPIErrors(e); + actions.fetchSourceError(e.code, e.message); + } + }, + }), +}); +``` + +The types used above can be found in our [common Enterprise Search types file](common/types/api.ts). While the above assumes a single, idempotent API, this approach can be easily extended to use a dictionary approach: +```typescript +reducers: () => ({ + sourceApiStatus: [ + { + }, + { + fetchSource: (state, id) => ({...state, + id: { + status: 'PENDING', + data: state[id]?.data, + }}), + fetchSourceError: (_, ({id, error})) => ({...state, + id: { + status: 'ERROR', + error, + }}), + fetchSourceSuccess: (_, ({id, data})) => ({...state, id: { + status: 'SUCCESS', + data, + }}), + }, + ], + }), +``` +## Import actions and values from API logic files into component and view logic. + +Once you have an API interactions file set up, components and other Kea logic files can import the values from those files to build their own logic. Use the Kea 'connect' functionality to do this, as the auto-connect functionality has a few bugs and was removed in Kea 3.0. This allows you to read the status and value of an API, react to any API events, and abstract those APIs away from the components. Those components can now become more functional and reactive to the current state of the application, rather than to directly responding to API events. + +You can connect logic files by adding a `connect` property to your Kea logic function, specifying the specific actions and values you want to import into your own logic. You can be selective there, and don't need to import all actions and values--only the ones you'll actually use. You can then access those actions and values directly under their own name in your new logic function. + +```typescript +export const AddCustomSourceLogic = kea< + MakeLogicType +>({ + connect: { + actions: [AddCustomSourceApiLogic, ['addSource', 'addSourceSuccess', 'addSourceError']], + values: [AddCustomSourceApiLogic, ['sourceApi']], + }, + path: ['enterprise_search', 'workplace_search', 'add_custom_source_logic'], + actions: { + createContentSource: true, + setCustomSourceNameValue: (customSourceNameValue) => customSourceNameValue, + setNewCustomSource: (data) => data, + }, + reducers: ({ props }) => ({ + customSourceNameValue: [ + props.initialValue || '', + { + setCustomSourceNameValue: (_, customSourceNameValue) => customSourceNameValue, + }, + ], + newCustomSource: [ + undefined, + { + setNewCustomSource: (_, newCustomSource) => newCustomSource, + }, + ], + }), + listeners: ({ actions, values, props }) => ({ + createContentSource: () => { + const { customSourceNameValue } = values; + const { baseServiceType } = props; + actions.addSource(customSourceNameValue, baseServiceType); + }, + addSourceSuccess: (customSource: CustomSource) => { + actions.setNewCustomSource(customSource); + }, + }), + selectors: { + buttonLoading: [ + (selectors) => [selectors.sourceApi], + (apiStatus) => apiStatus?.status === 'PENDING', + ], + }, +}); +``` + +You'll have to add the imported the actions and values types you're already using for your function, preferably by importing the types off the imported logic. Like so: +```typescript +export interface AddCustomSourceActions { + addSource: AddCustomSourceApiActions['addSource']; + addSourceSuccess: AddCustomSourceApiActions['addSourceSuccess']; +} +``` +## Keep your logic files small + +Using the above methods, you can keep your logic files small and isolated. Keep API calls separate from view and component logic. Keep the amount of logic you're processing limited per file. If your logic file starts exceeding about 150 lines of code, you should start thinking about splitting it up into separate chunks, if possible. + +Splitting up logic helps keep your application logic manageable and somewhat isolated, it helps keep your logic files testable, and it helps you understand what is happening in each logic file. + +## When connecting logic files, be explicit + +Kea has a feature where it will auto-connect logic files when you use actions and values from one file in another. This works, but has led to bugs in the past. Because it's generally better to be explicit than implicit, we prefer making these links explicit as well. Use the 'connect' feature on a Kea logic function to connect two different logics together. See above for an example. diff --git a/x-pack/plugins/enterprise_search/README.md b/x-pack/plugins/enterprise_search/README.md index 1a54f8c23750b..74391a9a96f5d 100644 --- a/x-pack/plugins/enterprise_search/README.md +++ b/x-pack/plugins/enterprise_search/README.md @@ -27,15 +27,17 @@ Don't forget to read Kibana's [contributing documentation](https://github.com/el ### Kea -Enterprise Search uses [Kea.js](https://github.com/keajs/kea) to manage our React/Redux state for us. Kea state is handled in our `*Logic` files and exposes [values](https://kea.js.org/docs/guide/concepts#values) and [actions](https://kea.js.org/docs/guide/concepts#actions) for our components to get and set state with. +Enterprise Search uses [Kea.js](https://github.com/keajs/kea) to manage our React/Redux state for us. Kea state is handled in our `*Logic` files and exposes [values](https://v2.keajs.org/docs/guide/concepts#values) and [actions](https://v2.keajs.org/docs/guide/concepts#actions) for our components to get and set state with. + +For extended guidelines, please check [KEA.md](KEA.md) #### Advanced Kea usage -For the most part, we stick to the functionality described in Kea's [core concepts](https://kea.js.org/docs/guide/concepts). However, in some files, we also take advantage of [props](https://kea.js.org/docs/guide/additional#props) and [events](https://kea.js.org/docs/guide/additional#events), as well as [manually mounting](https://kea.js.org/docs/guide/advanced#mounting-and-unmounting) some shared logic files on plugin init outside of React. +For the most part, we stick to the functionality described in Kea's [core concepts](https://v2.keajs.org/docs/guide/concepts). However, in some files, we also take advantage of [props](https://v2.keajs.org/docs/guide/additional#props) and [events](https://v2.keajs.org/docs/guide/additional#events), as well as [manually mounting](https://v2.keajs.org/docs/guide/advanced#mounting-and-unmounting) some shared logic files on plugin init outside of React. #### Debugging Kea -To debug Kea state in-browser, Kea recommends [Redux Devtools](https://kea.js.org/docs/guide/debugging). To facilitate debugging, we use the [path](https://kea.js.org/docs/guide/debugging/#setting-the-path-manually) key with `snake_case`d paths. The path key should always end with the logic filename (e.g. `['enterprise_search', 'some_logic']`) to make it easy for devs to quickly find/jump to files via IDE tooling. +To debug Kea state in-browser, Kea recommends [Redux Devtools](https://v2.keajs.org/docs/guide/debugging). To facilitate debugging, we use the [path](https://v2.keajs.org/docs/guide/debugging/#setting-the-path-manually) key with `snake_case`d paths. The path key should always end with the logic filename (e.g. `['enterprise_search', 'some_logic']`) to make it easy for devs to quickly find/jump to files via IDE tooling. ## Testing diff --git a/x-pack/plugins/enterprise_search/common/types/api.ts b/x-pack/plugins/enterprise_search/common/types/api.ts new file mode 100644 index 0000000000000..2ba225bd19223 --- /dev/null +++ b/x-pack/plugins/enterprise_search/common/types/api.ts @@ -0,0 +1,40 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * These types track an API call's status and result + * Each Status string corresponds to a possible status in a request's lifecycle + */ + +export type Status = 'IDLE' | 'PENDING' | 'SUCCESS' | 'ERROR'; + +export interface HttpError { + code: number; + message?: string; +} + +export interface ApiSuccess { + status: 'SUCCESS'; + data: T; +} + +export interface ApiPending { + status: 'PENDING'; + data?: T; +} + +export interface ApiIdle { + status: 'IDLE'; + data?: T; +} + +export interface ApiError { + status: Status; + error: HttpError; +} + +export type ApiStatus = ApiSuccess | ApiPending | ApiIdle | ApiError; diff --git a/x-pack/plugins/enterprise_search/jest.sh b/x-pack/plugins/enterprise_search/jest.sh old mode 100644 new mode 100755 diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.test.ts new file mode 100644 index 0000000000000..a08d024e465ad --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.test.ts @@ -0,0 +1,155 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + LogicMounter, + mockFlashMessageHelpers, + mockHttpValues, +} from '../../../../../../__mocks__/kea_logic'; +import { sourceConfigData } from '../../../../../__mocks__/content_sources.mock'; + +import { nextTick } from '@kbn/test-jest-helpers'; + +import { itShowsServerErrorAsFlashMessage } from '../../../../../../test_helpers'; + +jest.mock('../../../../../app_logic', () => ({ + AppLogic: { values: { isOrganization: true } }, +})); +import { AppLogic } from '../../../../../app_logic'; + +import { AddCustomSourceApiLogic } from './add_custom_source_api_logic'; + +const DEFAULT_VALUES = { + sourceApi: { + status: 'IDLE', + }, +}; + +const MOCK_NAME = 'name'; + +describe('AddCustomSourceLogic', () => { + const { mount } = new LogicMounter(AddCustomSourceApiLogic); + const { http } = mockHttpValues; + const { clearFlashMessages } = mockFlashMessageHelpers; + + beforeEach(() => { + jest.clearAllMocks(); + mount({}); + }); + + it('has expected default values', () => { + expect(AddCustomSourceApiLogic.values).toEqual(DEFAULT_VALUES); + }); + + describe('listeners', () => { + beforeEach(() => { + mount(); + }); + + describe('organization context', () => { + describe('createContentSource', () => { + it('calls API and sets values', async () => { + const addSourceSuccessSpy = jest.spyOn( + AddCustomSourceApiLogic.actions, + 'addSourceSuccess' + ); + http.post.mockReturnValue(Promise.resolve({ sourceConfigData })); + + AddCustomSourceApiLogic.actions.addSource(MOCK_NAME); + + expect(clearFlashMessages).toHaveBeenCalled(); + expect(http.post).toHaveBeenCalledWith('/internal/workplace_search/org/create_source', { + body: JSON.stringify({ service_type: 'custom', name: MOCK_NAME }), + }); + await nextTick(); + expect(addSourceSuccessSpy).toHaveBeenCalledWith({ sourceConfigData }); + }); + + it('submits a base service type for pre-configured sources', async () => { + const addSourceSuccessSpy = jest.spyOn( + AddCustomSourceApiLogic.actions, + 'addSourceSuccess' + ); + http.post.mockReturnValue(Promise.resolve({ sourceConfigData })); + + AddCustomSourceApiLogic.actions.addSource(MOCK_NAME, 'base_service_type'); + + expect(clearFlashMessages).toHaveBeenCalled(); + expect(http.post).toHaveBeenCalledWith('/internal/workplace_search/org/create_source', { + body: JSON.stringify({ + service_type: 'custom', + name: MOCK_NAME, + base_service_type: 'base_service_type', + }), + }); + await nextTick(); + expect(addSourceSuccessSpy).toHaveBeenCalledWith({ sourceConfigData }); + }); + + itShowsServerErrorAsFlashMessage(http.post, () => { + AddCustomSourceApiLogic.actions.addSource(MOCK_NAME); + }); + }); + }); + + describe('account context routes', () => { + beforeEach(() => { + AppLogic.values.isOrganization = false; + }); + + describe('createContentSource', () => { + it('calls API and sets values', async () => { + const addSourceSuccessSpy = jest.spyOn( + AddCustomSourceApiLogic.actions, + 'addSourceSuccess' + ); + http.post.mockReturnValue(Promise.resolve({ sourceConfigData })); + + AddCustomSourceApiLogic.actions.addSource(MOCK_NAME); + + expect(clearFlashMessages).toHaveBeenCalled(); + expect(http.post).toHaveBeenCalledWith( + '/internal/workplace_search/account/create_source', + { + body: JSON.stringify({ service_type: 'custom', name: MOCK_NAME }), + } + ); + await nextTick(); + expect(addSourceSuccessSpy).toHaveBeenCalledWith({ sourceConfigData }); + }); + + it('submits a base service type for pre-configured sources', async () => { + const addSourceSuccessSpy = jest.spyOn( + AddCustomSourceApiLogic.actions, + 'addSourceSuccess' + ); + http.post.mockReturnValue(Promise.resolve({ sourceConfigData })); + + AddCustomSourceApiLogic.actions.addSource(MOCK_NAME, 'base_service_type'); + + expect(clearFlashMessages).toHaveBeenCalled(); + expect(http.post).toHaveBeenCalledWith( + '/internal/workplace_search/account/create_source', + { + body: JSON.stringify({ + service_type: 'custom', + name: MOCK_NAME, + base_service_type: 'base_service_type', + }), + } + ); + await nextTick(); + expect(addSourceSuccessSpy).toHaveBeenCalledWith({ sourceConfigData }); + }); + + itShowsServerErrorAsFlashMessage(http.post, () => { + AddCustomSourceApiLogic.actions.addSource(MOCK_NAME); + }); + }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.ts new file mode 100644 index 0000000000000..4c4655a3882e0 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_api_logic.ts @@ -0,0 +1,80 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { kea, MakeLogicType } from 'kea'; + +import { ApiStatus, HttpError } from '../../../../../../../../common/types/api'; +import { flashAPIErrors, clearFlashMessages } from '../../../../../../shared/flash_messages'; +import { HttpLogic } from '../../../../../../shared/http'; +import { AppLogic } from '../../../../../app_logic'; +import { CustomSource } from '../../../../../types'; + +export interface AddCustomSourceApiActions { + addSource(name: string, baseServiceType?: string): { name: string; baseServiceType: string }; + addSourceError(code: number, error: string): HttpError; + addSourceSuccess(source: CustomSource): { source: CustomSource }; +} + +export interface AddCustomSourceApiValues { + sourceApi: ApiStatus; +} + +export const AddCustomSourceApiLogic = kea< + MakeLogicType +>({ + path: ['enterprise_search', 'workplace_search', 'add_custom_source_api_logic'], + actions: { + addSource: (name, baseServiceType) => ({ name, baseServiceType }), + addSourceError: (code, error) => ({ code, error }), + addSourceSuccess: (customSource) => ({ source: customSource }), + }, + reducers: () => ({ + sourceApi: [ + { + status: 'IDLE', + }, + { + addSource: () => ({ + status: 'PENDING', + }), + addSourceError: (_, error) => ({ + status: 'ERROR', + error, + }), + addSourceSuccess: (_, { source }) => ({ + status: 'SUCCESS', + data: source, + }), + }, + ], + }), + listeners: ({ actions }) => ({ + addSource: async ({ name, baseServiceType }) => { + clearFlashMessages(); + const { isOrganization } = AppLogic.values; + const route = isOrganization + ? '/internal/workplace_search/org/create_source' + : '/internal/workplace_search/account/create_source'; + + const params = { + service_type: 'custom', + name, + base_service_type: baseServiceType, + }; + + try { + const response = await HttpLogic.values.http.post(route, { + body: JSON.stringify(params), + }); + actions.addSourceSuccess(response); + } catch (e) { + flashAPIErrors(e); + actions.addSourceError(e?.body?.statusCode, e?.body?.message); + } + }, + }), +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.test.ts index 2ca3462da0f57..59825c0bd386c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.test.ts @@ -5,21 +5,11 @@ * 2.0. */ -import { - LogicMounter, - mockFlashMessageHelpers, - mockHttpValues, -} from '../../../../../../__mocks__/kea_logic'; -import { sourceConfigData } from '../../../../../__mocks__/content_sources.mock'; - -import { nextTick } from '@kbn/test-jest-helpers'; - -import { itShowsServerErrorAsFlashMessage } from '../../../../../../test_helpers'; +import { LogicMounter } from '../../../../../../__mocks__/kea_logic'; jest.mock('../../../../../app_logic', () => ({ AppLogic: { values: { isOrganization: true } }, })); -import { AppLogic } from '../../../../../app_logic'; import { CustomSource } from '../../../../../types'; @@ -30,14 +20,15 @@ const DEFAULT_VALUES = { buttonLoading: false, customSourceNameValue: '', newCustomSource: {} as CustomSource, + sourceApi: { + status: 'IDLE', + }, }; const MOCK_NAME = 'name'; describe('AddCustomSourceLogic', () => { const { mount } = new LogicMounter(AddCustomSourceLogic); - const { http } = mockHttpValues; - const { clearFlashMessages } = mockFlashMessageHelpers; beforeEach(() => { jest.clearAllMocks(); @@ -49,17 +40,27 @@ describe('AddCustomSourceLogic', () => { }); describe('actions', () => { - describe('setButtonNotLoading', () => { - it('turns off the button loading flag', () => { - AddCustomSourceLogic.actions.setButtonNotLoading(); + describe('addSourceSuccess', () => { + it('sets a new source', () => { + const customSource: CustomSource = { + accessToken: 'a', + name: 'b', + id: '1', + }; + AddCustomSourceLogic.actions.addSourceSuccess(customSource); expect(AddCustomSourceLogic.values).toEqual({ ...DEFAULT_VALUES, - buttonLoading: false, + customSourceNameValue: '', + newCustomSource: customSource, + sourceApi: { + status: 'SUCCESS', + data: customSource, + }, + currentStep: AddCustomSourceSteps.SaveCustomStep, }); }); }); - describe('setCustomSourceNameValue', () => { it('saves the name', () => { AddCustomSourceLogic.actions.setCustomSourceNameValue('name'); @@ -100,27 +101,11 @@ describe('AddCustomSourceLogic', () => { describe('organization context', () => { describe('createContentSource', () => { - it('calls API and sets values', async () => { - const setButtonNotLoadingSpy = jest.spyOn( - AddCustomSourceLogic.actions, - 'setButtonNotLoading' - ); - const setNewCustomSourceSpy = jest.spyOn( - AddCustomSourceLogic.actions, - 'setNewCustomSource' - ); - http.post.mockReturnValue(Promise.resolve({ sourceConfigData })); + it('calls addSource on AddCustomSourceApi logic', async () => { + const addSourceSpy = jest.spyOn(AddCustomSourceLogic.actions, 'addSource'); AddCustomSourceLogic.actions.createContentSource(); - - expect(clearFlashMessages).toHaveBeenCalled(); - expect(AddCustomSourceLogic.values.buttonLoading).toEqual(true); - expect(http.post).toHaveBeenCalledWith('/internal/workplace_search/org/create_source', { - body: JSON.stringify({ service_type: 'custom', name: MOCK_NAME }), - }); - await nextTick(); - expect(setNewCustomSourceSpy).toHaveBeenCalledWith({ sourceConfigData }); - expect(setButtonNotLoadingSpy).toHaveBeenCalled(); + expect(addSourceSpy).toHaveBeenCalledWith(MOCK_NAME, undefined); }); it('submits a base service type for pre-configured sources', () => { @@ -133,66 +118,11 @@ describe('AddCustomSourceLogic', () => { } ); - AddCustomSourceLogic.actions.createContentSource(); - - expect(http.post).toHaveBeenCalledWith('/internal/workplace_search/org/create_source', { - body: JSON.stringify({ - service_type: 'custom', - name: MOCK_NAME, - base_service_type: 'share_point_server', - }), - }); - }); - - itShowsServerErrorAsFlashMessage(http.post, () => { - AddCustomSourceLogic.actions.createContentSource(); - }); - }); - }); - - describe('account context routes', () => { - beforeEach(() => { - AppLogic.values.isOrganization = false; - }); - - describe('createContentSource', () => { - it('sends relevant fields to the API', () => { - AddCustomSourceLogic.actions.createContentSource(); - - expect(http.post).toHaveBeenCalledWith( - '/internal/workplace_search/account/create_source', - { - body: JSON.stringify({ service_type: 'custom', name: MOCK_NAME }), - } - ); - }); - - it('submits a base service type for pre-configured sources', () => { - mount( - { - customSourceNameValue: MOCK_NAME, - }, - { - baseServiceType: 'share_point_server', - } - ); + const addSourceSpy = jest.spyOn(AddCustomSourceLogic.actions, 'addSource'); AddCustomSourceLogic.actions.createContentSource(); - expect(http.post).toHaveBeenCalledWith( - '/internal/workplace_search/account/create_source', - { - body: JSON.stringify({ - service_type: 'custom', - name: MOCK_NAME, - base_service_type: 'share_point_server', - }), - } - ); - }); - - itShowsServerErrorAsFlashMessage(http.post, () => { - AddCustomSourceLogic.actions.createContentSource(); + expect(addSourceSpy).toHaveBeenCalledWith(MOCK_NAME, 'share_point_server'); }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.ts index 5b02fffa5892d..76041744b3c37 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/add_custom_source/add_custom_source_logic.ts @@ -7,11 +7,14 @@ import { kea, MakeLogicType } from 'kea'; -import { flashAPIErrors, clearFlashMessages } from '../../../../../../shared/flash_messages'; -import { HttpLogic } from '../../../../../../shared/http'; -import { AppLogic } from '../../../../../app_logic'; import { CustomSource } from '../../../../../types'; +import { + AddCustomSourceApiActions, + AddCustomSourceApiLogic, + AddCustomSourceApiValues, +} from './add_custom_source_api_logic'; + export interface AddCustomSourceProps { baseServiceType?: string; initialValue?: string; @@ -23,8 +26,9 @@ export enum AddCustomSourceSteps { } export interface AddCustomSourceActions { + addSource: AddCustomSourceApiActions['addSource']; + addSourceSuccess: AddCustomSourceApiActions['addSourceSuccess']; createContentSource(): void; - setButtonNotLoading(): void; setCustomSourceNameValue(customSourceNameValue: string): string; setNewCustomSource(data: CustomSource): CustomSource; } @@ -34,6 +38,7 @@ interface AddCustomSourceValues { currentStep: AddCustomSourceSteps; customSourceNameValue: string; newCustomSource: CustomSource; + sourceApi: AddCustomSourceApiValues['sourceApi']; } /** @@ -44,10 +49,13 @@ interface AddCustomSourceValues { export const AddCustomSourceLogic = kea< MakeLogicType >({ + connect: { + actions: [AddCustomSourceApiLogic, ['addSource', 'addSourceSuccess', 'addSourceError']], + values: [AddCustomSourceApiLogic, ['sourceApi']], + }, path: ['enterprise_search', 'workplace_search', 'add_custom_source_logic'], actions: { createContentSource: true, - setButtonNotLoading: true, setCustomSourceNameValue: (customSourceNameValue) => customSourceNameValue, setNewCustomSource: (data) => data, }, @@ -55,8 +63,9 @@ export const AddCustomSourceLogic = kea< buttonLoading: [ false, { - setButtonNotLoading: () => false, createContentSource: () => true, + addSourceSuccess: () => false, + addSourceError: () => false, }, ], currentStep: [ @@ -79,31 +88,19 @@ export const AddCustomSourceLogic = kea< ], }), listeners: ({ actions, values, props }) => ({ - createContentSource: async () => { - clearFlashMessages(); - const { isOrganization } = AppLogic.values; - const route = isOrganization - ? '/internal/workplace_search/org/create_source' - : '/internal/workplace_search/account/create_source'; - + createContentSource: () => { const { customSourceNameValue } = values; - - const params = { - service_type: 'custom', - name: customSourceNameValue, - base_service_type: props.baseServiceType, - }; - - try { - const response = await HttpLogic.values.http.post(route, { - body: JSON.stringify(params), - }); - actions.setNewCustomSource(response); - } catch (e) { - flashAPIErrors(e); - } finally { - actions.setButtonNotLoading(); - } + const { baseServiceType } = props; + actions.addSource(customSourceNameValue, baseServiceType); + }, + addSourceSuccess: ({ source }) => { + actions.setNewCustomSource(source); }, }), + selectors: { + buttonLoading: [ + (selectors) => [selectors.sourceApi], + (apiStatus) => apiStatus?.status === 'PENDING', + ], + }, }); From 84e54dc7de4db6ebb077e75a34e579a3a5d7d95a Mon Sep 17 00:00:00 2001 From: Shahzad Date: Tue, 21 Jun 2022 15:43:53 +0200 Subject: [PATCH 34/50] update sending kibana version (#134823) --- .../synthetics/server/legacy_uptime/lib/telemetry/types.ts | 1 + .../synthetics/server/synthetics_service/service_api_client.ts | 1 + .../synthetics/server/synthetics_service/synthetics_service.ts | 2 ++ 3 files changed, 4 insertions(+) diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/types.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/types.ts index 4680b844b5ae9..b9178c2d8ad6b 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/types.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/types.ts @@ -41,6 +41,7 @@ export interface MonitorErrorEvent { code?: string; status?: number; url?: string; + kibanaVersion: string; } export interface MonitorUpdateTelemetryChannelEvents { diff --git a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts index 0c984a29e7814..02d0f69ddbedc 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts @@ -183,6 +183,7 @@ export class ServiceAPIClient { code: err.code, status: err.response?.data?.status, url, + kibanaVersion: this.server.kibanaVersion, }); if (err.response?.data?.reason) { this.logger.error(err.response?.data?.reason); diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts index 87199e6282b01..8103415af9492 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts @@ -172,6 +172,7 @@ export class SyntheticsService { type: 'runTaskError', code: e?.code, status: e.status, + kibanaVersion: service.server.kibanaVersion, }); throw e; } @@ -217,6 +218,7 @@ export class SyntheticsService { type: 'scheduleTaskError', code: e?.code, status: e.status, + kibanaVersion: this.server.kibanaVersion, }); this.logger?.error( From f5d5821bf4206b8461a17bd59b457b410692e934 Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Tue, 21 Jun 2022 15:47:25 +0200 Subject: [PATCH 35/50] [ML] Fix styles for panel headers (#134660) * remove .panel-title * remove .panel-sub-title * remove inline h2 styles * replace class with EuiTextColor, remove redundant div * remove .ml-explorer * fix data viz headers * influencers_list.tsx titles --- .../common/components/link_card/link_card.tsx | 4 +- .../index_data_visualizer_view.tsx | 4 +- .../components/help_popover/help_popover.tsx | 29 +-- .../influencers_list/influencers_list.tsx | 6 +- .../confusion_matrix_help_popover.tsx | 20 +- .../roc_curve_help_popover.tsx | 20 +- .../application/explorer/_explorer.scss | 28 -- .../application/explorer/anomalies_map.tsx | 2 +- .../application/explorer/anomaly_timeline.tsx | 8 +- .../anomaly_timeline_help_popover.tsx | 17 +- .../public/application/explorer/explorer.tsx | 96 ++++--- .../_timeseriesexplorer.scss | 13 - .../timeseriesexplorer/timeseriesexplorer.js | 246 +++++++++--------- .../timeseriesexplorer_help_popover.tsx | 15 +- 14 files changed, 217 insertions(+), 291 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/link_card/link_card.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/link_card/link_card.tsx index 4d5b5a8154e72..855465eeab0c8 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/link_card/link_card.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/link_card/link_card.tsx @@ -71,10 +71,10 @@ export const LinkCard: FC = ({ )} - +

{title}

- +

{description}

diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index d54b102e26e82..0b4103687bbde 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -398,8 +398,8 @@ export const IndexDataVisualizerView: FC = (dataVi
- -

{currentDataView.title}

+ +

{currentDataView.title}

{ +export const HelpPopoverButton: FC<{ onClick: EuiLinkButtonProps['onClick'] }> = ({ onClick }) => { return ( { +} + +export const HelpPopover: FC = ({ anchorPosition, children, title }) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + return ( } className="mlHelpPopover" - closePopover={closePopover} - isOpen={isOpen} + closePopover={setIsPopoverOpen.bind(null, false)} + isOpen={isPopoverOpen} ownFocus panelClassName="mlHelpPopover__panel" panelPaddingSize="none" diff --git a/x-pack/plugins/ml/public/application/components/influencers_list/influencers_list.tsx b/x-pack/plugins/ml/public/application/components/influencers_list/influencers_list.tsx index 5f27113a341e2..456c8e8719dd3 100644 --- a/x-pack/plugins/ml/public/application/components/influencers_list/influencers_list.tsx +++ b/x-pack/plugins/ml/public/application/components/influencers_list/influencers_list.tsx @@ -131,11 +131,13 @@ const InfluencersByName: FC = ({ return ( - +

{influencerFieldName}

{influencerValues} + +
); }; @@ -146,7 +148,7 @@ export const InfluencersList: FC = ({ influencers, influen - +

{ - const [isPopoverOpen, setIsPopoverOpen] = useState(false); +import { HelpPopover } from '../../../../../components/help_popover/help_popover'; +export const MulticlassConfusionMatrixHelpPopover: FC = () => { return ( { - setIsPopoverOpen(!isPopoverOpen); - }} - /> - } - closePopover={() => setIsPopoverOpen(false)} - isOpen={isPopoverOpen} title={i18n.translate('xpack.ml.dataframe.analytics.confusionMatrixPopoverTitle', { defaultMessage: 'Normalized confusion matrix', })} diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/roc_curve_help_popover.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/roc_curve_help_popover.tsx index a14096d77be9f..41c69befe9c1a 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/roc_curve_help_popover.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/roc_curve_help_popover.tsx @@ -5,29 +5,15 @@ * 2.0. */ -import React, { useState } from 'react'; +import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { - HelpPopover, - HelpPopoverButton, -} from '../../../../../components/help_popover/help_popover'; - -export const RocCurveHelpPopover = () => { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); +import { HelpPopover } from '../../../../../components/help_popover/help_popover'; +export const RocCurveHelpPopover: FC = () => { return ( { - setIsPopoverOpen(!isPopoverOpen); - }} - /> - } - closePopover={() => setIsPopoverOpen(false)} - isOpen={isPopoverOpen} title={i18n.translate('xpack.ml.dataframe.analytics.rocCurvePopoverTitle', { defaultMessage: 'Receiver operating characteristic (ROC) curve', })} diff --git a/x-pack/plugins/ml/public/application/explorer/_explorer.scss b/x-pack/plugins/ml/public/application/explorer/_explorer.scss index 4d04a0747e3a9..5214624851945 100644 --- a/x-pack/plugins/ml/public/application/explorer/_explorer.scss +++ b/x-pack/plugins/ml/public/application/explorer/_explorer.scss @@ -1,31 +1,3 @@ -$borderRadius: $euiBorderRadius / 2; - -.ml-explorer { - .results-container { - - .no-influencers-warning { - float: left; - padding-top: $euiSizeXS; - padding-left: $euiSize; - color: $euiColorDarkShade; - font-size: $euiFontSizeS; - } - - .panel-title { - font-size: $euiFontSizeM; - font-weight: 400; - color: $euiColorDarkShade; - display: inline-block; - padding-bottom: $euiSizeXS; - } - - .panel-sub-title { - color: $euiColorDarkShade; - font-size: $euiFontSizeXS; - } - } -} - .mlSwimLaneContainer { /* Override legend styles */ .echLegendListContainer { diff --git a/x-pack/plugins/ml/public/application/explorer/anomalies_map.tsx b/x-pack/plugins/ml/public/application/explorer/anomalies_map.tsx index f2d739d2f5852..9f247fbce72c2 100644 --- a/x-pack/plugins/ml/public/application/explorer/anomalies_map.tsx +++ b/x-pack/plugins/ml/public/application/explorer/anomalies_map.tsx @@ -227,7 +227,7 @@ export const AnomaliesMap: FC = ({ anomalies, jobIds }) => { id="mlAnomalyExplorerAnomaliesMapAccordionId" initialIsOpen={true} buttonContent={ - +

= React.memo( - +

= React.memo( )} - + {viewBySwimlaneOptions.length > 0 && ( @@ -275,7 +275,7 @@ export const AnomalyTimeline: FC = React.memo( -
+ {viewByLoadedForTimeFormatted && ( = React.memo( defaultMessage="(Job score across all influencers)" /> )} -
+
{ - const [isPopoverOpen, setIsPopoverOpen] = useState(false); +import { HelpPopover } from '../components/help_popover/help_popover'; +export const AnomalyTimelineHelpPopover: FC = () => { return ( { - setIsPopoverOpen(!isPopoverOpen); - }} - /> - } - closePopover={() => setIsPopoverOpen(false)} - isOpen={isPopoverOpen} title={i18n.translate('xpack.ml.explorer.anomalyTimelinePopoverTitle', { defaultMessage: 'Anomaly timelines', })} diff --git a/x-pack/plugins/ml/public/application/explorer/explorer.tsx b/x-pack/plugins/ml/public/application/explorer/explorer.tsx index 5352eea1ab505..690949cd40ed6 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer.tsx +++ b/x-pack/plugins/ml/public/application/explorer/explorer.tsx @@ -25,10 +25,13 @@ import { EuiBadge, EuiResizableContainer, useIsWithinBreakpoints, + useEuiTheme, } from '@elastic/eui'; +import { css } from '@emotion/react'; import useObservable from 'react-use/lib/useObservable'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { TimefilterContract } from '@kbn/data-plugin/public'; +import { HelpPopover } from '../components/help_popover'; import { AnnotationFlyout } from '../components/annotations/annotation_flyout'; // @ts-ignore import { AnnotationsTable } from '../components/annotations/annotations_table'; @@ -348,7 +351,7 @@ export const Explorer: FC = ({ const { services: { charts: chartsService }, } = useMlKibana(); - + const { euiTheme } = useEuiTheme(); const mlLocator = useMlLocator(); const { @@ -462,10 +465,7 @@ export const Explorer: FC = ({ {annotationsError !== undefined && ( <> - +

= ({ +

= ({ } > <> + = ({ - +

= ({ {noInfluencersConfigured ? ( -
-
+
{mainPanelContent}
) : (
- + + = ({ ]} minSize={'200px'} initialSize={20} - paddingSize={'s'} + paddingSize={'none'} onToggleCollapsed={onToggleCollapsed} > -
- - -

- - + + + +

+ +

+
+
+ + +

- } - position="right" - /> -

-
+

+ + + + + + {loading ? ( ) : ( @@ -682,7 +702,7 @@ export const Explorer: FC = ({ mode="main" minSize={'70%'} initialSize={80} - paddingSize={'s'} + paddingSize={'none'} > {mainPanelContent} diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer.scss b/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer.scss index dc9178f7062f2..6160db3b940c8 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer.scss +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer.scss @@ -2,19 +2,6 @@ .ml-time-series-explorer { color: $euiColorDarkShade; - .results-container { - .panel-title { - font-size: $euiFontSizeM; - font-weight: 400; - color: $euiColorDarkShade; - } - - .entity-count-text { - color: $euiColorSuccess; - font-size: $euiFontSizeS; - } - } - .forecast-controls { float: right; } diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js index f6fa86c85cccb..b2644819e4522 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js @@ -31,6 +31,7 @@ import { EuiTitle, EuiAccordion, EuiBadge, + EuiTextColor, } from '@elastic/eui'; import { ResizeChecker } from '@kbn/kibana-utils-plugin/public'; import { TimeSeriesExplorerHelpPopover } from './timeseriesexplorer_help_popover'; @@ -1080,10 +1081,10 @@ export class TimeSeriesExplorer extends React.Component { (fullRefresh === false || loading === false) && hasResults === true && (
-
- - -

+ + + +

{i18n.translate( 'xpack.ml.timeSeriesExplorer.singleTimeSeriesAnalysisTitle', @@ -1095,7 +1096,7 @@ export class TimeSeriesExplorer extends React.Component {   {chartDetails.entityData.count === 1 && ( - + {chartDetails.entityData.entities.length > 0 && '('} {chartDetails.entityData.entities .map((entity) => { @@ -1103,10 +1104,10 @@ export class TimeSeriesExplorer extends React.Component { }) .join(', ')} {chartDetails.entityData.entities.length > 0 && ')'} - + )} {chartDetails.entityData.count !== 1 && ( - + {chartDetails.entityData.entities.map((countData, i) => { return ( @@ -1134,107 +1135,107 @@ export class TimeSeriesExplorer extends React.Component { ); })} - + )}

+
+ + + + +
+ + {showModelBoundsCheckbox && ( - + - - - {showModelBoundsCheckbox && ( - - - - )} - - {showAnnotationsCheckbox && ( - - + + + )} + + {showForecastCheckbox && ( + + + {i18n.translate('xpack.ml.timeSeriesExplorer.showForecastLabel', { + defaultMessage: 'show forecast', + })} + + } + checked={showForecast} + onChange={this.toggleShowForecastHandler} + /> + + )} + + + + {focusAnnotationError !== undefined && ( + <> + +

+ - - )} - - {showForecastCheckbox && ( - - - {i18n.translate('xpack.ml.timeSeriesExplorer.showForecastLabel', { - defaultMessage: 'show forecast', - })} - +

+
+ + - - )} - - - - {focusAnnotationError !== undefined && ( - <> - -

- -

-
- - -

{focusAnnotationError}

-
-
- - - )} - {focusAnnotationData && focusAnnotationData.length > 0 && ( +

{focusAnnotationError}

+
+
+ + + )} + {focusAnnotationData && focusAnnotationData.length > 0 && ( + <> +

- - )} - - -

- -

-
- - - - - - - - - -

+ + + )} + + +

+ +

+
+ + + + + + + + + +
)} {arePartitioningFieldsProvided && jobs.length > 0 && hasResults === true && ( diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_help_popover.tsx b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_help_popover.tsx index 778c7cc5d58a3..4313c9b228825 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_help_popover.tsx +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_help_popover.tsx @@ -5,26 +5,15 @@ * 2.0. */ -import React, { useState } from 'react'; +import React from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { HelpPopover, HelpPopoverButton } from '../components/help_popover/help_popover'; +import { HelpPopover } from '../components/help_popover/help_popover'; export const TimeSeriesExplorerHelpPopover = () => { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - return ( { - setIsPopoverOpen(!isPopoverOpen); - }} - /> - } - closePopover={() => setIsPopoverOpen(false)} - isOpen={isPopoverOpen} title={i18n.translate('xpack.ml.timeSeriesExplorer.popoverTitle', { defaultMessage: 'Single time series analysis', })} From 1d361cc602a7dae3d89b2bc68ab08627b39a2c5f Mon Sep 17 00:00:00 2001 From: Kevin Lacabane Date: Tue, 21 Jun 2022 16:18:16 +0200 Subject: [PATCH 36/50] uncomment archive unload (#134835) --- .../api_integration/apis/monitoring/logstash/node_detail_mb.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js b/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js index e5f242909be14..5d58316a83d95 100644 --- a/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js +++ b/x-pack/test/api_integration/apis/monitoring/logstash/node_detail_mb.js @@ -25,7 +25,7 @@ export default function ({ getService }) { }); after('unload archive', () => { - // return esArchiver.unload(archive); + return esArchiver.unload(archive); }); it('should summarize the Logstash node with non-advanced chart data metrics', async () => { From 851c4ebe60fbcc293f5694c7d3713139b682e594 Mon Sep 17 00:00:00 2001 From: Spencer Date: Tue, 21 Jun 2022 09:44:18 -0500 Subject: [PATCH 37/50] Rename codeowners after team rename --- .github/CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4c2348df2ffbe..273f1159afa63 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -257,9 +257,9 @@ #CC# /packages/kbn-expect/ @elastic/kibana-operations /.buildkite/ @elastic/kibana-operations -# Scalability testing -/packages/kbn-performance-testing-dataset-extractor/ @elastic/kibana-scalability-testing -/packages/kbn-scalability-simulation-generator/ @elastic/kibana-scalability-testing +# Performance testing +/packages/kbn-performance-testing-dataset-extractor/ @elastic/kibana-performance-testing +/packages/kbn-scalability-simulation-generator/ @elastic/kibana-performance-testing # Quality Assurance /src/dev/code_coverage @elastic/kibana-qa From 12d04a9e558db27d588443bb1380240d087404bf Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Tue, 21 Jun 2022 16:47:41 +0200 Subject: [PATCH 38/50] `buildEsQuery` allow `ignore_unmapped` for nested fields queries (#134580) --- .../src/es_query/build_es_query.test.ts | 55 ++++++++++++++++++ .../src/es_query/build_es_query.ts | 32 +++++----- .../src/es_query/from_filters.test.ts | 58 ++++++++++++++++--- .../kbn-es-query/src/es_query/from_filters.ts | 25 +++++++- .../src/es_query/from_kuery.test.ts | 15 +++-- .../kbn-es-query/src/es_query/from_kuery.ts | 26 ++++++--- .../kbn-es-query/src/es_query/from_lucene.ts | 2 +- .../src/es_query/handle_nested_filter.test.ts | 22 +++++++ .../src/es_query/handle_nested_filter.ts | 9 ++- packages/kbn-es-query/src/es_query/index.ts | 1 + packages/kbn-es-query/src/index.ts | 1 + .../src/kuery/functions/is.test.ts | 26 +++++++++ .../kbn-es-query/src/kuery/functions/is.ts | 3 + .../src/kuery/functions/nested.ts | 3 + .../src/kuery/functions/range.test.ts | 30 ++++++++++ .../kbn-es-query/src/kuery/functions/range.ts | 3 + packages/kbn-es-query/src/kuery/types.ts | 7 +++ 17 files changed, 281 insertions(+), 37 deletions(-) diff --git a/packages/kbn-es-query/src/es_query/build_es_query.test.ts b/packages/kbn-es-query/src/es_query/build_es_query.test.ts index 8fd884f65fa0d..a75c8d3d3a03f 100644 --- a/packages/kbn-es-query/src/es_query/build_es_query.test.ts +++ b/packages/kbn-es-query/src/es_query/build_es_query.test.ts @@ -202,5 +202,60 @@ describe('build query', () => { expect(result).toEqual(expectedResult); }); + + it('should allow to use ignore_unmapped for nested fields', () => { + const queries = [ + { query: 'nestedField: { child: "something" }', language: 'kuery' }, + ] as Query[]; + + const filters = [ + { + query: { exists: { field: 'nestedField.child' } }, + meta: { type: 'exists', alias: '', disabled: false, negate: false }, + }, + ]; + + const result = buildEsQuery(indexPattern, queries, filters, { nestedIgnoreUnmapped: true }); + const expected = { + bool: { + must: [], + filter: [ + { + nested: { + ignore_unmapped: true, + path: 'nestedField', + query: { + bool: { + minimum_should_match: 1, + should: [ + { + match_phrase: { + 'nestedField.child': 'something', + }, + }, + ], + }, + }, + score_mode: 'none', + }, + }, + { + nested: { + path: 'nestedField', + query: { + exists: { + field: 'nestedField.child', + }, + }, + ignore_unmapped: true, + }, + }, + ], + should: [], + must_not: [], + }, + }; + expect(result).toEqual(expected); + }); }); }); diff --git a/packages/kbn-es-query/src/es_query/build_es_query.ts b/packages/kbn-es-query/src/es_query/build_es_query.ts index 0ae0b8799b026..62172fa5aa4d8 100644 --- a/packages/kbn-es-query/src/es_query/build_es_query.ts +++ b/packages/kbn-es-query/src/es_query/build_es_query.ts @@ -13,17 +13,18 @@ import { buildQueryFromFilters } from './from_filters'; import { buildQueryFromLucene } from './from_lucene'; import { Filter, Query } from '../filters'; import { BoolQuery, DataViewBase } from './types'; -import { KueryQueryOptions } from '../kuery'; +import type { KueryQueryOptions } from '../kuery'; +import type { EsQueryFiltersConfig } from './from_filters'; /** * Configurations to be used while constructing an ES query. * @public */ -export type EsQueryConfig = KueryQueryOptions & { - allowLeadingWildcards: boolean; - queryStringOptions: SerializableRecord; - ignoreFilterIfFieldNotInIndex: boolean; -}; +export type EsQueryConfig = KueryQueryOptions & + EsQueryFiltersConfig & { + allowLeadingWildcards?: boolean; + queryStringOptions?: SerializableRecord; + }; function removeMatchAll(filters: T[]) { return filters.filter( @@ -59,20 +60,23 @@ export function buildEsQuery( const kueryQuery = buildQueryFromKuery( indexPattern, queriesByLanguage.kuery, - config.allowLeadingWildcards, - config.dateFormatTZ, - config.filtersInMustClause + { allowLeadingWildcards: config.allowLeadingWildcards }, + { + dateFormatTZ: config.dateFormatTZ, + filtersInMustClause: config.filtersInMustClause, + nestedIgnoreUnmapped: config.nestedIgnoreUnmapped, + } ); const luceneQuery = buildQueryFromLucene( queriesByLanguage.lucene, config.queryStringOptions, config.dateFormatTZ ); - const filterQuery = buildQueryFromFilters( - filters, - indexPattern, - config.ignoreFilterIfFieldNotInIndex - ); + + const filterQuery = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: config.ignoreFilterIfFieldNotInIndex, + nestedIgnoreUnmapped: config.nestedIgnoreUnmapped, + }); return { bool: { diff --git a/packages/kbn-es-query/src/es_query/from_filters.test.ts b/packages/kbn-es-query/src/es_query/from_filters.test.ts index 67de9e4d88736..78b719ccc0e62 100644 --- a/packages/kbn-es-query/src/es_query/from_filters.test.ts +++ b/packages/kbn-es-query/src/es_query/from_filters.test.ts @@ -19,7 +19,9 @@ describe('build query', () => { describe('buildQueryFromFilters', () => { test('should return the parameters of an Elasticsearch bool query', () => { - const result = buildQueryFromFilters([], indexPattern, false); + const result = buildQueryFromFilters([], indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); const expected = { must: [], filter: [], @@ -43,7 +45,9 @@ describe('build query', () => { const expectedESQueries = [{ match_all: {} }, { exists: { field: 'foo' } }]; - const result = buildQueryFromFilters(filters, indexPattern, false); + const result = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); expect(result.filter).toEqual(expectedESQueries); }); @@ -55,14 +59,18 @@ describe('build query', () => { meta: { type: 'match_all', negate: true, disabled: true }, } as MatchAllFilter, ] as Filter[]; - const result = buildQueryFromFilters(filters, indexPattern, false); + const result = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); expect(result.must_not).toEqual([]); }); test('should remove falsy filters', () => { const filters = [null, undefined] as unknown as Filter[]; - const result = buildQueryFromFilters(filters, indexPattern, false); + const result = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); expect(result.must_not).toEqual([]); expect(result.must).toEqual([]); @@ -78,7 +86,9 @@ describe('build query', () => { const expectedESQueries = [{ match_all: {} }]; - const result = buildQueryFromFilters(filters, indexPattern, false); + const result = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); expect(result.must_not).toEqual(expectedESQueries); }); @@ -97,7 +107,9 @@ describe('build query', () => { }, ]; - const result = buildQueryFromFilters(filters, indexPattern, false); + const result = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); expect(result.filter).toEqual(expectedESQueries); }); @@ -116,7 +128,9 @@ describe('build query', () => { }, ]; - const result = buildQueryFromFilters(filters, indexPattern, false); + const result = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); expect(result.filter).toEqual(expectedESQueries); }); @@ -130,7 +144,9 @@ describe('build query', () => { ] as Filter[]; const expectedESQueries = [{ query_string: { query: 'foo' } }]; - const result = buildQueryFromFilters(filters, indexPattern, false); + const result = buildQueryFromFilters(filters, indexPattern, { + ignoreFilterIfFieldNotInIndex: false, + }); expect(result.filter).toEqual(expectedESQueries); }); @@ -159,5 +175,31 @@ describe('build query', () => { const result = buildQueryFromFilters(filters, indexPattern); expect(result.filter).toEqual(expectedESQueries); }); + + test('should allow to configure ignore_unmapped for filters targeting nested fields in a nested query', () => { + const filters = [ + { + query: { exists: { field: 'nestedField.child' } }, + meta: { type: 'exists', alias: '', disabled: false, negate: false }, + }, + ]; + + const expectedESQueries = [ + { + nested: { + path: 'nestedField', + query: { + exists: { + field: 'nestedField.child', + }, + }, + ignore_unmapped: true, + }, + }, + ]; + + const result = buildQueryFromFilters(filters, indexPattern, { nestedIgnoreUnmapped: true }); + expect(result.filter).toEqual(expectedESQueries); + }); }); }); diff --git a/packages/kbn-es-query/src/es_query/from_filters.ts b/packages/kbn-es-query/src/es_query/from_filters.ts index e018cdc3404ad..871ff77026b54 100644 --- a/packages/kbn-es-query/src/es_query/from_filters.ts +++ b/packages/kbn-es-query/src/es_query/from_filters.ts @@ -38,6 +38,23 @@ const translateToQuery = (filter: Partial): estypes.QueryDslQueryContain return filter.query || filter; }; +/** + * Options for building query for filters + */ +export interface EsQueryFiltersConfig { + /** + * by default filters that use fields that can't be found in the specified index pattern are not applied. Set this to true if you want to apply them anyway. + */ + ignoreFilterIfFieldNotInIndex?: boolean; + + /** + * the nested field type requires a special query syntax, which includes an optional ignore_unmapped parameter that indicates whether to ignore an unmapped path and not return any documents instead of an error. + * The optional ignore_unmapped parameter defaults to false. + * This `nestedIgnoreUnmapped` param allows creating queries with "ignore_unmapped": true + */ + nestedIgnoreUnmapped?: boolean; +} + /** * @param filters * @param indexPattern @@ -49,7 +66,9 @@ const translateToQuery = (filter: Partial): estypes.QueryDslQueryContain export const buildQueryFromFilters = ( filters: Filter[] = [], indexPattern: DataViewBase | undefined, - ignoreFilterIfFieldNotInIndex: boolean = false + { ignoreFilterIfFieldNotInIndex = false, nestedIgnoreUnmapped }: EsQueryFiltersConfig = { + ignoreFilterIfFieldNotInIndex: false, + } ): BoolQuery => { filters = filters.filter((filter) => filter && !isFilterDisabled(filter)); @@ -63,7 +82,9 @@ export const buildQueryFromFilters = ( .map((filter) => { return migrateFilter(filter, indexPattern); }) - .map((filter) => handleNestedFilter(filter, indexPattern)) + .map((filter) => + handleNestedFilter(filter, indexPattern, { ignoreUnmapped: nestedIgnoreUnmapped }) + ) .map(cleanFilter) .map(translateToQuery); }; diff --git a/packages/kbn-es-query/src/es_query/from_kuery.test.ts b/packages/kbn-es-query/src/es_query/from_kuery.test.ts index 443b44dff5819..60bdb54858240 100644 --- a/packages/kbn-es-query/src/es_query/from_kuery.test.ts +++ b/packages/kbn-es-query/src/es_query/from_kuery.test.ts @@ -22,7 +22,7 @@ describe('build query', () => { describe('buildQueryFromKuery', () => { test('should return the parameters of an Elasticsearch bool query', () => { - const result = buildQueryFromKuery(undefined, [], true); + const result = buildQueryFromKuery(undefined, [], { allowLeadingWildcards: true }); const expected = { must: [], filter: [], @@ -42,7 +42,7 @@ describe('build query', () => { return toElasticsearchQuery(fromKueryExpression(query.query), indexPattern); }); - const result = buildQueryFromKuery(indexPattern, queries, true); + const result = buildQueryFromKuery(indexPattern, queries, { allowLeadingWildcards: true }); expect(result.filter).toEqual(expectedESQueries); }); @@ -55,7 +55,14 @@ describe('build query', () => { }); }); - const result = buildQueryFromKuery(indexPattern, queries, true, 'America/Phoenix'); + const result = buildQueryFromKuery( + indexPattern, + queries, + { allowLeadingWildcards: true }, + { + dateFormatTZ: 'America/Phoenix', + } + ); expect(result.filter).toEqual(expectedESQueries); }); @@ -68,7 +75,7 @@ describe('build query', () => { return toElasticsearchQuery(fromKueryExpression(query.query), indexPattern); }); - const result = buildQueryFromKuery(indexPattern, queries, true); + const result = buildQueryFromKuery(indexPattern, queries, { allowLeadingWildcards: true }); expect(result.filter).toEqual(expectedESQueries); }); diff --git a/packages/kbn-es-query/src/es_query/from_kuery.ts b/packages/kbn-es-query/src/es_query/from_kuery.ts index 3bb5d45fc53e3..6a1254a6e5037 100644 --- a/packages/kbn-es-query/src/es_query/from_kuery.ts +++ b/packages/kbn-es-query/src/es_query/from_kuery.ts @@ -6,30 +6,42 @@ * Side Public License, v 1. */ -import { SerializableRecord } from '@kbn/utility-types'; import { Query } from '../filters'; -import { fromKueryExpression, toElasticsearchQuery, nodeTypes, KueryNode } from '../kuery'; +import { + fromKueryExpression, + toElasticsearchQuery, + nodeTypes, + KueryNode, + KueryQueryOptions, +} from '../kuery'; import { BoolQuery, DataViewBase } from './types'; /** @internal */ export function buildQueryFromKuery( indexPattern: DataViewBase | undefined, queries: Query[] = [], - allowLeadingWildcards: boolean = false, - dateFormatTZ?: string, - filtersInMustClause: boolean = false + { allowLeadingWildcards = false }: { allowLeadingWildcards?: boolean } = { + allowLeadingWildcards: false, + }, + { filtersInMustClause = false, dateFormatTZ, nestedIgnoreUnmapped }: KueryQueryOptions = { + filtersInMustClause: false, + } ): BoolQuery { const queryASTs = queries.map((query) => { return fromKueryExpression(query.query, { allowLeadingWildcards }); }); - return buildQuery(indexPattern, queryASTs, { dateFormatTZ, filtersInMustClause }); + return buildQuery(indexPattern, queryASTs, { + filtersInMustClause, + dateFormatTZ, + nestedIgnoreUnmapped, + }); } function buildQuery( indexPattern: DataViewBase | undefined, queryASTs: KueryNode[], - config: SerializableRecord = {} + config: KueryQueryOptions = {} ): BoolQuery { const compoundQueryAST = nodeTypes.function.buildNode('and', queryASTs); const kueryQuery = toElasticsearchQuery(compoundQueryAST, indexPattern, config); diff --git a/packages/kbn-es-query/src/es_query/from_lucene.ts b/packages/kbn-es-query/src/es_query/from_lucene.ts index d00614b31347f..9f72f3bf0ef6e 100644 --- a/packages/kbn-es-query/src/es_query/from_lucene.ts +++ b/packages/kbn-es-query/src/es_query/from_lucene.ts @@ -15,7 +15,7 @@ import { BoolQuery } from './types'; /** @internal */ export function buildQueryFromLucene( queries: Query[], - queryStringOptions: SerializableRecord, + queryStringOptions: SerializableRecord = {}, dateFormatTZ?: string ): BoolQuery { const combinedQueries = (queries || []).map((query) => { diff --git a/packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts b/packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts index 2b9fbbe5ece04..01ce78dfbab9f 100644 --- a/packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts +++ b/packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts @@ -39,6 +39,28 @@ describe('handleNestedFilter', function () { }); }); + it('should allow to configure ignore_unmapped', () => { + const field = getField('nestedField.child'); + const filter = buildPhraseFilter(field!, 'foo', indexPattern); + const result = handleNestedFilter(filter, indexPattern, { ignoreUnmapped: true }); + expect(result).toEqual({ + meta: { + index: 'logstash-*', + }, + query: { + nested: { + path: 'nestedField', + query: { + match_phrase: { + 'nestedField.child': 'foo', + }, + }, + ignore_unmapped: true, + }, + }, + }); + }); + it('should return filter untouched if it does not target a nested field', () => { const field = getField('extension'); const filter = buildPhraseFilter(field!, 'jpg', indexPattern); diff --git a/packages/kbn-es-query/src/es_query/handle_nested_filter.ts b/packages/kbn-es-query/src/es_query/handle_nested_filter.ts index 14138ca44d310..fb32d55e53a7e 100644 --- a/packages/kbn-es-query/src/es_query/handle_nested_filter.ts +++ b/packages/kbn-es-query/src/es_query/handle_nested_filter.ts @@ -11,7 +11,11 @@ import { DataViewBase } from './types'; import { getDataViewFieldSubtypeNested } from '../utils'; /** @internal */ -export const handleNestedFilter = (filter: Filter, indexPattern?: DataViewBase) => { +export const handleNestedFilter = ( + filter: Filter, + indexPattern?: DataViewBase, + config: { ignoreUnmapped?: boolean } = {} +) => { if (!indexPattern) return filter; const fieldName = getFilterField(filter); @@ -36,6 +40,9 @@ export const handleNestedFilter = (filter: Filter, indexPattern?: DataViewBase) nested: { path: subTypeNested.nested.path, query: query.query || query, + ...(typeof config.ignoreUnmapped === 'boolean' && { + ignore_unmapped: config.ignoreUnmapped, + }), }, }, }; diff --git a/packages/kbn-es-query/src/es_query/index.ts b/packages/kbn-es-query/src/es_query/index.ts index 399df50e35058..d4e45b35728f6 100644 --- a/packages/kbn-es-query/src/es_query/index.ts +++ b/packages/kbn-es-query/src/es_query/index.ts @@ -7,6 +7,7 @@ */ export { migrateFilter } from './migrate_filter'; +export type { EsQueryFiltersConfig } from './from_filters'; export type { EsQueryConfig } from './build_es_query'; export { buildEsQuery } from './build_es_query'; export { buildQueryFromFilters } from './from_filters'; diff --git a/packages/kbn-es-query/src/index.ts b/packages/kbn-es-query/src/index.ts index 5b0b0a4f1d3a9..aadec300b5610 100644 --- a/packages/kbn-es-query/src/index.ts +++ b/packages/kbn-es-query/src/index.ts @@ -11,6 +11,7 @@ export type { DataViewBase, DataViewFieldBase, EsQueryConfig, + EsQueryFiltersConfig, IFieldSubType, IFieldSubTypeMulti, IFieldSubTypeNested, diff --git a/packages/kbn-es-query/src/kuery/functions/is.test.ts b/packages/kbn-es-query/src/kuery/functions/is.test.ts index 2ec53629b9dca..1a8229a62fe2a 100644 --- a/packages/kbn-es-query/src/kuery/functions/is.test.ts +++ b/packages/kbn-es-query/src/kuery/functions/is.test.ts @@ -314,6 +314,32 @@ describe('kuery functions', () => { expect(result).toEqual(expected); }); + + test('should allow to configure ignore_unmapped for a nested query', () => { + const expected = { + bool: { + should: [ + { + nested: { + path: 'nestedField.nestedChild', + query: { + match: { + 'nestedField.nestedChild.doublyNestedChild': 'foo', + }, + }, + score_mode: 'none', + ignore_unmapped: true, + }, + }, + ], + minimum_should_match: 1, + }, + }; + const node = nodeTypes.function.buildNode('is', '*doublyNested*', 'foo'); + const result = is.toElasticsearchQuery(node, indexPattern, { nestedIgnoreUnmapped: true }); + + expect(result).toEqual(expected); + }); }); }); }); diff --git a/packages/kbn-es-query/src/kuery/functions/is.ts b/packages/kbn-es-query/src/kuery/functions/is.ts index eeb9f139c9e52..fcf7dffabef86 100644 --- a/packages/kbn-es-query/src/kuery/functions/is.ts +++ b/packages/kbn-es-query/src/kuery/functions/is.ts @@ -114,6 +114,9 @@ export function toElasticsearchQuery( path: subTypeNested.nested.path, query, score_mode: 'none', + ...(typeof config.nestedIgnoreUnmapped === 'boolean' && { + ignore_unmapped: config.nestedIgnoreUnmapped, + }), }, }; } diff --git a/packages/kbn-es-query/src/kuery/functions/nested.ts b/packages/kbn-es-query/src/kuery/functions/nested.ts index 18cd9794922c6..ea3ee1b4fc131 100644 --- a/packages/kbn-es-query/src/kuery/functions/nested.ts +++ b/packages/kbn-es-query/src/kuery/functions/nested.ts @@ -37,6 +37,9 @@ export function toElasticsearchQuery( nested: { path: fullPath }, }) as estypes.QueryDslQueryContainer, score_mode: 'none', + ...(typeof config.nestedIgnoreUnmapped === 'boolean' && { + ignore_unmapped: config.nestedIgnoreUnmapped, + }), }, }; } diff --git a/packages/kbn-es-query/src/kuery/functions/range.test.ts b/packages/kbn-es-query/src/kuery/functions/range.test.ts index 575246724d6b2..9ff2fc54563b4 100644 --- a/packages/kbn-es-query/src/kuery/functions/range.test.ts +++ b/packages/kbn-es-query/src/kuery/functions/range.test.ts @@ -229,6 +229,36 @@ describe('kuery functions', () => { expect(result).toEqual(expected); }); + + test('should allow to configure ignore_unmapped for a nested query', () => { + const expected = { + bool: { + should: [ + { + nested: { + path: 'nestedField.nestedChild', + query: { + range: { + 'nestedField.nestedChild.doublyNestedChild': { + lt: 8000, + }, + }, + }, + score_mode: 'none', + ignore_unmapped: true, + }, + }, + ], + minimum_should_match: 1, + }, + }; + const node = nodeTypes.function.buildNode('range', '*doublyNested*', 'lt', 8000); + const result = range.toElasticsearchQuery(node, indexPattern, { + nestedIgnoreUnmapped: true, + }); + + expect(result).toEqual(expected); + }); }); }); }); diff --git a/packages/kbn-es-query/src/kuery/functions/range.ts b/packages/kbn-es-query/src/kuery/functions/range.ts index 313f6571259a0..c355f02027e8e 100644 --- a/packages/kbn-es-query/src/kuery/functions/range.ts +++ b/packages/kbn-es-query/src/kuery/functions/range.ts @@ -66,6 +66,9 @@ export function toElasticsearchQuery( path: subTypeNested.nested.path, query, score_mode: 'none', + ...(typeof config.nestedIgnoreUnmapped === 'boolean' && { + ignore_unmapped: config.nestedIgnoreUnmapped, + }), }, }; } diff --git a/packages/kbn-es-query/src/kuery/types.ts b/packages/kbn-es-query/src/kuery/types.ts index 7b35eb10ff7b8..7a6e7a9c6bf63 100644 --- a/packages/kbn-es-query/src/kuery/types.ts +++ b/packages/kbn-es-query/src/kuery/types.ts @@ -39,4 +39,11 @@ export { nodeTypes } from './node_types'; export interface KueryQueryOptions { filtersInMustClause?: boolean; dateFormatTZ?: string; + + /** + * the Nested field type requires a special query syntax, which includes an optional ignore_unmapped parameter that indicates whether to ignore an unmapped path and not return any documents instead of an error. + * The optional ignore_unmapped parameter defaults to false. + * The `nestedIgnoreUnmapped` param allows creating queries with "ignore_unmapped": true + */ + nestedIgnoreUnmapped?: boolean; } From 61be8fbe1ebb289cb137b022dc75d0df2017d022 Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Tue, 21 Jun 2022 11:09:42 -0400 Subject: [PATCH 39/50] fix horizontal rule (#134832) --- .../public/resolver/view/panels/event_detail.tsx | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx index 707afeea81cc8..21a3f6d9ce066 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx @@ -17,6 +17,7 @@ import { EuiSpacer, EuiText, EuiDescriptionList, + EuiHorizontalRule, EuiTextColor, EuiTitle, } from '@elastic/eui'; @@ -330,20 +331,12 @@ const StyledDescriptiveName = memo(styled(EuiText)` `); const StyledFlexTitle = memo(styled('h3')` + align-items: center; display: flex; flex-flow: row; font-size: 1.2em; `); -const StyledTitleRule = memo(styled('hr')` - &.euiHorizontalRule.euiHorizontalRule--full.euiHorizontalRule--marginSmall.override { - display: block; - flex: 1; - margin-left: 0.5em; - } -`); const TitleHr = memo(() => { - return ( - - ); + return ; }); From ebe331eebb017e2790c6e26fd56e6037b770fce3 Mon Sep 17 00:00:00 2001 From: Andrew Tate Date: Tue, 21 Jun 2022 10:13:54 -0500 Subject: [PATCH 40/50] [Lens] optimize percentiles fetching (#131875) --- .../plugins/lens/common/expressions/index.ts | 2 +- .../index.ts | 2 +- .../map_to_columns.test.ts} | 95 +++- .../map_to_columns/map_to_columns.ts | 32 ++ .../map_to_columns_fn.ts} | 41 +- .../types.ts | 4 +- .../rename_columns/rename_columns.ts | 32 -- x-pack/plugins/lens/public/expressions.ts | 4 +- .../indexpattern.test.ts | 154 +++++- .../operations/definitions/index.ts | 17 +- .../definitions/percentile.test.tsx | 441 ++++++++++++++++++ .../operations/definitions/percentile.tsx | 123 ++++- .../indexpattern_datasource/to_expression.ts | 118 ++++- .../lens/server/expressions/expressions.ts | 4 +- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 17 files changed, 959 insertions(+), 116 deletions(-) rename x-pack/plugins/lens/common/expressions/{rename_columns => map_to_columns}/index.ts (83%) rename x-pack/plugins/lens/common/expressions/{rename_columns/rename_columns.test.ts => map_to_columns/map_to_columns.test.ts} (70%) create mode 100644 x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns.ts rename x-pack/plugins/lens/common/expressions/{rename_columns/rename_columns_fn.ts => map_to_columns/map_to_columns_fn.ts} (64%) rename x-pack/plugins/lens/common/expressions/{rename_columns => map_to_columns}/types.ts (85%) delete mode 100644 x-pack/plugins/lens/common/expressions/rename_columns/rename_columns.ts diff --git a/x-pack/plugins/lens/common/expressions/index.ts b/x-pack/plugins/lens/common/expressions/index.ts index 924141da6074a..ccb6343334d62 100644 --- a/x-pack/plugins/lens/common/expressions/index.ts +++ b/x-pack/plugins/lens/common/expressions/index.ts @@ -8,6 +8,6 @@ export * from './counter_rate'; export * from './collapse'; export * from './format_column'; -export * from './rename_columns'; +export * from './map_to_columns'; export * from './time_scale'; export * from './datatable'; diff --git a/x-pack/plugins/lens/common/expressions/rename_columns/index.ts b/x-pack/plugins/lens/common/expressions/map_to_columns/index.ts similarity index 83% rename from x-pack/plugins/lens/common/expressions/rename_columns/index.ts rename to x-pack/plugins/lens/common/expressions/map_to_columns/index.ts index 86ab16e06ec01..8ce71d06f6579 100644 --- a/x-pack/plugins/lens/common/expressions/rename_columns/index.ts +++ b/x-pack/plugins/lens/common/expressions/map_to_columns/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { renameColumns } from './rename_columns'; +export { mapToColumns } from './map_to_columns'; diff --git a/x-pack/plugins/lens/common/expressions/rename_columns/rename_columns.test.ts b/x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns.test.ts similarity index 70% rename from x-pack/plugins/lens/common/expressions/rename_columns/rename_columns.test.ts rename to x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns.test.ts index 2047e4647cb4c..e5d678b88e5a5 100644 --- a/x-pack/plugins/lens/common/expressions/rename_columns/rename_columns.test.ts +++ b/x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns.test.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { renameColumns } from './rename_columns'; +import { mapToColumns } from './map_to_columns'; import { Datatable } from '@kbn/expressions-plugin/common'; import { createMockExecutionContext } from '@kbn/expressions-plugin/common/mocks'; -describe('rename_columns', () => { +describe('map_to_columns', () => { it('should rename columns of a given datatable', async () => { const input: Datatable = { type: 'datatable', @@ -26,17 +26,21 @@ describe('rename_columns', () => { }; const idMap = { - a: { - id: 'b', - label: 'Austrailia', - }, - b: { - id: 'c', - label: 'Boomerang', - }, + a: [ + { + id: 'b', + label: 'Austrailia', + }, + ], + b: [ + { + id: 'c', + label: 'Boomerang', + }, + ], }; - const result = await renameColumns.fn( + const result = await mapToColumns.fn( input, { idMap: JSON.stringify(idMap) }, createMockExecutionContext() @@ -99,10 +103,10 @@ describe('rename_columns', () => { }; const idMap = { - b: { id: 'c', label: 'Catamaran' }, + b: [{ id: 'c', label: 'Catamaran' }], }; - const result = await renameColumns.fn( + const result = await mapToColumns.fn( input, { idMap: JSON.stringify(idMap) }, createMockExecutionContext() @@ -149,6 +153,67 @@ describe('rename_columns', () => { `); }); + it('should map to multiple original columns', async () => { + const input: Datatable = { + type: 'datatable', + columns: [{ id: 'b', name: 'B', meta: { type: 'number' } }], + rows: [{ b: 2 }, { b: 4 }, { b: 6 }, { b: 8 }], + }; + + const idMap = { + b: [ + { id: 'c', label: 'Catamaran' }, + { id: 'd', label: 'Dinghy' }, + ], + }; + + const result = await mapToColumns.fn( + input, + { idMap: JSON.stringify(idMap) }, + createMockExecutionContext() + ); + + expect(result).toMatchInlineSnapshot(` + Object { + "columns": Array [ + Object { + "id": "c", + "meta": Object { + "type": "number", + }, + "name": "Catamaran", + }, + Object { + "id": "d", + "meta": Object { + "type": "number", + }, + "name": "Dinghy", + }, + ], + "rows": Array [ + Object { + "c": 2, + "d": 2, + }, + Object { + "c": 4, + "d": 4, + }, + Object { + "c": 6, + "d": 6, + }, + Object { + "c": 8, + "d": 8, + }, + ], + "type": "datatable", + } + `); + }); + it('should rename date histograms', async () => { const input: Datatable = { type: 'datatable', @@ -165,10 +230,10 @@ describe('rename_columns', () => { }; const idMap = { - b: { id: 'c', label: 'Apple', operationType: 'date_histogram', sourceField: 'banana' }, + b: [{ id: 'c', label: 'Apple', operationType: 'date_histogram', sourceField: 'banana' }], }; - const result = await renameColumns.fn( + const result = await mapToColumns.fn( input, { idMap: JSON.stringify(idMap) }, createMockExecutionContext() diff --git a/x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns.ts b/x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns.ts new file mode 100644 index 0000000000000..3315cd4170dd9 --- /dev/null +++ b/x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns.ts @@ -0,0 +1,32 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import type { MapToColumnsExpressionFunction } from './types'; + +export const mapToColumns: MapToColumnsExpressionFunction = { + name: 'lens_map_to_columns', + type: 'datatable', + help: i18n.translate('xpack.lens.functions.mapToColumns.help', { + defaultMessage: 'A helper to transform a datatable to match Lens column definitions', + }), + args: { + idMap: { + types: ['string'], + help: i18n.translate('xpack.lens.functions.mapToColumns.idMap.help', { + defaultMessage: + 'A JSON encoded object in which keys are the datatable column ids and values are the Lens column definitions. Any datatable columns not mentioned within the ID map will be kept unmapped.', + }), + }, + }, + inputTypes: ['datatable'], + async fn(...args) { + /** Build optimization: prevent adding extra code into initial bundle **/ + const { mapToOriginalColumns } = await import('./map_to_columns_fn'); + return mapToOriginalColumns(...args); + }, +}; diff --git a/x-pack/plugins/lens/common/expressions/rename_columns/rename_columns_fn.ts b/x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns_fn.ts similarity index 64% rename from x-pack/plugins/lens/common/expressions/rename_columns/rename_columns_fn.ts rename to x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns_fn.ts index 3cf4293ffa9f2..401051db71065 100644 --- a/x-pack/plugins/lens/common/expressions/rename_columns/rename_columns_fn.ts +++ b/x-pack/plugins/lens/common/expressions/map_to_columns/map_to_columns_fn.ts @@ -6,7 +6,7 @@ */ import type { DatatableColumn } from '@kbn/expressions-plugin/common'; -import type { OriginalColumn, RenameColumnsExpressionFunction } from './types'; +import type { OriginalColumn, MapToColumnsExpressionFunction } from './types'; function getColumnName(originalColumn: OriginalColumn, newColumn: DatatableColumn) { if (originalColumn?.operationType === 'date_histogram') { @@ -21,23 +21,22 @@ function getColumnName(originalColumn: OriginalColumn, newColumn: DatatableColum return originalColumn.label; } -export const renameColumnFn: RenameColumnsExpressionFunction['fn'] = ( +export const mapToOriginalColumns: MapToColumnsExpressionFunction['fn'] = ( data, { idMap: encodedIdMap } ) => { - const idMap = JSON.parse(encodedIdMap) as Record; + const idMap = JSON.parse(encodedIdMap) as Record; return { ...data, rows: data.rows.map((row) => { const mappedRow: Record = {}; - Object.entries(idMap).forEach(([fromId, toId]) => { - mappedRow[toId.id] = row[fromId]; - }); Object.entries(row).forEach(([id, value]) => { if (id in idMap) { - mappedRow[idMap[id].id] = value; + idMap[id].forEach(({ id: originalId }) => { + mappedRow[originalId] = value; + }); } else { mappedRow[id] = value; } @@ -45,18 +44,20 @@ export const renameColumnFn: RenameColumnsExpressionFunction['fn'] = ( return mappedRow; }), - columns: data.columns.map((column) => { - const mappedItem = idMap[column.id]; - - if (!mappedItem) { - return column; - } - - return { - ...column, - id: mappedItem.id, - name: getColumnName(mappedItem, column), - }; - }), + columns: data.columns + .map((column) => { + const originalColumns = idMap[column.id]; + + if (!originalColumns) { + return column; + } + + return originalColumns.map((originalColumn) => ({ + ...column, + id: originalColumn.id, + name: getColumnName(originalColumn, column), + })); + }) + .flat(), }; }; diff --git a/x-pack/plugins/lens/common/expressions/rename_columns/types.ts b/x-pack/plugins/lens/common/expressions/map_to_columns/types.ts similarity index 85% rename from x-pack/plugins/lens/common/expressions/rename_columns/types.ts rename to x-pack/plugins/lens/common/expressions/map_to_columns/types.ts index 6edfda41cc62f..0c99260b704b1 100644 --- a/x-pack/plugins/lens/common/expressions/rename_columns/types.ts +++ b/x-pack/plugins/lens/common/expressions/map_to_columns/types.ts @@ -12,8 +12,8 @@ export type OriginalColumn = { id: string; label: string } & ( | { operationType: string; sourceField: never } ); -export type RenameColumnsExpressionFunction = ExpressionFunctionDefinition< - 'lens_rename_columns', +export type MapToColumnsExpressionFunction = ExpressionFunctionDefinition< + 'lens_map_to_columns', Datatable, { idMap: string; diff --git a/x-pack/plugins/lens/common/expressions/rename_columns/rename_columns.ts b/x-pack/plugins/lens/common/expressions/rename_columns/rename_columns.ts deleted file mode 100644 index d425d5c80d18d..0000000000000 --- a/x-pack/plugins/lens/common/expressions/rename_columns/rename_columns.ts +++ /dev/null @@ -1,32 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import type { RenameColumnsExpressionFunction } from './types'; - -export const renameColumns: RenameColumnsExpressionFunction = { - name: 'lens_rename_columns', - type: 'datatable', - help: i18n.translate('xpack.lens.functions.renameColumns.help', { - defaultMessage: 'A helper to rename the columns of a datatable', - }), - args: { - idMap: { - types: ['string'], - help: i18n.translate('xpack.lens.functions.renameColumns.idMap.help', { - defaultMessage: - 'A JSON encoded object in which keys are the old column ids and values are the corresponding new ones. All other columns ids are kept.', - }), - }, - }, - inputTypes: ['datatable'], - async fn(...args) { - /** Build optimization: prevent adding extra code into initial bundle **/ - const { renameColumnFn } = await import('./rename_columns_fn'); - return renameColumnFn(...args); - }, -}; diff --git a/x-pack/plugins/lens/public/expressions.ts b/x-pack/plugins/lens/public/expressions.ts index 868d947464e5f..a5f193d63e4f3 100644 --- a/x-pack/plugins/lens/public/expressions.ts +++ b/x-pack/plugins/lens/public/expressions.ts @@ -8,7 +8,7 @@ import type { ExpressionsSetup } from '@kbn/expressions-plugin/public'; import { getDatatable } from '../common/expressions/datatable/datatable'; import { datatableColumn } from '../common/expressions/datatable/datatable_column'; -import { renameColumns } from '../common/expressions/rename_columns/rename_columns'; +import { mapToColumns } from '../common/expressions/map_to_columns/map_to_columns'; import { formatColumn } from '../common/expressions/format_column'; import { counterRate } from '../common/expressions/counter_rate'; import { getTimeScale } from '../common/expressions/time_scale/time_scale'; @@ -24,7 +24,7 @@ export const setupExpressions = ( collapse, counterRate, formatColumn, - renameColumns, + mapToColumns, datatableColumn, getDatatable(formatFactory), getTimeScale(getDatatableUtilities, getTimeZone), diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts index 6806b1ce47795..a37976f6d8069 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts @@ -33,6 +33,7 @@ import { FormulaIndexPatternColumn, RangeIndexPatternColumn, FiltersIndexPatternColumn, + PercentileIndexPatternColumn, } from './operations'; import { createMockedFullReference } from './operations/mocks'; import { cloneDeep } from 'lodash'; @@ -491,10 +492,10 @@ describe('IndexPattern Data Source', () => { Object { "arguments": Object { "idMap": Array [ - "{\\"col-0-0\\":{\\"label\\":\\"Count of records\\",\\"dataType\\":\\"number\\",\\"isBucketed\\":false,\\"sourceField\\":\\"___records___\\",\\"operationType\\":\\"count\\",\\"id\\":\\"col1\\"},\\"col-1-1\\":{\\"label\\":\\"Date\\",\\"dataType\\":\\"date\\",\\"isBucketed\\":true,\\"operationType\\":\\"date_histogram\\",\\"sourceField\\":\\"timestamp\\",\\"params\\":{\\"interval\\":\\"1d\\"},\\"id\\":\\"col2\\"}}", + "{\\"col-0-0\\":[{\\"label\\":\\"Count of records\\",\\"dataType\\":\\"number\\",\\"isBucketed\\":false,\\"sourceField\\":\\"___records___\\",\\"operationType\\":\\"count\\",\\"id\\":\\"col1\\"}],\\"col-1-1\\":[{\\"label\\":\\"Date\\",\\"dataType\\":\\"date\\",\\"isBucketed\\":true,\\"operationType\\":\\"date_histogram\\",\\"sourceField\\":\\"timestamp\\",\\"params\\":{\\"interval\\":\\"1d\\"},\\"id\\":\\"col2\\"}]}", ], }, - "function": "lens_rename_columns", + "function": "lens_map_to_columns", "type": "function", }, ], @@ -905,9 +906,9 @@ describe('IndexPattern Data Source', () => { const ast = indexPatternDatasource.toExpression(state, 'first') as Ast; expect(ast.chain[1].arguments.metricsAtAllLevels).toEqual([false]); expect(JSON.parse(ast.chain[2].arguments.idMap[0] as string)).toEqual({ - 'col-0-0': expect.objectContaining({ id: 'bucket1' }), - 'col-1-1': expect.objectContaining({ id: 'bucket2' }), - 'col-2-2': expect.objectContaining({ id: 'metric' }), + 'col-0-0': [expect.objectContaining({ id: 'bucket1' })], + 'col-1-1': [expect.objectContaining({ id: 'bucket2' })], + 'col-2-2': [expect.objectContaining({ id: 'metric' })], }); }); @@ -948,6 +949,140 @@ describe('IndexPattern Data Source', () => { expect(ast.chain[1].arguments.timeFields).not.toContain('timefield'); }); + it('should call optimizeEsAggs once per operation for which it is available', () => { + const queryBaseState: DataViewBaseState = { + currentIndexPatternId: '1', + layers: { + first: { + indexPatternId: '1', + columns: { + col1: { + label: 'timestamp', + dataType: 'date', + operationType: 'date_histogram', + sourceField: 'timestamp', + isBucketed: true, + scale: 'interval', + params: { + interval: 'auto', + includeEmptyRows: true, + dropPartials: false, + }, + } as DateHistogramIndexPatternColumn, + col2: { + label: '95th percentile of bytes', + dataType: 'number', + operationType: 'percentile', + sourceField: 'bytes', + isBucketed: false, + scale: 'ratio', + params: { + percentile: 95, + }, + } as PercentileIndexPatternColumn, + col3: { + label: '95th percentile of bytes', + dataType: 'number', + operationType: 'percentile', + sourceField: 'bytes', + isBucketed: false, + scale: 'ratio', + params: { + percentile: 95, + }, + } as PercentileIndexPatternColumn, + }, + columnOrder: ['col1', 'col2', 'col3'], + incompleteColumns: {}, + }, + }, + }; + + const state = enrichBaseState(queryBaseState); + + const optimizeMock = jest.spyOn(operationDefinitionMap.percentile, 'optimizeEsAggs'); + + indexPatternDatasource.toExpression(state, 'first'); + + expect(operationDefinitionMap.percentile.optimizeEsAggs).toHaveBeenCalledTimes(1); + + optimizeMock.mockRestore(); + }); + + it('should update anticipated esAggs column IDs based on the order of the optimized agg expression builders', () => { + const queryBaseState: DataViewBaseState = { + currentIndexPatternId: '1', + layers: { + first: { + indexPatternId: '1', + columns: { + col1: { + label: 'timestamp', + dataType: 'date', + operationType: 'date_histogram', + sourceField: 'timestamp', + isBucketed: true, + scale: 'interval', + params: { + interval: 'auto', + includeEmptyRows: true, + dropPartials: false, + }, + } as DateHistogramIndexPatternColumn, + col2: { + label: '95th percentile of bytes', + dataType: 'number', + operationType: 'percentile', + sourceField: 'bytes', + isBucketed: false, + scale: 'ratio', + params: { + percentile: 95, + }, + } as PercentileIndexPatternColumn, + col3: { + label: 'Count of records', + dataType: 'number', + isBucketed: false, + sourceField: '___records___', + operationType: 'count', + timeScale: 'h', + }, + col4: { + label: 'Count of records2', + dataType: 'number', + isBucketed: false, + sourceField: '___records___', + operationType: 'count', + timeScale: 'h', + }, + }, + columnOrder: ['col1', 'col2', 'col3', 'col4'], + incompleteColumns: {}, + }, + }, + }; + + const state = enrichBaseState(queryBaseState); + + const optimizeMock = jest + .spyOn(operationDefinitionMap.percentile, 'optimizeEsAggs') + .mockImplementation((aggs, esAggsIdMap) => { + // change the order of the aggregations + return { aggs: aggs.reverse(), esAggsIdMap }; + }); + + const ast = indexPatternDatasource.toExpression(state, 'first') as Ast; + + expect(operationDefinitionMap.percentile.optimizeEsAggs).toHaveBeenCalledTimes(1); + + const idMap = JSON.parse(ast.chain[2].arguments.idMap as unknown as string); + + expect(Object.keys(idMap)).toEqual(['col-0-3', 'col-1-2', 'col-2-1', 'col-3-0']); + + optimizeMock.mockRestore(); + }); + describe('references', () => { beforeEach(() => { // @ts-expect-error we are inserting an invalid type @@ -1026,10 +1161,13 @@ describe('IndexPattern Data Source', () => { const state = enrichBaseState(queryBaseState); const ast = indexPatternDatasource.toExpression(state, 'first') as Ast; + expect(JSON.parse(ast.chain[2].arguments.idMap[0] as string)).toEqual({ - 'col-0-0': expect.objectContaining({ - id: 'col1', - }), + 'col-0-0': [ + expect.objectContaining({ + id: 'col1', + }), + ], }); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts index 6ca79009ff95b..74d635cac02dc 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts @@ -12,7 +12,10 @@ import { CoreStart, } from '@kbn/core/public'; import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; -import { ExpressionAstFunction } from '@kbn/expressions-plugin/public'; +import { + ExpressionAstExpressionBuilder, + ExpressionAstFunction, +} from '@kbn/expressions-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; @@ -55,6 +58,7 @@ import { IndexPattern, IndexPatternField, IndexPatternLayer } from '../../types' import { DateRange, LayerType } from '../../../../common'; import { rangeOperation } from './ranges'; import { IndexPatternDimensionEditorProps, OperationSupportMatrix } from '../../dimension_panel'; +import type { OriginalColumn } from '../../to_expression'; export type { IncompleteColumn, @@ -378,6 +382,17 @@ interface BaseOperationDefinitionProps * Title for the help component */ helpComponentTitle?: string; + /** + * Optimizes EsAggs expression. Invoked only once per operation type. + */ + optimizeEsAggs?: ( + aggs: ExpressionAstExpressionBuilder[], + esAggsIdMap: Record, + aggExpressionToEsAggsIdMap: Map + ) => { + aggs: ExpressionAstExpressionBuilder[]; + esAggsIdMap: Record; + }; } interface BaseBuildColumnArgs { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx index ae8ba7d965ea7..08afcc447eec6 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx @@ -20,6 +20,12 @@ import { percentileOperation } from '.'; import { IndexPattern, IndexPatternLayer } from '../../types'; import { PercentileIndexPatternColumn } from './percentile'; import { TermsIndexPatternColumn } from './terms'; +import { + buildExpressionFunction, + buildExpression, + ExpressionAstExpressionBuilder, +} from '@kbn/expressions-plugin/public'; +import type { OriginalColumn } from '../../to_expression'; jest.mock('lodash', () => { const original = jest.requireActual('lodash'); @@ -187,6 +193,441 @@ describe('percentile', () => { }); }); + describe('optimizeEsAggs', () => { + const makeEsAggBuilder = (name: string, params: object) => + buildExpression({ + type: 'expression', + chain: [buildExpressionFunction(name, params).toAst()], + }); + + const buildMapsFromAggBuilders = (aggs: ExpressionAstExpressionBuilder[]) => { + const esAggsIdMap: Record = {}; + const aggsToIdsMap = new Map(); + aggs.forEach((builder, i) => { + const esAggsId = `col-${i}-${i}`; + esAggsIdMap[esAggsId] = [{ id: `original-${i}` } as OriginalColumn]; + aggsToIdsMap.set(builder, esAggsId); + }); + return { + esAggsIdMap, + aggsToIdsMap, + }; + }; + + it('should collapse percentile dimensions with matching parameters', () => { + const field1 = 'foo'; + const field2 = 'bar'; + const timeShift1 = '1d'; + const timeShift2 = '2d'; + + const aggs = [ + // group 1 + makeEsAggBuilder('aggSinglePercentile', { + id: 1, + enabled: true, + schema: 'metric', + field: field1, + percentile: 10, + timeShift: undefined, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 2, + enabled: true, + schema: 'metric', + field: field1, + percentile: 20, + timeShift: undefined, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 3, + enabled: true, + schema: 'metric', + field: field1, + percentile: 30, + timeShift: undefined, + }), + // group 2 + makeEsAggBuilder('aggSinglePercentile', { + id: 4, + enabled: true, + schema: 'metric', + field: field2, + percentile: 10, + timeShift: undefined, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 5, + enabled: true, + schema: 'metric', + field: field2, + percentile: 40, + timeShift: undefined, + }), + // group 3 + makeEsAggBuilder('aggSinglePercentile', { + id: 6, + enabled: true, + schema: 'metric', + field: field2, + percentile: 50, + timeShift: timeShift1, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 7, + enabled: true, + schema: 'metric', + field: field2, + percentile: 60, + timeShift: timeShift1, + }), + // group 4 + makeEsAggBuilder('aggSinglePercentile', { + id: 8, + enabled: true, + schema: 'metric', + field: field2, + percentile: 70, + timeShift: timeShift2, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 9, + enabled: true, + schema: 'metric', + field: field2, + percentile: 80, + timeShift: timeShift2, + }), + ]; + + const { esAggsIdMap, aggsToIdsMap } = buildMapsFromAggBuilders(aggs); + + const { esAggsIdMap: newIdMap, aggs: newAggs } = percentileOperation.optimizeEsAggs!( + aggs, + esAggsIdMap, + aggsToIdsMap + ); + + expect(newAggs.length).toBe(4); + + expect(newAggs[0].functions[0].getArgument('field')![0]).toBe(field1); + expect(newAggs[0].functions[0].getArgument('timeShift')).toBeUndefined(); + expect(newAggs[1].functions[0].getArgument('field')![0]).toBe(field2); + expect(newAggs[1].functions[0].getArgument('timeShift')).toBeUndefined(); + expect(newAggs[2].functions[0].getArgument('field')![0]).toBe(field2); + expect(newAggs[2].functions[0].getArgument('timeShift')![0]).toBe(timeShift1); + expect(newAggs[3].functions[0].getArgument('field')![0]).toBe(field2); + expect(newAggs[3].functions[0].getArgument('timeShift')![0]).toBe(timeShift2); + + expect(newAggs).toMatchInlineSnapshot(` + Array [ + Object { + "findFunction": [Function], + "functions": Array [ + Object { + "addArgument": [Function], + "arguments": Object { + "enabled": Array [ + true, + ], + "field": Array [ + "foo", + ], + "id": Array [ + 1, + ], + "percents": Array [ + 10, + 20, + 30, + ], + "schema": Array [ + "metric", + ], + }, + "getArgument": [Function], + "name": "aggPercentiles", + "removeArgument": [Function], + "replaceArgument": [Function], + "toAst": [Function], + "toString": [Function], + "type": "expression_function_builder", + }, + ], + "toAst": [Function], + "toString": [Function], + "type": "expression_builder", + }, + Object { + "findFunction": [Function], + "functions": Array [ + Object { + "addArgument": [Function], + "arguments": Object { + "enabled": Array [ + true, + ], + "field": Array [ + "bar", + ], + "id": Array [ + 4, + ], + "percents": Array [ + 10, + 40, + ], + "schema": Array [ + "metric", + ], + }, + "getArgument": [Function], + "name": "aggPercentiles", + "removeArgument": [Function], + "replaceArgument": [Function], + "toAst": [Function], + "toString": [Function], + "type": "expression_function_builder", + }, + ], + "toAst": [Function], + "toString": [Function], + "type": "expression_builder", + }, + Object { + "findFunction": [Function], + "functions": Array [ + Object { + "addArgument": [Function], + "arguments": Object { + "enabled": Array [ + true, + ], + "field": Array [ + "bar", + ], + "id": Array [ + 6, + ], + "percents": Array [ + 50, + 60, + ], + "schema": Array [ + "metric", + ], + "timeShift": Array [ + "1d", + ], + }, + "getArgument": [Function], + "name": "aggPercentiles", + "removeArgument": [Function], + "replaceArgument": [Function], + "toAst": [Function], + "toString": [Function], + "type": "expression_function_builder", + }, + ], + "toAst": [Function], + "toString": [Function], + "type": "expression_builder", + }, + Object { + "findFunction": [Function], + "functions": Array [ + Object { + "addArgument": [Function], + "arguments": Object { + "enabled": Array [ + true, + ], + "field": Array [ + "bar", + ], + "id": Array [ + 8, + ], + "percents": Array [ + 70, + 80, + ], + "schema": Array [ + "metric", + ], + "timeShift": Array [ + "2d", + ], + }, + "getArgument": [Function], + "name": "aggPercentiles", + "removeArgument": [Function], + "replaceArgument": [Function], + "toAst": [Function], + "toString": [Function], + "type": "expression_function_builder", + }, + ], + "toAst": [Function], + "toString": [Function], + "type": "expression_builder", + }, + ] + `); + + expect(newIdMap).toMatchInlineSnapshot(` + Object { + "col-?-1.10": Array [ + Object { + "id": "original-0", + }, + ], + "col-?-1.20": Array [ + Object { + "id": "original-1", + }, + ], + "col-?-1.30": Array [ + Object { + "id": "original-2", + }, + ], + "col-?-4.10": Array [ + Object { + "id": "original-3", + }, + ], + "col-?-4.40": Array [ + Object { + "id": "original-4", + }, + ], + "col-?-6.50": Array [ + Object { + "id": "original-5", + }, + ], + "col-?-6.60": Array [ + Object { + "id": "original-6", + }, + ], + "col-?-8.70": Array [ + Object { + "id": "original-7", + }, + ], + "col-?-8.80": Array [ + Object { + "id": "original-8", + }, + ], + } + `); + }); + + it('should handle multiple identical percentiles', () => { + const field1 = 'foo'; + const field2 = 'bar'; + const samePercentile = 90; + + const aggs = [ + // group 1 + makeEsAggBuilder('aggSinglePercentile', { + id: 1, + enabled: true, + schema: 'metric', + field: field1, + percentile: samePercentile, + timeShift: undefined, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 2, + enabled: true, + schema: 'metric', + field: field1, + percentile: samePercentile, + timeShift: undefined, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 4, + enabled: true, + schema: 'metric', + field: field2, + percentile: 10, + timeShift: undefined, + }), + makeEsAggBuilder('aggSinglePercentile', { + id: 3, + enabled: true, + schema: 'metric', + field: field1, + percentile: samePercentile, + timeShift: undefined, + }), + ]; + + const { esAggsIdMap, aggsToIdsMap } = buildMapsFromAggBuilders(aggs); + + const { esAggsIdMap: newIdMap, aggs: newAggs } = percentileOperation.optimizeEsAggs!( + aggs, + esAggsIdMap, + aggsToIdsMap + ); + + expect(newAggs.length).toBe(2); + expect(newIdMap[`col-?-1.${samePercentile}`].length).toBe(3); + expect(newIdMap).toMatchInlineSnapshot(` + Object { + "col-2-2": Array [ + Object { + "id": "original-2", + }, + ], + "col-?-1.90": Array [ + Object { + "id": "original-0", + }, + Object { + "id": "original-1", + }, + Object { + "id": "original-3", + }, + ], + } + `); + }); + + it("shouldn't touch non-percentile aggs or single percentiles with no siblings", () => { + const aggs = [ + makeEsAggBuilder('aggSinglePercentile', { + id: 1, + enabled: true, + schema: 'metric', + field: 'foo', + percentile: 30, + }), + makeEsAggBuilder('aggMax', { + id: 1, + enabled: true, + schema: 'metric', + field: 'bar', + }), + ]; + + const { esAggsIdMap, aggsToIdsMap } = buildMapsFromAggBuilders(aggs); + + const { esAggsIdMap: newIdMap, aggs: newAggs } = percentileOperation.optimizeEsAggs!( + aggs, + esAggsIdMap, + aggsToIdsMap + ); + + expect(newAggs).toEqual(aggs); + expect(newIdMap).toEqual(esAggsIdMap); + }); + }); + describe('buildColumn', () => { it('should set default percentile', () => { const indexPattern = createMockedIndexPattern(); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.tsx index 0699ad5f88405..a313b03d34e1b 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.tsx @@ -8,8 +8,13 @@ import { EuiFormRow, EuiRange, EuiRangeProps } from '@elastic/eui'; import React, { useCallback } from 'react'; import { i18n } from '@kbn/i18n'; -import { AggFunctionsMapping } from '@kbn/data-plugin/public'; -import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; +import { AggFunctionsMapping, METRIC_TYPES } from '@kbn/data-plugin/public'; +import { + buildExpression, + buildExpressionFunction, + ExpressionAstExpressionBuilder, +} from '@kbn/expressions-plugin/public'; +import { AggExpressionFunctionArgs } from '@kbn/data-plugin/common'; import { OperationDefinition } from '.'; import { getFormatFromPreviousColumn, @@ -143,6 +148,120 @@ export const percentileOperation: OperationDefinition< } ).toAst(); }, + optimizeEsAggs: (_aggs, _esAggsIdMap, aggExpressionToEsAggsIdMap) => { + let aggs = [..._aggs]; + const esAggsIdMap = { ..._esAggsIdMap }; + + const percentileExpressionsByArgs: Record = {}; + + // group percentile dimensions by differentiating parameters + aggs.forEach((expressionBuilder) => { + const { + functions: [fnBuilder], + } = expressionBuilder; + if (fnBuilder.name === 'aggSinglePercentile') { + const groupByKey = `${fnBuilder.getArgument('field')?.[0]}-${ + fnBuilder.getArgument('timeShift')?.[0] + }`; + if (!(groupByKey in percentileExpressionsByArgs)) { + percentileExpressionsByArgs[groupByKey] = []; + } + + percentileExpressionsByArgs[groupByKey].push(expressionBuilder); + } + }); + + // collapse them into a single esAggs expression builder + Object.values(percentileExpressionsByArgs).forEach((expressionBuilders) => { + if (expressionBuilders.length <= 1) { + // don't need to optimize if there aren't more than one + return; + } + + // we're going to merge these percentile builders into a single builder, so + // remove them from the aggs array + aggs = aggs.filter((aggBuilder) => !expressionBuilders.includes(aggBuilder)); + + const { + functions: [firstFnBuilder], + } = expressionBuilders[0]; + + const esAggsColumnId = firstFnBuilder.getArgument('id')![0]; + const aggPercentilesConfig: AggExpressionFunctionArgs = { + id: esAggsColumnId, + enabled: firstFnBuilder.getArgument('enabled')?.[0], + schema: firstFnBuilder.getArgument('schema')?.[0], + field: firstFnBuilder.getArgument('field')?.[0], + percents: [], + // time shift is added to wrapping aggFilteredMetric if filter is set + timeShift: firstFnBuilder.getArgument('timeShift')?.[0], + }; + + const percentileToBuilder: Record = {}; + for (const builder of expressionBuilders) { + const percentile = builder.functions[0].getArgument('percentile')![0] as number; + if (percentile in percentileToBuilder) { + // found a duplicate percentile so let's optimize + + const duplicateExpressionBuilder = percentileToBuilder[percentile]; + + const idForDuplicate = aggExpressionToEsAggsIdMap.get(duplicateExpressionBuilder); + const idForThisOne = aggExpressionToEsAggsIdMap.get(builder); + + if (!idForDuplicate || !idForThisOne) { + throw new Error( + "Couldn't find esAggs ID for percentile expression builder... this should never happen." + ); + } + + esAggsIdMap[idForDuplicate].push(...esAggsIdMap[idForThisOne]); + + delete esAggsIdMap[idForThisOne]; + + // remove current builder + expressionBuilders = expressionBuilders.filter((b) => b !== builder); + } else { + percentileToBuilder[percentile] = builder; + aggPercentilesConfig.percents!.push(percentile); + } + } + + const multiPercentilesAst = buildExpressionFunction( + 'aggPercentiles', + aggPercentilesConfig + ).toAst(); + + aggs.push( + buildExpression({ + type: 'expression', + chain: [multiPercentilesAst], + }) + ); + + expressionBuilders.forEach((expressionBuilder) => { + const currentEsAggsId = aggExpressionToEsAggsIdMap.get(expressionBuilder); + if (currentEsAggsId === undefined) { + throw new Error('Could not find current column ID for percentile agg expression builder'); + } + // esAggs appends the percent number to the agg id to make distinct column IDs in the resulting datatable. + // We're anticipating that here by adding the `.`. + // The agg index will be assigned when we update all the indices in the ID map based on the agg order in the + // datasource's toExpression fn so we mark it as '?' for now. + const newEsAggsId = `col-?-${esAggsColumnId}.${ + expressionBuilder.functions[0].getArgument('percentile')![0] + }`; + + esAggsIdMap[newEsAggsId] = esAggsIdMap[currentEsAggsId]; + + delete esAggsIdMap[currentEsAggsId]; + }); + }); + + return { + esAggsIdMap, + aggs, + }; + }, getErrorMessage: (layer, columnId, indexPattern) => combineErrorMessages([ getInvalidFieldMessage(layer.columns[columnId] as FieldBasedIndexPatternColumn, indexPattern), diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts b/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts index 0307e748ac1fb..6cfab965f36a9 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts @@ -6,7 +6,7 @@ */ import type { IUiSettingsClient } from '@kbn/core/public'; -import { partition } from 'lodash'; +import { partition, uniq } from 'lodash'; import { AggFunctionsMapping, EsaggsExpressionFunctionDefinition, @@ -27,7 +27,7 @@ import { DateHistogramIndexPatternColumn, RangeIndexPatternColumn } from './oper import { FormattedIndexPatternColumn } from './operations/definitions/column_types'; import { isColumnFormatted, isColumnOfType } from './operations/definitions/helpers'; -type OriginalColumn = { id: string } & GenericIndexPatternColumn; +export type OriginalColumn = { id: string } & GenericIndexPatternColumn; declare global { interface Window { @@ -38,6 +38,15 @@ declare global { } } +// esAggs column ID manipulation functions +const extractEsAggId = (id: string) => id.split('.')[0].split('-')[2]; +const updatePositionIndex = (currentId: string, newIndex: number) => { + const [fullId, percentile] = currentId.split('.'); + const idParts = fullId.split('-'); + idParts[1] = String(newIndex); + return idParts.join('-') + (percentile ? `.${percentile}` : ''); +}; + function getExpressionForLayer( layer: IndexPatternLayer, indexPattern: IndexPattern, @@ -95,7 +104,7 @@ function getExpressionForLayer( ); if (referenceEntries.length || esAggEntries.length) { - const aggs: ExpressionAstExpressionBuilder[] = []; + let aggs: ExpressionAstExpressionBuilder[] = []; const expressions: ExpressionAstFunction[] = []; sortedReferences(referenceEntries).forEach((colId) => { @@ -107,13 +116,17 @@ function getExpressionForLayer( }); const orderedColumnIds = esAggEntries.map(([colId]) => colId); + let esAggsIdMap: Record = {}; + const aggExpressionToEsAggsIdMap: Map = new Map(); esAggEntries.forEach(([colId, col], index) => { const def = operationDefinitionMap[col.operationType]; if (def.input !== 'fullReference' && def.input !== 'managedReference') { + const aggId = String(index); + const wrapInFilter = Boolean(def.filterable && col.filter); let aggAst = def.toEsAggsFn( col, - wrapInFilter ? `${index}-metric` : String(index), + wrapInFilter ? `${aggId}-metric` : aggId, indexPattern, layer, uiSettings, @@ -139,12 +152,25 @@ function getExpressionForLayer( } ).toAst(); } - aggs.push( - buildExpression({ - type: 'expression', - chain: [aggAst], - }) - ); + + const expressionBuilder = buildExpression({ + type: 'expression', + chain: [aggAst], + }); + aggs.push(expressionBuilder); + + const esAggsId = window.ELASTIC_LENS_DELAY_SECONDS + ? `col-${index + (col.isBucketed ? 0 : 1)}-${aggId}` + : `col-${index}-${aggId}`; + + esAggsIdMap[esAggsId] = [ + { + ...col, + id: colId, + }, + ]; + + aggExpressionToEsAggsIdMap.set(expressionBuilder, esAggsId); } }); @@ -164,19 +190,63 @@ function getExpressionForLayer( ); } - const idMap = esAggEntries.reduce((currentIdMap, [colId, column], index) => { - const esAggsId = window.ELASTIC_LENS_DELAY_SECONDS - ? `col-${index + (column.isBucketed ? 0 : 1)}-${index}` - : `col-${index}-${index}`; + uniq(esAggEntries.map(([_, column]) => column.operationType)).forEach((type) => { + const optimizeAggs = operationDefinitionMap[type].optimizeEsAggs?.bind( + operationDefinitionMap[type] + ); + if (optimizeAggs) { + const { aggs: newAggs, esAggsIdMap: newIdMap } = optimizeAggs( + aggs, + esAggsIdMap, + aggExpressionToEsAggsIdMap + ); + + aggs = newAggs; + esAggsIdMap = newIdMap; + } + }); + + /* + Update ID mappings with new agg array positions. + + Given this esAggs-ID-to-original-column map after percentile (for example) optimization: + col-0-0: column1 + col-?-1.34: column2 (34th percentile) + col-2-2: column3 + col-?-1.98: column4 (98th percentile) + + and this array of aggs + 0: { id: 0 } + 1: { id: 2 } + 2: { id: 1 } + + We need to update the anticipated agg indicies to match the aggs array: + col-0-0: column1 + col-2-1.34: column2 (34th percentile) + col-1-2: column3 + col-3-3.98: column4 (98th percentile) + */ + + const updatedEsAggsIdMap: Record = {}; + let counter = 0; + + const esAggsIds = Object.keys(esAggsIdMap); + aggs.forEach((builder) => { + const esAggId = builder.functions[0].getArgument('id')?.[0]; + const matchingEsAggColumnIds = esAggsIds.filter((id) => extractEsAggId(id) === esAggId); + + matchingEsAggColumnIds.forEach((currentId) => { + const currentColumn = esAggsIdMap[currentId][0]; + const aggIndex = window.ELASTIC_LENS_DELAY_SECONDS + ? counter + (currentColumn.isBucketed ? 0 : 1) + : counter; + const newId = updatePositionIndex(currentId, aggIndex); + updatedEsAggsIdMap[newId] = esAggsIdMap[currentId]; + + counter++; + }); + }); - return { - ...currentIdMap, - [esAggsId]: { - ...column, - id: colId, - }, - }; - }, {} as Record); const columnsWithFormatters = columnEntries.filter( ([, col]) => (isColumnOfType('range', col) && col.params?.parentFormat) || @@ -292,9 +362,9 @@ function getExpressionForLayer( }).toAst(), { type: 'function', - function: 'lens_rename_columns', + function: 'lens_map_to_columns', arguments: { - idMap: [JSON.stringify(idMap)], + idMap: [JSON.stringify(updatedEsAggsIdMap)], }, }, ...expressions, diff --git a/x-pack/plugins/lens/server/expressions/expressions.ts b/x-pack/plugins/lens/server/expressions/expressions.ts index bd516c756df15..1e80fc5bb49a3 100644 --- a/x-pack/plugins/lens/server/expressions/expressions.ts +++ b/x-pack/plugins/lens/server/expressions/expressions.ts @@ -10,7 +10,7 @@ import type { ExpressionsServerSetup } from '@kbn/expressions-plugin/server'; import { counterRate, formatColumn, - renameColumns, + mapToColumns, getTimeScale, getDatatable, } from '../../common/expressions'; @@ -25,7 +25,7 @@ export const setupExpressions = ( [ counterRate, formatColumn, - renameColumns, + mapToColumns, getDatatable(getFormatFactory(core)), getTimeScale(getDatatableUtilitiesFactory(core), getTimeZoneFactory(core)), ].forEach((expressionFn) => expressions.registerFunction(expressionFn)); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 3c492c1443bf7..ca46806ff7214 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -365,8 +365,6 @@ "xpack.lens.functions.counterRate.args.outputColumnNameHelpText": "Nom de la colonne dans laquelle le taux de compteur résultant sera stocké", "xpack.lens.functions.counterRate.help": "Calcule le taux de compteur d'une colonne dans un tableau de données", "xpack.lens.functions.lastValue.missingSortField": "Cette vue de données ne contient aucun champ de date.", - "xpack.lens.functions.renameColumns.help": "Aide pour renommer les colonnes d'un tableau de données", - "xpack.lens.functions.renameColumns.idMap.help": "Un objet encodé JSON dans lequel les clés sont les anciens ID de colonne et les valeurs sont les nouveaux ID correspondants. Tous les autres ID de colonne sont conservés.", "xpack.lens.functions.timeScale.dateColumnMissingMessage": "L'ID de colonne de date {columnId} n'existe pas.", "xpack.lens.functions.timeScale.timeInfoMissingMessage": "Impossible de récupérer les informations d'histogramme des dates", "xpack.lens.gauge.addLayer": "Visualisation", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index fa1ce7b24c45c..83bf2bf0eee3d 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -367,8 +367,6 @@ "xpack.lens.functions.counterRate.args.outputColumnNameHelpText": "結果のカウンターレートを格納する列の名前", "xpack.lens.functions.counterRate.help": "データテーブルの列のカウンターレートを計算します", "xpack.lens.functions.lastValue.missingSortField": "このデータビューには日付フィールドが含まれていません", - "xpack.lens.functions.renameColumns.help": "データベースの列の名前の変更をアシストします", - "xpack.lens.functions.renameColumns.idMap.help": "キーが古い列 ID で値が対応する新しい列 ID となるように JSON エンコーディングされたオブジェクトです。他の列 ID はすべてのそのままです。", "xpack.lens.functions.timeScale.dateColumnMissingMessage": "指定した dateColumnId {columnId} は存在しません。", "xpack.lens.functions.timeScale.timeInfoMissingMessage": "日付ヒストグラム情報を取得できませんでした", "xpack.lens.gauge.addLayer": "ビジュアライゼーション", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 9bcc45a9ca1ab..f37c2745c000f 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -372,8 +372,6 @@ "xpack.lens.functions.counterRate.args.outputColumnNameHelpText": "要存储结果计数率的列名称", "xpack.lens.functions.counterRate.help": "在数据表中计算列的计数率", "xpack.lens.functions.lastValue.missingSortField": "此数据视图不包含任何日期字段", - "xpack.lens.functions.renameColumns.help": "用于重命名数据表列的助手", - "xpack.lens.functions.renameColumns.idMap.help": "旧列 ID 为键且相应新列 ID 为值的 JSON 编码对象。所有其他列 ID 都将保留。", "xpack.lens.functions.timeScale.dateColumnMissingMessage": "指定的 dateColumnId {columnId} 不存在。", "xpack.lens.functions.timeScale.timeInfoMissingMessage": "无法获取日期直方图信息", "xpack.lens.gauge.addLayer": "可视化", From 7439c2bba96964c311c83bd8125a8daf27750c75 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Tue, 21 Jun 2022 11:26:55 -0400 Subject: [PATCH 41/50] [Fleet] Schedule uprade should only be enabled for platinium licence (#134833) --- x-pack/plugins/fleet/common/constants/agent_policy.ts | 2 ++ .../agents/agent_list_page/components/bulk_actions.tsx | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/common/constants/agent_policy.ts b/x-pack/plugins/fleet/common/constants/agent_policy.ts index 316c66d2c75d6..3a24bbd4a18c0 100644 --- a/x-pack/plugins/fleet/common/constants/agent_policy.ts +++ b/x-pack/plugins/fleet/common/constants/agent_policy.ts @@ -26,3 +26,5 @@ export const AGENT_POLICY_DEFAULT_MONITORING_DATASETS = [ 'elastic_agent.heartbeat', 'elastic_agent.cloudbeat', ]; + +export const LICENSE_FOR_SCHEDULE_UPGRADE = 'platinum'; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx index 8d35b3bcd19f1..6148b39b088af 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx @@ -24,6 +24,8 @@ import { AgentUnenrollAgentModal, AgentUpgradeAgentModal, } from '../../components'; +import { useLicense } from '../../../../hooks'; +import { LICENSE_FOR_SCHEDULE_UPGRADE } from '../../../../../../../common'; import type { SelectionMode } from './types'; @@ -47,6 +49,9 @@ export const AgentBulkActions: React.FunctionComponent = ({ selectedAgents, refreshAgents, }) => { + const licenseService = useLicense(); + const isLicenceAllowingScheduleUpgrade = licenseService.hasAtLeast(LICENSE_FOR_SCHEDULE_UPGRADE); + // Bulk actions menu states const [isMenuOpen, setIsMenuOpen] = useState(false); const closeMenu = () => setIsMenuOpen(false); @@ -133,7 +138,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected, + disabled: !atLeastOneActiveAgentSelected || !isLicenceAllowingScheduleUpgrade, onClick: () => { closeMenu(); setUpgradeModalState({ isOpen: true, isScheduled: true }); From 10a5f9ac83ff7653ba0ab00d0f5722bdf6e7eab6 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Tue, 21 Jun 2022 17:43:17 +0200 Subject: [PATCH 42/50] Remove old doc generation system for core APIs (#134313) * Remove old doc generation system for core APIs * delete docs/development/core folder --- .buildkite/scripts/steps/checks.sh | 1 - .../scripts/steps/checks/doc_api_changes.sh | 9 - .github/CODEOWNERS | 1 - docs/development/core/public/index.md | 12 - .../kibana-plugin-core-public.app.approute.md | 13 - ...ana-plugin-core-public.app.capabilities.md | 13 - .../kibana-plugin-core-public.app.category.md | 13 - ...ibana-plugin-core-public.app.chromeless.md | 13 - ...kibana-plugin-core-public.app.deeplinks.md | 48 --- ...bana-plugin-core-public.app.defaultpath.md | 13 - ...ibana-plugin-core-public.app.exactroute.md | 29 -- .../kibana-plugin-core-public.app.id.md | 15 - .../kibana-plugin-core-public.app.keywords.md | 13 - .../public/kibana-plugin-core-public.app.md | 34 -- .../kibana-plugin-core-public.app.mount.md | 13 - ...na-plugin-core-public.app.navlinkstatus.md | 13 - ...ibana-plugin-core-public.app.searchable.md | 13 - .../kibana-plugin-core-public.app.status.md | 13 - .../kibana-plugin-core-public.app.title.md | 13 - .../kibana-plugin-core-public.app.updater_.md | 43 --- ...na-plugin-core-public.app_wrapper_class.md | 13 - ...lugin-core-public.appcategory.arialabel.md | 13 - ...gin-core-public.appcategory.euiicontype.md | 13 - ...ibana-plugin-core-public.appcategory.id.md | 13 - ...na-plugin-core-public.appcategory.label.md | 13 - .../kibana-plugin-core-public.appcategory.md | 24 -- ...na-plugin-core-public.appcategory.order.md | 13 - .../kibana-plugin-core-public.appdeeplink.md | 27 -- ...ibana-plugin-core-public.appleaveaction.md | 15 - ...a-plugin-core-public.appleaveactiontype.md | 21 -- ...ublic.appleaveconfirmaction.buttoncolor.md | 11 - ...e-public.appleaveconfirmaction.callback.md | 11 - ...appleaveconfirmaction.confirmbuttontext.md | 11 - ...lugin-core-public.appleaveconfirmaction.md | 27 -- ...-core-public.appleaveconfirmaction.text.md | 11 - ...core-public.appleaveconfirmaction.title.md | 11 - ...-core-public.appleaveconfirmaction.type.md | 11 - ...lugin-core-public.appleavedefaultaction.md | 22 -- ...-core-public.appleavedefaultaction.type.md | 11 - ...bana-plugin-core-public.appleavehandler.md | 20 -- ...ana-plugin-core-public.applicationsetup.md | 20 -- ...n-core-public.applicationsetup.register.md | 24 -- ...lic.applicationsetup.registerappupdater.md | 46 --- ...e-public.applicationstart.applications_.md | 18 - ...re-public.applicationstart.capabilities.md | 13 - ...e-public.applicationstart.currentappid_.md | 13 - ...re-public.applicationstart.geturlforapp.md | 33 -- ...ana-plugin-core-public.applicationstart.md | 29 -- ...e-public.applicationstart.navigatetoapp.md | 25 -- ...e-public.applicationstart.navigatetourl.md | 50 --- .../kibana-plugin-core-public.appmount.md | 13 - ...e-public.appmountparameters.appbasepath.md | 61 ---- ...-core-public.appmountparameters.element.md | 13 - ...-core-public.appmountparameters.history.md | 55 --- ...a-plugin-core-public.appmountparameters.md | 24 -- ...re-public.appmountparameters.onappleave.md | 45 --- ....appmountparameters.setheaderactionmenu.md | 38 -- ...n-core-public.appmountparameters.theme_.md | 33 -- ...ana-plugin-core-public.appnavlinkstatus.md | 23 -- ...n-core-public.appnavoptions.euiicontype.md | 13 - ...a-plugin-core-public.appnavoptions.icon.md | 13 - ...kibana-plugin-core-public.appnavoptions.md | 23 -- ...-plugin-core-public.appnavoptions.order.md | 13 - ...lugin-core-public.appnavoptions.tooltip.md | 13 - .../kibana-plugin-core-public.appstatus.md | 21 -- .../kibana-plugin-core-public.appunmount.md | 13 - ...a-plugin-core-public.appupdatablefields.md | 13 - .../kibana-plugin-core-public.appupdater.md | 13 - ...ugin-core-public.capabilities.catalogue.md | 13 - ...gin-core-public.capabilities.management.md | 15 - .../kibana-plugin-core-public.capabilities.md | 22 -- ...lugin-core-public.capabilities.navlinks.md | 13 - ...plugin-core-public.chromebadge.icontype.md | 11 - .../kibana-plugin-core-public.chromebadge.md | 21 -- ...ana-plugin-core-public.chromebadge.text.md | 11 - ...-plugin-core-public.chromebadge.tooltip.md | 11 - ...ana-plugin-core-public.chromebreadcrumb.md | 12 - ...lugin-core-public.chromedoctitle.change.md | 33 -- ...ibana-plugin-core-public.chromedoctitle.md | 37 -- ...plugin-core-public.chromedoctitle.reset.md | 17 - ...core-public.chromehelpextension.appname.md | 13 - ...core-public.chromehelpextension.content.md | 13 - ...n-core-public.chromehelpextension.links.md | 13 - ...-plugin-core-public.chromehelpextension.md | 21 -- ...core-public.chromehelpextensionlinkbase.md | 12 - ...romehelpextensionmenucustomlink.content.md | 13 - ....chromehelpextensionmenucustomlink.href.md | 13 - ...omehelpextensionmenucustomlink.linktype.md | 13 - ...ublic.chromehelpextensionmenucustomlink.md | 22 -- ...chromehelpextensionmenudiscusslink.href.md | 13 - ...mehelpextensionmenudiscusslink.linktype.md | 13 - ...blic.chromehelpextensionmenudiscusslink.md | 21 -- ...helpextensionmenudocumentationlink.href.md | 13 - ...extensionmenudocumentationlink.linktype.md | 13 - ...hromehelpextensionmenudocumentationlink.md | 21 -- ...hromehelpextensionmenugithublink.labels.md | 13 - ...omehelpextensionmenugithublink.linktype.md | 13 - ...ublic.chromehelpextensionmenugithublink.md | 22 -- ...chromehelpextensionmenugithublink.title.md | 13 - ...core-public.chromehelpextensionmenulink.md | 12 - ...blic.chromehelpmenuactions.hidehelpmenu.md | 11 - ...lugin-core-public.chromehelpmenuactions.md | 19 - ...ana-plugin-core-public.chromenavcontrol.md | 20 -- ...ugin-core-public.chromenavcontrol.mount.md | 11 - ...ugin-core-public.chromenavcontrol.order.md | 11 - ...na-plugin-core-public.chromenavcontrols.md | 35 -- ...public.chromenavcontrols.registercenter.md | 24 -- ...e-public.chromenavcontrols.registerleft.md | 24 -- ...-public.chromenavcontrols.registerright.md | 24 -- ...lugin-core-public.chromenavlink.baseurl.md | 13 - ...ugin-core-public.chromenavlink.category.md | 13 - ...ugin-core-public.chromenavlink.disabled.md | 13 - ...n-core-public.chromenavlink.euiicontype.md | 13 - ...plugin-core-public.chromenavlink.hidden.md | 13 - ...a-plugin-core-public.chromenavlink.href.md | 13 - ...a-plugin-core-public.chromenavlink.icon.md | 13 - ...ana-plugin-core-public.chromenavlink.id.md | 13 - ...kibana-plugin-core-public.chromenavlink.md | 30 -- ...-plugin-core-public.chromenavlink.order.md | 13 - ...-plugin-core-public.chromenavlink.title.md | 13 - ...lugin-core-public.chromenavlink.tooltip.md | 13 - ...na-plugin-core-public.chromenavlink.url.md | 13 - ...links.enableforcedappswitchernavigation.md | 23 -- ...a-plugin-core-public.chromenavlinks.get.md | 24 -- ...lugin-core-public.chromenavlinks.getall.md | 17 - ...navlinks.getforceappswitchernavigation_.md | 17 - ...core-public.chromenavlinks.getnavlinks_.md | 17 - ...a-plugin-core-public.chromenavlinks.has.md | 24 -- ...ibana-plugin-core-public.chromenavlinks.md | 25 -- ...-core-public.chromerecentlyaccessed.add.md | 33 -- ...-core-public.chromerecentlyaccessed.get.md | 24 -- ...core-public.chromerecentlyaccessed.get_.md | 24 -- ...ugin-core-public.chromerecentlyaccessed.md | 22 -- ...ic.chromerecentlyaccessedhistoryitem.id.md | 11 - ...chromerecentlyaccessedhistoryitem.label.md | 11 - ....chromerecentlyaccessedhistoryitem.link.md | 11 - ...ublic.chromerecentlyaccessedhistoryitem.md | 21 -- ...plugin-core-public.chromestart.doctitle.md | 13 - ...lugin-core-public.chromestart.getbadge_.md | 17 - ...core-public.chromestart.getbreadcrumbs_.md | 17 - ...omestart.getbreadcrumbsappendextension_.md | 17 - ...re-public.chromestart.getcustomnavlink_.md | 17 - ...re-public.chromestart.gethelpextension_.md | 17 - ...ublic.chromestart.getisnavdrawerlocked_.md | 17 - ...n-core-public.chromestart.getisvisible_.md | 17 - ...ore-public.chromestart.hasheaderbanner_.md | 17 - .../kibana-plugin-core-public.chromestart.md | 67 ---- ...gin-core-public.chromestart.navcontrols.md | 13 - ...plugin-core-public.chromestart.navlinks.md | 13 - ...ore-public.chromestart.recentlyaccessed.md | 13 - ...plugin-core-public.chromestart.setbadge.md | 24 -- ...-core-public.chromestart.setbreadcrumbs.md | 24 -- ...romestart.setbreadcrumbsappendextension.md | 24 -- ...ore-public.chromestart.setcustomnavlink.md | 24 -- ...core-public.chromestart.setheaderbanner.md | 28 -- ...ore-public.chromestart.sethelpextension.md | 24 -- ...re-public.chromestart.sethelpsupporturl.md | 24 -- ...in-core-public.chromestart.setisvisible.md | 24 -- ...in-core-public.chromeuserbanner.content.md | 11 - ...ana-plugin-core-public.chromeuserbanner.md | 19 - ...-plugin-core-public.coresetup.analytics.md | 12 - ...lugin-core-public.coresetup.application.md | 13 - ...-core-public.coresetup.executioncontext.md | 13 - ...lugin-core-public.coresetup.fatalerrors.md | 13 - ...-core-public.coresetup.getstartservices.md | 13 - ...ibana-plugin-core-public.coresetup.http.md | 13 - ...-core-public.coresetup.injectedmetadata.md | 12 - .../kibana-plugin-core-public.coresetup.md | 29 -- ...gin-core-public.coresetup.notifications.md | 13 - ...bana-plugin-core-public.coresetup.theme.md | 12 - ...plugin-core-public.coresetup.uisettings.md | 13 - ...-plugin-core-public.corestart.analytics.md | 12 - ...lugin-core-public.corestart.application.md | 13 - ...ana-plugin-core-public.corestart.chrome.md | 13 - ...ugin-core-public.corestart.deprecations.md | 13 - ...a-plugin-core-public.corestart.doclinks.md | 12 - ...-core-public.corestart.executioncontext.md | 13 - ...lugin-core-public.corestart.fatalerrors.md | 13 - ...ibana-plugin-core-public.corestart.http.md | 13 - ...ibana-plugin-core-public.corestart.i18n.md | 13 - ...-core-public.corestart.injectedmetadata.md | 12 - .../kibana-plugin-core-public.corestart.md | 34 -- ...gin-core-public.corestart.notifications.md | 13 - ...a-plugin-core-public.corestart.overlays.md | 13 - ...ugin-core-public.corestart.savedobjects.md | 13 - ...bana-plugin-core-public.corestart.theme.md | 12 - ...plugin-core-public.corestart.uisettings.md | 13 - ...ecationsservicestart.getalldeprecations.md | 13 - ...eprecationsservicestart.getdeprecations.md | 13 - ...onsservicestart.isdeprecationresolvable.md | 13 - ...in-core-public.deprecationsservicestart.md | 23 -- ...ecationsservicestart.resolvedeprecation.md | 13 - ...na-plugin-core-public.errortoastoptions.md | 22 -- ...gin-core-public.errortoastoptions.title.md | 13 - ...e-public.errortoastoptions.toastmessage.md | 13 - ...core-public.executioncontextsetup.clear.md | 17 - ...e-public.executioncontextsetup.context_.md | 13 - ...n-core-public.executioncontextsetup.get.md | 17 - ...ublic.executioncontextsetup.getaslabels.md | 17 - ...lugin-core-public.executioncontextsetup.md | 30 -- ...n-core-public.executioncontextsetup.set.md | 24 -- ...executioncontextsetup.withglobalcontext.md | 24 -- ...lugin-core-public.executioncontextstart.md | 13 - ...ibana-plugin-core-public.fatalerrorinfo.md | 21 -- ...ugin-core-public.fatalerrorinfo.message.md | 11 - ...plugin-core-public.fatalerrorinfo.stack.md | 11 - ...plugin-core-public.fatalerrorssetup.add.md | 13 - ...lugin-core-public.fatalerrorssetup.get_.md | 13 - ...ana-plugin-core-public.fatalerrorssetup.md | 21 -- ...ana-plugin-core-public.fatalerrorsstart.md | 13 - ...core-public.httpfetchoptions.asresponse.md | 13 - ...public.httpfetchoptions.assystemrequest.md | 13 - ...in-core-public.httpfetchoptions.context.md | 11 - ...in-core-public.httpfetchoptions.headers.md | 13 - ...ana-plugin-core-public.httpfetchoptions.md | 26 -- ...public.httpfetchoptions.prependbasepath.md | 13 - ...ugin-core-public.httpfetchoptions.query.md | 13 - ...in-core-public.httpfetchoptionswithpath.md | 21 -- ...re-public.httpfetchoptionswithpath.path.md | 11 - ...ibana-plugin-core-public.httpfetchquery.md | 12 - .../kibana-plugin-core-public.httphandler.md | 13 - ...bana-plugin-core-public.httpheadersinit.md | 13 - ...bana-plugin-core-public.httpinterceptor.md | 23 -- ...gin-core-public.httpinterceptor.request.md | 25 -- ...ore-public.httpinterceptor.requesterror.md | 25 -- ...in-core-public.httpinterceptor.response.md | 25 -- ...re-public.httpinterceptor.responseerror.md | 25 -- ...ublic.httpinterceptorrequesterror.error.md | 11 - ...ttpinterceptorrequesterror.fetchoptions.md | 11 - ...core-public.httpinterceptorrequesterror.md | 20 -- ...blic.httpinterceptorresponseerror.error.md | 11 - ...ore-public.httpinterceptorresponseerror.md | 21 -- ...ic.httpinterceptorresponseerror.request.md | 11 - ...plugin-core-public.httprequestinit.body.md | 13 - ...lugin-core-public.httprequestinit.cache.md | 13 - ...core-public.httprequestinit.credentials.md | 13 - ...gin-core-public.httprequestinit.headers.md | 13 - ...n-core-public.httprequestinit.integrity.md | 13 - ...n-core-public.httprequestinit.keepalive.md | 13 - ...bana-plugin-core-public.httprequestinit.md | 32 -- ...ugin-core-public.httprequestinit.method.md | 13 - ...plugin-core-public.httprequestinit.mode.md | 13 - ...in-core-public.httprequestinit.redirect.md | 13 - ...in-core-public.httprequestinit.referrer.md | 13 - ...e-public.httprequestinit.referrerpolicy.md | 13 - ...ugin-core-public.httprequestinit.signal.md | 13 - ...ugin-core-public.httprequestinit.window.md | 13 - ...na-plugin-core-public.httpresponse.body.md | 13 - ...n-core-public.httpresponse.fetchoptions.md | 13 - .../kibana-plugin-core-public.httpresponse.md | 22 -- ...plugin-core-public.httpresponse.request.md | 13 - ...lugin-core-public.httpresponse.response.md | 13 - ...-public.httpsetup.addloadingcountsource.md | 24 -- ...in-core-public.httpsetup.anonymouspaths.md | 13 - ...a-plugin-core-public.httpsetup.basepath.md | 13 - ...ana-plugin-core-public.httpsetup.delete.md | 13 - ...lugin-core-public.httpsetup.externalurl.md | 11 - ...bana-plugin-core-public.httpsetup.fetch.md | 13 - ...kibana-plugin-core-public.httpsetup.get.md | 13 - ...-core-public.httpsetup.getloadingcount_.md | 17 - ...ibana-plugin-core-public.httpsetup.head.md | 13 - ...-plugin-core-public.httpsetup.intercept.md | 26 -- .../kibana-plugin-core-public.httpsetup.md | 37 -- ...na-plugin-core-public.httpsetup.options.md | 13 - ...bana-plugin-core-public.httpsetup.patch.md | 13 - ...ibana-plugin-core-public.httpsetup.post.md | 13 - ...kibana-plugin-core-public.httpsetup.put.md | 13 - .../kibana-plugin-core-public.httpstart.md | 13 - ...na-plugin-core-public.i18nstart.context.md | 15 - .../kibana-plugin-core-public.i18nstart.md | 20 -- ...core-public.ianonymouspaths.isanonymous.md | 24 -- ...bana-plugin-core-public.ianonymouspaths.md | 21 -- ...in-core-public.ianonymouspaths.register.md | 24 -- ...kibana-plugin-core-public.ibasepath.get.md | 13 - .../kibana-plugin-core-public.ibasepath.md | 24 -- ...na-plugin-core-public.ibasepath.prepend.md | 13 - ...gin-core-public.ibasepath.publicbaseurl.md | 18 - ...ana-plugin-core-public.ibasepath.remove.md | 13 - ...in-core-public.ibasepath.serverbasepath.md | 15 - ...-core-public.iexternalurl.isinternalurl.md | 24 -- .../kibana-plugin-core-public.iexternalurl.md | 21 -- ...in-core-public.iexternalurl.validateurl.md | 26 -- ...in-core-public.iexternalurlpolicy.allow.md | 13 - ...gin-core-public.iexternalurlpolicy.host.md | 23 -- ...a-plugin-core-public.iexternalurlpolicy.md | 22 -- ...core-public.iexternalurlpolicy.protocol.md | 23 -- ...plugin-core-public.ihttpfetcherror.body.md | 11 - ...bana-plugin-core-public.ihttpfetcherror.md | 25 -- ...plugin-core-public.ihttpfetcherror.name.md | 11 - ...-plugin-core-public.ihttpfetcherror.req.md | 18 - ...gin-core-public.ihttpfetcherror.request.md | 11 - ...-plugin-core-public.ihttpfetcherror.res.md | 18 - ...in-core-public.ihttpfetcherror.response.md | 11 - ...re-public.ihttpinterceptcontroller.halt.md | 17 - ...-public.ihttpinterceptcontroller.halted.md | 13 - ...in-core-public.ihttpinterceptcontroller.md | 26 -- ....ihttpresponseinterceptoroverrides.body.md | 13 - ...ublic.ihttpresponseinterceptoroverrides.md | 21 -- ...tpresponseinterceptoroverrides.response.md | 13 - .../kibana-plugin-core-public.itoasts.md | 13 - ...lugin-core-public.iuisettingsclient.get.md | 13 - ...ugin-core-public.iuisettingsclient.get_.md | 13 - ...in-core-public.iuisettingsclient.getall.md | 13 - ...ore-public.iuisettingsclient.getupdate_.md | 17 - ...blic.iuisettingsclient.getupdateerrors_.md | 13 - ...-core-public.iuisettingsclient.iscustom.md | 13 - ...ore-public.iuisettingsclient.isdeclared.md | 13 - ...core-public.iuisettingsclient.isdefault.md | 13 - ...e-public.iuisettingsclient.isoverridden.md | 13 - ...na-plugin-core-public.iuisettingsclient.md | 30 -- ...in-core-public.iuisettingsclient.remove.md | 13 - ...lugin-core-public.iuisettingsclient.set.md | 13 - ...ugin-core-public.kibanaexecutioncontext.md | 21 -- .../core/public/kibana-plugin-core-public.md | 185 ---------- .../kibana-plugin-core-public.mountpoint.md | 13 - ...-public.navigatetoappoptions.deeplinkid.md | 13 - ...plugin-core-public.navigatetoappoptions.md | 25 -- ...ublic.navigatetoappoptions.openinnewtab.md | 13 - ...n-core-public.navigatetoappoptions.path.md | 13 - ...ore-public.navigatetoappoptions.replace.md | 13 - ...ublic.navigatetoappoptions.skipappleave.md | 13 - ...-core-public.navigatetoappoptions.state.md | 13 - ...blic.navigatetourloptions.forceredirect.md | 13 - ...plugin-core-public.navigatetourloptions.md | 21 -- ...ublic.navigatetourloptions.skipappleave.md | 13 - .../kibana-plugin-core-public.navtype.md | 11 - ...a-plugin-core-public.notificationssetup.md | 19 - ...n-core-public.notificationssetup.toasts.md | 13 - ...a-plugin-core-public.notificationsstart.md | 19 - ...n-core-public.notificationsstart.toasts.md | 13 - ...gin-core-public.overlaybannersstart.add.md | 27 -- ...public.overlaybannersstart.getcomponent.md | 15 - ...-plugin-core-public.overlaybannersstart.md | 22 -- ...-core-public.overlaybannersstart.remove.md | 26 -- ...core-public.overlaybannersstart.replace.md | 28 -- ...c.overlayflyoutopenoptions._aria-label_.md | 11 - ...erlayflyoutopenoptions._data-test-subj_.md | 11 - ...blic.overlayflyoutopenoptions.classname.md | 11 - ...yflyoutopenoptions.closebuttonarialabel.md | 11 - ...verlayflyoutopenoptions.hideclosebutton.md | 11 - ...blic.overlayflyoutopenoptions.maskprops.md | 11 - ...ublic.overlayflyoutopenoptions.maxwidth.md | 11 - ...in-core-public.overlayflyoutopenoptions.md | 29 -- ...public.overlayflyoutopenoptions.onclose.md | 13 - ...layflyoutopenoptions.outsideclickcloses.md | 11 - ...ublic.overlayflyoutopenoptions.ownfocus.md | 11 - ...re-public.overlayflyoutopenoptions.size.md | 11 - ...a-plugin-core-public.overlayflyoutstart.md | 20 -- ...gin-core-public.overlayflyoutstart.open.md | 25 -- ...laymodalconfirmoptions._data-test-subj_.md | 11 - ....overlaymodalconfirmoptions.buttoncolor.md | 11 - ...laymodalconfirmoptions.cancelbuttontext.md | 11 - ...ic.overlaymodalconfirmoptions.classname.md | 11 - ...odalconfirmoptions.closebuttonarialabel.md | 11 - ...aymodalconfirmoptions.confirmbuttontext.md | 11 - ...odalconfirmoptions.defaultfocusedbutton.md | 11 - ...lic.overlaymodalconfirmoptions.maxwidth.md | 13 - ...-core-public.overlaymodalconfirmoptions.md | 27 -- ...public.overlaymodalconfirmoptions.title.md | 11 - ...verlaymodalopenoptions._data-test-subj_.md | 11 - ...ublic.overlaymodalopenoptions.classname.md | 11 - ...aymodalopenoptions.closebuttonarialabel.md | 11 - ...public.overlaymodalopenoptions.maxwidth.md | 11 - ...gin-core-public.overlaymodalopenoptions.md | 22 -- ...na-plugin-core-public.overlaymodalstart.md | 21 -- ...ugin-core-public.overlaymodalstart.open.md | 25 -- ...re-public.overlaymodalstart.openconfirm.md | 25 -- ...ana-plugin-core-public.overlayref.close.md | 17 - .../kibana-plugin-core-public.overlayref.md | 26 -- ...a-plugin-core-public.overlayref.onclose.md | 15 - ...plugin-core-public.overlaystart.banners.md | 13 - .../kibana-plugin-core-public.overlaystart.md | 22 -- ...in-core-public.overlaystart.openconfirm.md | 12 - ...gin-core-public.overlaystart.openflyout.md | 12 - ...ugin-core-public.overlaystart.openmodal.md | 12 - .../kibana-plugin-core-public.plugin_2.md | 22 -- ...ibana-plugin-core-public.plugin_2.setup.md | 23 -- ...ibana-plugin-core-public.plugin_2.start.md | 23 -- ...kibana-plugin-core-public.plugin_2.stop.md | 15 - ...na-plugin-core-public.plugininitializer.md | 13 - ...-public.plugininitializercontext.config.md | 13 - ...ore-public.plugininitializercontext.env.md | 14 - ...in-core-public.plugininitializercontext.md | 22 -- ...ublic.plugininitializercontext.opaqueid.md | 13 - ...lugin-core-public.publicappdeeplinkinfo.md | 18 - ...kibana-plugin-core-public.publicappinfo.md | 20 -- ...ugin-core-public.publicuisettingsparams.md | 13 - ...-core-public.resolvedeprecationresponse.md | 16 - ...resolvedsimplesavedobject.alias_purpose.md | 17 - ...solvedsimplesavedobject.alias_target_id.md | 15 - ...n-core-public.resolvedsimplesavedobject.md | 23 -- ...ublic.resolvedsimplesavedobject.outcome.md | 15 - ....resolvedsimplesavedobject.saved_object.md | 13 - ...ore-public.responseerrorbody.attributes.md | 11 - ...na-plugin-core-public.responseerrorbody.md | 21 -- ...n-core-public.responseerrorbody.message.md | 11 - ...ore-public.responseerrorbody.statuscode.md | 11 - ...ugin-core-public.savedobject.attributes.md | 13 - ...public.savedobject.coremigrationversion.md | 13 - ...na-plugin-core-public.savedobject.error.md | 11 - ...ibana-plugin-core-public.savedobject.id.md | 13 - .../kibana-plugin-core-public.savedobject.md | 28 -- ...ore-public.savedobject.migrationversion.md | 13 - ...ugin-core-public.savedobject.namespaces.md | 13 - ...plugin-core-public.savedobject.originid.md | 13 - ...ugin-core-public.savedobject.references.md | 13 - ...ana-plugin-core-public.savedobject.type.md | 13 - ...ugin-core-public.savedobject.updated_at.md | 13 - ...-plugin-core-public.savedobject.version.md | 13 - ...plugin-core-public.savedobjectattribute.md | 13 - ...lugin-core-public.savedobjectattributes.md | 13 - ...-core-public.savedobjectattributesingle.md | 13 - ...ugin-core-public.savedobjecterror.error.md | 11 - ...ana-plugin-core-public.savedobjecterror.md | 21 -- ...in-core-public.savedobjecterror.message.md | 11 - ...n-core-public.savedobjecterror.metadata.md | 11 - ...core-public.savedobjecterror.statuscode.md | 11 - ...gin-core-public.savedobjectreference.id.md | 11 - ...plugin-core-public.savedobjectreference.md | 22 -- ...n-core-public.savedobjectreference.name.md | 11 - ...n-core-public.savedobjectreference.type.md | 11 - ...blic.savedobjectreferencewithcontext.id.md | 13 - ...treferencewithcontext.inboundreferences.md | 17 - ...vedobjectreferencewithcontext.ismissing.md | 13 - ...-public.savedobjectreferencewithcontext.md | 27 -- ...avedobjectreferencewithcontext.originid.md | 13 - ....savedobjectreferencewithcontext.spaces.md | 13 - ...cewithcontext.spaceswithmatchingaliases.md | 13 - ...cewithcontext.spaceswithmatchingorigins.md | 13 - ...ic.savedobjectreferencewithcontext.type.md | 13 - ...gin-core-public.savedobjectsbaseoptions.md | 19 - ...ublic.savedobjectsbaseoptions.namespace.md | 13 - ...n-core-public.savedobjectsbatchresponse.md | 19 - ....savedobjectsbatchresponse.savedobjects.md | 11 - ...savedobjectsbulkcreateobject.attributes.md | 11 - ...ore-public.savedobjectsbulkcreateobject.md | 20 -- ...ublic.savedobjectsbulkcreateobject.type.md | 11 - ...re-public.savedobjectsbulkcreateoptions.md | 19 - ...savedobjectsbulkcreateoptions.overwrite.md | 13 - ...public.savedobjectsbulkresolveobject.id.md | 11 - ...re-public.savedobjectsbulkresolveobject.md | 20 -- ...blic.savedobjectsbulkresolveobject.type.md | 11 - ...-public.savedobjectsbulkresolveresponse.md | 19 - ...ctsbulkresolveresponse.resolved_objects.md | 11 - ...savedobjectsbulkupdateobject.attributes.md | 11 - ...-public.savedobjectsbulkupdateobject.id.md | 11 - ...ore-public.savedobjectsbulkupdateobject.md | 23 -- ...savedobjectsbulkupdateobject.references.md | 11 - ...ublic.savedobjectsbulkupdateobject.type.md | 11 - ...ic.savedobjectsbulkupdateobject.version.md | 11 - ...re-public.savedobjectsbulkupdateoptions.md | 19 - ...savedobjectsbulkupdateoptions.namespace.md | 11 - ...c.savedobjectsclientcontract.bulkcreate.md | 27 -- ...blic.savedobjectsclientcontract.bulkget.md | 33 -- ....savedobjectsclientcontract.bulkresolve.md | 35 -- ...c.savedobjectsclientcontract.bulkupdate.md | 26 -- ...ublic.savedobjectsclientcontract.create.md | 26 -- ...ublic.savedobjectsclientcontract.delete.md | 26 -- ...-public.savedobjectsclientcontract.find.md | 26 -- ...e-public.savedobjectsclientcontract.get.md | 27 -- ...-core-public.savedobjectsclientcontract.md | 29 -- ...blic.savedobjectsclientcontract.resolve.md | 29 -- ...ublic.savedobjectsclientcontract.update.md | 28 -- ...collectmultinamespacereferencesresponse.md | 20 -- ...ultinamespacereferencesresponse.objects.md | 11 - ...jectscreateoptions.coremigrationversion.md | 13 - ...ore-public.savedobjectscreateoptions.id.md | 13 - ...n-core-public.savedobjectscreateoptions.md | 23 -- ...edobjectscreateoptions.migrationversion.md | 13 - ...lic.savedobjectscreateoptions.overwrite.md | 13 - ...ic.savedobjectscreateoptions.references.md | 11 - ...bjectsfindoptions.defaultsearchoperator.md | 13 - ...e-public.savedobjectsfindoptions.fields.md | 18 - ...e-public.savedobjectsfindoptions.filter.md | 11 - ...ic.savedobjectsfindoptions.hasreference.md | 13 - ...objectsfindoptions.hasreferenceoperator.md | 13 - ...gin-core-public.savedobjectsfindoptions.md | 36 -- ...blic.savedobjectsfindoptions.namespaces.md | 11 - ...ore-public.savedobjectsfindoptions.page.md | 11 - ...-public.savedobjectsfindoptions.perpage.md | 11 - ...core-public.savedobjectsfindoptions.pit.md | 13 - ...blic.savedobjectsfindoptions.preference.md | 13 - ...avedobjectsfindoptions.rootsearchfields.md | 13 - ...e-public.savedobjectsfindoptions.search.md | 13 - ...lic.savedobjectsfindoptions.searchafter.md | 13 - ...ic.savedobjectsfindoptions.searchfields.md | 13 - ...ublic.savedobjectsfindoptions.sortfield.md | 11 - ...ublic.savedobjectsfindoptions.sortorder.md | 11 - ...ore-public.savedobjectsfindoptions.type.md | 11 - ...dobjectsfindoptions.typetonamespacesmap.md | 13 - ...lic.savedobjectsfindoptionsreference.id.md | 11 - ...public.savedobjectsfindoptionsreference.md | 20 -- ...c.savedobjectsfindoptionsreference.type.md | 11 - ...dobjectsfindresponsepublic.aggregations.md | 11 - ...e-public.savedobjectsfindresponsepublic.md | 26 -- ...lic.savedobjectsfindresponsepublic.page.md | 11 - ....savedobjectsfindresponsepublic.perpage.md | 11 - ...ic.savedobjectsfindresponsepublic.total.md | 11 - ...simportactionrequiredwarning.actionpath.md | 13 - ...importactionrequiredwarning.buttonlabel.md | 13 - ...savedobjectsimportactionrequiredwarning.md | 25 -- ...ectsimportactionrequiredwarning.message.md | 13 - ...objectsimportactionrequiredwarning.type.md | 11 - ...portambiguousconflicterror.destinations.md | 15 - ...avedobjectsimportambiguousconflicterror.md | 21 -- ...bjectsimportambiguousconflicterror.type.md | 11 - ...bjectsimportconflicterror.destinationid.md | 11 - ...-public.savedobjectsimportconflicterror.md | 21 -- ...ic.savedobjectsimportconflicterror.type.md | 11 - ...-public.savedobjectsimportfailure.error.md | 11 - ...ore-public.savedobjectsimportfailure.id.md | 11 - ...n-core-public.savedobjectsimportfailure.md | 24 -- ...e-public.savedobjectsimportfailure.meta.md | 14 - ...lic.savedobjectsimportfailure.overwrite.md | 13 - ...e-public.savedobjectsimportfailure.type.md | 11 - ...avedobjectsimportmissingreferenceserror.md | 21 -- ...importmissingreferenceserror.references.md | 14 - ...bjectsimportmissingreferenceserror.type.md | 11 - ...ublic.savedobjectsimportresponse.errors.md | 11 - ...-core-public.savedobjectsimportresponse.md | 24 -- ...blic.savedobjectsimportresponse.success.md | 11 - ...savedobjectsimportresponse.successcount.md | 11 - ...vedobjectsimportresponse.successresults.md | 11 - ...lic.savedobjectsimportresponse.warnings.md | 11 - ...c.savedobjectsimportretry.createnewcopy.md | 13 - ...c.savedobjectsimportretry.destinationid.md | 13 - ...-core-public.savedobjectsimportretry.id.md | 11 - ...ectsimportretry.ignoremissingreferences.md | 13 - ...gin-core-public.savedobjectsimportretry.md | 26 -- ...ublic.savedobjectsimportretry.overwrite.md | 11 - ...vedobjectsimportretry.replacereferences.md | 15 - ...ore-public.savedobjectsimportretry.type.md | 11 - ...-public.savedobjectsimportsimplewarning.md | 21 -- ...savedobjectsimportsimplewarning.message.md | 13 - ...ic.savedobjectsimportsimplewarning.type.md | 11 - ...savedobjectsimportsuccess.createnewcopy.md | 16 - ...savedobjectsimportsuccess.destinationid.md | 13 - ...ore-public.savedobjectsimportsuccess.id.md | 11 - ...n-core-public.savedobjectsimportsuccess.md | 25 -- ...e-public.savedobjectsimportsuccess.meta.md | 14 - ...lic.savedobjectsimportsuccess.overwrite.md | 13 - ...e-public.savedobjectsimportsuccess.type.md | 11 - ...e-public.savedobjectsimportunknownerror.md | 22 -- ....savedobjectsimportunknownerror.message.md | 11 - ...vedobjectsimportunknownerror.statuscode.md | 11 - ...lic.savedobjectsimportunknownerror.type.md | 11 - ....savedobjectsimportunsupportedtypeerror.md | 20 -- ...dobjectsimportunsupportedtypeerror.type.md | 11 - ...n-core-public.savedobjectsimportwarning.md | 15 - ...ore-public.savedobjectsmigrationversion.md | 18 - ...n-core-public.savedobjectsnamespacetype.md | 13 - ...vedobjectsresolveresponse.alias_purpose.md | 17 - ...dobjectsresolveresponse.alias_target_id.md | 15 - ...core-public.savedobjectsresolveresponse.md | 22 -- ...lic.savedobjectsresolveresponse.outcome.md | 15 - ...avedobjectsresolveresponse.saved_object.md | 13 - ...in-core-public.savedobjectsstart.client.md | 13 - ...na-plugin-core-public.savedobjectsstart.md | 19 - ...n-core-public.savedobjectsupdateoptions.md | 21 -- ...ic.savedobjectsupdateoptions.references.md | 11 - ...public.savedobjectsupdateoptions.upsert.md | 11 - ...ublic.savedobjectsupdateoptions.version.md | 11 - ...core-public.scopedhistory._constructor_.md | 21 -- ...plugin-core-public.scopedhistory.action.md | 13 - ...-plugin-core-public.scopedhistory.block.md | 13 - ...in-core-public.scopedhistory.createhref.md | 15 - ...e-public.scopedhistory.createsubhistory.md | 13 - ...ana-plugin-core-public.scopedhistory.go.md | 13 - ...plugin-core-public.scopedhistory.goback.md | 13 - ...gin-core-public.scopedhistory.goforward.md | 13 - ...plugin-core-public.scopedhistory.length.md | 13 - ...plugin-core-public.scopedhistory.listen.md | 13 - ...ugin-core-public.scopedhistory.location.md | 13 - ...kibana-plugin-core-public.scopedhistory.md | 42 --- ...a-plugin-core-public.scopedhistory.push.md | 13 - ...lugin-core-public.scopedhistory.replace.md | 13 - ...-public.simplesavedobject._constructor_.md | 21 -- ...-core-public.simplesavedobject._version.md | 11 - ...ore-public.simplesavedobject.attributes.md | 11 - ....simplesavedobject.coremigrationversion.md | 11 - ...in-core-public.simplesavedobject.delete.md | 15 - ...gin-core-public.simplesavedobject.error.md | 11 - ...lugin-core-public.simplesavedobject.get.md | 22 -- ...lugin-core-public.simplesavedobject.has.md | 22 -- ...plugin-core-public.simplesavedobject.id.md | 11 - ...na-plugin-core-public.simplesavedobject.md | 47 --- ...blic.simplesavedobject.migrationversion.md | 11 - ...ore-public.simplesavedobject.namespaces.md | 13 - ...ore-public.simplesavedobject.references.md | 11 - ...ugin-core-public.simplesavedobject.save.md | 15 - ...lugin-core-public.simplesavedobject.set.md | 23 -- ...ugin-core-public.simplesavedobject.type.md | 11 - ...core-public.simplesavedobject.updatedat.md | 11 - ...lugin-core-public.startservicesaccessor.md | 13 - .../public/kibana-plugin-core-public.toast.md | 13 - .../kibana-plugin-core-public.toastinput.md | 13 - ...ana-plugin-core-public.toastinputfields.md | 21 -- .../kibana-plugin-core-public.toastoptions.md | 20 -- ...ore-public.toastoptions.toastlifetimems.md | 13 - ...gin-core-public.toastsapi._constructor_.md | 22 -- ...kibana-plugin-core-public.toastsapi.add.md | 26 -- ...-plugin-core-public.toastsapi.adddanger.md | 27 -- ...a-plugin-core-public.toastsapi.adderror.md | 27 -- ...na-plugin-core-public.toastsapi.addinfo.md | 27 -- ...plugin-core-public.toastsapi.addsuccess.md | 27 -- ...plugin-core-public.toastsapi.addwarning.md | 27 -- ...ibana-plugin-core-public.toastsapi.get_.md | 17 - .../kibana-plugin-core-public.toastsapi.md | 34 -- ...ana-plugin-core-public.toastsapi.remove.md | 24 -- .../kibana-plugin-core-public.toastssetup.md | 13 - .../kibana-plugin-core-public.toastsstart.md | 13 - ...n-core-public.uisettingsparams.category.md | 13 - ...ore-public.uisettingsparams.deprecation.md | 13 - ...ore-public.uisettingsparams.description.md | 13 - ...ana-plugin-core-public.uisettingsparams.md | 33 -- ...gin-core-public.uisettingsparams.metric.md | 21 -- ...lugin-core-public.uisettingsparams.name.md | 13 - ...re-public.uisettingsparams.optionlabels.md | 13 - ...in-core-public.uisettingsparams.options.md | 13 - ...ugin-core-public.uisettingsparams.order.md | 15 - ...n-core-public.uisettingsparams.readonly.md | 13 - ...lic.uisettingsparams.requirespagereload.md | 13 - ...gin-core-public.uisettingsparams.schema.md | 11 - ...-core-public.uisettingsparams.sensitive.md | 13 - ...lugin-core-public.uisettingsparams.type.md | 13 - ...ugin-core-public.uisettingsparams.value.md | 13 - ...bana-plugin-core-public.uisettingsstate.md | 12 - ...ibana-plugin-core-public.uisettingstype.md | 13 - ...bana-plugin-core-public.unmountcallback.md | 13 - ...ibana-plugin-core-public.url_max_length.md | 13 - ...-public.userprovidedvalues.isoverridden.md | 11 - ...a-plugin-core-public.userprovidedvalues.md | 21 -- ...ore-public.userprovidedvalues.uservalue.md | 11 - docs/development/core/server/index.md | 12 - ...gin-core-server.analyticsservicepreboot.md | 13 - ...lugin-core-server.analyticsservicesetup.md | 13 - ...lugin-core-server.analyticsservicestart.md | 13 - ...na-plugin-core-server.app_wrapper_class.md | 13 - ...lugin-core-server.appcategory.arialabel.md | 13 - ...gin-core-server.appcategory.euiicontype.md | 13 - ...ibana-plugin-core-server.appcategory.id.md | 13 - ...na-plugin-core-server.appcategory.label.md | 13 - .../kibana-plugin-core-server.appcategory.md | 24 -- ...na-plugin-core-server.appcategory.order.md | 13 - .../kibana-plugin-core-server.asyncplugin.md | 27 -- ...na-plugin-core-server.asyncplugin.setup.md | 23 -- ...na-plugin-core-server.asyncplugin.start.md | 23 -- ...ana-plugin-core-server.asyncplugin.stop.md | 15 - ...kibana-plugin-core-server.authenticated.md | 20 -- ...a-plugin-core-server.authenticated.type.md | 11 - ...lugin-core-server.authenticationhandler.md | 13 - .../kibana-plugin-core-server.authheaders.md | 13 - ...ibana-plugin-core-server.authnothandled.md | 19 - ...-plugin-core-server.authnothandled.type.md | 11 - ...ibana-plugin-core-server.authredirected.md | 20 -- ...-plugin-core-server.authredirected.type.md | 11 - ...ore-server.authredirectedparams.headers.md | 15 - ...plugin-core-server.authredirectedparams.md | 20 -- .../kibana-plugin-core-server.authresult.md | 12 - ...ana-plugin-core-server.authresultparams.md | 22 -- ...-server.authresultparams.requestheaders.md | 13 - ...server.authresultparams.responseheaders.md | 13 - ...ugin-core-server.authresultparams.state.md | 13 - ...ibana-plugin-core-server.authresulttype.md | 21 -- .../kibana-plugin-core-server.authstatus.md | 22 -- ...n-core-server.authtoolkit.authenticated.md | 13 - .../kibana-plugin-core-server.authtoolkit.md | 22 -- ...ugin-core-server.authtoolkit.nothandled.md | 13 - ...ugin-core-server.authtoolkit.redirected.md | 15 - ...asedeprecationdetails.correctiveactions.md | 23 -- ....basedeprecationdetails.deprecationtype.md | 15 - ...basedeprecationdetails.documentationurl.md | 13 - ...ore-server.basedeprecationdetails.level.md | 13 - ...ugin-core-server.basedeprecationdetails.md | 26 -- ...e-server.basedeprecationdetails.message.md | 13 - ...r.basedeprecationdetails.requirerestart.md | 13 - ...ore-server.basedeprecationdetails.title.md | 13 - .../kibana-plugin-core-server.basepath.get.md | 13 - .../kibana-plugin-core-server.basepath.md | 29 -- ...ana-plugin-core-server.basepath.prepend.md | 13 - ...ugin-core-server.basepath.publicbaseurl.md | 18 - ...bana-plugin-core-server.basepath.remove.md | 13 - ...gin-core-server.basepath.serverbasepath.md | 15 - .../kibana-plugin-core-server.basepath.set.md | 13 - ...ugin-core-server.capabilities.catalogue.md | 13 - ...gin-core-server.capabilities.management.md | 15 - .../kibana-plugin-core-server.capabilities.md | 22 -- ...lugin-core-server.capabilities.navlinks.md | 13 - ...plugin-core-server.capabilitiesprovider.md | 13 - ...na-plugin-core-server.capabilitiessetup.md | 27 -- ...rver.capabilitiessetup.registerprovider.md | 45 --- ...rver.capabilitiessetup.registerswitcher.md | 58 --- ...na-plugin-core-server.capabilitiesstart.md | 20 -- ...r.capabilitiesstart.resolvecapabilities.md | 25 -- ...plugin-core-server.capabilitiesswitcher.md | 13 - ...ver.configdeprecationdetails.configpath.md | 11 - ...onfigdeprecationdetails.deprecationtype.md | 11 - ...in-core-server.configdeprecationdetails.md | 21 -- ...ver.contextsetup.createcontextcontainer.md | 17 - .../kibana-plugin-core-server.contextsetup.md | 136 ------- ...lugin-core-server.corepreboot.analytics.md | 13 - ...n-core-server.corepreboot.elasticsearch.md | 13 - ...ana-plugin-core-server.corepreboot.http.md | 13 - .../kibana-plugin-core-server.corepreboot.md | 23 -- ...-plugin-core-server.corepreboot.preboot.md | 13 - ....corerequesthandlercontext.deprecations.md | 13 - ...corerequesthandlercontext.elasticsearch.md | 13 - ...n-core-server.corerequesthandlercontext.md | 25 -- ....corerequesthandlercontext.savedobjects.md | 17 - ...er.corerequesthandlercontext.uisettings.md | 13 - ...-plugin-core-server.coresetup.analytics.md | 13 - ...ugin-core-server.coresetup.capabilities.md | 13 - ...na-plugin-core-server.coresetup.context.md | 13 - ...ugin-core-server.coresetup.deprecations.md | 13 - ...a-plugin-core-server.coresetup.doclinks.md | 12 - ...gin-core-server.coresetup.elasticsearch.md | 13 - ...-core-server.coresetup.executioncontext.md | 13 - ...-core-server.coresetup.getstartservices.md | 13 - ...ibana-plugin-core-server.coresetup.http.md | 15 - ...ibana-plugin-core-server.coresetup.i18n.md | 13 - ...na-plugin-core-server.coresetup.logging.md | 12 - .../kibana-plugin-core-server.coresetup.md | 34 -- ...na-plugin-core-server.coresetup.metrics.md | 13 - ...ugin-core-server.coresetup.savedobjects.md | 13 - ...ana-plugin-core-server.coresetup.status.md | 13 - ...plugin-core-server.coresetup.uisettings.md | 13 - ...-plugin-core-server.corestart.analytics.md | 13 - ...ugin-core-server.corestart.capabilities.md | 13 - ...a-plugin-core-server.corestart.doclinks.md | 12 - ...gin-core-server.corestart.elasticsearch.md | 13 - ...-core-server.corestart.executioncontext.md | 13 - ...ibana-plugin-core-server.corestart.http.md | 13 - .../kibana-plugin-core-server.corestart.md | 28 -- ...na-plugin-core-server.corestart.metrics.md | 13 - ...ugin-core-server.corestart.savedobjects.md | 13 - ...plugin-core-server.corestart.uisettings.md | 13 - ...in-core-server.corestatus.elasticsearch.md | 11 - .../kibana-plugin-core-server.corestatus.md | 21 -- ...gin-core-server.corestatus.savedobjects.md | 11 - ...lugin-core-server.countresponse._shards.md | 11 - ...-plugin-core-server.countresponse.count.md | 11 - ...kibana-plugin-core-server.countresponse.md | 20 -- ...na-plugin-core-server.cspconfig.default.md | 11 - ...-core-server.cspconfig.disableembedding.md | 11 - ...ana-plugin-core-server.cspconfig.header.md | 11 - .../kibana-plugin-core-server.cspconfig.md | 29 -- ...ana-plugin-core-server.cspconfig.strict.md | 11 - ...ore-server.cspconfig.warnlegacybrowsers.md | 11 - ...e-server.customhttpresponseoptions.body.md | 13 - ...omhttpresponseoptions.bypasserrorformat.md | 13 - ...erver.customhttpresponseoptions.headers.md | 13 - ...n-core-server.customhttpresponseoptions.md | 23 -- ...er.customhttpresponseoptions.statuscode.md | 11 - ...core-server.customrequesthandlercontext.md | 14 - ...-core-server.deletedocumentresponse._id.md | 11 - ...re-server.deletedocumentresponse._index.md | 11 - ...e-server.deletedocumentresponse._shards.md | 11 - ...ore-server.deletedocumentresponse._type.md | 11 - ...-server.deletedocumentresponse._version.md | 11 - ...ore-server.deletedocumentresponse.error.md | 13 - ...ore-server.deletedocumentresponse.found.md | 11 - ...ugin-core-server.deletedocumentresponse.md | 26 -- ...re-server.deletedocumentresponse.result.md | 11 - ...r.deprecationsclient.getalldeprecations.md | 11 - ...a-plugin-core-server.deprecationsclient.md | 20 -- ...-plugin-core-server.deprecationsdetails.md | 12 - ...-server.deprecationsettings.doclinkskey.md | 13 - ...-plugin-core-server.deprecationsettings.md | 21 -- ...core-server.deprecationsettings.message.md | 13 - ...in-core-server.deprecationsservicesetup.md | 85 ----- ...ationsservicesetup.registerdeprecations.md | 11 - ...ugin-core-server.destructiveroutemethod.md | 13 - ...-plugin-core-server.elasticsearchclient.md | 13 - ...n-core-server.elasticsearchclientconfig.md | 19 - ...erver.elasticsearchconfig._constructor_.md | 20 -- ...e-server.elasticsearchconfig.apiversion.md | 13 - ...-server.elasticsearchconfig.compression.md | 13 - ...erver.elasticsearchconfig.customheaders.md | 13 - ...er.elasticsearchconfig.healthcheckdelay.md | 13 - ...n-core-server.elasticsearchconfig.hosts.md | 13 - ...asticsearchconfig.ignoreversionmismatch.md | 13 - ...e-server.elasticsearchconfig.maxsockets.md | 13 - ...-plugin-core-server.elasticsearchconfig.md | 43 --- ...ore-server.elasticsearchconfig.password.md | 13 - ...-server.elasticsearchconfig.pingtimeout.md | 13 - ...ticsearchconfig.requestheaderswhitelist.md | 13 - ...rver.elasticsearchconfig.requesttimeout.md | 13 - ...elasticsearchconfig.serviceaccounttoken.md | 15 - ...server.elasticsearchconfig.shardtimeout.md | 13 - ...erver.elasticsearchconfig.sniffinterval.md | 13 - ...sticsearchconfig.sniffonconnectionfault.md | 13 - ...server.elasticsearchconfig.sniffonstart.md | 13 - ...gin-core-server.elasticsearchconfig.ssl.md | 15 - ...ore-server.elasticsearchconfig.username.md | 13 - ...earchconfigpreboot.credentialsspecified.md | 13 - ...server.elasticsearchconfigpreboot.hosts.md | 13 - ...-core-server.elasticsearchconfigpreboot.md | 21 -- ...-server.elasticsearcherrordetails.error.md | 14 - ...n-core-server.elasticsearcherrordetails.md | 19 - ...rver.elasticsearchservicepreboot.config.md | 21 -- ...lasticsearchservicepreboot.createclient.md | 22 -- ...core-server.elasticsearchservicepreboot.md | 20 -- ...server.elasticsearchservicesetup.legacy.md | 17 - ...n-core-server.elasticsearchservicesetup.md | 20 -- ...ervicesetup.setunauthorizederrorhandler.md | 35 -- ...server.elasticsearchservicestart.client.md | 21 -- ....elasticsearchservicestart.createclient.md | 22 -- ...n-core-server.elasticsearchservicestart.md | 20 -- ...asticsearchstatusmeta.incompatiblenodes.md | 11 - ...gin-core-server.elasticsearchstatusmeta.md | 21 -- ...csearchstatusmeta.nodesinforequesterror.md | 11 - ...er.elasticsearchstatusmeta.warningnodes.md | 11 - ...re-server.errorhttpresponseoptions.body.md | 13 - ...server.errorhttpresponseoptions.headers.md | 13 - ...in-core-server.errorhttpresponseoptions.md | 21 -- ...er.eventloopdelaysmonitor._constructor_.md | 13 - ...e-server.eventloopdelaysmonitor.collect.md | 21 -- ...ugin-core-server.eventloopdelaysmonitor.md | 26 -- ...ore-server.eventloopdelaysmonitor.reset.md | 17 - ...core-server.eventloopdelaysmonitor.stop.md | 17 - ...erver.executioncontextsetup.getaslabels.md | 15 - ...lugin-core-server.executioncontextsetup.md | 20 -- ...erver.executioncontextsetup.withcontext.md | 25 -- ...lugin-core-server.executioncontextstart.md | 12 - ...-core-server.exposedtobrowserdescriptor.md | 16 - ...-plugin-core-server.fakerequest.headers.md | 13 - .../kibana-plugin-core-server.fakerequest.md | 20 -- ...aturedeprecationdetails.deprecationtype.md | 11 - ...n-core-server.featuredeprecationdetails.md | 20 -- ...ibana-plugin-core-server.getauthheaders.md | 13 - .../kibana-plugin-core-server.getauthstate.md | 16 - ...-server.getdeprecationscontext.esclient.md | 11 - ...ugin-core-server.getdeprecationscontext.md | 20 -- ...tdeprecationscontext.savedobjectsclient.md | 11 - ...bana-plugin-core-server.getresponse._id.md | 11 - ...a-plugin-core-server.getresponse._index.md | 11 - ...n-core-server.getresponse._primary_term.md | 11 - ...plugin-core-server.getresponse._routing.md | 11 - ...-plugin-core-server.getresponse._seq_no.md | 11 - ...-plugin-core-server.getresponse._source.md | 11 - ...na-plugin-core-server.getresponse._type.md | 11 - ...plugin-core-server.getresponse._version.md | 11 - ...na-plugin-core-server.getresponse.found.md | 11 - .../kibana-plugin-core-server.getresponse.md | 27 -- ...a-plugin-core-server.handlercontexttype.md | 13 - ...bana-plugin-core-server.handlerfunction.md | 13 - ...na-plugin-core-server.handlerparameters.md | 13 - .../kibana-plugin-core-server.headers_2.md | 17 - .../kibana-plugin-core-server.httpauth.get.md | 13 - ...in-core-server.httpauth.isauthenticated.md | 13 - .../kibana-plugin-core-server.httpauth.md | 20 -- ...kibana-plugin-core-server.httpresources.md | 20 -- ...ugin-core-server.httpresources.register.md | 13 - ...rver.httpresourcesrenderoptions.headers.md | 18 - ...-core-server.httpresourcesrenderoptions.md | 20 -- ...core-server.httpresourcesrequesthandler.md | 18 - ...ore-server.httpresourcesresponseoptions.md | 13 - ...core-server.httpresourcesservicetoolkit.md | 23 -- ...esservicetoolkit.renderanonymouscoreapp.md | 13 - ...tpresourcesservicetoolkit.rendercoreapp.md | 13 - ....httpresourcesservicetoolkit.renderhtml.md | 13 - ...er.httpresourcesservicetoolkit.renderjs.md | 13 - ...in-core-server.httpresponseoptions.body.md | 13 - ...r.httpresponseoptions.bypasserrorformat.md | 13 - ...core-server.httpresponseoptions.headers.md | 13 - ...-plugin-core-server.httpresponseoptions.md | 22 -- ...-plugin-core-server.httpresponsepayload.md | 13 - ...gin-core-server.httpserverinfo.hostname.md | 13 - ...ibana-plugin-core-server.httpserverinfo.md | 23 -- ...-plugin-core-server.httpserverinfo.name.md | 13 - ...-plugin-core-server.httpserverinfo.port.md | 13 - ...gin-core-server.httpserverinfo.protocol.md | 13 - ...core-server.httpservicepreboot.basepath.md | 13 - ...server.httpservicepreboot.getserverinfo.md | 13 - ...a-plugin-core-server.httpservicepreboot.md | 80 ----- ...erver.httpservicepreboot.registerroutes.md | 39 -- ...n-core-server.httpservicesetup.basepath.md | 13 - ...setup.createcookiesessionstoragefactory.md | 13 - ...re-server.httpservicesetup.createrouter.md | 27 -- ...plugin-core-server.httpservicesetup.csp.md | 13 - ...e-server.httpservicesetup.getserverinfo.md | 13 - ...ana-plugin-core-server.httpservicesetup.md | 91 ----- ...re-server.httpservicesetup.registerauth.md | 18 - ...ver.httpservicesetup.registeronpostauth.md | 18 - ...rver.httpservicesetup.registeronpreauth.md | 18 - ....httpservicesetup.registeronpreresponse.md | 18 - ...r.httpservicesetup.registeronprerouting.md | 18 - ...ervicesetup.registerroutehandlercontext.md | 41 --- ...lugin-core-server.httpservicestart.auth.md | 13 - ...n-core-server.httpservicestart.basepath.md | 13 - ...e-server.httpservicestart.getserverinfo.md | 13 - ...ana-plugin-core-server.httpservicestart.md | 21 -- ...-core-server.i18nservicesetup.getlocale.md | 17 - ...er.i18nservicesetup.gettranslationfiles.md | 17 - ...ana-plugin-core-server.i18nservicesetup.md | 20 -- .../kibana-plugin-core-server.ibasepath.md | 15 - ...re-server.iclusterclient.asinternaluser.md | 13 - ...gin-core-server.iclusterclient.asscoped.md | 13 - ...ibana-plugin-core-server.iclusterclient.md | 21 -- ...-server.icontextcontainer.createhandler.md | 27 -- ...na-plugin-core-server.icontextcontainer.md | 79 ---- ...erver.icontextcontainer.registercontext.md | 34 -- ...ana-plugin-core-server.icontextprovider.md | 18 - ...core-server.icspconfig.disableembedding.md | 13 - ...na-plugin-core-server.icspconfig.header.md | 13 - .../kibana-plugin-core-server.icspconfig.md | 23 -- ...na-plugin-core-server.icspconfig.strict.md | 13 - ...re-server.icspconfig.warnlegacybrowsers.md | 13 - ...-core-server.icustomclusterclient.close.md | 13 - ...plugin-core-server.icustomclusterclient.md | 21 -- ...-core-server.iexecutioncontextcontainer.md | 20 -- ...erver.iexecutioncontextcontainer.tojson.md | 15 - ...ver.iexecutioncontextcontainer.tostring.md | 15 - ...a-plugin-core-server.iexternalurlconfig.md | 20 -- ...n-core-server.iexternalurlconfig.policy.md | 13 - ...in-core-server.iexternalurlpolicy.allow.md | 13 - ...gin-core-server.iexternalurlpolicy.host.md | 23 -- ...a-plugin-core-server.iexternalurlpolicy.md | 22 -- ...core-server.iexternalurlpolicy.protocol.md | 23 -- ...bana-plugin-core-server.ikibanaresponse.md | 22 -- ...gin-core-server.ikibanaresponse.options.md | 11 - ...gin-core-server.ikibanaresponse.payload.md | 11 - ...ugin-core-server.ikibanaresponse.status.md | 11 - ...server.ikibanasocket.authorizationerror.md | 13 - ...in-core-server.ikibanasocket.authorized.md | 13 - ...server.ikibanasocket.getpeercertificate.md | 22 -- ...rver.ikibanasocket.getpeercertificate_1.md | 22 -- ...rver.ikibanasocket.getpeercertificate_2.md | 26 -- ...n-core-server.ikibanasocket.getprotocol.md | 17 - ...kibana-plugin-core-server.ikibanasocket.md | 31 -- ...n-core-server.ikibanasocket.renegotiate.md | 29 -- ...n-core-server.intervalhistogram.exceeds.md | 11 - ...-server.intervalhistogram.fromtimestamp.md | 11 - ...-server.intervalhistogram.lastupdatedat.md | 11 - ...lugin-core-server.intervalhistogram.max.md | 11 - ...na-plugin-core-server.intervalhistogram.md | 27 -- ...ugin-core-server.intervalhistogram.mean.md | 11 - ...lugin-core-server.intervalhistogram.min.md | 11 - ...re-server.intervalhistogram.percentiles.md | 16 - ...in-core-server.intervalhistogram.stddev.md | 11 - ...e-server.irenderoptions.isanonymouspage.md | 13 - ...ibana-plugin-core-server.irenderoptions.md | 19 - ...ibana-plugin-core-server.irouter.delete.md | 13 - .../kibana-plugin-core-server.irouter.get.md | 13 - ...-core-server.irouter.handlelegacyerrors.md | 13 - .../kibana-plugin-core-server.irouter.md | 26 -- ...kibana-plugin-core-server.irouter.patch.md | 13 - .../kibana-plugin-core-server.irouter.post.md | 13 - .../kibana-plugin-core-server.irouter.put.md | 13 - ...a-plugin-core-server.irouter.routerpath.md | 13 - ...bana-plugin-core-server.isauthenticated.md | 13 - ...r.isavedobjectsexporter.exportbyobjects.md | 30 -- ...ver.isavedobjectsexporter.exportbytypes.md | 30 -- ...lugin-core-server.isavedobjectsexporter.md | 21 -- ...ore-server.isavedobjectsimporter.import.md | 28 -- ...lugin-core-server.isavedobjectsimporter.md | 21 -- ...avedobjectsimporter.resolveimporterrors.md | 28 -- ...er.isavedobjectspointintimefinder.close.md | 15 - ...ver.isavedobjectspointintimefinder.find.md | 13 - ...e-server.isavedobjectspointintimefinder.md | 20 -- ...gin-core-server.isavedobjectsrepository.md | 13 - ...in-core-server.isavedobjecttyperegistry.md | 13 - ...rver.iscopedclusterclient.ascurrentuser.md | 13 - ...ver.iscopedclusterclient.asinternaluser.md | 13 - ...plugin-core-server.iscopedclusterclient.md | 21 -- ...lugin-core-server.iuisettingsclient.get.md | 13 - ...in-core-server.iuisettingsclient.getall.md | 13 - ...-server.iuisettingsclient.getregistered.md | 13 - ...erver.iuisettingsclient.getuserprovided.md | 13 - ...e-server.iuisettingsclient.isoverridden.md | 13 - ...re-server.iuisettingsclient.issensitive.md | 13 - ...na-plugin-core-server.iuisettingsclient.md | 29 -- ...in-core-server.iuisettingsclient.remove.md | 13 - ...ore-server.iuisettingsclient.removemany.md | 13 - ...lugin-core-server.iuisettingsclient.set.md | 13 - ...n-core-server.iuisettingsclient.setmany.md | 13 - ...ugin-core-server.kibanaexecutioncontext.md | 21 -- ...core-server.kibanarequest._constructor_.md | 24 -- ...a-plugin-core-server.kibanarequest.auth.md | 13 - ...a-plugin-core-server.kibanarequest.body.md | 11 - ...plugin-core-server.kibanarequest.events.md | 13 - ...lugin-core-server.kibanarequest.headers.md | 18 - ...ana-plugin-core-server.kibanarequest.id.md | 18 - ...re-server.kibanarequest.issystemrequest.md | 13 - ...kibana-plugin-core-server.kibanarequest.md | 38 -- ...plugin-core-server.kibanarequest.params.md | 11 - ...-plugin-core-server.kibanarequest.query.md | 11 - ...-core-server.kibanarequest.rewrittenurl.md | 13 - ...-plugin-core-server.kibanarequest.route.md | 13 - ...plugin-core-server.kibanarequest.socket.md | 13 - ...na-plugin-core-server.kibanarequest.url.md | 13 - ...a-plugin-core-server.kibanarequest.uuid.md | 18 - ...ore-server.kibanarequestevents.aborted_.md | 13 - ...e-server.kibanarequestevents.completed_.md | 18 - ...-plugin-core-server.kibanarequestevents.md | 21 -- ...a-plugin-core-server.kibanarequestroute.md | 22 -- ...n-core-server.kibanarequestroute.method.md | 11 - ...-core-server.kibanarequestroute.options.md | 11 - ...gin-core-server.kibanarequestroute.path.md | 11 - ...n-core-server.kibanarequestrouteoptions.md | 13 - ...lugin-core-server.kibanaresponsefactory.md | 130 ------- .../kibana-plugin-core-server.knownheaders.md | 13 - ...in-core-server.lifecycleresponsefactory.md | 13 - ...-plugin-core-server.makeusagefromschema.md | 15 - .../core/server/kibana-plugin-core-server.md | 338 ------------------ ...re-server.mergesavedobjectmigrationmaps.md | 21 -- ....metricsservicesetup.collectioninterval.md | 13 - ...rver.metricsservicesetup.getopsmetrics_.md | 23 -- ...-plugin-core-server.metricsservicesetup.md | 21 -- ...-plugin-core-server.metricsservicestart.md | 13 - ...-server.mutatingoperationrefreshsetting.md | 13 - ...sversioncompatibility.incompatiblenodes.md | 11 - ....nodesversioncompatibility.iscompatible.md | 11 - ...nodesversioncompatibility.kibanaversion.md | 11 - ...n-core-server.nodesversioncompatibility.md | 23 -- ...erver.nodesversioncompatibility.message.md | 11 - ...sioncompatibility.nodesinforequesterror.md | 11 - ....nodesversioncompatibility.warningnodes.md | 11 - ...na-plugin-core-server.onpostauthhandler.md | 13 - ...na-plugin-core-server.onpostauthtoolkit.md | 20 -- ...ugin-core-server.onpostauthtoolkit.next.md | 13 - ...ana-plugin-core-server.onpreauthhandler.md | 13 - ...ana-plugin-core-server.onpreauthtoolkit.md | 20 -- ...lugin-core-server.onpreauthtoolkit.next.md | 13 - ...-server.onpreresponseextensions.headers.md | 13 - ...gin-core-server.onpreresponseextensions.md | 20 -- ...plugin-core-server.onpreresponsehandler.md | 13 - ...na-plugin-core-server.onpreresponseinfo.md | 20 -- ...ore-server.onpreresponseinfo.statuscode.md | 11 - ...in-core-server.onpreresponserender.body.md | 13 - ...core-server.onpreresponserender.headers.md | 13 - ...-plugin-core-server.onpreresponserender.md | 21 -- ...plugin-core-server.onpreresponsetoolkit.md | 21 -- ...n-core-server.onpreresponsetoolkit.next.md | 13 - ...core-server.onpreresponsetoolkit.render.md | 13 - ...-plugin-core-server.onpreroutinghandler.md | 13 - ...-plugin-core-server.onpreroutingtoolkit.md | 21 -- ...in-core-server.onpreroutingtoolkit.next.md | 13 - ...e-server.onpreroutingtoolkit.rewriteurl.md | 13 - ...gin-core-server.opsmetrics.collected_at.md | 13 - ...erver.opsmetrics.concurrent_connections.md | 13 - .../kibana-plugin-core-server.opsmetrics.md | 26 -- ...kibana-plugin-core-server.opsmetrics.os.md | 13 - ...a-plugin-core-server.opsmetrics.process.md | 18 - ...plugin-core-server.opsmetrics.processes.md | 13 - ...-plugin-core-server.opsmetrics.requests.md | 13 - ...n-core-server.opsmetrics.response_times.md | 13 - ...ana-plugin-core-server.opsosmetrics.cpu.md | 22 -- ...plugin-core-server.opsosmetrics.cpuacct.md | 16 - ...-plugin-core-server.opsosmetrics.distro.md | 13 - ...-core-server.opsosmetrics.distrorelease.md | 13 - ...na-plugin-core-server.opsosmetrics.load.md | 17 - .../kibana-plugin-core-server.opsosmetrics.md | 28 -- ...-plugin-core-server.opsosmetrics.memory.md | 17 - ...lugin-core-server.opsosmetrics.platform.md | 13 - ...ore-server.opsosmetrics.platformrelease.md | 13 - ...re-server.opsosmetrics.uptime_in_millis.md | 13 - ...rver.opsprocessmetrics.event_loop_delay.md | 13 - ...ocessmetrics.event_loop_delay_histogram.md | 13 - ...na-plugin-core-server.opsprocessmetrics.md | 24 -- ...in-core-server.opsprocessmetrics.memory.md | 20 -- ...lugin-core-server.opsprocessmetrics.pid.md | 13 - ...rver.opsprocessmetrics.uptime_in_millis.md | 13 - ...opsservermetrics.concurrent_connections.md | 13 - ...ana-plugin-core-server.opsservermetrics.md | 22 -- ...n-core-server.opsservermetrics.requests.md | 17 - ...-server.opsservermetrics.response_times.md | 16 - .../kibana-plugin-core-server.plugin_2.md | 22 -- ...ibana-plugin-core-server.plugin_2.setup.md | 23 -- ...ibana-plugin-core-server.plugin_2.start.md | 23 -- ...kibana-plugin-core-server.plugin_2.stop.md | 15 - ...ver.pluginconfigdescriptor.deprecations.md | 13 - ....pluginconfigdescriptor.exposetobrowser.md | 13 - ...er.pluginconfigdescriptor.exposetousage.md | 17 - ...ugin-core-server.pluginconfigdescriptor.md | 50 --- ...re-server.pluginconfigdescriptor.schema.md | 15 - ...a-plugin-core-server.pluginconfigschema.md | 13 - ...na-plugin-core-server.plugininitializer.md | 13 - ...-server.plugininitializercontext.config.md | 20 -- ...ore-server.plugininitializercontext.env.md | 16 - ...-server.plugininitializercontext.logger.md | 31 -- ...in-core-server.plugininitializercontext.md | 23 -- ...erver.plugininitializercontext.opaqueid.md | 11 - ...n-core-server.pluginmanifest.configpath.md | 18 - ...-core-server.pluginmanifest.description.md | 13 - ....pluginmanifest.enabledonanonymouspages.md | 13 - ...e-server.pluginmanifest.extrapublicdirs.md | 18 - ...na-plugin-core-server.pluginmanifest.id.md | 13 - ...ore-server.pluginmanifest.kibanaversion.md | 13 - ...ibana-plugin-core-server.pluginmanifest.md | 38 -- ...e-server.pluginmanifest.optionalplugins.md | 13 - ...plugin-core-server.pluginmanifest.owner.md | 14 - ...e-server.pluginmanifest.requiredbundles.md | 18 - ...e-server.pluginmanifest.requiredplugins.md | 13 - ...lugin-core-server.pluginmanifest.server.md | 13 - ...re-server.pluginmanifest.servicefolders.md | 13 - ...-plugin-core-server.pluginmanifest.type.md | 13 - ...na-plugin-core-server.pluginmanifest.ui.md | 13 - ...ugin-core-server.pluginmanifest.version.md | 13 - ...a-plugin-core-server.pollesnodesversion.md | 12 - ...esversionoptions.esversioncheckinterval.md | 11 - ...desversionoptions.ignoreversionmismatch.md | 11 - ...ollesnodesversionoptions.internalclient.md | 11 - ...pollesnodesversionoptions.kibanaversion.md | 11 - ...re-server.pollesnodesversionoptions.log.md | 11 - ...n-core-server.pollesnodesversionoptions.md | 23 -- ...kibana-plugin-core-server.prebootplugin.md | 21 -- ...-plugin-core-server.prebootplugin.setup.md | 23 -- ...a-plugin-core-server.prebootplugin.stop.md | 15 - ...otservicepreboot.holdsetupuntilresolved.md | 15 - ...ver.prebootservicepreboot.issetuponhold.md | 13 - ...lugin-core-server.prebootservicepreboot.md | 43 --- ...ugin-core-server.publicuisettingsparams.md | 13 - ...gin-core-server.redirectresponseoptions.md | 17 - ...isterdeprecationsconfig.getdeprecations.md | 11 - ...-core-server.registerdeprecationsconfig.md | 19 - ...ibana-plugin-core-server.requesthandler.md | 41 --- ...-core-server.requesthandlercontext.core.md | 11 - ...lugin-core-server.requesthandlercontext.md | 21 -- ...n-core-server.requesthandlercontextbase.md | 20 -- ...erver.requesthandlercontextbase.resolve.md | 23 -- ...e-server.requesthandlercontextcontainer.md | 13 - ...re-server.requesthandlercontextprovider.md | 13 - ...lugin-core-server.requesthandlerwrapper.md | 26 -- ...-core-server.resolvecapabilitiesoptions.md | 20 -- ...abilitiesoptions.usedefaultcapabilities.md | 13 - ...kibana-plugin-core-server.responseerror.md | 16 - ...gin-core-server.responseerrorattributes.md | 13 - ...bana-plugin-core-server.responseheaders.md | 13 - .../kibana-plugin-core-server.routeconfig.md | 22 -- ...-plugin-core-server.routeconfig.options.md | 13 - ...ana-plugin-core-server.routeconfig.path.md | 18 - ...plugin-core-server.routeconfig.validate.md | 61 ---- ...-server.routeconfigoptions.authrequired.md | 15 - ...gin-core-server.routeconfigoptions.body.md | 13 - ...a-plugin-core-server.routeconfigoptions.md | 24 -- ...gin-core-server.routeconfigoptions.tags.md | 13 - ...-core-server.routeconfigoptions.timeout.md | 16 - ...-server.routeconfigoptions.xsrfrequired.md | 15 - ...e-server.routeconfigoptionsbody.accepts.md | 15 - ...-server.routeconfigoptionsbody.maxbytes.md | 15 - ...ugin-core-server.routeconfigoptionsbody.md | 23 -- ...re-server.routeconfigoptionsbody.output.md | 15 - ...ore-server.routeconfigoptionsbody.parse.md | 15 - ...ana-plugin-core-server.routecontenttype.md | 13 - .../kibana-plugin-core-server.routemethod.md | 13 - ...ibana-plugin-core-server.routeregistrar.md | 13 - ...rver.routevalidationerror._constructor_.md | 21 -- ...plugin-core-server.routevalidationerror.md | 21 -- ...gin-core-server.routevalidationfunction.md | 41 --- ...routevalidationresultfactory.badrequest.md | 13 - ...ore-server.routevalidationresultfactory.md | 23 -- ...-server.routevalidationresultfactory.ok.md | 13 - ...-plugin-core-server.routevalidationspec.md | 15 - ...n-core-server.routevalidatorconfig.body.md | 13 - ...plugin-core-server.routevalidatorconfig.md | 22 -- ...core-server.routevalidatorconfig.params.md | 13 - ...-core-server.routevalidatorconfig.query.md | 13 - ...in-core-server.routevalidatorfullconfig.md | 13 - ...lugin-core-server.routevalidatoroptions.md | 20 -- ...ore-server.routevalidatoroptions.unsafe.md | 17 - ...bana-plugin-core-server.saferoutemethod.md | 13 - ...ugin-core-server.savedobject.attributes.md | 13 - ...server.savedobject.coremigrationversion.md | 13 - ...na-plugin-core-server.savedobject.error.md | 11 - ...ibana-plugin-core-server.savedobject.id.md | 13 - .../kibana-plugin-core-server.savedobject.md | 28 -- ...ore-server.savedobject.migrationversion.md | 13 - ...ugin-core-server.savedobject.namespaces.md | 13 - ...plugin-core-server.savedobject.originid.md | 13 - ...ugin-core-server.savedobject.references.md | 13 - ...ana-plugin-core-server.savedobject.type.md | 13 - ...ugin-core-server.savedobject.updated_at.md | 13 - ...-plugin-core-server.savedobject.version.md | 13 - ...plugin-core-server.savedobjectattribute.md | 13 - ...lugin-core-server.savedobjectattributes.md | 13 - ...-core-server.savedobjectattributesingle.md | 13 - ...texportbaseoptions.excludeexportdetails.md | 13 - ...jectexportbaseoptions.includenamespaces.md | 13 - ...exportbaseoptions.includereferencesdeep.md | 13 - ...ore-server.savedobjectexportbaseoptions.md | 23 -- ....savedobjectexportbaseoptions.namespace.md | 13 - ...er.savedobjectexportbaseoptions.request.md | 13 - ...text.converttomultinamespacetypeversion.md | 13 - ...tmigrationcontext.issinglenamespacetype.md | 13 - ...-server.savedobjectmigrationcontext.log.md | 13 - ...core-server.savedobjectmigrationcontext.md | 23 -- ...objectmigrationcontext.migrationversion.md | 13 - ...ugin-core-server.savedobjectmigrationfn.md | 43 --- ...gin-core-server.savedobjectmigrationmap.md | 26 -- ...gin-core-server.savedobjectreference.id.md | 11 - ...plugin-core-server.savedobjectreference.md | 22 -- ...n-core-server.savedobjectreference.name.md | 11 - ...n-core-server.savedobjectreference.type.md | 11 - ...rver.savedobjectreferencewithcontext.id.md | 13 - ...treferencewithcontext.inboundreferences.md | 17 - ...vedobjectreferencewithcontext.ismissing.md | 13 - ...-server.savedobjectreferencewithcontext.md | 27 -- ...avedobjectreferencewithcontext.originid.md | 13 - ....savedobjectreferencewithcontext.spaces.md | 13 - ...cewithcontext.spaceswithmatchingaliases.md | 13 - ...cewithcontext.spaceswithmatchingorigins.md | 13 - ...er.savedobjectreferencewithcontext.type.md | 13 - ...gin-core-server.savedobjectsanitizeddoc.md | 13 - ...gin-core-server.savedobjectsbaseoptions.md | 19 - ...erver.savedobjectsbaseoptions.namespace.md | 13 - ...savedobjectsbulkcreateobject.attributes.md | 11 - ...tsbulkcreateobject.coremigrationversion.md | 18 - ...-server.savedobjectsbulkcreateobject.id.md | 11 - ...jectsbulkcreateobject.initialnamespaces.md | 15 - ...ore-server.savedobjectsbulkcreateobject.md | 27 -- ...bjectsbulkcreateobject.migrationversion.md | 13 - ...r.savedobjectsbulkcreateobject.originid.md | 13 - ...savedobjectsbulkcreateobject.references.md | 11 - ...erver.savedobjectsbulkcreateobject.type.md | 11 - ...er.savedobjectsbulkcreateobject.version.md | 11 - ...server.savedobjectsbulkgetobject.fields.md | 13 - ...ore-server.savedobjectsbulkgetobject.id.md | 11 - ...n-core-server.savedobjectsbulkgetobject.md | 22 -- ...er.savedobjectsbulkgetobject.namespaces.md | 15 - ...e-server.savedobjectsbulkgetobject.type.md | 11 - ...server.savedobjectsbulkresolveobject.id.md | 11 - ...re-server.savedobjectsbulkresolveobject.md | 20 -- ...rver.savedobjectsbulkresolveobject.type.md | 11 - ...-server.savedobjectsbulkresolveresponse.md | 19 - ...ctsbulkresolveresponse.resolved_objects.md | 11 - ...in-core-server.savedobjectsbulkresponse.md | 19 - ....savedobjectsbulkresponse.saved_objects.md | 11 - ...savedobjectsbulkupdateobject.attributes.md | 13 - ...-server.savedobjectsbulkupdateobject.id.md | 13 - ...ore-server.savedobjectsbulkupdateobject.md | 23 -- ....savedobjectsbulkupdateobject.namespace.md | 15 - ...erver.savedobjectsbulkupdateobject.type.md | 13 - ...re-server.savedobjectsbulkupdateoptions.md | 20 -- ...r.savedobjectsbulkupdateoptions.refresh.md | 13 - ...e-server.savedobjectsbulkupdateresponse.md | 19 - ...objectsbulkupdateresponse.saved_objects.md | 11 - ...ver.savedobjectscheckconflictsobject.id.md | 11 - ...server.savedobjectscheckconflictsobject.md | 20 -- ...r.savedobjectscheckconflictsobject.type.md | 11 - ...vedobjectscheckconflictsresponse.errors.md | 15 - ...rver.savedobjectscheckconflictsresponse.md | 19 - ...re-server.savedobjectsclient.bulkcreate.md | 25 -- ...-core-server.savedobjectsclient.bulkget.md | 29 -- ...e-server.savedobjectsclient.bulkresolve.md | 31 -- ...re-server.savedobjectsclient.bulkupdate.md | 25 -- ...erver.savedobjectsclient.checkconflicts.md | 25 -- ...ver.savedobjectsclient.closepointintime.md | 27 -- ...sclient.collectmultinamespacereferences.md | 25 -- ...n-core-server.savedobjectsclient.create.md | 26 -- ...edobjectsclient.createpointintimefinder.md | 52 --- ...n-core-server.savedobjectsclient.delete.md | 26 -- ...n-core-server.savedobjectsclient.errors.md | 11 - ...gin-core-server.savedobjectsclient.find.md | 24 -- ...ugin-core-server.savedobjectsclient.get.md | 26 -- ...a-plugin-core-server.savedobjectsclient.md | 45 --- ...vedobjectsclient.openpointintimefortype.md | 27 -- ...r.savedobjectsclient.removereferencesto.md | 26 -- ...-core-server.savedobjectsclient.resolve.md | 26 -- ...n-core-server.savedobjectsclient.update.md | 27 -- ....savedobjectsclient.updateobjectsspaces.md | 27 -- ...-core-server.savedobjectsclientcontract.md | 39 -- ...n-core-server.savedobjectsclientfactory.md | 16 - ...erver.savedobjectsclientfactoryprovider.md | 13 - ...sclientprovideroptions.excludedwrappers.md | 11 - ...ientprovideroptions.includedhiddentypes.md | 11 - ...erver.savedobjectsclientprovideroptions.md | 21 -- ...server.savedobjectsclientwrapperfactory.md | 13 - ...savedobjectsclientwrapperoptions.client.md | 11 - ...server.savedobjectsclientwrapperoptions.md | 22 -- ...avedobjectsclientwrapperoptions.request.md | 11 - ...bjectsclientwrapperoptions.typeregistry.md | 11 - ...ver.savedobjectsclosepointintimeoptions.md | 12 - ...er.savedobjectsclosepointintimeresponse.md | 20 -- ...jectsclosepointintimeresponse.num_freed.md | 13 - ...jectsclosepointintimeresponse.succeeded.md | 13 - ...ollectmultinamespacereferencesobject.id.md | 11 - ...tscollectmultinamespacereferencesobject.md | 23 -- ...lectmultinamespacereferencesobject.type.md | 11 - ...scollectmultinamespacereferencesoptions.md | 21 -- ...multinamespacereferencesoptions.purpose.md | 13 - ...collectmultinamespacereferencesresponse.md | 20 -- ...ultinamespacereferencesresponse.objects.md | 11 - ...jectscreateoptions.coremigrationversion.md | 18 - ...ore-server.savedobjectscreateoptions.id.md | 13 - ...dobjectscreateoptions.initialnamespaces.md | 15 - ...n-core-server.savedobjectscreateoptions.md | 28 -- ...edobjectscreateoptions.migrationversion.md | 13 - ...rver.savedobjectscreateoptions.originid.md | 13 - ...ver.savedobjectscreateoptions.overwrite.md | 13 - ...er.savedobjectscreateoptions.references.md | 11 - ...erver.savedobjectscreateoptions.refresh.md | 13 - ...erver.savedobjectscreateoptions.version.md | 13 - ...atepointintimefinderdependencies.client.md | 11 - ...ectscreatepointintimefinderdependencies.md | 19 - ...edobjectscreatepointintimefinderoptions.md | 12 - ...er.savedobjectsdeletebynamespaceoptions.md | 20 -- ...objectsdeletebynamespaceoptions.refresh.md | 13 - ...-server.savedobjectsdeleteoptions.force.md | 13 - ...n-core-server.savedobjectsdeleteoptions.md | 21 -- ...erver.savedobjectsdeleteoptions.refresh.md | 13 - ...jectserrorhelpers.createbadrequesterror.md | 22 -- ...objectserrorhelpers.createconflicterror.md | 24 -- ...errorhelpers.creategenericnotfounderror.md | 23 -- ...creategenericnotfoundesunavailableerror.md | 23 -- ...orhelpers.createindexaliasnotfounderror.md | 22 -- ...serrorhelpers.createinvalidversionerror.md | 22 -- ...errorhelpers.createtoomanyrequestserror.md | 23 -- ...errorhelpers.createunsupportedtypeerror.md | 22 -- ...ctserrorhelpers.decoratebadrequesterror.md | 23 -- ...jectserrorhelpers.decorateconflicterror.md | 23 -- ...pers.decorateescannotexecutescripterror.md | 23 -- ...errorhelpers.decorateesunavailableerror.md | 23 -- ...ectserrorhelpers.decorateforbiddenerror.md | 23 -- ...bjectserrorhelpers.decorategeneralerror.md | 23 -- ...helpers.decorateindexaliasnotfounderror.md | 23 -- ...errorhelpers.decoratenotauthorizederror.md | 23 -- ...pers.decoraterequestentitytoolargeerror.md | 23 -- ...rorhelpers.decoratetoomanyrequestserror.md | 23 -- ...edobjectserrorhelpers.isbadrequesterror.md | 22 -- ...avedobjectserrorhelpers.isconflicterror.md | 22 -- ...rorhelpers.isescannotexecutescripterror.md | 22 -- ...bjectserrorhelpers.isesunavailableerror.md | 22 -- ...vedobjectserrorhelpers.isforbiddenerror.md | 22 -- ...savedobjectserrorhelpers.isgeneralerror.md | 22 -- ...jectserrorhelpers.isinvalidversionerror.md | 22 -- ...bjectserrorhelpers.isnotauthorizederror.md | 22 -- ...avedobjectserrorhelpers.isnotfounderror.md | 22 -- ...rorhelpers.isrequestentitytoolargeerror.md | 22 -- ...serrorhelpers.issavedobjectsclienterror.md | 22 -- ...ectserrorhelpers.istoomanyrequestserror.md | 22 -- ...in-core-server.savedobjectserrorhelpers.md | 48 --- ...erver.savedobjectsexportbyobjectoptions.md | 21 -- ...vedobjectsexportbyobjectoptions.objects.md | 16 - ...objectsexportbytypeoptions.hasreference.md | 13 - ...-server.savedobjectsexportbytypeoptions.md | 23 -- ....savedobjectsexportbytypeoptions.search.md | 13 - ...r.savedobjectsexportbytypeoptions.types.md | 13 - ...r.savedobjectsexporterror._constructor_.md | 22 -- ...rver.savedobjectsexporterror.attributes.md | 11 - ...edobjectsexporterror.exportsizeexceeded.md | 22 -- ...bjectsexporterror.invalidtransformerror.md | 24 -- ...gin-core-server.savedobjectsexporterror.md | 36 -- ...avedobjectsexporterror.objectfetcherror.md | 22 -- ...objectsexporterror.objecttransformerror.md | 25 -- ...ore-server.savedobjectsexporterror.type.md | 11 - ...ver.savedobjectsexportexcludedobject.id.md | 13 - ...server.savedobjectsexportexcludedobject.md | 21 -- ...savedobjectsexportexcludedobject.reason.md | 13 - ...r.savedobjectsexportexcludedobject.type.md | 13 - ...ectsexportresultdetails.excludedobjects.md | 13 - ...xportresultdetails.excludedobjectscount.md | 13 - ...bjectsexportresultdetails.exportedcount.md | 13 - ...-server.savedobjectsexportresultdetails.md | 24 -- ...ectsexportresultdetails.missingrefcount.md | 13 - ...tsexportresultdetails.missingreferences.md | 16 - ...core-server.savedobjectsexporttransform.md | 84 ----- ...rver.savedobjectsexporttransformcontext.md | 20 -- ...edobjectsexporttransformcontext.request.md | 13 - ...in-core-server.savedobjectsfieldmapping.md | 18 - ...bjectsfindoptions.defaultsearchoperator.md | 13 - ...e-server.savedobjectsfindoptions.fields.md | 18 - ...e-server.savedobjectsfindoptions.filter.md | 11 - ...er.savedobjectsfindoptions.hasreference.md | 13 - ...objectsfindoptions.hasreferenceoperator.md | 13 - ...gin-core-server.savedobjectsfindoptions.md | 36 -- ...rver.savedobjectsfindoptions.namespaces.md | 11 - ...ore-server.savedobjectsfindoptions.page.md | 11 - ...-server.savedobjectsfindoptions.perpage.md | 11 - ...core-server.savedobjectsfindoptions.pit.md | 13 - ...rver.savedobjectsfindoptions.preference.md | 13 - ...avedobjectsfindoptions.rootsearchfields.md | 13 - ...e-server.savedobjectsfindoptions.search.md | 13 - ...ver.savedobjectsfindoptions.searchafter.md | 13 - ...er.savedobjectsfindoptions.searchfields.md | 13 - ...erver.savedobjectsfindoptions.sortfield.md | 11 - ...erver.savedobjectsfindoptions.sortorder.md | 11 - ...ore-server.savedobjectsfindoptions.type.md | 11 - ...dobjectsfindoptions.typetonamespacesmap.md | 13 - ...ver.savedobjectsfindoptionsreference.id.md | 11 - ...server.savedobjectsfindoptionsreference.md | 20 -- ...r.savedobjectsfindoptionsreference.type.md | 11 - ...r.savedobjectsfindresponse.aggregations.md | 11 - ...in-core-server.savedobjectsfindresponse.md | 27 -- ...re-server.savedobjectsfindresponse.page.md | 11 - ...erver.savedobjectsfindresponse.per_page.md | 11 - ...-server.savedobjectsfindresponse.pit_id.md | 11 - ....savedobjectsfindresponse.saved_objects.md | 11 - ...e-server.savedobjectsfindresponse.total.md | 11 - ...ugin-core-server.savedobjectsfindresult.md | 21 -- ...ore-server.savedobjectsfindresult.score.md | 13 - ...core-server.savedobjectsfindresult.sort.md | 40 --- ...simportactionrequiredwarning.actionpath.md | 13 - ...importactionrequiredwarning.buttonlabel.md | 13 - ...savedobjectsimportactionrequiredwarning.md | 25 -- ...ectsimportactionrequiredwarning.message.md | 13 - ...objectsimportactionrequiredwarning.type.md | 11 - ...portambiguousconflicterror.destinations.md | 15 - ...avedobjectsimportambiguousconflicterror.md | 21 -- ...bjectsimportambiguousconflicterror.type.md | 11 - ...bjectsimportconflicterror.destinationid.md | 11 - ...-server.savedobjectsimportconflicterror.md | 21 -- ...er.savedobjectsimportconflicterror.type.md | 11 - ...rver.savedobjectsimporterror.attributes.md | 11 - ...edobjectsimporterror.importsizeexceeded.md | 22 -- ...gin-core-server.savedobjectsimporterror.md | 31 -- ...jectsimporterror.nonuniqueimportobjects.md | 22 -- ...simporterror.nonuniqueretrydestinations.md | 22 -- ...bjectsimporterror.nonuniqueretryobjects.md | 22 -- ...objectsimporterror.referencesfetcherror.md | 22 -- ...ore-server.savedobjectsimporterror.type.md | 11 - ...-server.savedobjectsimportfailure.error.md | 11 - ...ore-server.savedobjectsimportfailure.id.md | 11 - ...n-core-server.savedobjectsimportfailure.md | 24 -- ...e-server.savedobjectsimportfailure.meta.md | 14 - ...ver.savedobjectsimportfailure.overwrite.md | 13 - ...e-server.savedobjectsimportfailure.type.md | 11 - ...ugin-core-server.savedobjectsimporthook.md | 17 - ...ore-server.savedobjectsimporthookresult.md | 20 -- ...r.savedobjectsimporthookresult.warnings.md | 13 - ...avedobjectsimportmissingreferenceserror.md | 21 -- ...importmissingreferenceserror.references.md | 14 - ...bjectsimportmissingreferenceserror.type.md | 11 - ...vedobjectsimportoptions.createnewcopies.md | 13 - ...n-core-server.savedobjectsimportoptions.md | 24 -- ...ver.savedobjectsimportoptions.namespace.md | 13 - ...ver.savedobjectsimportoptions.overwrite.md | 13 - ...er.savedobjectsimportoptions.readstream.md | 13 - ...erver.savedobjectsimportoptions.refresh.md | 13 - ...erver.savedobjectsimportresponse.errors.md | 11 - ...-core-server.savedobjectsimportresponse.md | 24 -- ...rver.savedobjectsimportresponse.success.md | 11 - ...savedobjectsimportresponse.successcount.md | 11 - ...vedobjectsimportresponse.successresults.md | 11 - ...ver.savedobjectsimportresponse.warnings.md | 11 - ...r.savedobjectsimportretry.createnewcopy.md | 13 - ...r.savedobjectsimportretry.destinationid.md | 13 - ...-core-server.savedobjectsimportretry.id.md | 11 - ...ectsimportretry.ignoremissingreferences.md | 13 - ...gin-core-server.savedobjectsimportretry.md | 26 -- ...erver.savedobjectsimportretry.overwrite.md | 11 - ...vedobjectsimportretry.replacereferences.md | 15 - ...ore-server.savedobjectsimportretry.type.md | 11 - ...-server.savedobjectsimportsimplewarning.md | 21 -- ...savedobjectsimportsimplewarning.message.md | 13 - ...er.savedobjectsimportsimplewarning.type.md | 11 - ...savedobjectsimportsuccess.createnewcopy.md | 16 - ...savedobjectsimportsuccess.destinationid.md | 13 - ...ore-server.savedobjectsimportsuccess.id.md | 11 - ...n-core-server.savedobjectsimportsuccess.md | 25 -- ...e-server.savedobjectsimportsuccess.meta.md | 14 - ...ver.savedobjectsimportsuccess.overwrite.md | 13 - ...e-server.savedobjectsimportsuccess.type.md | 11 - ...e-server.savedobjectsimportunknownerror.md | 22 -- ....savedobjectsimportunknownerror.message.md | 11 - ...vedobjectsimportunknownerror.statuscode.md | 11 - ...ver.savedobjectsimportunknownerror.type.md | 11 - ....savedobjectsimportunsupportedtypeerror.md | 20 -- ...dobjectsimportunsupportedtypeerror.type.md | 11 - ...n-core-server.savedobjectsimportwarning.md | 15 - ...dobjectsincrementcounterfield.fieldname.md | 13 - ...bjectsincrementcounterfield.incrementby.md | 13 - ...erver.savedobjectsincrementcounterfield.md | 20 -- ...jectsincrementcounteroptions.initialize.md | 13 - ...ver.savedobjectsincrementcounteroptions.md | 23 -- ...ncrementcounteroptions.migrationversion.md | 13 - ...dobjectsincrementcounteroptions.refresh.md | 13 - ...ncrementcounteroptions.upsertattributes.md | 13 - ...re-server.savedobjectsmappingproperties.md | 13 - ...erver.savedobjectsmigrationlogger.debug.md | 11 - ...erver.savedobjectsmigrationlogger.error.md | 11 - ...server.savedobjectsmigrationlogger.info.md | 11 - ...core-server.savedobjectsmigrationlogger.md | 23 -- ...server.savedobjectsmigrationlogger.warn.md | 11 - ...ver.savedobjectsmigrationlogger.warning.md | 16 - ...ore-server.savedobjectsmigrationversion.md | 18 - ...n-core-server.savedobjectsnamespacetype.md | 13 - ...objectsopenpointintimeoptions.keepalive.md | 13 - ...rver.savedobjectsopenpointintimeoptions.md | 21 -- ...bjectsopenpointintimeoptions.namespaces.md | 15 - ...bjectsopenpointintimeoptions.preference.md | 13 - ....savedobjectsopenpointintimeresponse.id.md | 13 - ...ver.savedobjectsopenpointintimeresponse.md | 19 - ...in-core-server.savedobjectspitparams.id.md | 11 - ...-server.savedobjectspitparams.keepalive.md | 11 - ...lugin-core-server.savedobjectspitparams.md | 20 -- ...ugin-core-server.savedobjectsrawdoc._id.md | 11 - ...server.savedobjectsrawdoc._primary_term.md | 11 - ...-core-server.savedobjectsrawdoc._seq_no.md | 11 - ...-core-server.savedobjectsrawdoc._source.md | 11 - ...a-plugin-core-server.savedobjectsrawdoc.md | 23 -- ...e-server.savedobjectsrawdocparseoptions.md | 20 -- ...tsrawdocparseoptions.namespacetreatment.md | 15 - ...r.savedobjectsremovereferencestooptions.md | 20 -- ...bjectsremovereferencestooptions.refresh.md | 13 - ....savedobjectsremovereferencestoresponse.md | 20 -- ...jectsremovereferencestoresponse.updated.md | 13 - ...erver.savedobjectsrepository.bulkcreate.md | 27 -- ...e-server.savedobjectsrepository.bulkget.md | 31 -- ...rver.savedobjectsrepository.bulkresolve.md | 31 -- ...erver.savedobjectsrepository.bulkupdate.md | 27 -- ...r.savedobjectsrepository.checkconflicts.md | 25 -- ...savedobjectsrepository.closepointintime.md | 59 --- ...ository.collectmultinamespacereferences.md | 25 -- ...re-server.savedobjectsrepository.create.md | 28 -- ...jectsrepository.createpointintimefinder.md | 52 --- ...re-server.savedobjectsrepository.delete.md | 28 -- ...avedobjectsrepository.deletebynamespace.md | 27 -- ...core-server.savedobjectsrepository.find.md | 24 -- ...-core-server.savedobjectsrepository.get.md | 28 -- ...savedobjectsrepository.incrementcounter.md | 69 ---- ...ugin-core-server.savedobjectsrepository.md | 37 -- ...bjectsrepository.openpointintimefortype.md | 54 --- ...vedobjectsrepository.removereferencesto.md | 30 -- ...e-server.savedobjectsrepository.resolve.md | 28 -- ...re-server.savedobjectsrepository.update.md | 29 -- ...edobjectsrepository.updateobjectsspaces.md | 27 -- ...ositoryfactory.createinternalrepository.md | 13 - ...epositoryfactory.createscopedrepository.md | 13 - ...re-server.savedobjectsrepositoryfactory.md | 21 -- ...olveimporterrorsoptions.createnewcopies.md | 13 - ....savedobjectsresolveimporterrorsoptions.md | 23 -- ...ctsresolveimporterrorsoptions.namespace.md | 13 - ...tsresolveimporterrorsoptions.readstream.md | 13 - ...jectsresolveimporterrorsoptions.retries.md | 13 - ...vedobjectsresolveresponse.alias_purpose.md | 17 - ...dobjectsresolveresponse.alias_target_id.md | 15 - ...core-server.savedobjectsresolveresponse.md | 22 -- ...ver.savedobjectsresolveresponse.outcome.md | 15 - ...avedobjectsresolveresponse.saved_object.md | 13 - ...er.savedobjectsserializer.generaterawid.md | 26 -- ...sserializer.generaterawlegacyurlaliasid.md | 26 -- ...savedobjectsserializer.israwsavedobject.md | 25 -- ...ugin-core-server.savedobjectsserializer.md | 30 -- ...savedobjectsserializer.rawtosavedobject.md | 25 -- ...savedobjectsserializer.savedobjecttoraw.md | 24 -- ...vedobjectsservicesetup.addclientwrapper.md | 13 - ...savedobjectsservicesetup.getkibanaindex.md | 13 - ...in-core-server.savedobjectsservicesetup.md | 56 --- ...r.savedobjectsservicesetup.registertype.md | 60 ---- ...tsservicesetup.setclientfactoryprovider.md | 13 - ...savedobjectsservicestart.createexporter.md | 13 - ...savedobjectsservicestart.createimporter.md | 13 - ...tsservicestart.createinternalrepository.md | 13 - ...ectsservicestart.createscopedrepository.md | 18 - ...vedobjectsservicestart.createserializer.md | 13 - ...avedobjectsservicestart.getscopedclient.md | 15 - ...avedobjectsservicestart.gettyperegistry.md | 13 - ...in-core-server.savedobjectsservicestart.md | 26 -- ...lugin-core-server.savedobjectstatusmeta.md | 20 -- ...r.savedobjectstatusmeta.migratedindices.md | 15 - ...r.savedobjectstype.converttoaliasscript.md | 13 - ...type.converttomultinamespacetypeversion.md | 51 --- ...erver.savedobjectstype.excludeonupgrade.md | 13 - ...gin-core-server.savedobjectstype.hidden.md | 15 - ...re-server.savedobjectstype.indexpattern.md | 13 - ...core-server.savedobjectstype.management.md | 13 - ...n-core-server.savedobjectstype.mappings.md | 13 - ...ana-plugin-core-server.savedobjectstype.md | 58 --- ...core-server.savedobjectstype.migrations.md | 13 - ...lugin-core-server.savedobjectstype.name.md | 13 - ...e-server.savedobjectstype.namespacetype.md | 13 - ...in-core-server.savedobjectstype.schemas.md | 17 - ...managementdefinition.defaultsearchfield.md | 13 - ...ctstypemanagementdefinition.displayname.md | 13 - ...ectstypemanagementdefinition.getediturl.md | 13 - ...ctstypemanagementdefinition.getinappurl.md | 16 - ...bjectstypemanagementdefinition.gettitle.md | 13 - ...vedobjectstypemanagementdefinition.icon.md | 13 - ...ementdefinition.importableandexportable.md | 13 - ...tstypemanagementdefinition.isexportable.md | 48 --- ...er.savedobjectstypemanagementdefinition.md | 30 -- ...bjectstypemanagementdefinition.onexport.md | 24 -- ...bjectstypemanagementdefinition.onimport.md | 54 --- ...anagementdefinition.visibleinmanagement.md | 18 - ...vedobjectstypemappingdefinition.dynamic.md | 13 - ...erver.savedobjectstypemappingdefinition.md | 45 --- ...objectstypemappingdefinition.properties.md | 13 - ...avedobjectsupdateobjectsspacesobject.id.md | 13 - ...r.savedobjectsupdateobjectsspacesobject.md | 21 -- ...edobjectsupdateobjectsspacesobject.type.md | 13 - ....savedobjectsupdateobjectsspacesoptions.md | 21 -- ...jectsupdateobjectsspacesoptions.refresh.md | 13 - ...savedobjectsupdateobjectsspacesresponse.md | 20 -- ...ectsupdateobjectsspacesresponse.objects.md | 11 - ...updateobjectsspacesresponseobject.error.md | 13 - ...ctsupdateobjectsspacesresponseobject.id.md | 13 - ...bjectsupdateobjectsspacesresponseobject.md | 23 -- ...pdateobjectsspacesresponseobject.spaces.md | 13 - ...supdateobjectsspacesresponseobject.type.md | 13 - ...n-core-server.savedobjectsupdateoptions.md | 24 -- ...er.savedobjectsupdateoptions.references.md | 13 - ...erver.savedobjectsupdateoptions.refresh.md | 13 - ...vedobjectsupdateoptions.retryonconflict.md | 13 - ...server.savedobjectsupdateoptions.upsert.md | 13 - ...erver.savedobjectsupdateoptions.version.md | 13 - ...r.savedobjectsupdateresponse.attributes.md | 11 - ...-core-server.savedobjectsupdateresponse.md | 21 -- ...r.savedobjectsupdateresponse.references.md | 11 - ...vedobjectsutils.createemptyfindresponse.md | 13 - ...ore-server.savedobjectsutils.generateid.md | 17 - ....savedobjectsutils.getconvertedobjectid.md | 28 -- ...ore-server.savedobjectsutils.israndomid.md | 24 -- ...na-plugin-core-server.savedobjectsutils.md | 29 -- ...r.savedobjectsutils.namespaceidtostring.md | 13 - ...r.savedobjectsutils.namespacestringtoid.md | 13 - ...n-core-server.savedobjectsvalidationmap.md | 37 -- ...-core-server.savedobjectsvalidationspec.md | 13 - ...dobjecttypeexcludefromupgradefilterhook.md | 19 - ...ver.savedobjecttyperegistry.getalltypes.md | 19 - ...egistry.getimportableandexportabletypes.md | 17 - ...server.savedobjecttyperegistry.getindex.md | 24 -- ...-server.savedobjecttyperegistry.gettype.md | 24 -- ...savedobjecttyperegistry.getvisibletypes.md | 19 - ...server.savedobjecttyperegistry.ishidden.md | 24 -- ...ttyperegistry.isimportableandexportable.md | 24 -- ...avedobjecttyperegistry.ismultinamespace.md | 24 -- ...dobjecttyperegistry.isnamespaceagnostic.md | 24 -- ...ver.savedobjecttyperegistry.isshareable.md | 24 -- ...vedobjecttyperegistry.issinglenamespace.md | 24 -- ...gin-core-server.savedobjecttyperegistry.md | 31 -- ...er.savedobjecttyperegistry.registertype.md | 24 -- ...n-core-server.savedobjectunsanitizeddoc.md | 13 - ...ana-plugin-core-server.scopeablerequest.md | 15 - ...n-core-server.searchresponse._scroll_id.md | 11 - ...ugin-core-server.searchresponse._shards.md | 11 - ...core-server.searchresponse.aggregations.md | 11 - ...-plugin-core-server.searchresponse.hits.md | 28 -- ...ibana-plugin-core-server.searchresponse.md | 25 -- ...lugin-core-server.searchresponse.pit_id.md | 11 - ...in-core-server.searchresponse.timed_out.md | 11 - ...-plugin-core-server.searchresponse.took.md | 11 - ...plugin-core-server.servicestatus.detail.md | 13 - ...e-server.servicestatus.documentationurl.md | 13 - ...-plugin-core-server.servicestatus.level.md | 13 - ...kibana-plugin-core-server.servicestatus.md | 24 -- ...a-plugin-core-server.servicestatus.meta.md | 13 - ...lugin-core-server.servicestatus.summary.md | 13 - ...a-plugin-core-server.servicestatuslevel.md | 13 - ...-plugin-core-server.servicestatuslevels.md | 41 --- ...r.sessioncookievalidationresult.isvalid.md | 13 - ...re-server.sessioncookievalidationresult.md | 21 -- ...rver.sessioncookievalidationresult.path.md | 13 - ...plugin-core-server.sessionstorage.clear.md | 17 - ...a-plugin-core-server.sessionstorage.get.md | 17 - ...ibana-plugin-core-server.sessionstorage.md | 22 -- ...a-plugin-core-server.sessionstorage.set.md | 24 -- ...ssionstoragecookieoptions.encryptionkey.md | 13 - ...er.sessionstoragecookieoptions.issecure.md | 13 - ...core-server.sessionstoragecookieoptions.md | 24 -- ...server.sessionstoragecookieoptions.name.md | 13 - ...er.sessionstoragecookieoptions.samesite.md | 13 - ...er.sessionstoragecookieoptions.validate.md | 13 - ...e-server.sessionstoragefactory.asscoped.md | 11 - ...lugin-core-server.sessionstoragefactory.md | 20 -- ...na-plugin-core-server.shardsinfo.failed.md | 11 - .../kibana-plugin-core-server.shardsinfo.md | 22 -- ...a-plugin-core-server.shardsinfo.skipped.md | 11 - ...lugin-core-server.shardsinfo.successful.md | 11 - ...ana-plugin-core-server.shardsinfo.total.md | 11 - ...lugin-core-server.shardsresponse.failed.md | 11 - ...ibana-plugin-core-server.shardsresponse.md | 22 -- ...ugin-core-server.shardsresponse.skipped.md | 11 - ...n-core-server.shardsresponse.successful.md | 11 - ...plugin-core-server.shardsresponse.total.md | 11 - ...a-plugin-core-server.sharedglobalconfig.md | 16 - ...lugin-core-server.startservicesaccessor.md | 13 - ...in-core-server.statusservicesetup.core_.md | 13 - ...server.statusservicesetup.dependencies_.md | 13 - ...erver.statusservicesetup.derivedstatus_.md | 20 -- ...tatusservicesetup.isstatuspageanonymous.md | 13 - ...a-plugin-core-server.statusservicesetup.md | 83 ----- ...core-server.statusservicesetup.overall_.md | 20 -- ...ugin-core-server.statusservicesetup.set.md | 30 -- ...n-core-server.uisettingsparams.category.md | 13 - ...ore-server.uisettingsparams.deprecation.md | 13 - ...ore-server.uisettingsparams.description.md | 13 - ...ana-plugin-core-server.uisettingsparams.md | 33 -- ...gin-core-server.uisettingsparams.metric.md | 21 -- ...lugin-core-server.uisettingsparams.name.md | 13 - ...re-server.uisettingsparams.optionlabels.md | 13 - ...in-core-server.uisettingsparams.options.md | 13 - ...ugin-core-server.uisettingsparams.order.md | 15 - ...n-core-server.uisettingsparams.readonly.md | 13 - ...ver.uisettingsparams.requirespagereload.md | 13 - ...gin-core-server.uisettingsparams.schema.md | 11 - ...-core-server.uisettingsparams.sensitive.md | 13 - ...lugin-core-server.uisettingsparams.type.md | 13 - ...ugin-core-server.uisettingsparams.value.md | 13 - ...ugin-core-server.uisettingsservicesetup.md | 19 - ...-server.uisettingsservicesetup.register.md | 39 -- ...uisettingsservicestart.asscopedtoclient.md | 36 -- ...ugin-core-server.uisettingsservicestart.md | 19 - ...ibana-plugin-core-server.uisettingstype.md | 13 - ...na-plugin-core-server.unauthorizederror.md | 14 - ...in-core-server.unauthorizederrorhandler.md | 13 - ...nauthorizederrorhandlernothandledresult.md | 19 - ...orizederrorhandlernothandledresult.type.md | 11 - ...r.unauthorizederrorhandleroptions.error.md | 11 - ...-server.unauthorizederrorhandleroptions.md | 20 -- ...unauthorizederrorhandleroptions.request.md | 11 - ...e-server.unauthorizederrorhandlerresult.md | 12 - ...rorhandlerresultretryparams.authheaders.md | 11 - ...authorizederrorhandlerresultretryparams.md | 19 - ...ver.unauthorizederrorhandlerretryresult.md | 20 -- ...nauthorizederrorhandlerretryresult.type.md | 11 - ...-server.unauthorizederrorhandlertoolkit.md | 21 -- ...uthorizederrorhandlertoolkit.nothandled.md | 13 - ...r.unauthorizederrorhandlertoolkit.retry.md | 13 - ...-server.userprovidedvalues.isoverridden.md | 11 - ...a-plugin-core-server.userprovidedvalues.md | 21 -- ...ore-server.userprovidedvalues.uservalue.md | 11 - ...bana-plugin-core-server.validbodyoutput.md | 13 - package.json | 1 - scripts/check_published_api_changes.js | 10 - src/core/README.md | 14 - src/dev/run_check_published_api_changes.ts | 288 --------------- test/scripts/checks/doc_api_changes.sh | 6 - test/scripts/jenkins_unit.sh | 1 - vars/tasks.groovy | 1 - 1720 files changed, 30484 deletions(-) delete mode 100755 .buildkite/scripts/steps/checks/doc_api_changes.sh delete mode 100644 docs/development/core/public/index.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.approute.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.capabilities.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.category.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.chromeless.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.deeplinks.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.defaultpath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.exactroute.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.keywords.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.mount.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.navlinkstatus.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.searchable.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.status.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.title.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app.updater_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.app_wrapper_class.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appcategory.arialabel.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appcategory.euiicontype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appcategory.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appcategory.label.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appcategory.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appcategory.order.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appdeeplink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveaction.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveactiontype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.buttoncolor.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.callback.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.confirmbuttontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.text.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.title.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appleavehandler.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationsetup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationsetup.registerappupdater.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationstart.applications_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationstart.capabilities.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationstart.currentappid_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetoapp.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetourl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmount.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmountparameters.appbasepath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmountparameters.element.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmountparameters.history.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmountparameters.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmountparameters.setheaderactionmenu.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appmountparameters.theme_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appnavlinkstatus.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appnavoptions.euiicontype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appnavoptions.icon.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appnavoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appnavoptions.order.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appnavoptions.tooltip.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appstatus.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appunmount.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appupdatablefields.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.appupdater.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.capabilities.catalogue.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.capabilities.management.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.capabilities.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.capabilities.navlinks.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromebadge.icontype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromebadge.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromebadge.text.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromebadge.tooltip.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromebreadcrumb.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromedoctitle.change.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromedoctitle.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromedoctitle.reset.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextension.appname.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextension.content.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextension.links.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextension.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionlinkbase.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.content.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.href.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.linktype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.href.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.linktype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.href.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.linktype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.labels.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.linktype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.title.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenulink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.hidehelpmenu.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.mount.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.order.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registercenter.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerleft.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerright.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.baseurl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.category.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.disabled.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.hidden.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.href.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.icon.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.order.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.title.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.tooltip.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlink.url.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlinks.enableforcedappswitchernavigation.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlinks.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getall.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getforceappswitchernavigation_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getnavlinks_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlinks.has.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromenavlinks.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.add.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.label.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.link.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.doctitle.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.getbadge_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbs_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbsappendextension_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.getcustomnavlink_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.gethelpextension_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.getisnavdrawerlocked_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.getisvisible_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.hasheaderbanner_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.navcontrols.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.navlinks.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.recentlyaccessed.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.setbadge.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbs.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbsappendextension.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.setcustomnavlink.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.setheaderbanner.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpextension.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpsupporturl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromestart.setisvisible.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.content.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.analytics.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.application.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.executioncontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.fatalerrors.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.getstartservices.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.http.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.injectedmetadata.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.notifications.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.theme.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.coresetup.uisettings.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.analytics.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.application.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.chrome.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.deprecations.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.doclinks.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.executioncontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.fatalerrors.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.http.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.i18n.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.injectedmetadata.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.notifications.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.overlays.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.savedobjects.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.theme.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.corestart.uisettings.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getalldeprecations.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getdeprecations.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.isdeprecationresolvable.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.resolvedeprecation.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.errortoastoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.errortoastoptions.title.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.errortoastoptions.toastmessage.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.clear.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.context_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.getaslabels.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.set.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.withglobalcontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.executioncontextstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.message.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.stack.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.add.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.get_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.fatalerrorsstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.asresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.assystemrequest.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.context.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.headers.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.prependbasepath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.query.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.path.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpfetchquery.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httphandler.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpheadersinit.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptor.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptor.request.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptor.requesterror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptor.response.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptor.responseerror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.error.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.fetchoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.error.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.request.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.body.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.cache.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.credentials.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.headers.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.integrity.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.keepalive.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.method.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.mode.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.redirect.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrer.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrerpolicy.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.signal.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httprequestinit.window.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpresponse.body.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpresponse.fetchoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpresponse.request.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpresponse.response.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.addloadingcountsource.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.anonymouspaths.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.basepath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.delete.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.externalurl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.fetch.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.getloadingcount_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.head.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.intercept.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.options.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.patch.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.post.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpsetup.put.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.httpstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.i18nstart.context.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.i18nstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.isanonymous.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.register.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ibasepath.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ibasepath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ibasepath.prepend.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ibasepath.publicbaseurl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ibasepath.remove.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ibasepath.serverbasepath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iexternalurl.isinternalurl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iexternalurl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iexternalurl.validateurl.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.allow.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.host.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.protocol.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.body.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.name.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.req.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.request.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.res.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.response.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halt.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halted.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.body.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.response.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.itoasts.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getall.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdate_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdateerrors_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.iscustom.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdeclared.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdefault.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isoverridden.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.remove.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.set.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.kibanaexecutioncontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.mountpoint.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.deeplinkid.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.openinnewtab.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.path.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.replace.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.skipappleave.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.state.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.forceredirect.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.skipappleave.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.navtype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.notificationssetup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.notificationssetup.toasts.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.notificationsstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.notificationsstart.toasts.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.add.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.getcomponent.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.remove.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.replace.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._aria-label_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._data-test-subj_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.classname.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.closebuttonarialabel.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.hideclosebutton.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maskprops.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maxwidth.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.onclose.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.outsideclickcloses.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.ownfocus.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.size.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.open.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions._data-test-subj_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.buttoncolor.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.cancelbuttontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.classname.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.closebuttonarialabel.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.confirmbuttontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.defaultfocusedbutton.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.maxwidth.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.title.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions._data-test-subj_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.classname.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.closebuttonarialabel.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.open.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.openconfirm.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayref.close.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayref.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlayref.onclose.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaystart.banners.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaystart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaystart.openconfirm.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaystart.openflyout.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.overlaystart.openmodal.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugin_2.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugin_2.setup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugin_2.start.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugin_2.stop.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugininitializer.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.config.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.env.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.opaqueid.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.publicappdeeplinkinfo.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.publicappinfo.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.publicuisettingsparams.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.resolvedeprecationresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_purpose.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_target_id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.outcome.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.saved_object.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.responseerrorbody.attributes.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.responseerrorbody.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.responseerrorbody.message.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.responseerrorbody.statuscode.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.attributes.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.coremigrationversion.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.error.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.migrationversion.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.namespaces.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.originid.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.references.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.updated_at.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobject.version.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectattribute.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectattributes.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectattributesingle.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjecterror.error.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjecterror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjecterror.message.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjecterror.metadata.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjecterror.statuscode.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreference.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreference.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreference.name.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreference.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.inboundreferences.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.ismissing.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.originid.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaces.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingaliases.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingorigins.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.namespace.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.savedobjects.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.attributes.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.overwrite.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.resolved_objects.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.attributes.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.references.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.version.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.namespace.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkcreate.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkget.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkresolve.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkupdate.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.create.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.delete.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.find.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.resolve.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.update.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.objects.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.coremigrationversion.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.migrationversion.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.overwrite.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.references.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.defaultsearchoperator.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.fields.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.filter.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreference.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreferenceoperator.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.namespaces.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.page.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.perpage.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.pit.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.preference.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.rootsearchfields.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.search.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchfields.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortfield.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortorder.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.typetonamespacesmap.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.aggregations.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.page.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.perpage.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.total.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.actionpath.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.buttonlabel.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.message.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.destinations.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.destinationid.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.error.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.meta.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.overwrite.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.references.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.errors.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.success.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successcount.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successresults.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.warnings.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.createnewcopy.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.destinationid.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.ignoremissingreferences.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.overwrite.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.replacereferences.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.message.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.createnewcopy.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.destinationid.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.meta.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.overwrite.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.message.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.statuscode.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsimportwarning.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsmigrationversion.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_purpose.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_target_id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.outcome.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.saved_object.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.client.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.references.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.upsert.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.version.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory._constructor_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.action.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.block.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.createhref.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.createsubhistory.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.go.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.goback.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.goforward.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.length.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.listen.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.location.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.push.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.scopedhistory.replace.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject._constructor_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject._version.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.attributes.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.coremigrationversion.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.delete.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.error.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.get.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.has.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.id.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.migrationversion.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.namespaces.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.references.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.save.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.set.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.simplesavedobject.updatedat.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.startservicesaccessor.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toast.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastinput.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastinputfields.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastoptions.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastoptions.toastlifetimems.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi._constructor_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.add.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.adddanger.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.adderror.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.addinfo.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.addsuccess.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.addwarning.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.get_.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsapi.remove.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastssetup.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.toastsstart.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.category.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.deprecation.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.description.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.metric.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.name.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.optionlabels.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.options.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.order.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.readonly.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.requirespagereload.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.schema.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.sensitive.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.type.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsparams.value.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingsstate.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.uisettingstype.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.unmountcallback.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.url_max_length.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.isoverridden.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.md delete mode 100644 docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.uservalue.md delete mode 100644 docs/development/core/server/index.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.analyticsservicepreboot.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.analyticsservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.analyticsservicestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.app_wrapper_class.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.appcategory.arialabel.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.appcategory.euiicontype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.appcategory.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.appcategory.label.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.appcategory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.appcategory.order.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.asyncplugin.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.asyncplugin.setup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.asyncplugin.start.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.asyncplugin.stop.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authenticated.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authenticated.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authenticationhandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authnothandled.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authnothandled.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authredirected.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authredirected.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authredirectedparams.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authredirectedparams.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authresult.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authresultparams.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authresultparams.requestheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authresultparams.responseheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authresultparams.state.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authresulttype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authstatus.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authtoolkit.authenticated.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authtoolkit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authtoolkit.nothandled.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.authtoolkit.redirected.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.correctiveactions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.deprecationtype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.documentationurl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.level.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.message.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.requirerestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.title.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basepath.get.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basepath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basepath.prepend.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basepath.publicbaseurl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basepath.remove.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basepath.serverbasepath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.basepath.set.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilities.catalogue.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilities.management.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilities.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilities.navlinks.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilitiesprovider.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerprovider.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerswitcher.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.resolvecapabilities.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.capabilitiesswitcher.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.configpath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.deprecationtype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.contextsetup.createcontextcontainer.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.contextsetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corepreboot.analytics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corepreboot.elasticsearch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corepreboot.http.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corepreboot.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corepreboot.preboot.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.deprecations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.elasticsearch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.savedobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.uisettings.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.analytics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.capabilities.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.context.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.deprecations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.doclinks.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.elasticsearch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.executioncontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.getstartservices.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.http.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.i18n.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.logging.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.metrics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.savedobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.status.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.uisettings.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.analytics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.capabilities.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.doclinks.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.elasticsearch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.executioncontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.http.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.metrics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.savedobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestart.uisettings.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestatus.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.countresponse._shards.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.countresponse.count.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.countresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.cspconfig.default.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.cspconfig.disableembedding.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.cspconfig.header.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.cspconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.cspconfig.strict.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.cspconfig.warnlegacybrowsers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.body.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.bypasserrorformat.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.statuscode.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.customrequesthandlercontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._index.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._shards.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._version.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.error.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.found.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.result.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsclient.getalldeprecations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsdetails.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsettings.doclinkskey.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsettings.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsettings.message.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.registerdeprecations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.destructiveroutemethod.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig._constructor_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.apiversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.compression.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.customheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.healthcheckdelay.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.hosts.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ignoreversionmismatch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.maxsockets.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.password.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.pingtimeout.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requestheaderswhitelist.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requesttimeout.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.serviceaccounttoken.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.shardtimeout.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffinterval.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonconnectionfault.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonstart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ssl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.username.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.credentialsspecified.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.hosts.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.error.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.config.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.createclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.legacy.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.setunauthorizederrorhandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.client.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.createclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.nodesinforequesterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.body.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor._constructor_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.collect.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.reset.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.stop.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.getaslabels.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.withcontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.executioncontextstart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.exposedtobrowserdescriptor.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.fakerequest.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.fakerequest.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.deprecationtype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getauthheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getauthstate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.esclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.savedobjectsclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._index.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._primary_term.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._routing.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._seq_no.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._source.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse._version.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse.found.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.getresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.handlercontexttype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.handlerfunction.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.handlerparameters.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.headers_2.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpauth.get.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpauth.isauthenticated.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpauth.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresources.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresources.register.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesrequesthandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesresponseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderanonymouscoreapp.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.rendercoreapp.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderhtml.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderjs.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.body.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.bypasserrorformat.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpresponsepayload.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpserverinfo.hostname.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpserverinfo.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpserverinfo.name.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpserverinfo.port.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpserverinfo.protocol.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.basepath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.getserverinfo.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.registerroutes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.basepath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createcookiesessionstoragefactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createrouter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.csp.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.getserverinfo.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerauth.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpostauth.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreauth.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronprerouting.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicestart.auth.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicestart.basepath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicestart.getserverinfo.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.httpservicestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.getlocale.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.gettranslationfiles.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ibasepath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iclusterclient.asinternaluser.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iclusterclient.asscoped.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iclusterclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icontextcontainer.createhandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icontextcontainer.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icontextcontainer.registercontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icontextprovider.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icspconfig.disableembedding.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icspconfig.header.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icspconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icspconfig.strict.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icspconfig.warnlegacybrowsers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.close.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tojson.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tostring.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.policy.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.allow.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.host.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.protocol.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.options.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.payload.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.status.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorizationerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorized.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_1.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_2.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getprotocol.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.ikibanasocket.renegotiate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.exceeds.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.fromtimestamp.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.lastupdatedat.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.max.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.mean.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.min.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.percentiles.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.intervalhistogram.stddev.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irenderoptions.isanonymouspage.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irenderoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.delete.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.get.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.handlelegacyerrors.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.patch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.post.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.put.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.irouter.routerpath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isauthenticated.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.import.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.resolveimporterrors.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.close.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.find.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjectsrepository.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.isavedobjecttyperegistry.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.ascurrentuser.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.asinternaluser.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.get.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getall.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getregistered.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getuserprovided.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.isoverridden.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.issensitive.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.remove.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.removemany.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.set.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.setmany.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanaexecutioncontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest._constructor_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.auth.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.body.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.events.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.issystemrequest.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.params.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.query.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.rewrittenurl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.route.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.socket.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.url.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequest.uuid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.aborted_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.completed_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.method.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.options.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.path.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanarequestrouteoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.kibanaresponsefactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.knownheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.lifecycleresponsefactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.makeusagefromschema.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.mergesavedobjectmigrationmaps.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.collectioninterval.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.getopsmetrics_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.metricsservicestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.mutatingoperationrefreshsetting.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.nodesinforequesterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpostauthhandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.next.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreauthhandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.next.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponsehandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.statuscode.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponserender.body.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponserender.headers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponserender.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.next.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.render.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreroutinghandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.next.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.rewriteurl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.collected_at.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.concurrent_connections.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.os.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.process.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.processes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.requests.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsmetrics.response_times.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpu.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpuacct.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distro.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distrorelease.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.load.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.memory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platform.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platformrelease.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsosmetrics.uptime_in_millis.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay_histogram.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.memory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.pid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.uptime_in_millis.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsservermetrics.concurrent_connections.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsservermetrics.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsservermetrics.requests.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.opsservermetrics.response_times.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugin_2.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugin_2.setup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugin_2.start.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugin_2.stop.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.deprecations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetobrowser.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetousage.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.schema.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginconfigschema.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugininitializer.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.config.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.env.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.logger.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.opaqueid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.configpath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.description.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.enabledonanonymouspages.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.extrapublicdirs.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.kibanaversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.optionalplugins.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.owner.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredbundles.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredplugins.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.server.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.servicefolders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.ui.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pluginmanifest.version.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pollesnodesversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.esversioncheckinterval.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.ignoreversionmismatch.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.internalclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.kibanaversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.log.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.prebootplugin.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.prebootplugin.setup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.prebootplugin.stop.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.holdsetupuntilresolved.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.issetuponhold.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.publicuisettingsparams.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.redirectresponseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.getdeprecations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.resolve.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandlercontextcontainer.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandlercontextprovider.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.requesthandlerwrapper.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.usedefaultcapabilities.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.responseerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.responseerrorattributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.responseheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfig.options.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfig.path.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfig.validate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.authrequired.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.body.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.tags.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.timeout.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.xsrfrequired.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.accepts.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.maxbytes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.output.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.parse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routecontenttype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routemethod.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routeregistrar.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidationerror._constructor_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidationerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidationfunction.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.badrequest.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.ok.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidationspec.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.body.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.params.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.query.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidatorfullconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.unsafe.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.saferoutemethod.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.attributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.coremigrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.error.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.migrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.namespaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.originid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.references.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.updated_at.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobject.version.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectattribute.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectattributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectattributesingle.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.excludeexportdetails.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includenamespaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includereferencesdeep.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.namespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.request.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.issinglenamespacetype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.log.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationfn.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationmap.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreference.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreference.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreference.name.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreference.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.inboundreferences.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.ismissing.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.originid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingaliases.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingorigins.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsanitizeddoc.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.namespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.attributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.coremigrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.initialnamespaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.migrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.originid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.references.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.version.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.fields.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.namespaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.resolved_objects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresponse.saved_objects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.attributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.namespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.saved_objects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.errors.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkcreate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkget.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkresolve.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkupdate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.checkconflicts.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.closepointintime.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.collectmultinamespacereferences.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.create.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.createpointintimefinder.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.delete.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.errors.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.find.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.get.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.removereferencesto.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.resolve.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.update.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.updateobjectsspaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientcontract.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactoryprovider.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.excludedwrappers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.includedhiddentypes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperfactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.client.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.request.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.typeregistry.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.purpose.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.objects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.coremigrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.initialnamespaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.migrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.originid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.overwrite.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.references.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.version.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.client.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.force.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfoundesunavailableerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratebadrequesterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateconflicterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateescannotexecutescripterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isbadrequesterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isconflicterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isrequestentitytoolargeerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.issavedobjectsclienterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.istoomanyrequestserror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.objects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.hasreference.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.search.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.types.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror._constructor_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.attributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.exportsizeexceeded.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.invalidtransformerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objectfetcherror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objecttransformerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.reason.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjectscount.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.exportedcount.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingrefcount.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingreferences.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransform.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.request.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfieldmapping.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.defaultsearchoperator.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.fields.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.filter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreference.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreferenceoperator.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.namespaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.page.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.perpage.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.pit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.preference.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.rootsearchfields.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.search.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchfields.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortfield.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortorder.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.typetonamespacesmap.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.aggregations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.page.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.per_page.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.saved_objects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.total.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.score.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.sort.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.actionpath.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.buttonlabel.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.message.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.destinations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.destinationid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.attributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.importsizeexceeded.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueimportobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretrydestinations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretryobjects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.referencesfetcherror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.error.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.meta.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.overwrite.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthook.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.warnings.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.references.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.createnewcopies.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.namespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.overwrite.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.readstream.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.errors.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.success.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successcount.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successresults.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.warnings.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.createnewcopy.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.destinationid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.ignoremissingreferences.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.overwrite.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.replacereferences.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.message.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.createnewcopy.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.destinationid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.meta.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.overwrite.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.message.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.statuscode.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsimportwarning.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.fieldname.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.incrementby.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.initialize.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.migrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.upsertattributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmappingproperties.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.debug.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.error.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.info.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warn.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warning.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.namespaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.keepalive.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._primary_term.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._seq_no.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._source.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.namespacetreatment.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.updated.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkcreate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkget.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkresolve.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkupdate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.checkconflicts.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.closepointintime.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.collectmultinamespacereferences.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.create.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.createpointintimefinder.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.delete.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.find.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.get.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.removereferencesto.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.resolve.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.update.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.updateobjectsspaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createinternalrepository.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createscopedrepository.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.createnewcopies.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.namespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.readstream.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.retries.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_purpose.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_target_id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.outcome.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.saved_object.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawlegacyurlaliasid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.israwsavedobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.rawtosavedobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.savedobjecttoraw.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.addclientwrapper.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.getkibanaindex.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createexporter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createimporter.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createscopedrepository.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createserializer.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.getscopedclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.gettyperegistry.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttoaliasscript.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.excludeonupgrade.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.hidden.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.indexpattern.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.management.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.mappings.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.migrations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.name.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.namespacetype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstype.schemas.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.defaultsearchfield.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.displayname.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getediturl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getinappurl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.gettitle.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.icon.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.importableandexportable.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.isexportable.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onexport.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onimport.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.visibleinmanagement.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.dynamic.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.properties.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.objects.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.error.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.spaces.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.references.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.refresh.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.retryonconflict.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.upsert.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.version.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.attributes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.references.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.createemptyfindresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.generateid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.getconvertedobjectid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.israndomid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespaceidtostring.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespacestringtoid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationmap.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationspec.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getimportableandexportabletypes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getindex.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.gettype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isnamespaceagnostic.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.issinglenamespace.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.registertype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectunsanitizeddoc.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.scopeablerequest.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse._scroll_id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse._shards.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse.aggregations.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse.pit_id.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse.timed_out.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.searchresponse.took.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.isvalid.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.path.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstorage.clear.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstorage.get.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstorage.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstorage.set.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.encryptionkey.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.issecure.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.name.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.samesite.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.validate.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.asscoped.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsinfo.failed.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsinfo.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsinfo.skipped.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsinfo.successful.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsinfo.total.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsresponse.failed.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsresponse.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsresponse.skipped.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsresponse.successful.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.shardsresponse.total.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.startservicesaccessor.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.dependencies_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.derivedstatus_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.isstatuspageanonymous.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.overall_.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.set.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.category.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.deprecation.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.description.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.metric.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.name.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.optionlabels.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.options.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.order.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.readonly.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.requirespagereload.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.schema.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.sensitive.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsparams.value.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.register.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.asscopedtoclient.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.uisettingstype.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandler.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.error.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.request.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresult.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.authheaders.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.type.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.nothandled.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.retry.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.isoverridden.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.uservalue.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.validbodyoutput.md delete mode 100644 scripts/check_published_api_changes.js delete mode 100644 src/dev/run_check_published_api_changes.ts delete mode 100755 test/scripts/checks/doc_api_changes.sh diff --git a/.buildkite/scripts/steps/checks.sh b/.buildkite/scripts/steps/checks.sh index bffb919eaa8c9..9937a25758e41 100755 --- a/.buildkite/scripts/steps/checks.sh +++ b/.buildkite/scripts/steps/checks.sh @@ -11,7 +11,6 @@ export DISABLE_BOOTSTRAP_VALIDATION=false .buildkite/scripts/steps/checks/telemetry.sh .buildkite/scripts/steps/checks/ts_projects.sh .buildkite/scripts/steps/checks/jest_configs.sh -.buildkite/scripts/steps/checks/doc_api_changes.sh .buildkite/scripts/steps/checks/kbn_pm_dist.sh .buildkite/scripts/steps/checks/plugin_list_docs.sh .buildkite/scripts/steps/checks/bundle_limits.sh diff --git a/.buildkite/scripts/steps/checks/doc_api_changes.sh b/.buildkite/scripts/steps/checks/doc_api_changes.sh deleted file mode 100755 index 73a2bb9409d02..0000000000000 --- a/.buildkite/scripts/steps/checks/doc_api_changes.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -source .buildkite/scripts/common/util.sh - -echo --- Check Doc API Changes -checks-reporter-with-killswitch "Check Doc API Changes" \ - node scripts/check_published_api_changes diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 273f1159afa63..2682f1fc9c7c9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -291,7 +291,6 @@ /packages/kbn-logging-mocks/ @elastic/kibana-core /packages/kbn-http-tools/ @elastic/kibana-core /src/plugins/saved_objects_management/ @elastic/kibana-core -/src/dev/run_check_published_api_changes.ts @elastic/kibana-core /src/plugins/advanced_settings/ @elastic/kibana-core /x-pack/plugins/global_search_bar/ @elastic/kibana-core /test/analytics @elastic/kibana-core diff --git a/docs/development/core/public/index.md b/docs/development/core/public/index.md deleted file mode 100644 index 23c347fc16a7a..0000000000000 --- a/docs/development/core/public/index.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) - -## API Reference - -## Packages - -| Package | Description | -| --- | --- | -| [kibana-plugin-core-public](./kibana-plugin-core-public.md) | The Kibana Core APIs for client-side plugins.A plugin's public/index file must contain a named import, plugin, that implements which returns an object that implements .The plugin integrates with the core system via lifecycle events: setup, start, and stop. In each lifecycle method, the plugin will receive the corresponding core services available (either or ) and any interfaces returned by dependency plugins' lifecycle method. Anything returned by the plugin's lifecycle method will be exposed to downstream dependencies when their corresponding lifecycle methods are invoked. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.app.approute.md b/docs/development/core/public/kibana-plugin-core-public.app.approute.md deleted file mode 100644 index 357e6400c4e8c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.approute.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [appRoute](./kibana-plugin-core-public.app.approute.md) - -## App.appRoute property - -Override the application's routing path from `/app/${id}`. Must be unique across registered applications. Should not include the base path from HTTP. - -Signature: - -```typescript -appRoute?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.capabilities.md b/docs/development/core/public/kibana-plugin-core-public.app.capabilities.md deleted file mode 100644 index 4a027a6ab132c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.capabilities.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [capabilities](./kibana-plugin-core-public.app.capabilities.md) - -## App.capabilities property - -Custom capabilities defined by the app. - -Signature: - -```typescript -capabilities?: Partial; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.category.md b/docs/development/core/public/kibana-plugin-core-public.app.category.md deleted file mode 100644 index a1e74f2bcf5e2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.category.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [category](./kibana-plugin-core-public.app.category.md) - -## App.category property - -The category definition of the product See [AppCategory](./kibana-plugin-core-public.appcategory.md) See DEFAULT\_APP\_CATEGORIES for more reference - -Signature: - -```typescript -category?: AppCategory; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.chromeless.md b/docs/development/core/public/kibana-plugin-core-public.app.chromeless.md deleted file mode 100644 index fe234cac08b68..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.chromeless.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [chromeless](./kibana-plugin-core-public.app.chromeless.md) - -## App.chromeless property - -Hide the UI chrome when the application is mounted. Defaults to `false`. Takes precedence over chrome service visibility settings. - -Signature: - -```typescript -chromeless?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.deeplinks.md b/docs/development/core/public/kibana-plugin-core-public.app.deeplinks.md deleted file mode 100644 index d9f76fb38a55d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.deeplinks.md +++ /dev/null @@ -1,48 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [deepLinks](./kibana-plugin-core-public.app.deeplinks.md) - -## App.deepLinks property - -Input type for registering secondary in-app locations for an application. - -Deep links must include at least one of `path` or `deepLinks`. A deep link that does not have a `path` represents a topological level in the application's hierarchy, but does not have a destination URL that is user-accessible. - -Signature: - -```typescript -deepLinks?: AppDeepLink[]; -``` - -## Example - - -```ts -core.application.register({ - id: 'my_app', - title: 'Translated title', - keywords: ['translated keyword1', 'translated keyword2'], - deepLinks: [ - { - id: 'sub1', - title: 'Sub1', - path: '/sub1', - keywords: ['subpath1'], - }, - { - id: 'sub2', - title: 'Sub2', - deepLinks: [ - { - id: 'subsub', - title: 'SubSub', - path: '/sub2/sub', - keywords: ['subpath2'], - }, - ], - }, - ], - mount: () => { ... } -}) -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.app.defaultpath.md b/docs/development/core/public/kibana-plugin-core-public.app.defaultpath.md deleted file mode 100644 index 3c952ec053e62..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.defaultpath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [defaultPath](./kibana-plugin-core-public.app.defaultpath.md) - -## App.defaultPath property - -Allow to define the default path a user should be directed to when navigating to the app. When defined, this value will be used as a default for the `path` option when calling [navigateToApp](./kibana-plugin-core-public.applicationstart.navigatetoapp.md)\`, and will also be appended to the [application navLink](./kibana-plugin-core-public.chromenavlink.md) in the navigation bar. - -Signature: - -```typescript -defaultPath?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.exactroute.md b/docs/development/core/public/kibana-plugin-core-public.app.exactroute.md deleted file mode 100644 index 71f6352ec006c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.exactroute.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [exactRoute](./kibana-plugin-core-public.app.exactroute.md) - -## App.exactRoute property - -If set to true, the application's route will only be checked against an exact match. Defaults to `false`. - -Signature: - -```typescript -exactRoute?: boolean; -``` - -## Example - - -```ts -core.application.register({ - id: 'my_app', - title: 'My App', - exactRoute: true, - mount: () => { ... }, -}) - -// '[basePath]/app/my_app' will be matched -// '[basePath]/app/my_app/some/path' will not be matched -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.app.id.md b/docs/development/core/public/kibana-plugin-core-public.app.id.md deleted file mode 100644 index 39f6e62dae04c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.id.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [id](./kibana-plugin-core-public.app.id.md) - -## App.id property - -The unique identifier of the application. - -Can only be composed of alphanumeric characters, `-`, `:` and `_` - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.keywords.md b/docs/development/core/public/kibana-plugin-core-public.app.keywords.md deleted file mode 100644 index 585df1b48c16e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.keywords.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [keywords](./kibana-plugin-core-public.app.keywords.md) - -## App.keywords property - -Optional keywords to match with in deep links search. Omit if this part of the hierarchy does not have a page URL. - -Signature: - -```typescript -keywords?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.md b/docs/development/core/public/kibana-plugin-core-public.app.md deleted file mode 100644 index 71bf216f30250..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.md +++ /dev/null @@ -1,34 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) - -## App interface - - -Signature: - -```typescript -export interface App extends AppNavOptions -``` -Extends: AppNavOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [appRoute?](./kibana-plugin-core-public.app.approute.md) | string | (Optional) Override the application's routing path from /app/${id}. Must be unique across registered applications. Should not include the base path from HTTP. | -| [capabilities?](./kibana-plugin-core-public.app.capabilities.md) | Partial<Capabilities> | (Optional) Custom capabilities defined by the app. | -| [category?](./kibana-plugin-core-public.app.category.md) | AppCategory | (Optional) The category definition of the product See [AppCategory](./kibana-plugin-core-public.appcategory.md) See DEFAULT\_APP\_CATEGORIES for more reference | -| [chromeless?](./kibana-plugin-core-public.app.chromeless.md) | boolean | (Optional) Hide the UI chrome when the application is mounted. Defaults to false. Takes precedence over chrome service visibility settings. | -| [deepLinks?](./kibana-plugin-core-public.app.deeplinks.md) | AppDeepLink\[\] | (Optional) Input type for registering secondary in-app locations for an application.Deep links must include at least one of path or deepLinks. A deep link that does not have a path represents a topological level in the application's hierarchy, but does not have a destination URL that is user-accessible. | -| [defaultPath?](./kibana-plugin-core-public.app.defaultpath.md) | string | (Optional) Allow to define the default path a user should be directed to when navigating to the app. When defined, this value will be used as a default for the path option when calling [navigateToApp](./kibana-plugin-core-public.applicationstart.navigatetoapp.md)\`, and will also be appended to the [application navLink](./kibana-plugin-core-public.chromenavlink.md) in the navigation bar. | -| [exactRoute?](./kibana-plugin-core-public.app.exactroute.md) | boolean | (Optional) If set to true, the application's route will only be checked against an exact match. Defaults to false. | -| [id](./kibana-plugin-core-public.app.id.md) | string | The unique identifier of the application.Can only be composed of alphanumeric characters, -, : and _ | -| [keywords?](./kibana-plugin-core-public.app.keywords.md) | string\[\] | (Optional) Optional keywords to match with in deep links search. Omit if this part of the hierarchy does not have a page URL. | -| [mount](./kibana-plugin-core-public.app.mount.md) | AppMount<HistoryLocationState> | A mount function called when the user navigates to this app's route. | -| [navLinkStatus?](./kibana-plugin-core-public.app.navlinkstatus.md) | AppNavLinkStatus | (Optional) The initial status of the application's navLink. Defaulting to visible if status is accessible and hidden if status is inaccessible See [AppNavLinkStatus](./kibana-plugin-core-public.appnavlinkstatus.md) | -| [searchable?](./kibana-plugin-core-public.app.searchable.md) | boolean | (Optional) The initial flag to determine if the application is searchable in the global search. Defaulting to true if navLinkStatus is visible or omitted. | -| [status?](./kibana-plugin-core-public.app.status.md) | AppStatus | (Optional) The initial status of the application. Defaulting to accessible | -| [title](./kibana-plugin-core-public.app.title.md) | string | The title of the application. | -| [updater$?](./kibana-plugin-core-public.app.updater_.md) | Observable<AppUpdater> | (Optional) An [AppUpdater](./kibana-plugin-core-public.appupdater.md) observable that can be used to update the application [AppUpdatableFields](./kibana-plugin-core-public.appupdatablefields.md) at runtime. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.app.mount.md b/docs/development/core/public/kibana-plugin-core-public.app.mount.md deleted file mode 100644 index 460ded2a4bff1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.mount.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [mount](./kibana-plugin-core-public.app.mount.md) - -## App.mount property - -A mount function called when the user navigates to this app's route. - -Signature: - -```typescript -mount: AppMount; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.navlinkstatus.md b/docs/development/core/public/kibana-plugin-core-public.app.navlinkstatus.md deleted file mode 100644 index c01a26e42e237..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.navlinkstatus.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [navLinkStatus](./kibana-plugin-core-public.app.navlinkstatus.md) - -## App.navLinkStatus property - -The initial status of the application's navLink. Defaulting to `visible` if `status` is `accessible` and `hidden` if status is `inaccessible` See [AppNavLinkStatus](./kibana-plugin-core-public.appnavlinkstatus.md) - -Signature: - -```typescript -navLinkStatus?: AppNavLinkStatus; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.searchable.md b/docs/development/core/public/kibana-plugin-core-public.app.searchable.md deleted file mode 100644 index ab1b559a7f6a1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.searchable.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [searchable](./kibana-plugin-core-public.app.searchable.md) - -## App.searchable property - -The initial flag to determine if the application is searchable in the global search. Defaulting to `true` if `navLinkStatus` is `visible` or omitted. - -Signature: - -```typescript -searchable?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.status.md b/docs/development/core/public/kibana-plugin-core-public.app.status.md deleted file mode 100644 index caa6ff1dcac9e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.status.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [status](./kibana-plugin-core-public.app.status.md) - -## App.status property - -The initial status of the application. Defaulting to `accessible` - -Signature: - -```typescript -status?: AppStatus; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.title.md b/docs/development/core/public/kibana-plugin-core-public.app.title.md deleted file mode 100644 index c705e3ab8d2b1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.title.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [title](./kibana-plugin-core-public.app.title.md) - -## App.title property - -The title of the application. - -Signature: - -```typescript -title: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.app.updater_.md b/docs/development/core/public/kibana-plugin-core-public.app.updater_.md deleted file mode 100644 index e6789a38f12f7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app.updater_.md +++ /dev/null @@ -1,43 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [App](./kibana-plugin-core-public.app.md) > [updater$](./kibana-plugin-core-public.app.updater_.md) - -## App.updater$ property - -An [AppUpdater](./kibana-plugin-core-public.appupdater.md) observable that can be used to update the application [AppUpdatableFields](./kibana-plugin-core-public.appupdatablefields.md) at runtime. - -Signature: - -```typescript -updater$?: Observable; -``` - -## Example - -How to update an application navLink at runtime - -```ts -// inside your plugin's setup function -export class MyPlugin implements Plugin { - private appUpdater = new BehaviorSubject(() => ({})); - - setup({ application }) { - application.register({ - id: 'my-app', - title: 'My App', - updater$: this.appUpdater, - async mount(params) { - const { renderApp } = await import('./application'); - return renderApp(params); - }, - }); - } - - start() { - // later, when the navlink needs to be updated - appUpdater.next(() => { - navLinkStatus: AppNavLinkStatus.disabled, - }) - } -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.app_wrapper_class.md b/docs/development/core/public/kibana-plugin-core-public.app_wrapper_class.md deleted file mode 100644 index 577c7edbeef4a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.app_wrapper_class.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [APP\_WRAPPER\_CLASS](./kibana-plugin-core-public.app_wrapper_class.md) - -## APP\_WRAPPER\_CLASS variable - -The class name for top level \*and\* nested application wrappers to ensure proper layout - -Signature: - -```typescript -APP_WRAPPER_CLASS = "kbnAppWrapper" -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.arialabel.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.arialabel.md deleted file mode 100644 index ff805bd94174a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appcategory.arialabel.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppCategory](./kibana-plugin-core-public.appcategory.md) > [ariaLabel](./kibana-plugin-core-public.appcategory.arialabel.md) - -## AppCategory.ariaLabel property - -If the visual label isn't appropriate for screen readers, can override it here - -Signature: - -```typescript -ariaLabel?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.euiicontype.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.euiicontype.md deleted file mode 100644 index 578f70224342b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appcategory.euiicontype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppCategory](./kibana-plugin-core-public.appcategory.md) > [euiIconType](./kibana-plugin-core-public.appcategory.euiicontype.md) - -## AppCategory.euiIconType property - -Define an icon to be used for the category If the category is only 1 item, and no icon is defined, will default to the product icon Defaults to initials if no icon is defined - -Signature: - -```typescript -euiIconType?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.id.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.id.md deleted file mode 100644 index 0342a1d9ee95b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appcategory.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppCategory](./kibana-plugin-core-public.appcategory.md) > [id](./kibana-plugin-core-public.appcategory.id.md) - -## AppCategory.id property - -Unique identifier for the categories - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.label.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.label.md deleted file mode 100644 index 02c000e88f31d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appcategory.label.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppCategory](./kibana-plugin-core-public.appcategory.md) > [label](./kibana-plugin-core-public.appcategory.label.md) - -## AppCategory.label property - -Label used for category name. Also used as aria-label if one isn't set. - -Signature: - -```typescript -label: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.md deleted file mode 100644 index 40c714b51b8bd..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appcategory.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppCategory](./kibana-plugin-core-public.appcategory.md) - -## AppCategory interface - -A category definition for nav links to know where to sort them in the left hand nav - -Signature: - -```typescript -export interface AppCategory -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [ariaLabel?](./kibana-plugin-core-public.appcategory.arialabel.md) | string | (Optional) If the visual label isn't appropriate for screen readers, can override it here | -| [euiIconType?](./kibana-plugin-core-public.appcategory.euiicontype.md) | string | (Optional) Define an icon to be used for the category If the category is only 1 item, and no icon is defined, will default to the product icon Defaults to initials if no icon is defined | -| [id](./kibana-plugin-core-public.appcategory.id.md) | string | Unique identifier for the categories | -| [label](./kibana-plugin-core-public.appcategory.label.md) | string | Label used for category name. Also used as aria-label if one isn't set. | -| [order?](./kibana-plugin-core-public.appcategory.order.md) | number | (Optional) The order that categories will be sorted in Prefer large steps between categories to allow for further editing (Default categories are in steps of 1000) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.order.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.order.md deleted file mode 100644 index 76959c060fa8b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appcategory.order.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppCategory](./kibana-plugin-core-public.appcategory.md) > [order](./kibana-plugin-core-public.appcategory.order.md) - -## AppCategory.order property - -The order that categories will be sorted in Prefer large steps between categories to allow for further editing (Default categories are in steps of 1000) - -Signature: - -```typescript -order?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appdeeplink.md b/docs/development/core/public/kibana-plugin-core-public.appdeeplink.md deleted file mode 100644 index 30fd3085a4341..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appdeeplink.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppDeepLink](./kibana-plugin-core-public.appdeeplink.md) - -## AppDeepLink type - -Input type for registering secondary in-app locations for an application. - -Deep links must include at least one of `path` or `deepLinks`. A deep link that does not have a `path` represents a topological level in the application's hierarchy, but does not have a destination URL that is user-accessible. - -Signature: - -```typescript -export declare type AppDeepLink = { - id: string; - title: string; - keywords?: string[]; - navLinkStatus?: AppNavLinkStatus; - searchable?: boolean; -} & AppNavOptions & ({ - path: string; - deepLinks?: AppDeepLink[]; -} | { - path?: string; - deepLinks: AppDeepLink[]; -}); -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveaction.md b/docs/development/core/public/kibana-plugin-core-public.appleaveaction.md deleted file mode 100644 index 48323ebaf8e77..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveaction.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveAction](./kibana-plugin-core-public.appleaveaction.md) - -## AppLeaveAction type - -Possible actions to return from a [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md) - -See [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) and [AppLeaveDefaultAction](./kibana-plugin-core-public.appleavedefaultaction.md) - -Signature: - -```typescript -export declare type AppLeaveAction = AppLeaveDefaultAction | AppLeaveConfirmAction; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveactiontype.md b/docs/development/core/public/kibana-plugin-core-public.appleaveactiontype.md deleted file mode 100644 index 9df408c885a18..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveactiontype.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveActionType](./kibana-plugin-core-public.appleaveactiontype.md) - -## AppLeaveActionType enum - -Possible type of actions on application leave. - -Signature: - -```typescript -export declare enum AppLeaveActionType -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| confirm | "confirm" | | -| default | "default" | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.buttoncolor.md b/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.buttoncolor.md deleted file mode 100644 index 6a3c790cd17a2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.buttoncolor.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) > [buttonColor](./kibana-plugin-core-public.appleaveconfirmaction.buttoncolor.md) - -## AppLeaveConfirmAction.buttonColor property - -Signature: - -```typescript -buttonColor?: ButtonColor; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.callback.md b/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.callback.md deleted file mode 100644 index 8ebc9068aa612..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.callback.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) > [callback](./kibana-plugin-core-public.appleaveconfirmaction.callback.md) - -## AppLeaveConfirmAction.callback property - -Signature: - -```typescript -callback?: () => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.confirmbuttontext.md b/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.confirmbuttontext.md deleted file mode 100644 index 10ccb6d220f3f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.confirmbuttontext.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) > [confirmButtonText](./kibana-plugin-core-public.appleaveconfirmaction.confirmbuttontext.md) - -## AppLeaveConfirmAction.confirmButtonText property - -Signature: - -```typescript -confirmButtonText?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.md b/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.md deleted file mode 100644 index 9f18643787019..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) - -## AppLeaveConfirmAction interface - -Action to return from a [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md) to show a confirmation message when trying to leave an application. - -See - -Signature: - -```typescript -export interface AppLeaveConfirmAction -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [buttonColor?](./kibana-plugin-core-public.appleaveconfirmaction.buttoncolor.md) | ButtonColor | (Optional) | -| [callback?](./kibana-plugin-core-public.appleaveconfirmaction.callback.md) | () => void | (Optional) | -| [confirmButtonText?](./kibana-plugin-core-public.appleaveconfirmaction.confirmbuttontext.md) | string | (Optional) | -| [text](./kibana-plugin-core-public.appleaveconfirmaction.text.md) | string | | -| [title?](./kibana-plugin-core-public.appleaveconfirmaction.title.md) | string | (Optional) | -| [type](./kibana-plugin-core-public.appleaveconfirmaction.type.md) | AppLeaveActionType.confirm | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.text.md b/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.text.md deleted file mode 100644 index 9caea99fd4a07..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.text.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) > [text](./kibana-plugin-core-public.appleaveconfirmaction.text.md) - -## AppLeaveConfirmAction.text property - -Signature: - -```typescript -text: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.title.md b/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.title.md deleted file mode 100644 index cda43267e3311..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.title.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) > [title](./kibana-plugin-core-public.appleaveconfirmaction.title.md) - -## AppLeaveConfirmAction.title property - -Signature: - -```typescript -title?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.type.md b/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.type.md deleted file mode 100644 index fdff75caedc58..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleaveconfirmaction.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) > [type](./kibana-plugin-core-public.appleaveconfirmaction.type.md) - -## AppLeaveConfirmAction.type property - -Signature: - -```typescript -type: AppLeaveActionType.confirm; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.md b/docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.md deleted file mode 100644 index 5d0e0d2a216e1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveDefaultAction](./kibana-plugin-core-public.appleavedefaultaction.md) - -## AppLeaveDefaultAction interface - -Action to return from a [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md) to execute the default behaviour when leaving the application. - -See - -Signature: - -```typescript -export interface AppLeaveDefaultAction -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-public.appleavedefaultaction.type.md) | AppLeaveActionType.default | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.type.md b/docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.type.md deleted file mode 100644 index c6bac03c4e002..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleavedefaultaction.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveDefaultAction](./kibana-plugin-core-public.appleavedefaultaction.md) > [type](./kibana-plugin-core-public.appleavedefaultaction.type.md) - -## AppLeaveDefaultAction.type property - -Signature: - -```typescript -type: AppLeaveActionType.default; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appleavehandler.md b/docs/development/core/public/kibana-plugin-core-public.appleavehandler.md deleted file mode 100644 index 256ea00e7ef7b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appleavehandler.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md) - -## AppLeaveHandler type - -> Warning: This API is now obsolete. -> -> [AppMountParameters.onAppLeave](./kibana-plugin-core-public.appmountparameters.onappleave.md) has been deprecated in favor of [ScopedHistory.block](./kibana-plugin-core-public.scopedhistory.block.md) 8.8.0 -> - -A handler that will be executed before leaving the application, either when going to another application or when closing the browser tab or manually changing the url. Should return `confirm` to prompt a message to the user before leaving the page, or `default` to keep the default behavior (doing nothing). - -See [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) for detailed usage examples. - -Signature: - -```typescript -export declare type AppLeaveHandler = (factory: AppLeaveActionFactory, nextAppId?: string) => AppLeaveAction; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationsetup.md b/docs/development/core/public/kibana-plugin-core-public.applicationsetup.md deleted file mode 100644 index 2e8702a56f309..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationsetup.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) - -## ApplicationSetup interface - - -Signature: - -```typescript -export interface ApplicationSetup -``` - -## Methods - -| Method | Description | -| --- | --- | -| [register(app)](./kibana-plugin-core-public.applicationsetup.register.md) | Register an mountable application to the system. | -| [registerAppUpdater(appUpdater$)](./kibana-plugin-core-public.applicationsetup.registerappupdater.md) | Register an application updater that can be used to change the [AppUpdatableFields](./kibana-plugin-core-public.appupdatablefields.md) fields of all applications at runtime.This is meant to be used by plugins that needs to updates the whole list of applications. To only updates a specific application, use the updater$ property of the registered application instead. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md b/docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md deleted file mode 100644 index e53b28e88d6ea..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) > [register](./kibana-plugin-core-public.applicationsetup.register.md) - -## ApplicationSetup.register() method - -Register an mountable application to the system. - -Signature: - -```typescript -register(app: App): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| app | App<HistoryLocationState> | an [App](./kibana-plugin-core-public.app.md) | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationsetup.registerappupdater.md b/docs/development/core/public/kibana-plugin-core-public.applicationsetup.registerappupdater.md deleted file mode 100644 index 6e8203fd68197..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationsetup.registerappupdater.md +++ /dev/null @@ -1,46 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) > [registerAppUpdater](./kibana-plugin-core-public.applicationsetup.registerappupdater.md) - -## ApplicationSetup.registerAppUpdater() method - -Register an application updater that can be used to change the [AppUpdatableFields](./kibana-plugin-core-public.appupdatablefields.md) fields of all applications at runtime. - -This is meant to be used by plugins that needs to updates the whole list of applications. To only updates a specific application, use the `updater$` property of the registered application instead. - -Signature: - -```typescript -registerAppUpdater(appUpdater$: Observable): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| appUpdater$ | Observable<AppUpdater> | | - -Returns: - -void - -## Example - -How to register an application updater that disables some applications: - -```ts -// inside your plugin's setup function -export class MyPlugin implements Plugin { - setup({ application }) { - application.registerAppUpdater( - new BehaviorSubject(app => { - if (myPluginApi.shouldDisable(app)) - return { - status: AppStatus.inaccessible, - }; - }) - ); - } -} -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.applications_.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.applications_.md deleted file mode 100644 index bcc5435f35951..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.applications_.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [applications$](./kibana-plugin-core-public.applicationstart.applications_.md) - -## ApplicationStart.applications$ property - -Observable emitting the list of currently registered apps and their associated status. - -Signature: - -```typescript -applications$: Observable>; -``` - -## Remarks - -Applications disabled by [Capabilities](./kibana-plugin-core-public.capabilities.md) will not be present in the map. Applications manually disabled from the client-side using an [application updater](./kibana-plugin-core-public.appupdater.md) are present, with their status properly set as `inaccessible`. - diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.capabilities.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.capabilities.md deleted file mode 100644 index 3d9353a246888..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.capabilities.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [capabilities](./kibana-plugin-core-public.applicationstart.capabilities.md) - -## ApplicationStart.capabilities property - -Gets the read-only capabilities. - -Signature: - -```typescript -capabilities: RecursiveReadonly; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.currentappid_.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.currentappid_.md deleted file mode 100644 index 1c1e118b8bfac..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.currentappid_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [currentAppId$](./kibana-plugin-core-public.applicationstart.currentappid_.md) - -## ApplicationStart.currentAppId$ property - -An observable that emits the current application id and each subsequent id update. - -Signature: - -```typescript -currentAppId$: Observable; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md deleted file mode 100644 index 8bc89f617e157..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [getUrlForApp](./kibana-plugin-core-public.applicationstart.geturlforapp.md) - -## ApplicationStart.getUrlForApp() method - -Returns the absolute path (or URL) to a given app, including the global base path. - -By default, it returns the absolute path of the application (e.g `/basePath/app/my-app`). Use the `absolute` option to generate an absolute url instead (e.g `http://host:port/basePath/app/my-app`) - -Note that when generating absolute urls, the origin (protocol, host and port) are determined from the browser's current location. - -Signature: - -```typescript -getUrlForApp(appId: string, options?: { - path?: string; - absolute?: boolean; - deepLinkId?: string; - }): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| appId | string | | -| options | { path?: string; absolute?: boolean; deepLinkId?: string; } | | - -Returns: - -string - diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.md deleted file mode 100644 index 62128b840fb78..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) - -## ApplicationStart interface - - -Signature: - -```typescript -export interface ApplicationStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [applications$](./kibana-plugin-core-public.applicationstart.applications_.md) | Observable<ReadonlyMap<string, PublicAppInfo>> | Observable emitting the list of currently registered apps and their associated status. | -| [capabilities](./kibana-plugin-core-public.applicationstart.capabilities.md) | RecursiveReadonly<Capabilities> | Gets the read-only capabilities. | -| [currentAppId$](./kibana-plugin-core-public.applicationstart.currentappid_.md) | Observable<string \| undefined> | An observable that emits the current application id and each subsequent id update. | - -## Methods - -| Method | Description | -| --- | --- | -| [getUrlForApp(appId, options)](./kibana-plugin-core-public.applicationstart.geturlforapp.md) | Returns the absolute path (or URL) to a given app, including the global base path.By default, it returns the absolute path of the application (e.g /basePath/app/my-app). Use the absolute option to generate an absolute url instead (e.g http://host:port/basePath/app/my-app)Note that when generating absolute urls, the origin (protocol, host and port) are determined from the browser's current location. | -| [navigateToApp(appId, options)](./kibana-plugin-core-public.applicationstart.navigatetoapp.md) | Navigate to a given app | -| [navigateToUrl(url, options)](./kibana-plugin-core-public.applicationstart.navigatetourl.md) | Navigate to given URL in a SPA friendly way when possible (when the URL will redirect to a valid application within the current basePath).The method resolves pathnames the same way browsers do when resolving a <a href> value. The provided url can be: - an absolute URL - an absolute path - a path relative to the current URL (window.location.href)If all these criteria are true for the given URL: - (only for absolute URLs) The origin of the URL matches the origin of the browser's current location - The resolved pathname of the provided URL/path starts with the current basePath (eg. /mybasepath/s/my-space) - The pathname segment after the basePath matches any known application route (eg. /app// or any application's appRoute configuration)Then a SPA navigation will be performed using navigateToApp using the corresponding application and path. Otherwise, fallback to a full page reload to navigate to the url using window.location.assign. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetoapp.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetoapp.md deleted file mode 100644 index a6f87209148fd..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetoapp.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [navigateToApp](./kibana-plugin-core-public.applicationstart.navigatetoapp.md) - -## ApplicationStart.navigateToApp() method - -Navigate to a given app - -Signature: - -```typescript -navigateToApp(appId: string, options?: NavigateToAppOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| appId | string | | -| options | NavigateToAppOptions | navigation options | - -Returns: - -Promise<void> - diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetourl.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetourl.md deleted file mode 100644 index b6093340cfbf3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetourl.md +++ /dev/null @@ -1,50 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [navigateToUrl](./kibana-plugin-core-public.applicationstart.navigatetourl.md) - -## ApplicationStart.navigateToUrl() method - -Navigate to given URL in a SPA friendly way when possible (when the URL will redirect to a valid application within the current basePath). - -The method resolves pathnames the same way browsers do when resolving a `` value. The provided `url` can be: - an absolute URL - an absolute path - a path relative to the current URL (window.location.href) - -If all these criteria are true for the given URL: - (only for absolute URLs) The origin of the URL matches the origin of the browser's current location - The resolved pathname of the provided URL/path starts with the current basePath (eg. /mybasepath/s/my-space) - The pathname segment after the basePath matches any known application route (eg. /app// or any application's `appRoute` configuration) - -Then a SPA navigation will be performed using `navigateToApp` using the corresponding application and path. Otherwise, fallback to a full page reload to navigate to the url using `window.location.assign`. - -Signature: - -```typescript -navigateToUrl(url: string, options?: NavigateToUrlOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| url | string | an absolute URL, an absolute path or a relative path, to navigate to. | -| options | NavigateToUrlOptions | navigation options | - -Returns: - -Promise<void> - -## Example - - -```ts -// current url: `https://kibana:8080/base-path/s/my-space/app/dashboard` - -// will call `application.navigateToApp('discover', { path: '/some-path?foo=bar'})` -application.navigateToUrl('https://kibana:8080/base-path/s/my-space/app/discover/some-path?foo=bar') -application.navigateToUrl('/base-path/s/my-space/app/discover/some-path?foo=bar') -application.navigateToUrl('./discover/some-path?foo=bar') - -// will perform a full page reload using `window.location.assign` -application.navigateToUrl('https://elsewhere:8080/base-path/s/my-space/app/discover/some-path') // origin does not match -application.navigateToUrl('/app/discover/some-path') // does not include the current basePath -application.navigateToUrl('/base-path/s/my-space/app/unknown-app/some-path') // unknown application -application.navigateToUrl('../discover') // resolve to `/base-path/s/my-space/discover` which is not a path of a known app. -application.navigateToUrl('../../other-space/discover') // resolve to `/base-path/s/other-space/discover` which is not within the current basePath. -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.appmount.md b/docs/development/core/public/kibana-plugin-core-public.appmount.md deleted file mode 100644 index 0b02b7df597ae..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmount.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMount](./kibana-plugin-core-public.appmount.md) - -## AppMount type - -A mount function called when the user navigates to this app's route. - -Signature: - -```typescript -export declare type AppMount = (params: AppMountParameters) => AppUnmount | Promise; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.appbasepath.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.appbasepath.md deleted file mode 100644 index 09a96cb3ce57a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.appbasepath.md +++ /dev/null @@ -1,61 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) > [appBasePath](./kibana-plugin-core-public.appmountparameters.appbasepath.md) - -## AppMountParameters.appBasePath property - -> Warning: This API is now obsolete. -> -> Use [AppMountParameters.history](./kibana-plugin-core-public.appmountparameters.history.md) instead. 8.8.0 -> - -The route path for configuring navigation to the application. This string should not include the base path from HTTP. - -Signature: - -```typescript -appBasePath: string; -``` - -## Example - -How to configure react-router with a base path: - -```ts -// inside your plugin's setup function -export class MyPlugin implements Plugin { - setup({ application }) { - application.register({ - id: 'my-app', - appRoute: '/my-app', - async mount(params) { - const { renderApp } = await import('./application'); - return renderApp(params); - }, - }); - } -} -``` - -```ts -// application.tsx -import React from 'react'; -import ReactDOM from 'react-dom'; -import { BrowserRouter, Route } from 'react-router-dom'; - -import { CoreStart, AppMountParameters } from 'src/core/public'; -import { MyPluginDepsStart } from './plugin'; - -export renderApp = ({ appBasePath, element }: AppMountParameters) => { - ReactDOM.render( - // pass `appBasePath` to `basename` - - - , - element - ); - - return () => ReactDOM.unmountComponentAtNode(element); -} -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.element.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.element.md deleted file mode 100644 index 4d8c2a8644ad9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.element.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) > [element](./kibana-plugin-core-public.appmountparameters.element.md) - -## AppMountParameters.element property - -The container element to render the application into. - -Signature: - -```typescript -element: HTMLElement; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.history.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.history.md deleted file mode 100644 index c22267eadbe28..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.history.md +++ /dev/null @@ -1,55 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) > [history](./kibana-plugin-core-public.appmountparameters.history.md) - -## AppMountParameters.history property - -A scoped history instance for your application. Should be used to wire up your applications Router. - -Signature: - -```typescript -history: ScopedHistory; -``` - -## Example - -How to configure react-router with a base path: - -```ts -// inside your plugin's setup function -export class MyPlugin implements Plugin { - setup({ application }) { - application.register({ - id: 'my-app', - appRoute: '/my-app', - async mount(params) { - const { renderApp } = await import('./application'); - return renderApp(params); - }, - }); - } -} -``` - -```ts -// application.tsx -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Router, Route } from 'react-router-dom'; - -import { CoreStart, AppMountParameters } from 'src/core/public'; -import { MyPluginDepsStart } from './plugin'; - -export renderApp = ({ element, history }: AppMountParameters) => { - ReactDOM.render( - - - , - element - ); - - return () => ReactDOM.unmountComponentAtNode(element); -} -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.md deleted file mode 100644 index 357998ecaea26..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) - -## AppMountParameters interface - - -Signature: - -```typescript -export interface AppMountParameters -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [appBasePath](./kibana-plugin-core-public.appmountparameters.appbasepath.md) | string | The route path for configuring navigation to the application. This string should not include the base path from HTTP. | -| [element](./kibana-plugin-core-public.appmountparameters.element.md) | HTMLElement | The container element to render the application into. | -| [history](./kibana-plugin-core-public.appmountparameters.history.md) | ScopedHistory<HistoryLocationState> | A scoped history instance for your application. Should be used to wire up your applications Router. | -| [onAppLeave](./kibana-plugin-core-public.appmountparameters.onappleave.md) | (handler: AppLeaveHandler) => void | A function that can be used to register a handler that will be called when the user is leaving the current application, allowing to prompt a confirmation message before actually changing the page.This will be called either when the user goes to another application, or when trying to close the tab or manually changing the url. | -| [setHeaderActionMenu](./kibana-plugin-core-public.appmountparameters.setheaderactionmenu.md) | (menuMount: MountPoint \| undefined) => void | A function that can be used to set the mount point used to populate the application action container in the chrome header.Calling the handler multiple time will erase the current content of the action menu with the mount from the latest call. Calling the handler with undefined will unmount the current mount point. Calling the handler after the application has been unmounted will have no effect. | -| [theme$](./kibana-plugin-core-public.appmountparameters.theme_.md) | Observable<CoreTheme> | An observable emitting . Should be used when mounting the application to include theme information. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md deleted file mode 100644 index 67c6d63175591..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md +++ /dev/null @@ -1,45 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) > [onAppLeave](./kibana-plugin-core-public.appmountparameters.onappleave.md) - -## AppMountParameters.onAppLeave property - -> Warning: This API is now obsolete. -> -> [ScopedHistory.block](./kibana-plugin-core-public.scopedhistory.block.md) should be used instead. 8.8.0 -> - -A function that can be used to register a handler that will be called when the user is leaving the current application, allowing to prompt a confirmation message before actually changing the page. - -This will be called either when the user goes to another application, or when trying to close the tab or manually changing the url. - -Signature: - -```typescript -onAppLeave: (handler: AppLeaveHandler) => void; -``` - -## Example - - -```ts -// application.tsx -import React from 'react'; -import ReactDOM from 'react-dom'; -import { BrowserRouter, Route } from 'react-router-dom'; - -import { CoreStart, AppMountParameters } from 'src/core/public'; -import { MyPluginDepsStart } from './plugin'; - -export renderApp = ({ element, history, onAppLeave }: AppMountParameters) => { - const { renderApp, hasUnsavedChanges } = await import('./application'); - onAppLeave(actions => { - if(hasUnsavedChanges()) { - return actions.confirm('Some changes were not saved. Are you sure you want to leave?'); - } - return actions.default(); - }); - return renderApp({ element, history }); -} -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.setheaderactionmenu.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.setheaderactionmenu.md deleted file mode 100644 index 715e1ba4bf291..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.setheaderactionmenu.md +++ /dev/null @@ -1,38 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) > [setHeaderActionMenu](./kibana-plugin-core-public.appmountparameters.setheaderactionmenu.md) - -## AppMountParameters.setHeaderActionMenu property - -A function that can be used to set the mount point used to populate the application action container in the chrome header. - -Calling the handler multiple time will erase the current content of the action menu with the mount from the latest call. Calling the handler with `undefined` will unmount the current mount point. Calling the handler after the application has been unmounted will have no effect. - -Signature: - -```typescript -setHeaderActionMenu: (menuMount: MountPoint | undefined) => void; -``` - -## Example - - -```ts -// application.tsx -import React from 'react'; -import ReactDOM from 'react-dom'; -import { BrowserRouter, Route } from 'react-router-dom'; - -import { CoreStart, AppMountParameters } from 'src/core/public'; -import { MyPluginDepsStart } from './plugin'; - -export renderApp = ({ element, history, setHeaderActionMenu }: AppMountParameters) => { - const { renderApp } = await import('./application'); - const { renderActionMenu } = await import('./action_menu'); - setHeaderActionMenu((element) => { - return renderActionMenu(element); - }) - return renderApp({ element, history }); -} -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.theme_.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.theme_.md deleted file mode 100644 index 7c69f76237361..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.theme_.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) > [theme$](./kibana-plugin-core-public.appmountparameters.theme_.md) - -## AppMountParameters.theme$ property - -An observable emitting . Should be used when mounting the application to include theme information. - -Signature: - -```typescript -theme$: Observable; -``` - -## Example - -When mounting a react application: - -```ts -// application.tsx -import React from 'react'; -import ReactDOM from 'react-dom'; - -import { AppMountParameters } from 'src/core/public'; -import { wrapWithTheme } from 'src/plugins/kibana_react'; -import { MyApp } from './app'; - -export renderApp = ({ element, theme$ }: AppMountParameters) => { - ReactDOM.render(wrapWithTheme(, theme$), element); - return () => ReactDOM.unmountComponentAtNode(element); -} -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.appnavlinkstatus.md b/docs/development/core/public/kibana-plugin-core-public.appnavlinkstatus.md deleted file mode 100644 index 979816249d5cf..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appnavlinkstatus.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppNavLinkStatus](./kibana-plugin-core-public.appnavlinkstatus.md) - -## AppNavLinkStatus enum - -Status of the application's navLink. - -Signature: - -```typescript -export declare enum AppNavLinkStatus -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| default | 0 | The application navLink will be visible if the application's [AppStatus](./kibana-plugin-core-public.appstatus.md) is set to accessible and hidden if the application status is set to inaccessible. | -| disabled | 2 | The application navLink is visible but inactive and not clickable in the navigation bar. | -| hidden | 3 | The application navLink does not appear in the navigation bar. | -| visible | 1 | The application navLink is visible and clickable in the navigation bar. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.euiicontype.md b/docs/development/core/public/kibana-plugin-core-public.appnavoptions.euiicontype.md deleted file mode 100644 index ed9d07cd29861..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.euiicontype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppNavOptions](./kibana-plugin-core-public.appnavoptions.md) > [euiIconType](./kibana-plugin-core-public.appnavoptions.euiicontype.md) - -## AppNavOptions.euiIconType property - -A EUI iconType that will be used for the app's icon. This icon takes precedence over the `icon` property. - -Signature: - -```typescript -euiIconType?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.icon.md b/docs/development/core/public/kibana-plugin-core-public.appnavoptions.icon.md deleted file mode 100644 index 3b809fc4aec39..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.icon.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppNavOptions](./kibana-plugin-core-public.appnavoptions.md) > [icon](./kibana-plugin-core-public.appnavoptions.icon.md) - -## AppNavOptions.icon property - -A URL to an image file used as an icon. Used as a fallback if `euiIconType` is not provided. - -Signature: - -```typescript -icon?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.md b/docs/development/core/public/kibana-plugin-core-public.appnavoptions.md deleted file mode 100644 index c6c583b7a9098..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppNavOptions](./kibana-plugin-core-public.appnavoptions.md) - -## AppNavOptions interface - -App navigation menu options - -Signature: - -```typescript -export interface AppNavOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [euiIconType?](./kibana-plugin-core-public.appnavoptions.euiicontype.md) | string | (Optional) A EUI iconType that will be used for the app's icon. This icon takes precedence over the icon property. | -| [icon?](./kibana-plugin-core-public.appnavoptions.icon.md) | string | (Optional) A URL to an image file used as an icon. Used as a fallback if euiIconType is not provided. | -| [order?](./kibana-plugin-core-public.appnavoptions.order.md) | number | (Optional) An ordinal used to sort nav links relative to one another for display. | -| [tooltip?](./kibana-plugin-core-public.appnavoptions.tooltip.md) | string | (Optional) A tooltip shown when hovering over app link. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.order.md b/docs/development/core/public/kibana-plugin-core-public.appnavoptions.order.md deleted file mode 100644 index ca7ae482a04ad..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.order.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppNavOptions](./kibana-plugin-core-public.appnavoptions.md) > [order](./kibana-plugin-core-public.appnavoptions.order.md) - -## AppNavOptions.order property - -An ordinal used to sort nav links relative to one another for display. - -Signature: - -```typescript -order?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.tooltip.md b/docs/development/core/public/kibana-plugin-core-public.appnavoptions.tooltip.md deleted file mode 100644 index 97c18c2e56a1e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appnavoptions.tooltip.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppNavOptions](./kibana-plugin-core-public.appnavoptions.md) > [tooltip](./kibana-plugin-core-public.appnavoptions.tooltip.md) - -## AppNavOptions.tooltip property - -A tooltip shown when hovering over app link. - -Signature: - -```typescript -tooltip?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appstatus.md b/docs/development/core/public/kibana-plugin-core-public.appstatus.md deleted file mode 100644 index 438d6d7d4728b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appstatus.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppStatus](./kibana-plugin-core-public.appstatus.md) - -## AppStatus enum - -Accessibility status of an application. - -Signature: - -```typescript -export declare enum AppStatus -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| accessible | 0 | Application is accessible. | -| inaccessible | 1 | Application is not accessible. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.appunmount.md b/docs/development/core/public/kibana-plugin-core-public.appunmount.md deleted file mode 100644 index 1c066f67a8ffe..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appunmount.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppUnmount](./kibana-plugin-core-public.appunmount.md) - -## AppUnmount type - -A function called when an application should be unmounted from the page. This function should be synchronous. - -Signature: - -```typescript -export declare type AppUnmount = () => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appupdatablefields.md b/docs/development/core/public/kibana-plugin-core-public.appupdatablefields.md deleted file mode 100644 index c24da05abe7ec..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appupdatablefields.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppUpdatableFields](./kibana-plugin-core-public.appupdatablefields.md) - -## AppUpdatableFields type - -Defines the list of fields that can be updated via an [AppUpdater](./kibana-plugin-core-public.appupdater.md). - -Signature: - -```typescript -export declare type AppUpdatableFields = Pick; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.appupdater.md b/docs/development/core/public/kibana-plugin-core-public.appupdater.md deleted file mode 100644 index 744c52f221da7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.appupdater.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [AppUpdater](./kibana-plugin-core-public.appupdater.md) - -## AppUpdater type - -Updater for applications. see [ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) - -Signature: - -```typescript -export declare type AppUpdater = (app: App) => Partial | undefined; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.capabilities.catalogue.md b/docs/development/core/public/kibana-plugin-core-public.capabilities.catalogue.md deleted file mode 100644 index f31b1b3333175..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.capabilities.catalogue.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Capabilities](./kibana-plugin-core-public.capabilities.md) > [catalogue](./kibana-plugin-core-public.capabilities.catalogue.md) - -## Capabilities.catalogue property - -Catalogue capabilities. Catalogue entries drive the visibility of the Kibana homepage options. - -Signature: - -```typescript -catalogue: Record; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.capabilities.management.md b/docs/development/core/public/kibana-plugin-core-public.capabilities.management.md deleted file mode 100644 index c1f06e692d638..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.capabilities.management.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Capabilities](./kibana-plugin-core-public.capabilities.md) > [management](./kibana-plugin-core-public.capabilities.management.md) - -## Capabilities.management property - -Management section capabilities. - -Signature: - -```typescript -management: { - [sectionId: string]: Record; - }; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.capabilities.md b/docs/development/core/public/kibana-plugin-core-public.capabilities.md deleted file mode 100644 index e908bd554d88d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.capabilities.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Capabilities](./kibana-plugin-core-public.capabilities.md) - -## Capabilities interface - -The read-only set of capabilities available for the current UI session. Capabilities are simple key-value pairs of (string, boolean), where the string denotes the capability ID, and the boolean is a flag indicating if the capability is enabled or disabled. - -Signature: - -```typescript -export interface Capabilities -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [catalogue](./kibana-plugin-core-public.capabilities.catalogue.md) | Record<string, boolean> | Catalogue capabilities. Catalogue entries drive the visibility of the Kibana homepage options. | -| [management](./kibana-plugin-core-public.capabilities.management.md) | { \[sectionId: string\]: Record<string, boolean>; } | Management section capabilities. | -| [navLinks](./kibana-plugin-core-public.capabilities.navlinks.md) | Record<string, boolean> | Navigation link capabilities. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.capabilities.navlinks.md b/docs/development/core/public/kibana-plugin-core-public.capabilities.navlinks.md deleted file mode 100644 index 5f4016ba5a308..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.capabilities.navlinks.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Capabilities](./kibana-plugin-core-public.capabilities.md) > [navLinks](./kibana-plugin-core-public.capabilities.navlinks.md) - -## Capabilities.navLinks property - -Navigation link capabilities. - -Signature: - -```typescript -navLinks: Record; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromebadge.icontype.md b/docs/development/core/public/kibana-plugin-core-public.chromebadge.icontype.md deleted file mode 100644 index 28244a2c9d8c7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromebadge.icontype.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeBadge](./kibana-plugin-core-public.chromebadge.md) > [iconType](./kibana-plugin-core-public.chromebadge.icontype.md) - -## ChromeBadge.iconType property - -Signature: - -```typescript -iconType?: IconType; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromebadge.md b/docs/development/core/public/kibana-plugin-core-public.chromebadge.md deleted file mode 100644 index e2e4d1910fdd5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromebadge.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeBadge](./kibana-plugin-core-public.chromebadge.md) - -## ChromeBadge interface - - -Signature: - -```typescript -export interface ChromeBadge -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [iconType?](./kibana-plugin-core-public.chromebadge.icontype.md) | IconType | (Optional) | -| [text](./kibana-plugin-core-public.chromebadge.text.md) | string | | -| [tooltip](./kibana-plugin-core-public.chromebadge.tooltip.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromebadge.text.md b/docs/development/core/public/kibana-plugin-core-public.chromebadge.text.md deleted file mode 100644 index b2b4e415c24c7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromebadge.text.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeBadge](./kibana-plugin-core-public.chromebadge.md) > [text](./kibana-plugin-core-public.chromebadge.text.md) - -## ChromeBadge.text property - -Signature: - -```typescript -text: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromebadge.tooltip.md b/docs/development/core/public/kibana-plugin-core-public.chromebadge.tooltip.md deleted file mode 100644 index fa22d739e86ee..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromebadge.tooltip.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeBadge](./kibana-plugin-core-public.chromebadge.md) > [tooltip](./kibana-plugin-core-public.chromebadge.tooltip.md) - -## ChromeBadge.tooltip property - -Signature: - -```typescript -tooltip: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromebreadcrumb.md b/docs/development/core/public/kibana-plugin-core-public.chromebreadcrumb.md deleted file mode 100644 index f88e855d436ad..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromebreadcrumb.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeBreadcrumb](./kibana-plugin-core-public.chromebreadcrumb.md) - -## ChromeBreadcrumb type - - -Signature: - -```typescript -export declare type ChromeBreadcrumb = EuiBreadcrumb; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.change.md b/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.change.md deleted file mode 100644 index cf31d16cae0e0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.change.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeDocTitle](./kibana-plugin-core-public.chromedoctitle.md) > [change](./kibana-plugin-core-public.chromedoctitle.change.md) - -## ChromeDocTitle.change() method - -Changes the current document title. - -Signature: - -```typescript -change(newTitle: string | string[]): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| newTitle | string \| string\[\] | The new title to set, either a string or string array | - -Returns: - -void - -## Example - -How to change the title of the document - -```ts -chrome.docTitle.change('My application title') -chrome.docTitle.change(['My application', 'My section']) -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.md b/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.md deleted file mode 100644 index 48e04b648e8d8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.md +++ /dev/null @@ -1,37 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeDocTitle](./kibana-plugin-core-public.chromedoctitle.md) - -## ChromeDocTitle interface - -APIs for accessing and updating the document title. - -Signature: - -```typescript -export interface ChromeDocTitle -``` - -## Example 1 - -How to change the title of the document - -```ts -chrome.docTitle.change('My application') -``` - -## Example 2 - -How to reset the title of the document to it's initial value - -```ts -chrome.docTitle.reset() -``` - -## Methods - -| Method | Description | -| --- | --- | -| [change(newTitle)](./kibana-plugin-core-public.chromedoctitle.change.md) | Changes the current document title. | -| [reset()](./kibana-plugin-core-public.chromedoctitle.reset.md) | Resets the document title to it's initial value. (meaning the one present in the title meta at application load.) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.reset.md b/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.reset.md deleted file mode 100644 index e11635fd6d3f8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.reset.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeDocTitle](./kibana-plugin-core-public.chromedoctitle.md) > [reset](./kibana-plugin-core-public.chromedoctitle.reset.md) - -## ChromeDocTitle.reset() method - -Resets the document title to it's initial value. (meaning the one present in the title meta at application load.) - -Signature: - -```typescript -reset(): void; -``` -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.appname.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.appname.md deleted file mode 100644 index 2ac957095c666..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.appname.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtension](./kibana-plugin-core-public.chromehelpextension.md) > [appName](./kibana-plugin-core-public.chromehelpextension.appname.md) - -## ChromeHelpExtension.appName property - -Provide your plugin's name to create a header for separation - -Signature: - -```typescript -appName: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.content.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.content.md deleted file mode 100644 index 68e05949e9b1b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.content.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtension](./kibana-plugin-core-public.chromehelpextension.md) > [content](./kibana-plugin-core-public.chromehelpextension.content.md) - -## ChromeHelpExtension.content property - -Custom content to occur below the list of links - -Signature: - -```typescript -content?: (element: HTMLDivElement, menuActions: ChromeHelpMenuActions) => () => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.links.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.links.md deleted file mode 100644 index 41a6b638a3360..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.links.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtension](./kibana-plugin-core-public.chromehelpextension.md) > [links](./kibana-plugin-core-public.chromehelpextension.links.md) - -## ChromeHelpExtension.links property - -Creates unified links for sending users to documentation, GitHub, Discuss, or a custom link/button - -Signature: - -```typescript -links?: ChromeHelpExtensionMenuLink[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.md deleted file mode 100644 index 0c038f81edc90..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextension.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtension](./kibana-plugin-core-public.chromehelpextension.md) - -## ChromeHelpExtension interface - - -Signature: - -```typescript -export interface ChromeHelpExtension -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [appName](./kibana-plugin-core-public.chromehelpextension.appname.md) | string | Provide your plugin's name to create a header for separation | -| [content?](./kibana-plugin-core-public.chromehelpextension.content.md) | (element: HTMLDivElement, menuActions: ChromeHelpMenuActions) => () => void | (Optional) Custom content to occur below the list of links | -| [links?](./kibana-plugin-core-public.chromehelpextension.links.md) | ChromeHelpExtensionMenuLink\[\] | (Optional) Creates unified links for sending users to documentation, GitHub, Discuss, or a custom link/button | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionlinkbase.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionlinkbase.md deleted file mode 100644 index 1faef45c0b2b7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionlinkbase.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionLinkBase](./kibana-plugin-core-public.chromehelpextensionlinkbase.md) - -## ChromeHelpExtensionLinkBase type - - -Signature: - -```typescript -export declare type ChromeHelpExtensionLinkBase = Pick; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.content.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.content.md deleted file mode 100644 index dc455ca43d24a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.content.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuCustomLink](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.md) > [content](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.content.md) - -## ChromeHelpExtensionMenuCustomLink.content property - -Content of the button (in lieu of `children`) - -Signature: - -```typescript -content: React.ReactNode; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.href.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.href.md deleted file mode 100644 index feb91acd6d915..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.href.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuCustomLink](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.md) > [href](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.href.md) - -## ChromeHelpExtensionMenuCustomLink.href property - -URL of the link - -Signature: - -```typescript -href: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.linktype.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.linktype.md deleted file mode 100644 index a02b219754042..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.linktype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuCustomLink](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.md) > [linkType](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.linktype.md) - -## ChromeHelpExtensionMenuCustomLink.linkType property - -Extend EuiButtonEmpty to provide extra functionality - -Signature: - -```typescript -linkType: 'custom'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.md deleted file mode 100644 index daf724c72c23e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenucustomlink.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuCustomLink](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.md) - -## ChromeHelpExtensionMenuCustomLink interface - - -Signature: - -```typescript -export interface ChromeHelpExtensionMenuCustomLink extends ChromeHelpExtensionLinkBase -``` -Extends: ChromeHelpExtensionLinkBase - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [content](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.content.md) | React.ReactNode | Content of the button (in lieu of children) | -| [href](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.href.md) | string | URL of the link | -| [linkType](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.linktype.md) | 'custom' | Extend EuiButtonEmpty to provide extra functionality | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.href.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.href.md deleted file mode 100644 index b6714c39a4699..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.href.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuDiscussLink](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md) > [href](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.href.md) - -## ChromeHelpExtensionMenuDiscussLink.href property - -URL to discuss page. i.e. `https://discuss.elastic.co/c/${appName}` - -Signature: - -```typescript -href: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.linktype.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.linktype.md deleted file mode 100644 index 0141677b26a40..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.linktype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuDiscussLink](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md) > [linkType](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.linktype.md) - -## ChromeHelpExtensionMenuDiscussLink.linkType property - -Creates a generic give feedback link with comment icon - -Signature: - -```typescript -linkType: 'discuss'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md deleted file mode 100644 index 3dc32fcb6d87f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuDiscussLink](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md) - -## ChromeHelpExtensionMenuDiscussLink interface - - -Signature: - -```typescript -export interface ChromeHelpExtensionMenuDiscussLink extends ChromeHelpExtensionLinkBase -``` -Extends: ChromeHelpExtensionLinkBase - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [href](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.href.md) | string | URL to discuss page. i.e. https://discuss.elastic.co/c/${appName} | -| [linkType](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.linktype.md) | 'discuss' | Creates a generic give feedback link with comment icon | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.href.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.href.md deleted file mode 100644 index 9897bc6fcd2f7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.href.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuDocumentationLink](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md) > [href](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.href.md) - -## ChromeHelpExtensionMenuDocumentationLink.href property - -URL to documentation page. i.e. `${ELASTIC_WEBSITE_URL}guide/en/kibana/${DOC_LINK_VERSION}/${appName}.html`, - -Signature: - -```typescript -href: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.linktype.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.linktype.md deleted file mode 100644 index b75a70f9518b3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.linktype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuDocumentationLink](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md) > [linkType](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.linktype.md) - -## ChromeHelpExtensionMenuDocumentationLink.linkType property - -Creates a deep-link to app-specific documentation - -Signature: - -```typescript -linkType: 'documentation'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md deleted file mode 100644 index d20b513b1c550..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuDocumentationLink](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md) - -## ChromeHelpExtensionMenuDocumentationLink interface - - -Signature: - -```typescript -export interface ChromeHelpExtensionMenuDocumentationLink extends ChromeHelpExtensionLinkBase -``` -Extends: ChromeHelpExtensionLinkBase - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [href](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.href.md) | string | URL to documentation page. i.e. ${ELASTIC_WEBSITE_URL}guide/en/kibana/${DOC_LINK_VERSION}/${appName}.html, | -| [linkType](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.linktype.md) | 'documentation' | Creates a deep-link to app-specific documentation | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.labels.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.labels.md deleted file mode 100644 index 1976215e7243c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.labels.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuGitHubLink](./kibana-plugin-core-public.chromehelpextensionmenugithublink.md) > [labels](./kibana-plugin-core-public.chromehelpextensionmenugithublink.labels.md) - -## ChromeHelpExtensionMenuGitHubLink.labels property - -Include at least one app-specific label to be applied to the new github issue - -Signature: - -```typescript -labels: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.linktype.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.linktype.md deleted file mode 100644 index b3df27213e5b7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.linktype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuGitHubLink](./kibana-plugin-core-public.chromehelpextensionmenugithublink.md) > [linkType](./kibana-plugin-core-public.chromehelpextensionmenugithublink.linktype.md) - -## ChromeHelpExtensionMenuGitHubLink.linkType property - -Creates a link to a new github issue in the Kibana repo - -Signature: - -```typescript -linkType: 'github'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.md deleted file mode 100644 index 56eee43d26902..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuGitHubLink](./kibana-plugin-core-public.chromehelpextensionmenugithublink.md) - -## ChromeHelpExtensionMenuGitHubLink interface - - -Signature: - -```typescript -export interface ChromeHelpExtensionMenuGitHubLink extends ChromeHelpExtensionLinkBase -``` -Extends: ChromeHelpExtensionLinkBase - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [labels](./kibana-plugin-core-public.chromehelpextensionmenugithublink.labels.md) | string\[\] | Include at least one app-specific label to be applied to the new github issue | -| [linkType](./kibana-plugin-core-public.chromehelpextensionmenugithublink.linktype.md) | 'github' | Creates a link to a new github issue in the Kibana repo | -| [title?](./kibana-plugin-core-public.chromehelpextensionmenugithublink.title.md) | string | (Optional) Provides initial text for the title of the issue | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.title.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.title.md deleted file mode 100644 index af6091f9e7252..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenugithublink.title.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuGitHubLink](./kibana-plugin-core-public.chromehelpextensionmenugithublink.md) > [title](./kibana-plugin-core-public.chromehelpextensionmenugithublink.title.md) - -## ChromeHelpExtensionMenuGitHubLink.title property - -Provides initial text for the title of the issue - -Signature: - -```typescript -title?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenulink.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenulink.md deleted file mode 100644 index cb7d795e3eb8e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpextensionmenulink.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpExtensionMenuLink](./kibana-plugin-core-public.chromehelpextensionmenulink.md) - -## ChromeHelpExtensionMenuLink type - - -Signature: - -```typescript -export declare type ChromeHelpExtensionMenuLink = ChromeHelpExtensionMenuGitHubLink | ChromeHelpExtensionMenuDiscussLink | ChromeHelpExtensionMenuDocumentationLink | ChromeHelpExtensionMenuCustomLink; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.hidehelpmenu.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.hidehelpmenu.md deleted file mode 100644 index bcd67a8fe6f21..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.hidehelpmenu.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpMenuActions](./kibana-plugin-core-public.chromehelpmenuactions.md) > [hideHelpMenu](./kibana-plugin-core-public.chromehelpmenuactions.hidehelpmenu.md) - -## ChromeHelpMenuActions.hideHelpMenu property - -Signature: - -```typescript -hideHelpMenu: () => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.md b/docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.md deleted file mode 100644 index f33581cda5879..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromehelpmenuactions.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeHelpMenuActions](./kibana-plugin-core-public.chromehelpmenuactions.md) - -## ChromeHelpMenuActions interface - - -Signature: - -```typescript -export interface ChromeHelpMenuActions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [hideHelpMenu](./kibana-plugin-core-public.chromehelpmenuactions.hidehelpmenu.md) | () => void | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.md b/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.md deleted file mode 100644 index c0371078c28a4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavControl](./kibana-plugin-core-public.chromenavcontrol.md) - -## ChromeNavControl interface - - -Signature: - -```typescript -export interface ChromeNavControl -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [mount](./kibana-plugin-core-public.chromenavcontrol.mount.md) | MountPoint | | -| [order?](./kibana-plugin-core-public.chromenavcontrol.order.md) | number | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.mount.md b/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.mount.md deleted file mode 100644 index 911fbe2131b52..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.mount.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavControl](./kibana-plugin-core-public.chromenavcontrol.md) > [mount](./kibana-plugin-core-public.chromenavcontrol.mount.md) - -## ChromeNavControl.mount property - -Signature: - -```typescript -mount: MountPoint; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.order.md b/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.order.md deleted file mode 100644 index ca6d865a68e4b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrol.order.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavControl](./kibana-plugin-core-public.chromenavcontrol.md) > [order](./kibana-plugin-core-public.chromenavcontrol.order.md) - -## ChromeNavControl.order property - -Signature: - -```typescript -order?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.md b/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.md deleted file mode 100644 index 72018d46428a4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.md +++ /dev/null @@ -1,35 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavControls](./kibana-plugin-core-public.chromenavcontrols.md) - -## ChromeNavControls interface - -[APIs](./kibana-plugin-core-public.chromenavcontrols.md) for registering new controls to be displayed in the navigation bar. - -Signature: - -```typescript -export interface ChromeNavControls -``` - -## Example - -Register a left-side nav control rendered with React. - -```jsx -chrome.navControls.registerLeft({ - mount(targetDomElement) { - ReactDOM.mount(, targetDomElement); - return () => ReactDOM.unmountComponentAtNode(targetDomElement); - } -}) -``` - -## Methods - -| Method | Description | -| --- | --- | -| [registerCenter(navControl)](./kibana-plugin-core-public.chromenavcontrols.registercenter.md) | Register a nav control to be presented on the top-center side of the chrome header. | -| [registerLeft(navControl)](./kibana-plugin-core-public.chromenavcontrols.registerleft.md) | Register a nav control to be presented on the bottom-left side of the chrome header. | -| [registerRight(navControl)](./kibana-plugin-core-public.chromenavcontrols.registerright.md) | Register a nav control to be presented on the top-right side of the chrome header. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registercenter.md b/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registercenter.md deleted file mode 100644 index 68b243bf47f85..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registercenter.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavControls](./kibana-plugin-core-public.chromenavcontrols.md) > [registerCenter](./kibana-plugin-core-public.chromenavcontrols.registercenter.md) - -## ChromeNavControls.registerCenter() method - -Register a nav control to be presented on the top-center side of the chrome header. - -Signature: - -```typescript -registerCenter(navControl: ChromeNavControl): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| navControl | ChromeNavControl | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerleft.md b/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerleft.md deleted file mode 100644 index ee0789c285f0b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerleft.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavControls](./kibana-plugin-core-public.chromenavcontrols.md) > [registerLeft](./kibana-plugin-core-public.chromenavcontrols.registerleft.md) - -## ChromeNavControls.registerLeft() method - -Register a nav control to be presented on the bottom-left side of the chrome header. - -Signature: - -```typescript -registerLeft(navControl: ChromeNavControl): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| navControl | ChromeNavControl | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerright.md b/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerright.md deleted file mode 100644 index 9091736c62eeb..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.registerright.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavControls](./kibana-plugin-core-public.chromenavcontrols.md) > [registerRight](./kibana-plugin-core-public.chromenavcontrols.registerright.md) - -## ChromeNavControls.registerRight() method - -Register a nav control to be presented on the top-right side of the chrome header. - -Signature: - -```typescript -registerRight(navControl: ChromeNavControl): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| navControl | ChromeNavControl | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.baseurl.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.baseurl.md deleted file mode 100644 index 88dc54cf823b9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.baseurl.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [baseUrl](./kibana-plugin-core-public.chromenavlink.baseurl.md) - -## ChromeNavLink.baseUrl property - -The base route used to open the root of an application. - -Signature: - -```typescript -readonly baseUrl: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.category.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.category.md deleted file mode 100644 index 1da313365f967..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.category.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [category](./kibana-plugin-core-public.chromenavlink.category.md) - -## ChromeNavLink.category property - -The category the app lives in - -Signature: - -```typescript -readonly category?: AppCategory; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.disabled.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.disabled.md deleted file mode 100644 index 2b4d22be187f9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.disabled.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [disabled](./kibana-plugin-core-public.chromenavlink.disabled.md) - -## ChromeNavLink.disabled property - -Disables a link from being clickable. - -Signature: - -```typescript -readonly disabled?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md deleted file mode 100644 index e30e8262f40b2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [euiIconType](./kibana-plugin-core-public.chromenavlink.euiicontype.md) - -## ChromeNavLink.euiIconType property - -A EUI iconType that will be used for the app's icon. This icon takes precedence over the `icon` property. - -Signature: - -```typescript -readonly euiIconType?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.hidden.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.hidden.md deleted file mode 100644 index 8f8be18fa7bfa..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.hidden.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [hidden](./kibana-plugin-core-public.chromenavlink.hidden.md) - -## ChromeNavLink.hidden property - -Hides a link from the navigation. - -Signature: - -```typescript -readonly hidden?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.href.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.href.md deleted file mode 100644 index f51fa7e5b1355..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.href.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [href](./kibana-plugin-core-public.chromenavlink.href.md) - -## ChromeNavLink.href property - -Settled state between `url`, `baseUrl`, and `active` - -Signature: - -```typescript -readonly href: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.icon.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.icon.md deleted file mode 100644 index dbc922b2a9547..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.icon.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [icon](./kibana-plugin-core-public.chromenavlink.icon.md) - -## ChromeNavLink.icon property - -A URL to an image file used as an icon. Used as a fallback if `euiIconType` is not provided. - -Signature: - -```typescript -readonly icon?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.id.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.id.md deleted file mode 100644 index a07f7963539ec..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [id](./kibana-plugin-core-public.chromenavlink.id.md) - -## ChromeNavLink.id property - -A unique identifier for looking up links. - -Signature: - -```typescript -readonly id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.md deleted file mode 100644 index 964f4d4b86aaa..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) - -## ChromeNavLink interface - - -Signature: - -```typescript -export interface ChromeNavLink -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [baseUrl](./kibana-plugin-core-public.chromenavlink.baseurl.md) | string | The base route used to open the root of an application. | -| [category?](./kibana-plugin-core-public.chromenavlink.category.md) | AppCategory | (Optional) The category the app lives in | -| [disabled?](./kibana-plugin-core-public.chromenavlink.disabled.md) | boolean | (Optional) Disables a link from being clickable. | -| [euiIconType?](./kibana-plugin-core-public.chromenavlink.euiicontype.md) | string | (Optional) A EUI iconType that will be used for the app's icon. This icon takes precedence over the icon property. | -| [hidden?](./kibana-plugin-core-public.chromenavlink.hidden.md) | boolean | (Optional) Hides a link from the navigation. | -| [href](./kibana-plugin-core-public.chromenavlink.href.md) | string | Settled state between url, baseUrl, and active | -| [icon?](./kibana-plugin-core-public.chromenavlink.icon.md) | string | (Optional) A URL to an image file used as an icon. Used as a fallback if euiIconType is not provided. | -| [id](./kibana-plugin-core-public.chromenavlink.id.md) | string | A unique identifier for looking up links. | -| [order?](./kibana-plugin-core-public.chromenavlink.order.md) | number | (Optional) An ordinal used to sort nav links relative to one another for display. | -| [title](./kibana-plugin-core-public.chromenavlink.title.md) | string | The title of the application. | -| [tooltip?](./kibana-plugin-core-public.chromenavlink.tooltip.md) | string | (Optional) A tooltip shown when hovering over an app link. | -| [url](./kibana-plugin-core-public.chromenavlink.url.md) | string | The route used to open the default path and the deep links of an application. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.order.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.order.md deleted file mode 100644 index 3597a619a8b20..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.order.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [order](./kibana-plugin-core-public.chromenavlink.order.md) - -## ChromeNavLink.order property - -An ordinal used to sort nav links relative to one another for display. - -Signature: - -```typescript -readonly order?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.title.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.title.md deleted file mode 100644 index 43b1a08755aaf..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.title.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [title](./kibana-plugin-core-public.chromenavlink.title.md) - -## ChromeNavLink.title property - -The title of the application. - -Signature: - -```typescript -readonly title: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.tooltip.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.tooltip.md deleted file mode 100644 index 551667dbbb35e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.tooltip.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [tooltip](./kibana-plugin-core-public.chromenavlink.tooltip.md) - -## ChromeNavLink.tooltip property - -A tooltip shown when hovering over an app link. - -Signature: - -```typescript -readonly tooltip?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.url.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.url.md deleted file mode 100644 index b9d12e450df50..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.url.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [url](./kibana-plugin-core-public.chromenavlink.url.md) - -## ChromeNavLink.url property - -The route used to open the default path and the deep links of an application. - -Signature: - -```typescript -readonly url: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.enableforcedappswitchernavigation.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.enableforcedappswitchernavigation.md deleted file mode 100644 index 4f9b6aaada5db..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.enableforcedappswitchernavigation.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) > [enableForcedAppSwitcherNavigation](./kibana-plugin-core-public.chromenavlinks.enableforcedappswitchernavigation.md) - -## ChromeNavLinks.enableForcedAppSwitcherNavigation() method - -Enable forced navigation mode, which will trigger a page refresh when a nav link is clicked and only the hash is updated. - -Signature: - -```typescript -enableForcedAppSwitcherNavigation(): void; -``` -Returns: - -void - -## Remarks - -This is only necessary when rendering the status page in place of another app, as links to that app will set the current URL and change the hash, but the routes for the correct are not loaded so nothing will happen. https://github.com/elastic/kibana/pull/29770 - -Used only by status\_page plugin - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.get.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.get.md deleted file mode 100644 index 796d99b9b0e0c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.get.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) > [get](./kibana-plugin-core-public.chromenavlinks.get.md) - -## ChromeNavLinks.get() method - -Get the state of a navlink at this point in time. - -Signature: - -```typescript -get(id: string): ChromeNavLink | undefined; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string | | - -Returns: - -ChromeNavLink \| undefined - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getall.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getall.md deleted file mode 100644 index 08d5707fe3251..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getall.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) > [getAll](./kibana-plugin-core-public.chromenavlinks.getall.md) - -## ChromeNavLinks.getAll() method - -Get the current state of all navlinks. - -Signature: - -```typescript -getAll(): Array>; -``` -Returns: - -Array<Readonly<ChromeNavLink>> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getforceappswitchernavigation_.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getforceappswitchernavigation_.md deleted file mode 100644 index 3b87790c37297..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getforceappswitchernavigation_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) > [getForceAppSwitcherNavigation$](./kibana-plugin-core-public.chromenavlinks.getforceappswitchernavigation_.md) - -## ChromeNavLinks.getForceAppSwitcherNavigation$() method - -An observable of the forced app switcher state. - -Signature: - -```typescript -getForceAppSwitcherNavigation$(): Observable; -``` -Returns: - -Observable<boolean> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getnavlinks_.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getnavlinks_.md deleted file mode 100644 index 8ee5c0fb83081..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.getnavlinks_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) > [getNavLinks$](./kibana-plugin-core-public.chromenavlinks.getnavlinks_.md) - -## ChromeNavLinks.getNavLinks$() method - -Get an observable for a sorted list of navlinks. - -Signature: - -```typescript -getNavLinks$(): Observable>>; -``` -Returns: - -Observable<Array<Readonly<ChromeNavLink>>> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.has.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.has.md deleted file mode 100644 index dfaae86a9d891..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.has.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) > [has](./kibana-plugin-core-public.chromenavlinks.has.md) - -## ChromeNavLinks.has() method - -Check whether or not a navlink exists. - -Signature: - -```typescript -has(id: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string | | - -Returns: - -boolean - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.md deleted file mode 100644 index f71eb03d89d72..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinks.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) - -## ChromeNavLinks interface - -[APIs](./kibana-plugin-core-public.chromenavlinks.md) for manipulating nav links. - -Signature: - -```typescript -export interface ChromeNavLinks -``` - -## Methods - -| Method | Description | -| --- | --- | -| [enableForcedAppSwitcherNavigation()](./kibana-plugin-core-public.chromenavlinks.enableforcedappswitchernavigation.md) | Enable forced navigation mode, which will trigger a page refresh when a nav link is clicked and only the hash is updated. | -| [get(id)](./kibana-plugin-core-public.chromenavlinks.get.md) | Get the state of a navlink at this point in time. | -| [getAll()](./kibana-plugin-core-public.chromenavlinks.getall.md) | Get the current state of all navlinks. | -| [getForceAppSwitcherNavigation$()](./kibana-plugin-core-public.chromenavlinks.getforceappswitchernavigation_.md) | An observable of the forced app switcher state. | -| [getNavLinks$()](./kibana-plugin-core-public.chromenavlinks.getnavlinks_.md) | Get an observable for a sorted list of navlinks. | -| [has(id)](./kibana-plugin-core-public.chromenavlinks.has.md) | Check whether or not a navlink exists. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.add.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.add.md deleted file mode 100644 index 5c99c6bf7fbcb..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.add.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessed](./kibana-plugin-core-public.chromerecentlyaccessed.md) > [add](./kibana-plugin-core-public.chromerecentlyaccessed.add.md) - -## ChromeRecentlyAccessed.add() method - -Adds a new item to the recently accessed history. - -Signature: - -```typescript -add(link: string, label: string, id: string): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| link | string | a relative URL to the resource (not including the ) | -| label | string | the label to display in the UI | -| id | string | a unique string used to de-duplicate the recently accessed list. | - -Returns: - -void - -## Example - - -```js -chrome.recentlyAccessed.add('/app/map/1234', 'Map 1234', '1234'); -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get.md deleted file mode 100644 index da696737b3bb7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessed](./kibana-plugin-core-public.chromerecentlyaccessed.md) > [get](./kibana-plugin-core-public.chromerecentlyaccessed.get.md) - -## ChromeRecentlyAccessed.get() method - -Gets an Array of the current recently accessed history. - -Signature: - -```typescript -get(): ChromeRecentlyAccessedHistoryItem[]; -``` -Returns: - -ChromeRecentlyAccessedHistoryItem\[\] - -## Example - - -```js -chrome.recentlyAccessed.get().forEach(console.log); -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get_.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get_.md deleted file mode 100644 index 4655289642f99..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.get_.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessed](./kibana-plugin-core-public.chromerecentlyaccessed.md) > [get$](./kibana-plugin-core-public.chromerecentlyaccessed.get_.md) - -## ChromeRecentlyAccessed.get$() method - -Gets an Observable of the array of recently accessed history. - -Signature: - -```typescript -get$(): Observable; -``` -Returns: - -Observable<ChromeRecentlyAccessedHistoryItem\[\]> - -## Example - - -```js -chrome.recentlyAccessed.get$().subscribe(console.log); -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.md deleted file mode 100644 index 4dad34fe86ed4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessed](./kibana-plugin-core-public.chromerecentlyaccessed.md) - -## ChromeRecentlyAccessed interface - -[APIs](./kibana-plugin-core-public.chromerecentlyaccessed.md) for recently accessed history. - -Signature: - -```typescript -export interface ChromeRecentlyAccessed -``` - -## Methods - -| Method | Description | -| --- | --- | -| [add(link, label, id)](./kibana-plugin-core-public.chromerecentlyaccessed.add.md) | Adds a new item to the recently accessed history. | -| [get()](./kibana-plugin-core-public.chromerecentlyaccessed.get.md) | Gets an Array of the current recently accessed history. | -| [get$()](./kibana-plugin-core-public.chromerecentlyaccessed.get_.md) | Gets an Observable of the array of recently accessed history. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.id.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.id.md deleted file mode 100644 index daf72d7ebd01c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessedHistoryItem](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md) > [id](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.id.md) - -## ChromeRecentlyAccessedHistoryItem.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.label.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.label.md deleted file mode 100644 index 5f55522e4fdf4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.label.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessedHistoryItem](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md) > [label](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.label.md) - -## ChromeRecentlyAccessedHistoryItem.label property - -Signature: - -```typescript -label: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.link.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.link.md deleted file mode 100644 index f4b702ba30c96..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.link.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessedHistoryItem](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md) > [link](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.link.md) - -## ChromeRecentlyAccessedHistoryItem.link property - -Signature: - -```typescript -link: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md b/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md deleted file mode 100644 index 3b67b41d37a35..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeRecentlyAccessedHistoryItem](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md) - -## ChromeRecentlyAccessedHistoryItem interface - - -Signature: - -```typescript -export interface ChromeRecentlyAccessedHistoryItem -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.id.md) | string | | -| [label](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.label.md) | string | | -| [link](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.link.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.doctitle.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.doctitle.md deleted file mode 100644 index c42644eb149c8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.doctitle.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [docTitle](./kibana-plugin-core-public.chromestart.doctitle.md) - -## ChromeStart.docTitle property - -APIs for accessing and updating the document title. - -Signature: - -```typescript -docTitle: ChromeDocTitle; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.getbadge_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.getbadge_.md deleted file mode 100644 index d3dc459bae9de..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.getbadge_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [getBadge$](./kibana-plugin-core-public.chromestart.getbadge_.md) - -## ChromeStart.getBadge$() method - -Get an observable of the current badge - -Signature: - -```typescript -getBadge$(): Observable; -``` -Returns: - -Observable<ChromeBadge \| undefined> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbs_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbs_.md deleted file mode 100644 index c4d3751549b16..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbs_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [getBreadcrumbs$](./kibana-plugin-core-public.chromestart.getbreadcrumbs_.md) - -## ChromeStart.getBreadcrumbs$() method - -Get an observable of the current list of breadcrumbs - -Signature: - -```typescript -getBreadcrumbs$(): Observable; -``` -Returns: - -Observable<ChromeBreadcrumb\[\]> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbsappendextension_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbsappendextension_.md deleted file mode 100644 index 21c12514debec..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.getbreadcrumbsappendextension_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [getBreadcrumbsAppendExtension$](./kibana-plugin-core-public.chromestart.getbreadcrumbsappendextension_.md) - -## ChromeStart.getBreadcrumbsAppendExtension$() method - -Get an observable of the current extension appended to breadcrumbs - -Signature: - -```typescript -getBreadcrumbsAppendExtension$(): Observable; -``` -Returns: - -Observable<ChromeBreadcrumbsAppendExtension \| undefined> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.getcustomnavlink_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.getcustomnavlink_.md deleted file mode 100644 index 59346a409562e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.getcustomnavlink_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [getCustomNavLink$](./kibana-plugin-core-public.chromestart.getcustomnavlink_.md) - -## ChromeStart.getCustomNavLink$() method - -Get an observable of the current custom nav link - -Signature: - -```typescript -getCustomNavLink$(): Observable | undefined>; -``` -Returns: - -Observable<Partial<ChromeNavLink> \| undefined> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.gethelpextension_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.gethelpextension_.md deleted file mode 100644 index 052bbe2630f70..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.gethelpextension_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [getHelpExtension$](./kibana-plugin-core-public.chromestart.gethelpextension_.md) - -## ChromeStart.getHelpExtension$() method - -Get an observable of the current custom help conttent - -Signature: - -```typescript -getHelpExtension$(): Observable; -``` -Returns: - -Observable<ChromeHelpExtension \| undefined> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.getisnavdrawerlocked_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.getisnavdrawerlocked_.md deleted file mode 100644 index 12aa71366aaac..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.getisnavdrawerlocked_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [getIsNavDrawerLocked$](./kibana-plugin-core-public.chromestart.getisnavdrawerlocked_.md) - -## ChromeStart.getIsNavDrawerLocked$() method - -Get an observable of the current locked state of the nav drawer. - -Signature: - -```typescript -getIsNavDrawerLocked$(): Observable; -``` -Returns: - -Observable<boolean> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.getisvisible_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.getisvisible_.md deleted file mode 100644 index 70a9c832926e1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.getisvisible_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [getIsVisible$](./kibana-plugin-core-public.chromestart.getisvisible_.md) - -## ChromeStart.getIsVisible$() method - -Get an observable of the current visibility state of the chrome. - -Signature: - -```typescript -getIsVisible$(): Observable; -``` -Returns: - -Observable<boolean> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.hasheaderbanner_.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.hasheaderbanner_.md deleted file mode 100644 index 66dd1e2562f50..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.hasheaderbanner_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [hasHeaderBanner$](./kibana-plugin-core-public.chromestart.hasheaderbanner_.md) - -## ChromeStart.hasHeaderBanner$() method - -Get an observable of the current header banner presence state. - -Signature: - -```typescript -hasHeaderBanner$(): Observable; -``` -Returns: - -Observable<boolean> - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.md deleted file mode 100644 index 3e672fbc14d75..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.md +++ /dev/null @@ -1,67 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) - -## ChromeStart interface - -ChromeStart allows plugins to customize the global chrome header UI and enrich the UX with additional information about the current location of the browser. - -Signature: - -```typescript -export interface ChromeStart -``` - -## Remarks - -While ChromeStart exposes many APIs, they should be used sparingly and the developer should understand how they affect other plugins and applications. - -## Example 1 - -How to add a recently accessed item to the sidebar: - -```ts -core.chrome.recentlyAccessed.add('/app/map/1234', 'Map 1234', '1234'); -``` - -## Example 2 - -How to set the help dropdown extension: - -```tsx -core.chrome.setHelpExtension(elem => { - ReactDOM.render(, elem); - return () => ReactDOM.unmountComponentAtNode(elem); -}); -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [docTitle](./kibana-plugin-core-public.chromestart.doctitle.md) | ChromeDocTitle | APIs for accessing and updating the document title. | -| [navControls](./kibana-plugin-core-public.chromestart.navcontrols.md) | ChromeNavControls | [APIs](./kibana-plugin-core-public.chromenavcontrols.md) for registering new controls to be displayed in the navigation bar. | -| [navLinks](./kibana-plugin-core-public.chromestart.navlinks.md) | ChromeNavLinks | [APIs](./kibana-plugin-core-public.chromenavlinks.md) for manipulating nav links. | -| [recentlyAccessed](./kibana-plugin-core-public.chromestart.recentlyaccessed.md) | ChromeRecentlyAccessed | [APIs](./kibana-plugin-core-public.chromerecentlyaccessed.md) for recently accessed history. | - -## Methods - -| Method | Description | -| --- | --- | -| [getBadge$()](./kibana-plugin-core-public.chromestart.getbadge_.md) | Get an observable of the current badge | -| [getBreadcrumbs$()](./kibana-plugin-core-public.chromestart.getbreadcrumbs_.md) | Get an observable of the current list of breadcrumbs | -| [getBreadcrumbsAppendExtension$()](./kibana-plugin-core-public.chromestart.getbreadcrumbsappendextension_.md) | Get an observable of the current extension appended to breadcrumbs | -| [getCustomNavLink$()](./kibana-plugin-core-public.chromestart.getcustomnavlink_.md) | Get an observable of the current custom nav link | -| [getHelpExtension$()](./kibana-plugin-core-public.chromestart.gethelpextension_.md) | Get an observable of the current custom help conttent | -| [getIsNavDrawerLocked$()](./kibana-plugin-core-public.chromestart.getisnavdrawerlocked_.md) | Get an observable of the current locked state of the nav drawer. | -| [getIsVisible$()](./kibana-plugin-core-public.chromestart.getisvisible_.md) | Get an observable of the current visibility state of the chrome. | -| [hasHeaderBanner$()](./kibana-plugin-core-public.chromestart.hasheaderbanner_.md) | Get an observable of the current header banner presence state. | -| [setBadge(badge)](./kibana-plugin-core-public.chromestart.setbadge.md) | Override the current badge | -| [setBreadcrumbs(newBreadcrumbs)](./kibana-plugin-core-public.chromestart.setbreadcrumbs.md) | Override the current set of breadcrumbs | -| [setBreadcrumbsAppendExtension(breadcrumbsAppendExtension)](./kibana-plugin-core-public.chromestart.setbreadcrumbsappendextension.md) | Mount an element next to the last breadcrumb | -| [setCustomNavLink(newCustomNavLink)](./kibana-plugin-core-public.chromestart.setcustomnavlink.md) | Override the current set of custom nav link | -| [setHeaderBanner(headerBanner)](./kibana-plugin-core-public.chromestart.setheaderbanner.md) | Set the banner that will appear on top of the chrome header. | -| [setHelpExtension(helpExtension)](./kibana-plugin-core-public.chromestart.sethelpextension.md) | Override the current set of custom help content | -| [setHelpSupportUrl(url)](./kibana-plugin-core-public.chromestart.sethelpsupporturl.md) | Override the default support URL shown in the help menu | -| [setIsVisible(isVisible)](./kibana-plugin-core-public.chromestart.setisvisible.md) | Set the temporary visibility for the chrome. This does nothing if the chrome is hidden by default and should be used to hide the chrome for things like full-screen modes with an exit button. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.navcontrols.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.navcontrols.md deleted file mode 100644 index f2433d98066d9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.navcontrols.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [navControls](./kibana-plugin-core-public.chromestart.navcontrols.md) - -## ChromeStart.navControls property - -[APIs](./kibana-plugin-core-public.chromenavcontrols.md) for registering new controls to be displayed in the navigation bar. - -Signature: - -```typescript -navControls: ChromeNavControls; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.navlinks.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.navlinks.md deleted file mode 100644 index fb9222abbb211..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.navlinks.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [navLinks](./kibana-plugin-core-public.chromestart.navlinks.md) - -## ChromeStart.navLinks property - -[APIs](./kibana-plugin-core-public.chromenavlinks.md) for manipulating nav links. - -Signature: - -```typescript -navLinks: ChromeNavLinks; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.recentlyaccessed.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.recentlyaccessed.md deleted file mode 100644 index 4eabb5bf0ba23..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.recentlyaccessed.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [recentlyAccessed](./kibana-plugin-core-public.chromestart.recentlyaccessed.md) - -## ChromeStart.recentlyAccessed property - -[APIs](./kibana-plugin-core-public.chromerecentlyaccessed.md) for recently accessed history. - -Signature: - -```typescript -recentlyAccessed: ChromeRecentlyAccessed; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.setbadge.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.setbadge.md deleted file mode 100644 index 7e974b139d141..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.setbadge.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setBadge](./kibana-plugin-core-public.chromestart.setbadge.md) - -## ChromeStart.setBadge() method - -Override the current badge - -Signature: - -```typescript -setBadge(badge?: ChromeBadge): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| badge | ChromeBadge | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbs.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbs.md deleted file mode 100644 index f44e3e6cfd562..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbs.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setBreadcrumbs](./kibana-plugin-core-public.chromestart.setbreadcrumbs.md) - -## ChromeStart.setBreadcrumbs() method - -Override the current set of breadcrumbs - -Signature: - -```typescript -setBreadcrumbs(newBreadcrumbs: ChromeBreadcrumb[]): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| newBreadcrumbs | ChromeBreadcrumb\[\] | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbsappendextension.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbsappendextension.md deleted file mode 100644 index b8fa965f2726e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbsappendextension.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setBreadcrumbsAppendExtension](./kibana-plugin-core-public.chromestart.setbreadcrumbsappendextension.md) - -## ChromeStart.setBreadcrumbsAppendExtension() method - -Mount an element next to the last breadcrumb - -Signature: - -```typescript -setBreadcrumbsAppendExtension(breadcrumbsAppendExtension?: ChromeBreadcrumbsAppendExtension): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| breadcrumbsAppendExtension | ChromeBreadcrumbsAppendExtension | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.setcustomnavlink.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.setcustomnavlink.md deleted file mode 100644 index 7b100a25a4b2b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.setcustomnavlink.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setCustomNavLink](./kibana-plugin-core-public.chromestart.setcustomnavlink.md) - -## ChromeStart.setCustomNavLink() method - -Override the current set of custom nav link - -Signature: - -```typescript -setCustomNavLink(newCustomNavLink?: Partial): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| newCustomNavLink | Partial<ChromeNavLink> | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.setheaderbanner.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.setheaderbanner.md deleted file mode 100644 index 75f711c0bf10b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.setheaderbanner.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setHeaderBanner](./kibana-plugin-core-public.chromestart.setheaderbanner.md) - -## ChromeStart.setHeaderBanner() method - -Set the banner that will appear on top of the chrome header. - -Signature: - -```typescript -setHeaderBanner(headerBanner?: ChromeUserBanner): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| headerBanner | ChromeUserBanner | | - -Returns: - -void - -## Remarks - -Using `undefined` when invoking this API will remove the banner. - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpextension.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpextension.md deleted file mode 100644 index c2bc691349f3c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpextension.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setHelpExtension](./kibana-plugin-core-public.chromestart.sethelpextension.md) - -## ChromeStart.setHelpExtension() method - -Override the current set of custom help content - -Signature: - -```typescript -setHelpExtension(helpExtension?: ChromeHelpExtension): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| helpExtension | ChromeHelpExtension | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpsupporturl.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpsupporturl.md deleted file mode 100644 index baeb37a89ca44..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpsupporturl.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setHelpSupportUrl](./kibana-plugin-core-public.chromestart.sethelpsupporturl.md) - -## ChromeStart.setHelpSupportUrl() method - -Override the default support URL shown in the help menu - -Signature: - -```typescript -setHelpSupportUrl(url: string): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| url | string | The updated support URL | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.setisvisible.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.setisvisible.md deleted file mode 100644 index 9c8cc737bea4f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromestart.setisvisible.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setIsVisible](./kibana-plugin-core-public.chromestart.setisvisible.md) - -## ChromeStart.setIsVisible() method - -Set the temporary visibility for the chrome. This does nothing if the chrome is hidden by default and should be used to hide the chrome for things like full-screen modes with an exit button. - -Signature: - -```typescript -setIsVisible(isVisible: boolean): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| isVisible | boolean | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.content.md b/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.content.md deleted file mode 100644 index 7a77fdc6223de..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.content.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeUserBanner](./kibana-plugin-core-public.chromeuserbanner.md) > [content](./kibana-plugin-core-public.chromeuserbanner.content.md) - -## ChromeUserBanner.content property - -Signature: - -```typescript -content: MountPoint; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.md b/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.md deleted file mode 100644 index 0417197ab55f3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeUserBanner](./kibana-plugin-core-public.chromeuserbanner.md) - -## ChromeUserBanner interface - - -Signature: - -```typescript -export interface ChromeUserBanner -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [content](./kibana-plugin-core-public.chromeuserbanner.content.md) | MountPoint<HTMLDivElement> | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.analytics.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.analytics.md deleted file mode 100644 index 209a4e862589b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.analytics.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [analytics](./kibana-plugin-core-public.coresetup.analytics.md) - -## CoreSetup.analytics property - - -Signature: - -```typescript -analytics: AnalyticsServiceSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.application.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.application.md deleted file mode 100644 index 70a1f3780577c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.application.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [application](./kibana-plugin-core-public.coresetup.application.md) - -## CoreSetup.application property - -[ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) - -Signature: - -```typescript -application: ApplicationSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.executioncontext.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.executioncontext.md deleted file mode 100644 index be5689ad7b080..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.executioncontext.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [executionContext](./kibana-plugin-core-public.coresetup.executioncontext.md) - -## CoreSetup.executionContext property - -[ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) - -Signature: - -```typescript -executionContext: ExecutionContextSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.fatalerrors.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.fatalerrors.md deleted file mode 100644 index 86f734c4b5c06..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.fatalerrors.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [fatalErrors](./kibana-plugin-core-public.coresetup.fatalerrors.md) - -## CoreSetup.fatalErrors property - -[FatalErrorsSetup](./kibana-plugin-core-public.fatalerrorssetup.md) - -Signature: - -```typescript -fatalErrors: FatalErrorsSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.getstartservices.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.getstartservices.md deleted file mode 100644 index 8664ad0e2a0e5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.getstartservices.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [getStartServices](./kibana-plugin-core-public.coresetup.getstartservices.md) - -## CoreSetup.getStartServices property - -[StartServicesAccessor](./kibana-plugin-core-public.startservicesaccessor.md) - -Signature: - -```typescript -getStartServices: StartServicesAccessor; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.http.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.http.md deleted file mode 100644 index d9b2599b0f80a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.http.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [http](./kibana-plugin-core-public.coresetup.http.md) - -## CoreSetup.http property - -[HttpSetup](./kibana-plugin-core-public.httpsetup.md) - -Signature: - -```typescript -http: HttpSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.injectedmetadata.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.injectedmetadata.md deleted file mode 100644 index 661702f2d466e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.injectedmetadata.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [injectedMetadata](./kibana-plugin-core-public.coresetup.injectedmetadata.md) - -## CoreSetup.injectedMetadata property - - -Signature: - -```typescript -injectedMetadata: InjectedMetadataSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.md deleted file mode 100644 index 051aa0218eca7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) - -## CoreSetup interface - -Core services exposed to the `Plugin` setup lifecycle - -Signature: - -```typescript -export interface CoreSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [analytics](./kibana-plugin-core-public.coresetup.analytics.md) | AnalyticsServiceSetup | | -| [application](./kibana-plugin-core-public.coresetup.application.md) | ApplicationSetup | [ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) | -| [executionContext](./kibana-plugin-core-public.coresetup.executioncontext.md) | ExecutionContextSetup | [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) | -| [fatalErrors](./kibana-plugin-core-public.coresetup.fatalerrors.md) | FatalErrorsSetup | [FatalErrorsSetup](./kibana-plugin-core-public.fatalerrorssetup.md) | -| [getStartServices](./kibana-plugin-core-public.coresetup.getstartservices.md) | StartServicesAccessor<TPluginsStart, TStart> | [StartServicesAccessor](./kibana-plugin-core-public.startservicesaccessor.md) | -| [http](./kibana-plugin-core-public.coresetup.http.md) | HttpSetup | [HttpSetup](./kibana-plugin-core-public.httpsetup.md) | -| [injectedMetadata](./kibana-plugin-core-public.coresetup.injectedmetadata.md) | InjectedMetadataSetup | | -| [notifications](./kibana-plugin-core-public.coresetup.notifications.md) | NotificationsSetup | [NotificationsSetup](./kibana-plugin-core-public.notificationssetup.md) | -| [theme](./kibana-plugin-core-public.coresetup.theme.md) | ThemeServiceSetup | | -| [uiSettings](./kibana-plugin-core-public.coresetup.uisettings.md) | IUiSettingsClient | [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.notifications.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.notifications.md deleted file mode 100644 index 9f5770539c83e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.notifications.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [notifications](./kibana-plugin-core-public.coresetup.notifications.md) - -## CoreSetup.notifications property - -[NotificationsSetup](./kibana-plugin-core-public.notificationssetup.md) - -Signature: - -```typescript -notifications: NotificationsSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.theme.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.theme.md deleted file mode 100644 index d1db31894563e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.theme.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [theme](./kibana-plugin-core-public.coresetup.theme.md) - -## CoreSetup.theme property - - -Signature: - -```typescript -theme: ThemeServiceSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.coresetup.uisettings.md b/docs/development/core/public/kibana-plugin-core-public.coresetup.uisettings.md deleted file mode 100644 index 60a7a2a984ba8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.coresetup.uisettings.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreSetup](./kibana-plugin-core-public.coresetup.md) > [uiSettings](./kibana-plugin-core-public.coresetup.uisettings.md) - -## CoreSetup.uiSettings property - -[IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) - -Signature: - -```typescript -uiSettings: IUiSettingsClient; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.analytics.md b/docs/development/core/public/kibana-plugin-core-public.corestart.analytics.md deleted file mode 100644 index 0a12fa8e26164..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.analytics.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [analytics](./kibana-plugin-core-public.corestart.analytics.md) - -## CoreStart.analytics property - - -Signature: - -```typescript -analytics: AnalyticsServiceStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.application.md b/docs/development/core/public/kibana-plugin-core-public.corestart.application.md deleted file mode 100644 index 95c1360098afe..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.application.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [application](./kibana-plugin-core-public.corestart.application.md) - -## CoreStart.application property - -[ApplicationStart](./kibana-plugin-core-public.applicationstart.md) - -Signature: - -```typescript -application: ApplicationStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.chrome.md b/docs/development/core/public/kibana-plugin-core-public.corestart.chrome.md deleted file mode 100644 index 38d72c54db264..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.chrome.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [chrome](./kibana-plugin-core-public.corestart.chrome.md) - -## CoreStart.chrome property - -[ChromeStart](./kibana-plugin-core-public.chromestart.md) - -Signature: - -```typescript -chrome: ChromeStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.deprecations.md b/docs/development/core/public/kibana-plugin-core-public.corestart.deprecations.md deleted file mode 100644 index 624c4868d54a7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.deprecations.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [deprecations](./kibana-plugin-core-public.corestart.deprecations.md) - -## CoreStart.deprecations property - -[DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) - -Signature: - -```typescript -deprecations: DeprecationsServiceStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.doclinks.md b/docs/development/core/public/kibana-plugin-core-public.corestart.doclinks.md deleted file mode 100644 index 014e40b3e2203..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.doclinks.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [docLinks](./kibana-plugin-core-public.corestart.doclinks.md) - -## CoreStart.docLinks property - - -Signature: - -```typescript -docLinks: DocLinksStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.executioncontext.md b/docs/development/core/public/kibana-plugin-core-public.corestart.executioncontext.md deleted file mode 100644 index 4a2239ee6a738..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.executioncontext.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [executionContext](./kibana-plugin-core-public.corestart.executioncontext.md) - -## CoreStart.executionContext property - -[ExecutionContextStart](./kibana-plugin-core-public.executioncontextstart.md) - -Signature: - -```typescript -executionContext: ExecutionContextStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.fatalerrors.md b/docs/development/core/public/kibana-plugin-core-public.corestart.fatalerrors.md deleted file mode 100644 index 609d710618386..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.fatalerrors.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [fatalErrors](./kibana-plugin-core-public.corestart.fatalerrors.md) - -## CoreStart.fatalErrors property - -[FatalErrorsStart](./kibana-plugin-core-public.fatalerrorsstart.md) - -Signature: - -```typescript -fatalErrors: FatalErrorsStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.http.md b/docs/development/core/public/kibana-plugin-core-public.corestart.http.md deleted file mode 100644 index b2123d149762d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.http.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [http](./kibana-plugin-core-public.corestart.http.md) - -## CoreStart.http property - -[HttpStart](./kibana-plugin-core-public.httpstart.md) - -Signature: - -```typescript -http: HttpStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.i18n.md b/docs/development/core/public/kibana-plugin-core-public.corestart.i18n.md deleted file mode 100644 index 22ded9881e57e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.i18n.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [i18n](./kibana-plugin-core-public.corestart.i18n.md) - -## CoreStart.i18n property - -[I18nStart](./kibana-plugin-core-public.i18nstart.md) - -Signature: - -```typescript -i18n: I18nStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.injectedmetadata.md b/docs/development/core/public/kibana-plugin-core-public.corestart.injectedmetadata.md deleted file mode 100644 index 57fadf8ea3354..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.injectedmetadata.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [injectedMetadata](./kibana-plugin-core-public.corestart.injectedmetadata.md) - -## CoreStart.injectedMetadata property - - -Signature: - -```typescript -injectedMetadata: InjectedMetadataStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.md b/docs/development/core/public/kibana-plugin-core-public.corestart.md deleted file mode 100644 index 3ced931f53c7e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.md +++ /dev/null @@ -1,34 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) - -## CoreStart interface - -Core services exposed to the `Plugin` start lifecycle - -Signature: - -```typescript -export interface CoreStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [analytics](./kibana-plugin-core-public.corestart.analytics.md) | AnalyticsServiceStart | | -| [application](./kibana-plugin-core-public.corestart.application.md) | ApplicationStart | [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) | -| [chrome](./kibana-plugin-core-public.corestart.chrome.md) | ChromeStart | [ChromeStart](./kibana-plugin-core-public.chromestart.md) | -| [deprecations](./kibana-plugin-core-public.corestart.deprecations.md) | DeprecationsServiceStart | [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) | -| [docLinks](./kibana-plugin-core-public.corestart.doclinks.md) | DocLinksStart | | -| [executionContext](./kibana-plugin-core-public.corestart.executioncontext.md) | ExecutionContextStart | [ExecutionContextStart](./kibana-plugin-core-public.executioncontextstart.md) | -| [fatalErrors](./kibana-plugin-core-public.corestart.fatalerrors.md) | FatalErrorsStart | [FatalErrorsStart](./kibana-plugin-core-public.fatalerrorsstart.md) | -| [http](./kibana-plugin-core-public.corestart.http.md) | HttpStart | [HttpStart](./kibana-plugin-core-public.httpstart.md) | -| [i18n](./kibana-plugin-core-public.corestart.i18n.md) | I18nStart | [I18nStart](./kibana-plugin-core-public.i18nstart.md) | -| [injectedMetadata](./kibana-plugin-core-public.corestart.injectedmetadata.md) | InjectedMetadataStart | | -| [notifications](./kibana-plugin-core-public.corestart.notifications.md) | NotificationsStart | [NotificationsStart](./kibana-plugin-core-public.notificationsstart.md) | -| [overlays](./kibana-plugin-core-public.corestart.overlays.md) | OverlayStart | [OverlayStart](./kibana-plugin-core-public.overlaystart.md) | -| [savedObjects](./kibana-plugin-core-public.corestart.savedobjects.md) | SavedObjectsStart | [SavedObjectsStart](./kibana-plugin-core-public.savedobjectsstart.md) | -| [theme](./kibana-plugin-core-public.corestart.theme.md) | ThemeServiceStart | | -| [uiSettings](./kibana-plugin-core-public.corestart.uisettings.md) | IUiSettingsClient | [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.notifications.md b/docs/development/core/public/kibana-plugin-core-public.corestart.notifications.md deleted file mode 100644 index 4e4e509e88e81..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.notifications.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [notifications](./kibana-plugin-core-public.corestart.notifications.md) - -## CoreStart.notifications property - -[NotificationsStart](./kibana-plugin-core-public.notificationsstart.md) - -Signature: - -```typescript -notifications: NotificationsStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.overlays.md b/docs/development/core/public/kibana-plugin-core-public.corestart.overlays.md deleted file mode 100644 index d65ac50b495ba..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.overlays.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [overlays](./kibana-plugin-core-public.corestart.overlays.md) - -## CoreStart.overlays property - -[OverlayStart](./kibana-plugin-core-public.overlaystart.md) - -Signature: - -```typescript -overlays: OverlayStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.savedobjects.md b/docs/development/core/public/kibana-plugin-core-public.corestart.savedobjects.md deleted file mode 100644 index 5216367abe293..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.savedobjects.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [savedObjects](./kibana-plugin-core-public.corestart.savedobjects.md) - -## CoreStart.savedObjects property - -[SavedObjectsStart](./kibana-plugin-core-public.savedobjectsstart.md) - -Signature: - -```typescript -savedObjects: SavedObjectsStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.theme.md b/docs/development/core/public/kibana-plugin-core-public.corestart.theme.md deleted file mode 100644 index 6482581805b46..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.theme.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [theme](./kibana-plugin-core-public.corestart.theme.md) - -## CoreStart.theme property - - -Signature: - -```typescript -theme: ThemeServiceStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.corestart.uisettings.md b/docs/development/core/public/kibana-plugin-core-public.corestart.uisettings.md deleted file mode 100644 index 48348a5843963..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.corestart.uisettings.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [CoreStart](./kibana-plugin-core-public.corestart.md) > [uiSettings](./kibana-plugin-core-public.corestart.uisettings.md) - -## CoreStart.uiSettings property - -[IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) - -Signature: - -```typescript -uiSettings: IUiSettingsClient; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getalldeprecations.md b/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getalldeprecations.md deleted file mode 100644 index 8175da8a1893a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getalldeprecations.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) > [getAllDeprecations](./kibana-plugin-core-public.deprecationsservicestart.getalldeprecations.md) - -## DeprecationsServiceStart.getAllDeprecations property - -Grabs deprecations details for all domains. - -Signature: - -```typescript -getAllDeprecations: () => Promise; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getdeprecations.md b/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getdeprecations.md deleted file mode 100644 index 6e3472b7c3fe3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.getdeprecations.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) > [getDeprecations](./kibana-plugin-core-public.deprecationsservicestart.getdeprecations.md) - -## DeprecationsServiceStart.getDeprecations property - -Grabs deprecations for a specific domain. - -Signature: - -```typescript -getDeprecations: (domainId: string) => Promise; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.isdeprecationresolvable.md b/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.isdeprecationresolvable.md deleted file mode 100644 index 842761f6b7cea..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.isdeprecationresolvable.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) > [isDeprecationResolvable](./kibana-plugin-core-public.deprecationsservicestart.isdeprecationresolvable.md) - -## DeprecationsServiceStart.isDeprecationResolvable property - -Returns a boolean if the provided deprecation can be automatically resolvable. - -Signature: - -```typescript -isDeprecationResolvable: (details: DomainDeprecationDetails) => boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.md b/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.md deleted file mode 100644 index bfc1d78f4d045..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) - -## DeprecationsServiceStart interface - -DeprecationsService provides methods to fetch domain deprecation details from the Kibana server. - -Signature: - -```typescript -export interface DeprecationsServiceStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [getAllDeprecations](./kibana-plugin-core-public.deprecationsservicestart.getalldeprecations.md) | () => Promise<DomainDeprecationDetails\[\]> | Grabs deprecations details for all domains. | -| [getDeprecations](./kibana-plugin-core-public.deprecationsservicestart.getdeprecations.md) | (domainId: string) => Promise<DomainDeprecationDetails\[\]> | Grabs deprecations for a specific domain. | -| [isDeprecationResolvable](./kibana-plugin-core-public.deprecationsservicestart.isdeprecationresolvable.md) | (details: DomainDeprecationDetails) => boolean | Returns a boolean if the provided deprecation can be automatically resolvable. | -| [resolveDeprecation](./kibana-plugin-core-public.deprecationsservicestart.resolvedeprecation.md) | (details: DomainDeprecationDetails) => Promise<ResolveDeprecationResponse> | Calls the correctiveActions.api to automatically resolve the depprecation. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.resolvedeprecation.md b/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.resolvedeprecation.md deleted file mode 100644 index fae623fed3cc2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.deprecationsservicestart.resolvedeprecation.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) > [resolveDeprecation](./kibana-plugin-core-public.deprecationsservicestart.resolvedeprecation.md) - -## DeprecationsServiceStart.resolveDeprecation property - -Calls the correctiveActions.api to automatically resolve the depprecation. - -Signature: - -```typescript -resolveDeprecation: (details: DomainDeprecationDetails) => Promise; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.md b/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.md deleted file mode 100644 index c2bddc58d9c3b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ErrorToastOptions](./kibana-plugin-core-public.errortoastoptions.md) - -## ErrorToastOptions interface - -Options available for [IToasts](./kibana-plugin-core-public.itoasts.md) error APIs. - -Signature: - -```typescript -export interface ErrorToastOptions extends ToastOptions -``` -Extends: ToastOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [title](./kibana-plugin-core-public.errortoastoptions.title.md) | string | The title of the toast and the dialog when expanding the message. | -| [toastMessage?](./kibana-plugin-core-public.errortoastoptions.toastmessage.md) | string | (Optional) The message to be shown in the toast. If this is not specified the error's message will be shown in the toast instead. Overwriting that message can be used to provide more user-friendly toasts. If you specify this, the error message will still be shown in the detailed error modal. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.title.md b/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.title.md deleted file mode 100644 index bad316896cf5c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.title.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ErrorToastOptions](./kibana-plugin-core-public.errortoastoptions.md) > [title](./kibana-plugin-core-public.errortoastoptions.title.md) - -## ErrorToastOptions.title property - -The title of the toast and the dialog when expanding the message. - -Signature: - -```typescript -title: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.toastmessage.md b/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.toastmessage.md deleted file mode 100644 index a96143a94b211..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.errortoastoptions.toastmessage.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ErrorToastOptions](./kibana-plugin-core-public.errortoastoptions.md) > [toastMessage](./kibana-plugin-core-public.errortoastoptions.toastmessage.md) - -## ErrorToastOptions.toastMessage property - -The message to be shown in the toast. If this is not specified the error's message will be shown in the toast instead. Overwriting that message can be used to provide more user-friendly toasts. If you specify this, the error message will still be shown in the detailed error modal. - -Signature: - -```typescript -toastMessage?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.clear.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.clear.md deleted file mode 100644 index 94936b94d0710..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.clear.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) > [clear](./kibana-plugin-core-public.executioncontextsetup.clear.md) - -## ExecutionContextSetup.clear() method - -clears the context - -Signature: - -```typescript -clear(): void; -``` -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.context_.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.context_.md deleted file mode 100644 index d6c74db6d603e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.context_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) > [context$](./kibana-plugin-core-public.executioncontextsetup.context_.md) - -## ExecutionContextSetup.context$ property - -The current context observable - -Signature: - -```typescript -context$: Observable; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.get.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.get.md deleted file mode 100644 index 65e9b1218649d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.get.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) > [get](./kibana-plugin-core-public.executioncontextsetup.get.md) - -## ExecutionContextSetup.get() method - -Get the current top level context - -Signature: - -```typescript -get(): KibanaExecutionContext; -``` -Returns: - -KibanaExecutionContext - diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.getaslabels.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.getaslabels.md deleted file mode 100644 index 0f0bda4e2913e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.getaslabels.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) > [getAsLabels](./kibana-plugin-core-public.executioncontextsetup.getaslabels.md) - -## ExecutionContextSetup.getAsLabels() method - -returns apm labels - -Signature: - -```typescript -getAsLabels(): Labels; -``` -Returns: - -Labels - diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.md deleted file mode 100644 index 01581d2e80a5c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) - -## ExecutionContextSetup interface - -Kibana execution context. Used to provide execution context to Elasticsearch, reporting, performance monitoring, etc. - -Signature: - -```typescript -export interface ExecutionContextSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [context$](./kibana-plugin-core-public.executioncontextsetup.context_.md) | Observable<KibanaExecutionContext> | The current context observable | - -## Methods - -| Method | Description | -| --- | --- | -| [clear()](./kibana-plugin-core-public.executioncontextsetup.clear.md) | clears the context | -| [get()](./kibana-plugin-core-public.executioncontextsetup.get.md) | Get the current top level context | -| [getAsLabels()](./kibana-plugin-core-public.executioncontextsetup.getaslabels.md) | returns apm labels | -| [set(c$)](./kibana-plugin-core-public.executioncontextsetup.set.md) | Set the current top level context | -| [withGlobalContext(context)](./kibana-plugin-core-public.executioncontextsetup.withglobalcontext.md) | merges the current top level context with the specific event context | - diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.set.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.set.md deleted file mode 100644 index e3dcea78c827a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.set.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) > [set](./kibana-plugin-core-public.executioncontextsetup.set.md) - -## ExecutionContextSetup.set() method - -Set the current top level context - -Signature: - -```typescript -set(c$: KibanaExecutionContext): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| c$ | KibanaExecutionContext | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.withglobalcontext.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.withglobalcontext.md deleted file mode 100644 index 574d0fd989750..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextsetup.withglobalcontext.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) > [withGlobalContext](./kibana-plugin-core-public.executioncontextsetup.withglobalcontext.md) - -## ExecutionContextSetup.withGlobalContext() method - -merges the current top level context with the specific event context - -Signature: - -```typescript -withGlobalContext(context?: KibanaExecutionContext): KibanaExecutionContext; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| context | KibanaExecutionContext | | - -Returns: - -KibanaExecutionContext - diff --git a/docs/development/core/public/kibana-plugin-core-public.executioncontextstart.md b/docs/development/core/public/kibana-plugin-core-public.executioncontextstart.md deleted file mode 100644 index 0d210ba5bb1c4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.executioncontextstart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ExecutionContextStart](./kibana-plugin-core-public.executioncontextstart.md) - -## ExecutionContextStart type - -See [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md). - -Signature: - -```typescript -export declare type ExecutionContextStart = ExecutionContextSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.md b/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.md deleted file mode 100644 index 9b2803e4f12ea..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [FatalErrorInfo](./kibana-plugin-core-public.fatalerrorinfo.md) - -## FatalErrorInfo interface - -Represents the `message` and `stack` of a fatal Error - -Signature: - -```typescript -export interface FatalErrorInfo -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [message](./kibana-plugin-core-public.fatalerrorinfo.message.md) | string | | -| [stack](./kibana-plugin-core-public.fatalerrorinfo.stack.md) | string \| undefined | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.message.md b/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.message.md deleted file mode 100644 index c623f7e6bf910..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.message.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [FatalErrorInfo](./kibana-plugin-core-public.fatalerrorinfo.md) > [message](./kibana-plugin-core-public.fatalerrorinfo.message.md) - -## FatalErrorInfo.message property - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.stack.md b/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.stack.md deleted file mode 100644 index 5f8052be6a77a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.fatalerrorinfo.stack.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [FatalErrorInfo](./kibana-plugin-core-public.fatalerrorinfo.md) > [stack](./kibana-plugin-core-public.fatalerrorinfo.stack.md) - -## FatalErrorInfo.stack property - -Signature: - -```typescript -stack: string | undefined; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.add.md b/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.add.md deleted file mode 100644 index 0b2a064a4c7df..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.add.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [FatalErrorsSetup](./kibana-plugin-core-public.fatalerrorssetup.md) > [add](./kibana-plugin-core-public.fatalerrorssetup.add.md) - -## FatalErrorsSetup.add property - -Add a new fatal error. This will stop the Kibana Public Core and display a fatal error screen with details about the Kibana build and the error. - -Signature: - -```typescript -add: (error: string | Error, source?: string) => never; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.get_.md b/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.get_.md deleted file mode 100644 index 15bf94d5b7cd6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.get_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [FatalErrorsSetup](./kibana-plugin-core-public.fatalerrorssetup.md) > [get$](./kibana-plugin-core-public.fatalerrorssetup.get_.md) - -## FatalErrorsSetup.get$ property - -An Observable that will emit whenever a fatal error is added with `add()` - -Signature: - -```typescript -get$: () => Rx.Observable; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.md b/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.md deleted file mode 100644 index 1f27fd52b7e32..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.fatalerrorssetup.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [FatalErrorsSetup](./kibana-plugin-core-public.fatalerrorssetup.md) - -## FatalErrorsSetup interface - -FatalErrors stop the Kibana Public Core and displays a fatal error screen with details about the Kibana build and the error. - -Signature: - -```typescript -export interface FatalErrorsSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [add](./kibana-plugin-core-public.fatalerrorssetup.add.md) | (error: string \| Error, source?: string) => never | Add a new fatal error. This will stop the Kibana Public Core and display a fatal error screen with details about the Kibana build and the error. | -| [get$](./kibana-plugin-core-public.fatalerrorssetup.get_.md) | () => Rx.Observable<FatalErrorInfo> | An Observable that will emit whenever a fatal error is added with add() | - diff --git a/docs/development/core/public/kibana-plugin-core-public.fatalerrorsstart.md b/docs/development/core/public/kibana-plugin-core-public.fatalerrorsstart.md deleted file mode 100644 index dd462eb435369..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.fatalerrorsstart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [FatalErrorsStart](./kibana-plugin-core-public.fatalerrorsstart.md) - -## FatalErrorsStart type - -FatalErrors stop the Kibana Public Core and displays a fatal error screen with details about the Kibana build and the error. - -Signature: - -```typescript -export declare type FatalErrorsStart = FatalErrorsSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.asresponse.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.asresponse.md deleted file mode 100644 index 264e00a73fd2f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.asresponse.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) > [asResponse](./kibana-plugin-core-public.httpfetchoptions.asresponse.md) - -## HttpFetchOptions.asResponse property - -When `true` the return type of [HttpHandler](./kibana-plugin-core-public.httphandler.md) will be an [HttpResponse](./kibana-plugin-core-public.httpresponse.md) with detailed request and response information. When `false`, the return type will just be the parsed response body. Defaults to `false`. - -Signature: - -```typescript -asResponse?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.assystemrequest.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.assystemrequest.md deleted file mode 100644 index f74a9d02f8420..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.assystemrequest.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) > [asSystemRequest](./kibana-plugin-core-public.httpfetchoptions.assystemrequest.md) - -## HttpFetchOptions.asSystemRequest property - -Whether or not the request should include the "system request" header to differentiate an end user request from Kibana internal request. Can be read on the server-side using KibanaRequest\#isSystemRequest. Defaults to `false`. - -Signature: - -```typescript -asSystemRequest?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.context.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.context.md deleted file mode 100644 index 09ab95a5135f6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.context.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) > [context](./kibana-plugin-core-public.httpfetchoptions.context.md) - -## HttpFetchOptions.context property - -Signature: - -```typescript -context?: KibanaExecutionContext; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.headers.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.headers.md deleted file mode 100644 index b29725b727cdb..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) > [headers](./kibana-plugin-core-public.httpfetchoptions.headers.md) - -## HttpFetchOptions.headers property - -Headers to send with the request. See [HttpHeadersInit](./kibana-plugin-core-public.httpheadersinit.md). - -Signature: - -```typescript -headers?: HttpHeadersInit; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.md deleted file mode 100644 index 9a7f05ab9cd3e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) - -## HttpFetchOptions interface - -All options that may be used with a [HttpHandler](./kibana-plugin-core-public.httphandler.md). - -Signature: - -```typescript -export interface HttpFetchOptions extends HttpRequestInit -``` -Extends: HttpRequestInit - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [asResponse?](./kibana-plugin-core-public.httpfetchoptions.asresponse.md) | boolean | (Optional) When true the return type of [HttpHandler](./kibana-plugin-core-public.httphandler.md) will be an [HttpResponse](./kibana-plugin-core-public.httpresponse.md) with detailed request and response information. When false, the return type will just be the parsed response body. Defaults to false. | -| [asSystemRequest?](./kibana-plugin-core-public.httpfetchoptions.assystemrequest.md) | boolean | (Optional) Whether or not the request should include the "system request" header to differentiate an end user request from Kibana internal request. Can be read on the server-side using KibanaRequest\#isSystemRequest. Defaults to false. | -| [context?](./kibana-plugin-core-public.httpfetchoptions.context.md) | KibanaExecutionContext | (Optional) | -| [headers?](./kibana-plugin-core-public.httpfetchoptions.headers.md) | HttpHeadersInit | (Optional) Headers to send with the request. See [HttpHeadersInit](./kibana-plugin-core-public.httpheadersinit.md). | -| [prependBasePath?](./kibana-plugin-core-public.httpfetchoptions.prependbasepath.md) | boolean | (Optional) Whether or not the request should automatically prepend the basePath. Defaults to true. | -| [query?](./kibana-plugin-core-public.httpfetchoptions.query.md) | HttpFetchQuery | (Optional) The query string for an HTTP request. See [HttpFetchQuery](./kibana-plugin-core-public.httpfetchquery.md). | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.prependbasepath.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.prependbasepath.md deleted file mode 100644 index ca638d472c52f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.prependbasepath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) > [prependBasePath](./kibana-plugin-core-public.httpfetchoptions.prependbasepath.md) - -## HttpFetchOptions.prependBasePath property - -Whether or not the request should automatically prepend the basePath. Defaults to `true`. - -Signature: - -```typescript -prependBasePath?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.query.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.query.md deleted file mode 100644 index b03e48aa15cc5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptions.query.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) > [query](./kibana-plugin-core-public.httpfetchoptions.query.md) - -## HttpFetchOptions.query property - -The query string for an HTTP request. See [HttpFetchQuery](./kibana-plugin-core-public.httpfetchquery.md). - -Signature: - -```typescript -query?: HttpFetchQuery; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.md deleted file mode 100644 index 78155adaf627e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptionsWithPath](./kibana-plugin-core-public.httpfetchoptionswithpath.md) - -## HttpFetchOptionsWithPath interface - -Similar to [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) but with the URL path included. - -Signature: - -```typescript -export interface HttpFetchOptionsWithPath extends HttpFetchOptions -``` -Extends: HttpFetchOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [path](./kibana-plugin-core-public.httpfetchoptionswithpath.path.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.path.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.path.md deleted file mode 100644 index b360d7d1fb824..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchoptionswithpath.path.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchOptionsWithPath](./kibana-plugin-core-public.httpfetchoptionswithpath.md) > [path](./kibana-plugin-core-public.httpfetchoptionswithpath.path.md) - -## HttpFetchOptionsWithPath.path property - -Signature: - -```typescript -path: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpfetchquery.md b/docs/development/core/public/kibana-plugin-core-public.httpfetchquery.md deleted file mode 100644 index 29627ddd122fe..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpfetchquery.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpFetchQuery](./kibana-plugin-core-public.httpfetchquery.md) - -## HttpFetchQuery interface - - -Signature: - -```typescript -export interface HttpFetchQuery -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httphandler.md b/docs/development/core/public/kibana-plugin-core-public.httphandler.md deleted file mode 100644 index 6a119b186bfa1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httphandler.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpHandler](./kibana-plugin-core-public.httphandler.md) - -## HttpHandler interface - -A function for making an HTTP requests to Kibana's backend. See [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) for options and [HttpResponse](./kibana-plugin-core-public.httpresponse.md) for the response. - -Signature: - -```typescript -export interface HttpHandler -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpheadersinit.md b/docs/development/core/public/kibana-plugin-core-public.httpheadersinit.md deleted file mode 100644 index e05303a23afc8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpheadersinit.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpHeadersInit](./kibana-plugin-core-public.httpheadersinit.md) - -## HttpHeadersInit interface - -Headers to append to the request. Any headers that begin with `kbn-` are considered private to Core and will cause [HttpHandler](./kibana-plugin-core-public.httphandler.md) to throw an error. - -Signature: - -```typescript -export interface HttpHeadersInit -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.md deleted file mode 100644 index e1843b1a52988..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) - -## HttpInterceptor interface - -An object that may define global interceptor functions for different parts of the request and response lifecycle. See [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md). - -Signature: - -```typescript -export interface HttpInterceptor -``` - -## Methods - -| Method | Description | -| --- | --- | -| [request(fetchOptions, controller)?](./kibana-plugin-core-public.httpinterceptor.request.md) | (Optional) Define an interceptor to be executed before a request is sent. | -| [requestError(httpErrorRequest, controller)?](./kibana-plugin-core-public.httpinterceptor.requesterror.md) | (Optional) Define an interceptor to be executed if a request interceptor throws an error or returns a rejected Promise. | -| [response(httpResponse, controller)?](./kibana-plugin-core-public.httpinterceptor.response.md) | (Optional) Define an interceptor to be executed after a response is received. | -| [responseError(httpErrorResponse, controller)?](./kibana-plugin-core-public.httpinterceptor.responseerror.md) | (Optional) Define an interceptor to be executed if a response interceptor throws an error or returns a rejected Promise. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.request.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.request.md deleted file mode 100644 index 95181e6d509f1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.request.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) > [request](./kibana-plugin-core-public.httpinterceptor.request.md) - -## HttpInterceptor.request() method - -Define an interceptor to be executed before a request is sent. - -Signature: - -```typescript -request?(fetchOptions: Readonly, controller: IHttpInterceptController): MaybePromise> | void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| fetchOptions | Readonly<HttpFetchOptionsWithPath> | | -| controller | IHttpInterceptController | [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) | - -Returns: - -MaybePromise<Partial<HttpFetchOptionsWithPath>> \| void - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.requesterror.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.requesterror.md deleted file mode 100644 index c2bd14a6d1ead..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.requesterror.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) > [requestError](./kibana-plugin-core-public.httpinterceptor.requesterror.md) - -## HttpInterceptor.requestError() method - -Define an interceptor to be executed if a request interceptor throws an error or returns a rejected Promise. - -Signature: - -```typescript -requestError?(httpErrorRequest: HttpInterceptorRequestError, controller: IHttpInterceptController): MaybePromise> | void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| httpErrorRequest | HttpInterceptorRequestError | [HttpInterceptorRequestError](./kibana-plugin-core-public.httpinterceptorrequesterror.md) | -| controller | IHttpInterceptController | [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) | - -Returns: - -MaybePromise<Partial<HttpFetchOptionsWithPath>> \| void - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.response.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.response.md deleted file mode 100644 index 40cfeffacc0ca..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.response.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) > [response](./kibana-plugin-core-public.httpinterceptor.response.md) - -## HttpInterceptor.response() method - -Define an interceptor to be executed after a response is received. - -Signature: - -```typescript -response?(httpResponse: HttpResponse, controller: IHttpInterceptController): MaybePromise | void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| httpResponse | HttpResponse | [HttpResponse](./kibana-plugin-core-public.httpresponse.md) | -| controller | IHttpInterceptController | [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) | - -Returns: - -MaybePromise<IHttpResponseInterceptorOverrides> \| void - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.responseerror.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.responseerror.md deleted file mode 100644 index d9be2e87761fc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptor.responseerror.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) > [responseError](./kibana-plugin-core-public.httpinterceptor.responseerror.md) - -## HttpInterceptor.responseError() method - -Define an interceptor to be executed if a response interceptor throws an error or returns a rejected Promise. - -Signature: - -```typescript -responseError?(httpErrorResponse: HttpInterceptorResponseError, controller: IHttpInterceptController): MaybePromise | void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| httpErrorResponse | HttpInterceptorResponseError | [HttpInterceptorResponseError](./kibana-plugin-core-public.httpinterceptorresponseerror.md) | -| controller | IHttpInterceptController | [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) | - -Returns: - -MaybePromise<IHttpResponseInterceptorOverrides> \| void - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.error.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.error.md deleted file mode 100644 index a5db2cb2664c1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptorRequestError](./kibana-plugin-core-public.httpinterceptorrequesterror.md) > [error](./kibana-plugin-core-public.httpinterceptorrequesterror.error.md) - -## HttpInterceptorRequestError.error property - -Signature: - -```typescript -error: Error; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.fetchoptions.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.fetchoptions.md deleted file mode 100644 index 68c338b4f974d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.fetchoptions.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptorRequestError](./kibana-plugin-core-public.httpinterceptorrequesterror.md) > [fetchOptions](./kibana-plugin-core-public.httpinterceptorrequesterror.fetchoptions.md) - -## HttpInterceptorRequestError.fetchOptions property - -Signature: - -```typescript -fetchOptions: Readonly; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.md deleted file mode 100644 index 499bc61ce68af..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorrequesterror.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptorRequestError](./kibana-plugin-core-public.httpinterceptorrequesterror.md) - -## HttpInterceptorRequestError interface - - -Signature: - -```typescript -export interface HttpInterceptorRequestError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error](./kibana-plugin-core-public.httpinterceptorrequesterror.error.md) | Error | | -| [fetchOptions](./kibana-plugin-core-public.httpinterceptorrequesterror.fetchoptions.md) | Readonly<HttpFetchOptionsWithPath> | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.error.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.error.md deleted file mode 100644 index e69a3c04d1dec..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptorResponseError](./kibana-plugin-core-public.httpinterceptorresponseerror.md) > [error](./kibana-plugin-core-public.httpinterceptorresponseerror.error.md) - -## HttpInterceptorResponseError.error property - -Signature: - -```typescript -error: Error | IHttpFetchError; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.md deleted file mode 100644 index 014cebeb3ec4d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptorResponseError](./kibana-plugin-core-public.httpinterceptorresponseerror.md) - -## HttpInterceptorResponseError interface - - -Signature: - -```typescript -export interface HttpInterceptorResponseError extends HttpResponse -``` -Extends: HttpResponse - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error](./kibana-plugin-core-public.httpinterceptorresponseerror.error.md) | Error \| IHttpFetchError | | -| [request](./kibana-plugin-core-public.httpinterceptorresponseerror.request.md) | Readonly<Request> | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.request.md b/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.request.md deleted file mode 100644 index 4e4d1bbdeec28..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpinterceptorresponseerror.request.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpInterceptorResponseError](./kibana-plugin-core-public.httpinterceptorresponseerror.md) > [request](./kibana-plugin-core-public.httpinterceptorresponseerror.request.md) - -## HttpInterceptorResponseError.request property - -Signature: - -```typescript -request: Readonly; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.body.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.body.md deleted file mode 100644 index dddf1ea87ec43..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [body](./kibana-plugin-core-public.httprequestinit.body.md) - -## HttpRequestInit.body property - -A BodyInit object or null to set request's body. - -Signature: - -```typescript -body?: BodyInit | null; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.cache.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.cache.md deleted file mode 100644 index cc7ef0bf2f3c2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.cache.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [cache](./kibana-plugin-core-public.httprequestinit.cache.md) - -## HttpRequestInit.cache property - -The cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. - -Signature: - -```typescript -cache?: RequestCache; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.credentials.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.credentials.md deleted file mode 100644 index da05b9eb2e319..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.credentials.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [credentials](./kibana-plugin-core-public.httprequestinit.credentials.md) - -## HttpRequestInit.credentials property - -The credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. - -Signature: - -```typescript -credentials?: RequestCredentials; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.headers.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.headers.md deleted file mode 100644 index 64e79dc55d25d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [headers](./kibana-plugin-core-public.httprequestinit.headers.md) - -## HttpRequestInit.headers property - -[HttpHeadersInit](./kibana-plugin-core-public.httpheadersinit.md) - -Signature: - -```typescript -headers?: HttpHeadersInit; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.integrity.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.integrity.md deleted file mode 100644 index 34d9d2f60c969..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.integrity.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [integrity](./kibana-plugin-core-public.httprequestinit.integrity.md) - -## HttpRequestInit.integrity property - -Subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. - -Signature: - -```typescript -integrity?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.keepalive.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.keepalive.md deleted file mode 100644 index 3be81e863f5fd..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.keepalive.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [keepalive](./kibana-plugin-core-public.httprequestinit.keepalive.md) - -## HttpRequestInit.keepalive property - -Whether or not request can outlive the global in which it was created. - -Signature: - -```typescript -keepalive?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.md deleted file mode 100644 index 6b0e054ff1eb3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.md +++ /dev/null @@ -1,32 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) - -## HttpRequestInit interface - -Fetch API options available to [HttpHandler](./kibana-plugin-core-public.httphandler.md)s. - -Signature: - -```typescript -export interface HttpRequestInit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-public.httprequestinit.body.md) | BodyInit \| null | (Optional) A BodyInit object or null to set request's body. | -| [cache?](./kibana-plugin-core-public.httprequestinit.cache.md) | RequestCache | (Optional) The cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. | -| [credentials?](./kibana-plugin-core-public.httprequestinit.credentials.md) | RequestCredentials | (Optional) The credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. | -| [headers?](./kibana-plugin-core-public.httprequestinit.headers.md) | HttpHeadersInit | (Optional) [HttpHeadersInit](./kibana-plugin-core-public.httpheadersinit.md) | -| [integrity?](./kibana-plugin-core-public.httprequestinit.integrity.md) | string | (Optional) Subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. | -| [keepalive?](./kibana-plugin-core-public.httprequestinit.keepalive.md) | boolean | (Optional) Whether or not request can outlive the global in which it was created. | -| [method?](./kibana-plugin-core-public.httprequestinit.method.md) | string | (Optional) HTTP method, which is "GET" by default. | -| [mode?](./kibana-plugin-core-public.httprequestinit.mode.md) | RequestMode | (Optional) The mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. | -| [redirect?](./kibana-plugin-core-public.httprequestinit.redirect.md) | RequestRedirect | (Optional) The redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. | -| [referrer?](./kibana-plugin-core-public.httprequestinit.referrer.md) | string | (Optional) The referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and "about:client" when defaulting to the global's default. This is used during fetching to determine the value of the Referer header of the request being made. | -| [referrerPolicy?](./kibana-plugin-core-public.httprequestinit.referrerpolicy.md) | ReferrerPolicy | (Optional) The referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. | -| [signal?](./kibana-plugin-core-public.httprequestinit.signal.md) | AbortSignal \| null | (Optional) Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. | -| [window?](./kibana-plugin-core-public.httprequestinit.window.md) | null | (Optional) Can only be null. Used to disassociate request from any Window. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.method.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.method.md deleted file mode 100644 index f650c32f70701..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.method.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [method](./kibana-plugin-core-public.httprequestinit.method.md) - -## HttpRequestInit.method property - -HTTP method, which is "GET" by default. - -Signature: - -```typescript -method?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.mode.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.mode.md deleted file mode 100644 index 4617b02c67420..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.mode.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [mode](./kibana-plugin-core-public.httprequestinit.mode.md) - -## HttpRequestInit.mode property - -The mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. - -Signature: - -```typescript -mode?: RequestMode; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.redirect.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.redirect.md deleted file mode 100644 index f1ae55f77f133..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.redirect.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [redirect](./kibana-plugin-core-public.httprequestinit.redirect.md) - -## HttpRequestInit.redirect property - -The redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. - -Signature: - -```typescript -redirect?: RequestRedirect; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrer.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrer.md deleted file mode 100644 index 19c0435742a91..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrer.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [referrer](./kibana-plugin-core-public.httprequestinit.referrer.md) - -## HttpRequestInit.referrer property - -The referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and "about:client" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. - -Signature: - -```typescript -referrer?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrerpolicy.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrerpolicy.md deleted file mode 100644 index 30fc275ebf6bd..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.referrerpolicy.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [referrerPolicy](./kibana-plugin-core-public.httprequestinit.referrerpolicy.md) - -## HttpRequestInit.referrerPolicy property - -The referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. - -Signature: - -```typescript -referrerPolicy?: ReferrerPolicy; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.signal.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.signal.md deleted file mode 100644 index 8f309e7b877dc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.signal.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [signal](./kibana-plugin-core-public.httprequestinit.signal.md) - -## HttpRequestInit.signal property - -Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. - -Signature: - -```typescript -signal?: AbortSignal | null; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.window.md b/docs/development/core/public/kibana-plugin-core-public.httprequestinit.window.md deleted file mode 100644 index 6bafc9a03da58..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httprequestinit.window.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) > [window](./kibana-plugin-core-public.httprequestinit.window.md) - -## HttpRequestInit.window property - -Can only be null. Used to disassociate request from any Window. - -Signature: - -```typescript -window?: null; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpresponse.body.md b/docs/development/core/public/kibana-plugin-core-public.httpresponse.body.md deleted file mode 100644 index 5d2cb693f63e0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpresponse.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpResponse](./kibana-plugin-core-public.httpresponse.md) > [body](./kibana-plugin-core-public.httpresponse.body.md) - -## HttpResponse.body property - -Parsed body received, may be undefined if there was an error. - -Signature: - -```typescript -readonly body?: TResponseBody; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpresponse.fetchoptions.md b/docs/development/core/public/kibana-plugin-core-public.httpresponse.fetchoptions.md deleted file mode 100644 index 19e74f0da9fba..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpresponse.fetchoptions.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpResponse](./kibana-plugin-core-public.httpresponse.md) > [fetchOptions](./kibana-plugin-core-public.httpresponse.fetchoptions.md) - -## HttpResponse.fetchOptions property - -The original [HttpFetchOptionsWithPath](./kibana-plugin-core-public.httpfetchoptionswithpath.md) used to send this request. - -Signature: - -```typescript -readonly fetchOptions: Readonly; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpresponse.md b/docs/development/core/public/kibana-plugin-core-public.httpresponse.md deleted file mode 100644 index c0a3644ecaf2f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpresponse.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpResponse](./kibana-plugin-core-public.httpresponse.md) - -## HttpResponse interface - - -Signature: - -```typescript -export interface HttpResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-public.httpresponse.body.md) | TResponseBody | (Optional) Parsed body received, may be undefined if there was an error. | -| [fetchOptions](./kibana-plugin-core-public.httpresponse.fetchoptions.md) | Readonly<HttpFetchOptionsWithPath> | The original [HttpFetchOptionsWithPath](./kibana-plugin-core-public.httpfetchoptionswithpath.md) used to send this request. | -| [request](./kibana-plugin-core-public.httpresponse.request.md) | Readonly<Request> | Raw request sent to Kibana server. | -| [response?](./kibana-plugin-core-public.httpresponse.response.md) | Readonly<Response> | (Optional) Raw response received, may be undefined if there was an error. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpresponse.request.md b/docs/development/core/public/kibana-plugin-core-public.httpresponse.request.md deleted file mode 100644 index c21b0035835ba..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpresponse.request.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpResponse](./kibana-plugin-core-public.httpresponse.md) > [request](./kibana-plugin-core-public.httpresponse.request.md) - -## HttpResponse.request property - -Raw request sent to Kibana server. - -Signature: - -```typescript -readonly request: Readonly; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpresponse.response.md b/docs/development/core/public/kibana-plugin-core-public.httpresponse.response.md deleted file mode 100644 index 519412d2f4e46..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpresponse.response.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpResponse](./kibana-plugin-core-public.httpresponse.md) > [response](./kibana-plugin-core-public.httpresponse.response.md) - -## HttpResponse.response property - -Raw response received, may be undefined if there was an error. - -Signature: - -```typescript -readonly response?: Readonly; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.addloadingcountsource.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.addloadingcountsource.md deleted file mode 100644 index 7962772dbaa5c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.addloadingcountsource.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [addLoadingCountSource](./kibana-plugin-core-public.httpsetup.addloadingcountsource.md) - -## HttpSetup.addLoadingCountSource() method - -Adds a new source of loading counts. Used to show the global loading indicator when sum of all observed counts are more than 0. - -Signature: - -```typescript -addLoadingCountSource(countSource$: Observable): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| countSource$ | Observable<number> | an Observable to subscribe to for loading count updates. | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.anonymouspaths.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.anonymouspaths.md deleted file mode 100644 index d640755f8174c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.anonymouspaths.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [anonymousPaths](./kibana-plugin-core-public.httpsetup.anonymouspaths.md) - -## HttpSetup.anonymousPaths property - -APIs for denoting certain paths for not requiring authentication - -Signature: - -```typescript -anonymousPaths: IAnonymousPaths; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.basepath.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.basepath.md deleted file mode 100644 index 15206a7ae5e1d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.basepath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [basePath](./kibana-plugin-core-public.httpsetup.basepath.md) - -## HttpSetup.basePath property - -APIs for manipulating the basePath on URL segments. See [IBasePath](./kibana-plugin-core-public.ibasepath.md) - -Signature: - -```typescript -basePath: IBasePath; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.delete.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.delete.md deleted file mode 100644 index 972af2fb55044..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.delete.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [delete](./kibana-plugin-core-public.httpsetup.delete.md) - -## HttpSetup.delete property - -Makes an HTTP request with the DELETE method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -delete: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.externalurl.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.externalurl.md deleted file mode 100644 index b26c9d371e496..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.externalurl.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [externalUrl](./kibana-plugin-core-public.httpsetup.externalurl.md) - -## HttpSetup.externalUrl property - -Signature: - -```typescript -externalUrl: IExternalUrl; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.fetch.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.fetch.md deleted file mode 100644 index ad232598b71ca..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.fetch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [fetch](./kibana-plugin-core-public.httpsetup.fetch.md) - -## HttpSetup.fetch property - -Makes an HTTP request. Defaults to a GET request unless overridden. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -fetch: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.get.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.get.md deleted file mode 100644 index 99b5d42643b59..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.get.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [get](./kibana-plugin-core-public.httpsetup.get.md) - -## HttpSetup.get property - -Makes an HTTP request with the GET method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -get: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.getloadingcount_.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.getloadingcount_.md deleted file mode 100644 index e10278470f542..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.getloadingcount_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [getLoadingCount$](./kibana-plugin-core-public.httpsetup.getloadingcount_.md) - -## HttpSetup.getLoadingCount$() method - -Get the sum of all loading count sources as a single Observable. - -Signature: - -```typescript -getLoadingCount$(): Observable; -``` -Returns: - -Observable<number> - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.head.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.head.md deleted file mode 100644 index 07faeae2a9c0f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.head.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [head](./kibana-plugin-core-public.httpsetup.head.md) - -## HttpSetup.head property - -Makes an HTTP request with the HEAD method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -head: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.intercept.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.intercept.md deleted file mode 100644 index 27962d3c3867b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.intercept.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [intercept](./kibana-plugin-core-public.httpsetup.intercept.md) - -## HttpSetup.intercept() method - -Adds a new [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) to the global HTTP client. - -Signature: - -```typescript -intercept(interceptor: HttpInterceptor): () => void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| interceptor | HttpInterceptor | a [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) | - -Returns: - -() => void - -a function for removing the attached interceptor. - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.md deleted file mode 100644 index 2d8116b0eeba6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.md +++ /dev/null @@ -1,37 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) - -## HttpSetup interface - - -Signature: - -```typescript -export interface HttpSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [anonymousPaths](./kibana-plugin-core-public.httpsetup.anonymouspaths.md) | IAnonymousPaths | APIs for denoting certain paths for not requiring authentication | -| [basePath](./kibana-plugin-core-public.httpsetup.basepath.md) | IBasePath | APIs for manipulating the basePath on URL segments. See [IBasePath](./kibana-plugin-core-public.ibasepath.md) | -| [delete](./kibana-plugin-core-public.httpsetup.delete.md) | HttpHandler | Makes an HTTP request with the DELETE method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | -| [externalUrl](./kibana-plugin-core-public.httpsetup.externalurl.md) | IExternalUrl | | -| [fetch](./kibana-plugin-core-public.httpsetup.fetch.md) | HttpHandler | Makes an HTTP request. Defaults to a GET request unless overridden. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | -| [get](./kibana-plugin-core-public.httpsetup.get.md) | HttpHandler | Makes an HTTP request with the GET method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | -| [head](./kibana-plugin-core-public.httpsetup.head.md) | HttpHandler | Makes an HTTP request with the HEAD method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | -| [options](./kibana-plugin-core-public.httpsetup.options.md) | HttpHandler | Makes an HTTP request with the OPTIONS method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | -| [patch](./kibana-plugin-core-public.httpsetup.patch.md) | HttpHandler | Makes an HTTP request with the PATCH method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | -| [post](./kibana-plugin-core-public.httpsetup.post.md) | HttpHandler | Makes an HTTP request with the POST method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | -| [put](./kibana-plugin-core-public.httpsetup.put.md) | HttpHandler | Makes an HTTP request with the PUT method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. | - -## Methods - -| Method | Description | -| --- | --- | -| [addLoadingCountSource(countSource$)](./kibana-plugin-core-public.httpsetup.addloadingcountsource.md) | Adds a new source of loading counts. Used to show the global loading indicator when sum of all observed counts are more than 0. | -| [getLoadingCount$()](./kibana-plugin-core-public.httpsetup.getloadingcount_.md) | Get the sum of all loading count sources as a single Observable. | -| [intercept(interceptor)](./kibana-plugin-core-public.httpsetup.intercept.md) | Adds a new [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) to the global HTTP client. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.options.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.options.md deleted file mode 100644 index 9a83abcae0323..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.options.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [options](./kibana-plugin-core-public.httpsetup.options.md) - -## HttpSetup.options property - -Makes an HTTP request with the OPTIONS method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -options: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.patch.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.patch.md deleted file mode 100644 index 9024a12d527c2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.patch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [patch](./kibana-plugin-core-public.httpsetup.patch.md) - -## HttpSetup.patch property - -Makes an HTTP request with the PATCH method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -patch: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.post.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.post.md deleted file mode 100644 index fd30981a0ec56..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.post.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [post](./kibana-plugin-core-public.httpsetup.post.md) - -## HttpSetup.post property - -Makes an HTTP request with the POST method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -post: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpsetup.put.md b/docs/development/core/public/kibana-plugin-core-public.httpsetup.put.md deleted file mode 100644 index 599db3e61f504..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpsetup.put.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpSetup](./kibana-plugin-core-public.httpsetup.md) > [put](./kibana-plugin-core-public.httpsetup.put.md) - -## HttpSetup.put property - -Makes an HTTP request with the PUT method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. - -Signature: - -```typescript -put: HttpHandler; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.httpstart.md b/docs/development/core/public/kibana-plugin-core-public.httpstart.md deleted file mode 100644 index 4cbbf6f07a2cf..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.httpstart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [HttpStart](./kibana-plugin-core-public.httpstart.md) - -## HttpStart type - -See [HttpSetup](./kibana-plugin-core-public.httpsetup.md) - -Signature: - -```typescript -export declare type HttpStart = HttpSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.i18nstart.context.md b/docs/development/core/public/kibana-plugin-core-public.i18nstart.context.md deleted file mode 100644 index a0fba28be9681..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.i18nstart.context.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [I18nStart](./kibana-plugin-core-public.i18nstart.md) > [Context](./kibana-plugin-core-public.i18nstart.context.md) - -## I18nStart.Context property - -React Context provider required as the topmost component for any i18n-compatible React tree. - -Signature: - -```typescript -Context: ({ children }: { - children: React.ReactNode; - }) => JSX.Element; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.i18nstart.md b/docs/development/core/public/kibana-plugin-core-public.i18nstart.md deleted file mode 100644 index 586f5797abe6c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.i18nstart.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [I18nStart](./kibana-plugin-core-public.i18nstart.md) - -## I18nStart interface - -I18nStart.Context is required by any localizable React component from @kbn/i18n and @elastic/eui packages and is supposed to be used as the topmost component for any i18n-compatible React tree. - -Signature: - -```typescript -export interface I18nStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [Context](./kibana-plugin-core-public.i18nstart.context.md) | ({ children }: { children: React.ReactNode; }) => JSX.Element | React Context provider required as the topmost component for any i18n-compatible React tree. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.isanonymous.md b/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.isanonymous.md deleted file mode 100644 index 115285c84ea78..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.isanonymous.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IAnonymousPaths](./kibana-plugin-core-public.ianonymouspaths.md) > [isAnonymous](./kibana-plugin-core-public.ianonymouspaths.isanonymous.md) - -## IAnonymousPaths.isAnonymous() method - -Determines whether the provided path doesn't require authentication. `path` should include the current basePath. - -Signature: - -```typescript -isAnonymous(path: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| path | string | | - -Returns: - -boolean - diff --git a/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.md b/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.md deleted file mode 100644 index 91d66206dd9ee..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IAnonymousPaths](./kibana-plugin-core-public.ianonymouspaths.md) - -## IAnonymousPaths interface - -APIs for denoting paths as not requiring authentication - -Signature: - -```typescript -export interface IAnonymousPaths -``` - -## Methods - -| Method | Description | -| --- | --- | -| [isAnonymous(path)](./kibana-plugin-core-public.ianonymouspaths.isanonymous.md) | Determines whether the provided path doesn't require authentication. path should include the current basePath. | -| [register(path)](./kibana-plugin-core-public.ianonymouspaths.register.md) | Register path as not requiring authentication. path should not include the current basePath. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.register.md b/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.register.md deleted file mode 100644 index bfcc0f6decd5d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ianonymouspaths.register.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IAnonymousPaths](./kibana-plugin-core-public.ianonymouspaths.md) > [register](./kibana-plugin-core-public.ianonymouspaths.register.md) - -## IAnonymousPaths.register() method - -Register `path` as not requiring authentication. `path` should not include the current basePath. - -Signature: - -```typescript -register(path: string): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| path | string | | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.ibasepath.get.md b/docs/development/core/public/kibana-plugin-core-public.ibasepath.get.md deleted file mode 100644 index ed27de777b715..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ibasepath.get.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IBasePath](./kibana-plugin-core-public.ibasepath.md) > [get](./kibana-plugin-core-public.ibasepath.get.md) - -## IBasePath.get property - -Gets the `basePath` string. - -Signature: - -```typescript -get: () => string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ibasepath.md b/docs/development/core/public/kibana-plugin-core-public.ibasepath.md deleted file mode 100644 index 72a863f7d515c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ibasepath.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IBasePath](./kibana-plugin-core-public.ibasepath.md) - -## IBasePath interface - -APIs for manipulating the basePath on URL segments. - -Signature: - -```typescript -export interface IBasePath -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [get](./kibana-plugin-core-public.ibasepath.get.md) | () => string | Gets the basePath string. | -| [prepend](./kibana-plugin-core-public.ibasepath.prepend.md) | (url: string) => string | Prepends path with the basePath. | -| [publicBaseUrl?](./kibana-plugin-core-public.ibasepath.publicbaseurl.md) | string | (Optional) The server's publicly exposed base URL, if configured. Includes protocol, host, port (optional) and the [IBasePath.serverBasePath](./kibana-plugin-core-public.ibasepath.serverbasepath.md). | -| [remove](./kibana-plugin-core-public.ibasepath.remove.md) | (url: string) => string | Removes the prepended basePath from the path. | -| [serverBasePath](./kibana-plugin-core-public.ibasepath.serverbasepath.md) | string | Returns the server's root basePath as configured, without any namespace prefix.See for getting the basePath value for a specific request | - diff --git a/docs/development/core/public/kibana-plugin-core-public.ibasepath.prepend.md b/docs/development/core/public/kibana-plugin-core-public.ibasepath.prepend.md deleted file mode 100644 index b3e55351d350f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ibasepath.prepend.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IBasePath](./kibana-plugin-core-public.ibasepath.md) > [prepend](./kibana-plugin-core-public.ibasepath.prepend.md) - -## IBasePath.prepend property - -Prepends `path` with the basePath. - -Signature: - -```typescript -prepend: (url: string) => string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ibasepath.publicbaseurl.md b/docs/development/core/public/kibana-plugin-core-public.ibasepath.publicbaseurl.md deleted file mode 100644 index f45cc6eba2959..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ibasepath.publicbaseurl.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IBasePath](./kibana-plugin-core-public.ibasepath.md) > [publicBaseUrl](./kibana-plugin-core-public.ibasepath.publicbaseurl.md) - -## IBasePath.publicBaseUrl property - -The server's publicly exposed base URL, if configured. Includes protocol, host, port (optional) and the [IBasePath.serverBasePath](./kibana-plugin-core-public.ibasepath.serverbasepath.md). - -Signature: - -```typescript -readonly publicBaseUrl?: string; -``` - -## Remarks - -Should be used for generating external URL links back to this Kibana instance. - diff --git a/docs/development/core/public/kibana-plugin-core-public.ibasepath.remove.md b/docs/development/core/public/kibana-plugin-core-public.ibasepath.remove.md deleted file mode 100644 index 2fcbe487e95b3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ibasepath.remove.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IBasePath](./kibana-plugin-core-public.ibasepath.md) > [remove](./kibana-plugin-core-public.ibasepath.remove.md) - -## IBasePath.remove property - -Removes the prepended basePath from the `path`. - -Signature: - -```typescript -remove: (url: string) => string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ibasepath.serverbasepath.md b/docs/development/core/public/kibana-plugin-core-public.ibasepath.serverbasepath.md deleted file mode 100644 index f800b792e7b7f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ibasepath.serverbasepath.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IBasePath](./kibana-plugin-core-public.ibasepath.md) > [serverBasePath](./kibana-plugin-core-public.ibasepath.serverbasepath.md) - -## IBasePath.serverBasePath property - -Returns the server's root basePath as configured, without any namespace prefix. - -See for getting the basePath value for a specific request - -Signature: - -```typescript -readonly serverBasePath: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.isinternalurl.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurl.isinternalurl.md deleted file mode 100644 index 396e5586f1fed..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.isinternalurl.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md) > [isInternalUrl](./kibana-plugin-core-public.iexternalurl.isinternalurl.md) - -## IExternalUrl.isInternalUrl() method - -Determines if the provided URL is an internal url. - -Signature: - -```typescript -isInternalUrl(relativeOrAbsoluteUrl: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| relativeOrAbsoluteUrl | string | | - -Returns: - -boolean - diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurl.md deleted file mode 100644 index d0d4e6a3a4464..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md) - -## IExternalUrl interface - -APIs for working with external URLs. - -Signature: - -```typescript -export interface IExternalUrl -``` - -## Methods - -| Method | Description | -| --- | --- | -| [isInternalUrl(relativeOrAbsoluteUrl)](./kibana-plugin-core-public.iexternalurl.isinternalurl.md) | Determines if the provided URL is an internal url. | -| [validateUrl(relativeOrAbsoluteUrl)](./kibana-plugin-core-public.iexternalurl.validateurl.md) | Determines if the provided URL is a valid location to send users. Validation is based on the configured allow list in kibana.yml.If the URL is valid, then a URL will be returned. Otherwise, this will return null. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.validateurl.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurl.validateurl.md deleted file mode 100644 index 24140effc45d9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.validateurl.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md) > [validateUrl](./kibana-plugin-core-public.iexternalurl.validateurl.md) - -## IExternalUrl.validateUrl() method - -Determines if the provided URL is a valid location to send users. Validation is based on the configured allow list in kibana.yml. - -If the URL is valid, then a URL will be returned. Otherwise, this will return null. - -Signature: - -```typescript -validateUrl(relativeOrAbsoluteUrl: string): URL | null; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| relativeOrAbsoluteUrl | string | | - -Returns: - -URL \| null - diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.allow.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.allow.md deleted file mode 100644 index ec7129a43b99a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.allow.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) > [allow](./kibana-plugin-core-public.iexternalurlpolicy.allow.md) - -## IExternalUrlPolicy.allow property - -Indicates if this policy allows or denies access to the described destination. - -Signature: - -```typescript -allow: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.host.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.host.md deleted file mode 100644 index 1d3c9fc9bbaf1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.host.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) > [host](./kibana-plugin-core-public.iexternalurlpolicy.host.md) - -## IExternalUrlPolicy.host property - -Optional host describing the external destination. May be combined with `protocol`. - -Signature: - -```typescript -host?: string; -``` - -## Example - - -```ts -// allows access to all of google.com, using any protocol. -allow: true, -host: 'google.com' -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.md deleted file mode 100644 index 6623fec18d976..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) - -## IExternalUrlPolicy interface - -A policy describing whether access to an external destination is allowed. - -Signature: - -```typescript -export interface IExternalUrlPolicy -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [allow](./kibana-plugin-core-public.iexternalurlpolicy.allow.md) | boolean | Indicates if this policy allows or denies access to the described destination. | -| [host?](./kibana-plugin-core-public.iexternalurlpolicy.host.md) | string | (Optional) Optional host describing the external destination. May be combined with protocol. | -| [protocol?](./kibana-plugin-core-public.iexternalurlpolicy.protocol.md) | string | (Optional) Optional protocol describing the external destination. May be combined with host. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.protocol.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.protocol.md deleted file mode 100644 index 6b6f8b9638bb8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.protocol.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) > [protocol](./kibana-plugin-core-public.iexternalurlpolicy.protocol.md) - -## IExternalUrlPolicy.protocol property - -Optional protocol describing the external destination. May be combined with `host`. - -Signature: - -```typescript -protocol?: string; -``` - -## Example - - -```ts -// allows access to all destinations over the `https` protocol. -allow: true, -protocol: 'https' -``` - diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.body.md b/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.body.md deleted file mode 100644 index d053a5a9d360c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.body.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) > [body](./kibana-plugin-core-public.ihttpfetcherror.body.md) - -## IHttpFetchError.body property - -Signature: - -```typescript -readonly body?: TResponseBody; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.md b/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.md deleted file mode 100644 index 9aaae1be72028..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) - -## IHttpFetchError interface - - -Signature: - -```typescript -export interface IHttpFetchError extends Error -``` -Extends: Error - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-public.ihttpfetcherror.body.md) | TResponseBody | (Optional) | -| [name](./kibana-plugin-core-public.ihttpfetcherror.name.md) | string | | -| [req](./kibana-plugin-core-public.ihttpfetcherror.req.md) | Request | | -| [request](./kibana-plugin-core-public.ihttpfetcherror.request.md) | Request | | -| [res?](./kibana-plugin-core-public.ihttpfetcherror.res.md) | Response | (Optional) | -| [response?](./kibana-plugin-core-public.ihttpfetcherror.response.md) | Response | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.name.md b/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.name.md deleted file mode 100644 index 4ab1ddd4b90ac..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) > [name](./kibana-plugin-core-public.ihttpfetcherror.name.md) - -## IHttpFetchError.name property - -Signature: - -```typescript -readonly name: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.req.md b/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.req.md deleted file mode 100644 index eb1c158156e5a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.req.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) > [req](./kibana-plugin-core-public.ihttpfetcherror.req.md) - -## IHttpFetchError.req property - -> Warning: This API is now obsolete. -> -> Provided for legacy compatibility. Prefer the `request` property instead. 8.8.0 -> -> Note to maintainers: when looking at usages, mind that typical use could be inside a `catch` block, so TS and code-reference navigation might not highlight them. -> - -Signature: - -```typescript -readonly req: Request; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.request.md b/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.request.md deleted file mode 100644 index 193d4cf92587e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.request.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) > [request](./kibana-plugin-core-public.ihttpfetcherror.request.md) - -## IHttpFetchError.request property - -Signature: - -```typescript -readonly request: Request; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.res.md b/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.res.md deleted file mode 100644 index 4440986db4ff8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.res.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) > [res](./kibana-plugin-core-public.ihttpfetcherror.res.md) - -## IHttpFetchError.res property - -> Warning: This API is now obsolete. -> -> Provided for legacy compatibility. Prefer the `response` property instead. 8.8.0 -> -> Note to maintainers: when looking at usages, mind that typical use could be inside a `catch` block, so TS and code-reference navigation might not highlight them. -> - -Signature: - -```typescript -readonly res?: Response; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.response.md b/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.response.md deleted file mode 100644 index 1f7fcc746e19b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpfetcherror.response.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) > [response](./kibana-plugin-core-public.ihttpfetcherror.response.md) - -## IHttpFetchError.response property - -Signature: - -```typescript -readonly response?: Response; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halt.md b/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halt.md deleted file mode 100644 index b982e4dbac8a6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halt.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) > [halt](./kibana-plugin-core-public.ihttpinterceptcontroller.halt.md) - -## IHttpInterceptController.halt() method - -Halt the request Promise chain and do not process further interceptors or response handlers. - -Signature: - -```typescript -halt(): void; -``` -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halted.md b/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halted.md deleted file mode 100644 index 82e5378412a5a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.halted.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) > [halted](./kibana-plugin-core-public.ihttpinterceptcontroller.halted.md) - -## IHttpInterceptController.halted property - -Whether or not this chain has been halted. - -Signature: - -```typescript -halted: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.md b/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.md deleted file mode 100644 index 15a66ef569e7d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpinterceptcontroller.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) - -## IHttpInterceptController interface - -Used to halt a request Promise chain in a [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md). - -Signature: - -```typescript -export interface IHttpInterceptController -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [halted](./kibana-plugin-core-public.ihttpinterceptcontroller.halted.md) | boolean | Whether or not this chain has been halted. | - -## Methods - -| Method | Description | -| --- | --- | -| [halt()](./kibana-plugin-core-public.ihttpinterceptcontroller.halt.md) | Halt the request Promise chain and do not process further interceptors or response handlers. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.body.md b/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.body.md deleted file mode 100644 index 70dfe72d62ac5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpResponseInterceptorOverrides](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md) > [body](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.body.md) - -## IHttpResponseInterceptorOverrides.body property - -Parsed body received, may be undefined if there was an error. - -Signature: - -```typescript -readonly body?: TResponseBody; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md b/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md deleted file mode 100644 index 57a4555cd6da5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpResponseInterceptorOverrides](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md) - -## IHttpResponseInterceptorOverrides interface - -Properties that can be returned by HttpInterceptor.request to override the response. - -Signature: - -```typescript -export interface IHttpResponseInterceptorOverrides -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.body.md) | TResponseBody | (Optional) Parsed body received, may be undefined if there was an error. | -| [response?](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.response.md) | Readonly<Response> | (Optional) Raw response received, may be undefined if there was an error. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.response.md b/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.response.md deleted file mode 100644 index c858200c2113f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.ihttpresponseinterceptoroverrides.response.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IHttpResponseInterceptorOverrides](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md) > [response](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.response.md) - -## IHttpResponseInterceptorOverrides.response property - -Raw response received, may be undefined if there was an error. - -Signature: - -```typescript -readonly response?: Readonly; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.itoasts.md b/docs/development/core/public/kibana-plugin-core-public.itoasts.md deleted file mode 100644 index e009c77fe23bc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.itoasts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IToasts](./kibana-plugin-core-public.itoasts.md) - -## IToasts type - -Methods for adding and removing global toast messages. See [ToastsApi](./kibana-plugin-core-public.toastsapi.md). - -Signature: - -```typescript -export declare type IToasts = Pick; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get.md deleted file mode 100644 index 903b6ff4bad1f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [get](./kibana-plugin-core-public.iuisettingsclient.get.md) - -## IUiSettingsClient.get property - -Gets the value for a specific uiSetting. If this setting has no user-defined value then the `defaultOverride` parameter is returned (and parsed if setting is of type "json" or "number). If the parameter is not defined and the key is not registered by any plugin then an error is thrown, otherwise reads the default value defined by a plugin. - -Signature: - -```typescript -get: (key: string, defaultOverride?: T) => T; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get_.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get_.md deleted file mode 100644 index 2ba20c34e81a5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.get_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [get$](./kibana-plugin-core-public.iuisettingsclient.get_.md) - -## IUiSettingsClient.get$ property - -Gets an observable of the current value for a config key, and all updates to that config key in the future. Providing a `defaultOverride` argument behaves the same as it does in \#get() - -Signature: - -```typescript -get$: (key: string, defaultOverride?: T) => Observable; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getall.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getall.md deleted file mode 100644 index 004979977376e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getall.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [getAll](./kibana-plugin-core-public.iuisettingsclient.getall.md) - -## IUiSettingsClient.getAll property - -Gets the metadata about all uiSettings, including the type, default value, and user value for each key. - -Signature: - -```typescript -getAll: () => Readonly>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdate_.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdate_.md deleted file mode 100644 index e9a8bf7cceece..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdate_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [getUpdate$](./kibana-plugin-core-public.iuisettingsclient.getupdate_.md) - -## IUiSettingsClient.getUpdate$ property - -Returns an Observable that notifies subscribers of each update to the uiSettings, including the key, newValue, and oldValue of the setting that changed. - -Signature: - -```typescript -getUpdate$: () => Observable<{ - key: string; - newValue: T; - oldValue: T; - }>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdateerrors_.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdateerrors_.md deleted file mode 100644 index 6270f4b553434..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.getupdateerrors_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [getUpdateErrors$](./kibana-plugin-core-public.iuisettingsclient.getupdateerrors_.md) - -## IUiSettingsClient.getUpdateErrors$ property - -Returns an Observable that notifies subscribers of each error while trying to update the settings, containing the actual Error class. - -Signature: - -```typescript -getUpdateErrors$: () => Observable; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.iscustom.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.iscustom.md deleted file mode 100644 index 8d3b2d9d37139..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.iscustom.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [isCustom](./kibana-plugin-core-public.iuisettingsclient.iscustom.md) - -## IUiSettingsClient.isCustom property - -Returns true if the setting wasn't registered by any plugin, but was either added directly via `set()`, or is an unknown setting found in the uiSettings saved object - -Signature: - -```typescript -isCustom: (key: string) => boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdeclared.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdeclared.md deleted file mode 100644 index 39c8a32202691..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdeclared.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [isDeclared](./kibana-plugin-core-public.iuisettingsclient.isdeclared.md) - -## IUiSettingsClient.isDeclared property - -Returns true if the key is a "known" uiSetting, meaning it is either registered by any plugin or was previously added as a custom setting via the `set()` method. - -Signature: - -```typescript -isDeclared: (key: string) => boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdefault.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdefault.md deleted file mode 100644 index 4a1b948bf0aca..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isdefault.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [isDefault](./kibana-plugin-core-public.iuisettingsclient.isdefault.md) - -## IUiSettingsClient.isDefault property - -Returns true if the setting has no user-defined value or is unknown - -Signature: - -```typescript -isDefault: (key: string) => boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isoverridden.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isoverridden.md deleted file mode 100644 index 0684c3617e434..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.isoverridden.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [isOverridden](./kibana-plugin-core-public.iuisettingsclient.isoverridden.md) - -## IUiSettingsClient.isOverridden property - -Shows whether the uiSettings value set by the user. - -Signature: - -```typescript -isOverridden: (key: string) => boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.md deleted file mode 100644 index 5d2429a799fe6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) - -## IUiSettingsClient interface - -Client-side client that provides access to the advanced settings stored in elasticsearch. The settings provide control over the behavior of the Kibana application. For example, a user can specify how to display numeric or date fields. Users can adjust the settings via Management UI. [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) - -Signature: - -```typescript -export interface IUiSettingsClient -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [get](./kibana-plugin-core-public.iuisettingsclient.get.md) | <T = any>(key: string, defaultOverride?: T) => T | Gets the value for a specific uiSetting. If this setting has no user-defined value then the defaultOverride parameter is returned (and parsed if setting is of type "json" or "number). If the parameter is not defined and the key is not registered by any plugin then an error is thrown, otherwise reads the default value defined by a plugin. | -| [get$](./kibana-plugin-core-public.iuisettingsclient.get_.md) | <T = any>(key: string, defaultOverride?: T) => Observable<T> | Gets an observable of the current value for a config key, and all updates to that config key in the future. Providing a defaultOverride argument behaves the same as it does in \#get() | -| [getAll](./kibana-plugin-core-public.iuisettingsclient.getall.md) | () => Readonly<Record<string, PublicUiSettingsParams & UserProvidedValues>> | Gets the metadata about all uiSettings, including the type, default value, and user value for each key. | -| [getUpdate$](./kibana-plugin-core-public.iuisettingsclient.getupdate_.md) | <T = any>() => Observable<{ key: string; newValue: T; oldValue: T; }> | Returns an Observable that notifies subscribers of each update to the uiSettings, including the key, newValue, and oldValue of the setting that changed. | -| [getUpdateErrors$](./kibana-plugin-core-public.iuisettingsclient.getupdateerrors_.md) | () => Observable<Error> | Returns an Observable that notifies subscribers of each error while trying to update the settings, containing the actual Error class. | -| [isCustom](./kibana-plugin-core-public.iuisettingsclient.iscustom.md) | (key: string) => boolean | Returns true if the setting wasn't registered by any plugin, but was either added directly via set(), or is an unknown setting found in the uiSettings saved object | -| [isDeclared](./kibana-plugin-core-public.iuisettingsclient.isdeclared.md) | (key: string) => boolean | Returns true if the key is a "known" uiSetting, meaning it is either registered by any plugin or was previously added as a custom setting via the set() method. | -| [isDefault](./kibana-plugin-core-public.iuisettingsclient.isdefault.md) | (key: string) => boolean | Returns true if the setting has no user-defined value or is unknown | -| [isOverridden](./kibana-plugin-core-public.iuisettingsclient.isoverridden.md) | (key: string) => boolean | Shows whether the uiSettings value set by the user. | -| [remove](./kibana-plugin-core-public.iuisettingsclient.remove.md) | (key: string) => Promise<boolean> | Removes the user-defined value for a setting, causing it to revert to the default. This method behaves the same as calling set(key, null), including the synchronization, custom setting, and error behavior of that method. | -| [set](./kibana-plugin-core-public.iuisettingsclient.set.md) | (key: string, value: any) => Promise<boolean> | Sets the value for a uiSetting. If the setting is not registered by any plugin it will be stored as a custom setting. The new value will be synchronously available via the get() method and sent to the server in the background. If the request to the server fails then a updateErrors$ will be notified and the setting will be reverted to its value before set() was called. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.remove.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.remove.md deleted file mode 100644 index b6d4ff04cf4a1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.remove.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [remove](./kibana-plugin-core-public.iuisettingsclient.remove.md) - -## IUiSettingsClient.remove property - -Removes the user-defined value for a setting, causing it to revert to the default. This method behaves the same as calling `set(key, null)`, including the synchronization, custom setting, and error behavior of that method. - -Signature: - -```typescript -remove: (key: string) => Promise; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.set.md b/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.set.md deleted file mode 100644 index ea817c39980ea..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.iuisettingsclient.set.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) > [set](./kibana-plugin-core-public.iuisettingsclient.set.md) - -## IUiSettingsClient.set property - -Sets the value for a uiSetting. If the setting is not registered by any plugin it will be stored as a custom setting. The new value will be synchronously available via the `get()` method and sent to the server in the background. If the request to the server fails then a updateErrors$ will be notified and the setting will be reverted to its value before `set()` was called. - -Signature: - -```typescript -set: (key: string, value: any) => Promise; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.kibanaexecutioncontext.md b/docs/development/core/public/kibana-plugin-core-public.kibanaexecutioncontext.md deleted file mode 100644 index d8f8a77d84b2f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.kibanaexecutioncontext.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) - -## KibanaExecutionContext type - -Represents a meta-information about a Kibana entity initiating a search request. - -Signature: - -```typescript -export declare type KibanaExecutionContext = { - readonly type?: string; - readonly name?: string; - readonly page?: string; - readonly id?: string; - readonly description?: string; - readonly url?: string; - child?: KibanaExecutionContext; -}; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.md b/docs/development/core/public/kibana-plugin-core-public.md deleted file mode 100644 index 1d2b07d13f6a8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.md +++ /dev/null @@ -1,185 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) - -## kibana-plugin-core-public package - -The Kibana Core APIs for client-side plugins. - -A plugin's `public/index` file must contain a named import, `plugin`, that implements [PluginInitializer](./kibana-plugin-core-public.plugininitializer.md) which returns an object that implements . - -The plugin integrates with the core system via lifecycle events: `setup`, `start`, and `stop`. In each lifecycle method, the plugin will receive the corresponding core services available (either [CoreSetup](./kibana-plugin-core-public.coresetup.md) or [CoreStart](./kibana-plugin-core-public.corestart.md)) and any interfaces returned by dependency plugins' lifecycle method. Anything returned by the plugin's lifecycle method will be exposed to downstream dependencies when their corresponding lifecycle methods are invoked. - -## Classes - -| Class | Description | -| --- | --- | -| [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) | A wrapper around a History instance that is scoped to a particular base path of the history stack. Behaves similarly to the basename option except that this wrapper hides any history stack entries from outside the scope of this base path.This wrapper also allows Core and Plugins to share a single underlying global History instance without exposing the history of other applications.The [createSubHistory](./kibana-plugin-core-public.scopedhistory.createsubhistory.md) method is particularly useful for applications that contain any number of "sub-apps" which should not have access to the main application's history or basePath. | -| [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) | This class is a very simple wrapper for SavedObjects loaded from the server with the [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md).It provides basic functionality for creating/saving/deleting saved objects, but doesn't include any type-specific implementations. | -| [ToastsApi](./kibana-plugin-core-public.toastsapi.md) | Methods for adding and removing global toast messages. | - -## Enumerations - -| Enumeration | Description | -| --- | --- | -| [AppLeaveActionType](./kibana-plugin-core-public.appleaveactiontype.md) | Possible type of actions on application leave. | -| [AppNavLinkStatus](./kibana-plugin-core-public.appnavlinkstatus.md) | Status of the application's navLink. | -| [AppStatus](./kibana-plugin-core-public.appstatus.md) | Accessibility status of an application. | - -## Interfaces - -| Interface | Description | -| --- | --- | -| [App](./kibana-plugin-core-public.app.md) | | -| [AppCategory](./kibana-plugin-core-public.appcategory.md) | A category definition for nav links to know where to sort them in the left hand nav | -| [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) | Action to return from a [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md) to show a confirmation message when trying to leave an application.See | -| [AppLeaveDefaultAction](./kibana-plugin-core-public.appleavedefaultaction.md) | Action to return from a [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md) to execute the default behaviour when leaving the application.See | -| [ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) | | -| [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) | | -| [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) | | -| [AppNavOptions](./kibana-plugin-core-public.appnavoptions.md) | App navigation menu options | -| [Capabilities](./kibana-plugin-core-public.capabilities.md) | The read-only set of capabilities available for the current UI session. Capabilities are simple key-value pairs of (string, boolean), where the string denotes the capability ID, and the boolean is a flag indicating if the capability is enabled or disabled. | -| [ChromeBadge](./kibana-plugin-core-public.chromebadge.md) | | -| [ChromeDocTitle](./kibana-plugin-core-public.chromedoctitle.md) | APIs for accessing and updating the document title. | -| [ChromeHelpExtension](./kibana-plugin-core-public.chromehelpextension.md) | | -| [ChromeHelpExtensionMenuCustomLink](./kibana-plugin-core-public.chromehelpextensionmenucustomlink.md) | | -| [ChromeHelpExtensionMenuDiscussLink](./kibana-plugin-core-public.chromehelpextensionmenudiscusslink.md) | | -| [ChromeHelpExtensionMenuDocumentationLink](./kibana-plugin-core-public.chromehelpextensionmenudocumentationlink.md) | | -| [ChromeHelpExtensionMenuGitHubLink](./kibana-plugin-core-public.chromehelpextensionmenugithublink.md) | | -| [ChromeHelpMenuActions](./kibana-plugin-core-public.chromehelpmenuactions.md) | | -| [ChromeNavControl](./kibana-plugin-core-public.chromenavcontrol.md) | | -| [ChromeNavControls](./kibana-plugin-core-public.chromenavcontrols.md) | [APIs](./kibana-plugin-core-public.chromenavcontrols.md) for registering new controls to be displayed in the navigation bar. | -| [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) | | -| [ChromeNavLinks](./kibana-plugin-core-public.chromenavlinks.md) | [APIs](./kibana-plugin-core-public.chromenavlinks.md) for manipulating nav links. | -| [ChromeRecentlyAccessed](./kibana-plugin-core-public.chromerecentlyaccessed.md) | [APIs](./kibana-plugin-core-public.chromerecentlyaccessed.md) for recently accessed history. | -| [ChromeRecentlyAccessedHistoryItem](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md) | | -| [ChromeStart](./kibana-plugin-core-public.chromestart.md) | ChromeStart allows plugins to customize the global chrome header UI and enrich the UX with additional information about the current location of the browser. | -| [ChromeUserBanner](./kibana-plugin-core-public.chromeuserbanner.md) | | -| [CoreSetup](./kibana-plugin-core-public.coresetup.md) | Core services exposed to the Plugin setup lifecycle | -| [CoreStart](./kibana-plugin-core-public.corestart.md) | Core services exposed to the Plugin start lifecycle | -| [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) | DeprecationsService provides methods to fetch domain deprecation details from the Kibana server. | -| [ErrorToastOptions](./kibana-plugin-core-public.errortoastoptions.md) | Options available for [IToasts](./kibana-plugin-core-public.itoasts.md) error APIs. | -| [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md) | Kibana execution context. Used to provide execution context to Elasticsearch, reporting, performance monitoring, etc. | -| [FatalErrorInfo](./kibana-plugin-core-public.fatalerrorinfo.md) | Represents the message and stack of a fatal Error | -| [FatalErrorsSetup](./kibana-plugin-core-public.fatalerrorssetup.md) | FatalErrors stop the Kibana Public Core and displays a fatal error screen with details about the Kibana build and the error. | -| [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) | All options that may be used with a [HttpHandler](./kibana-plugin-core-public.httphandler.md). | -| [HttpFetchOptionsWithPath](./kibana-plugin-core-public.httpfetchoptionswithpath.md) | Similar to [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) but with the URL path included. | -| [HttpFetchQuery](./kibana-plugin-core-public.httpfetchquery.md) | | -| [HttpHandler](./kibana-plugin-core-public.httphandler.md) | A function for making an HTTP requests to Kibana's backend. See [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) for options and [HttpResponse](./kibana-plugin-core-public.httpresponse.md) for the response. | -| [HttpHeadersInit](./kibana-plugin-core-public.httpheadersinit.md) | Headers to append to the request. Any headers that begin with kbn- are considered private to Core and will cause [HttpHandler](./kibana-plugin-core-public.httphandler.md) to throw an error. | -| [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md) | An object that may define global interceptor functions for different parts of the request and response lifecycle. See [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md). | -| [HttpInterceptorRequestError](./kibana-plugin-core-public.httpinterceptorrequesterror.md) | | -| [HttpInterceptorResponseError](./kibana-plugin-core-public.httpinterceptorresponseerror.md) | | -| [HttpRequestInit](./kibana-plugin-core-public.httprequestinit.md) | Fetch API options available to [HttpHandler](./kibana-plugin-core-public.httphandler.md)s. | -| [HttpResponse](./kibana-plugin-core-public.httpresponse.md) | | -| [HttpSetup](./kibana-plugin-core-public.httpsetup.md) | | -| [I18nStart](./kibana-plugin-core-public.i18nstart.md) | I18nStart.Context is required by any localizable React component from @kbn/i18n and @elastic/eui packages and is supposed to be used as the topmost component for any i18n-compatible React tree. | -| [IAnonymousPaths](./kibana-plugin-core-public.ianonymouspaths.md) | APIs for denoting paths as not requiring authentication | -| [IBasePath](./kibana-plugin-core-public.ibasepath.md) | APIs for manipulating the basePath on URL segments. | -| [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md) | APIs for working with external URLs. | -| [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) | A policy describing whether access to an external destination is allowed. | -| [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) | | -| [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) | Used to halt a request Promise chain in a [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md). | -| [IHttpResponseInterceptorOverrides](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md) | Properties that can be returned by HttpInterceptor.request to override the response. | -| [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) | Client-side client that provides access to the advanced settings stored in elasticsearch. The settings provide control over the behavior of the Kibana application. For example, a user can specify how to display numeric or date fields. Users can adjust the settings via Management UI. [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) | -| [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) | Options for the [navigateToApp API](./kibana-plugin-core-public.applicationstart.navigatetoapp.md) | -| [NavigateToUrlOptions](./kibana-plugin-core-public.navigatetourloptions.md) | Options for the [navigateToUrl API](./kibana-plugin-core-public.applicationstart.navigatetourl.md) | -| [NotificationsSetup](./kibana-plugin-core-public.notificationssetup.md) | | -| [NotificationsStart](./kibana-plugin-core-public.notificationsstart.md) | | -| [OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) | | -| [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) | | -| [OverlayFlyoutStart](./kibana-plugin-core-public.overlayflyoutstart.md) | APIs to open and manage fly-out dialogs. | -| [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) | | -| [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) | | -| [OverlayModalStart](./kibana-plugin-core-public.overlaymodalstart.md) | APIs to open and manage modal dialogs. | -| [OverlayRef](./kibana-plugin-core-public.overlayref.md) | Returned by [OverlayStart](./kibana-plugin-core-public.overlaystart.md) methods for closing a mounted overlay. | -| [OverlayStart](./kibana-plugin-core-public.overlaystart.md) | | -| [Plugin\_2](./kibana-plugin-core-public.plugin_2.md) | The interface that should be returned by a PluginInitializer. | -| [PluginInitializerContext](./kibana-plugin-core-public.plugininitializercontext.md) | The available core services passed to a PluginInitializer | -| [ResolvedSimpleSavedObject](./kibana-plugin-core-public.resolvedsimplesavedobject.md) | This interface is a very simple wrapper for SavedObjects resolved from the server with the [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md). | -| [ResponseErrorBody](./kibana-plugin-core-public.responseerrorbody.md) | | -| [SavedObject](./kibana-plugin-core-public.savedobject.md) | | -| [SavedObjectAttributes](./kibana-plugin-core-public.savedobjectattributes.md) | The data for a Saved Object is stored as an object in the attributes property. | -| [SavedObjectError](./kibana-plugin-core-public.savedobjecterror.md) | | -| [SavedObjectReference](./kibana-plugin-core-public.savedobjectreference.md) | A reference to another saved object. | -| [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) | A returned input object or one of its references, with additional context. | -| [SavedObjectsBaseOptions](./kibana-plugin-core-public.savedobjectsbaseoptions.md) | | -| [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) | | -| [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) | The client-side SavedObjectsClient is a thin convenience library around the SavedObjects HTTP API for interacting with Saved Objects. | -| [SavedObjectsCollectMultiNamespaceReferencesResponse](./kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md) | The response when object references are collected. | -| [SavedObjectsCreateOptions](./kibana-plugin-core-public.savedobjectscreateoptions.md) | | -| [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) | | -| [SavedObjectsFindOptionsReference](./kibana-plugin-core-public.savedobjectsfindoptionsreference.md) | | -| [SavedObjectsFindResponsePublic](./kibana-plugin-core-public.savedobjectsfindresponsepublic.md) | Return type of the Saved Objects find() method.\*Note\*: this type is different between the Public and Server Saved Objects clients. | -| [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) | A warning meant to notify that a specific user action is required to finalize the import of some type of object. The actionUrl must be a path relative to the basePath, and not include it. | -| [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md) | Represents a failure to import due to a conflict, which can be resolved in different ways with an overwrite. | -| [SavedObjectsImportConflictError](./kibana-plugin-core-public.savedobjectsimportconflicterror.md) | Represents a failure to import due to a conflict. | -| [SavedObjectsImportFailure](./kibana-plugin-core-public.savedobjectsimportfailure.md) | Represents a failure to import. | -| [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md) | Represents a failure to import due to missing references. | -| [SavedObjectsImportResponse](./kibana-plugin-core-public.savedobjectsimportresponse.md) | The response describing the result of an import. | -| [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) | Describes a retry operation for importing a saved object. | -| [SavedObjectsImportSimpleWarning](./kibana-plugin-core-public.savedobjectsimportsimplewarning.md) | A simple informative warning that will be displayed to the user. | -| [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) | Represents a successful import. | -| [SavedObjectsImportUnknownError](./kibana-plugin-core-public.savedobjectsimportunknownerror.md) | Represents a failure to import due to an unknown reason. | -| [SavedObjectsImportUnsupportedTypeError](./kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.md) | Represents a failure to import due to having an unsupported saved object type. | -| [SavedObjectsMigrationVersion](./kibana-plugin-core-public.savedobjectsmigrationversion.md) | Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | -| [SavedObjectsResolveResponse](./kibana-plugin-core-public.savedobjectsresolveresponse.md) | | -| [SavedObjectsStart](./kibana-plugin-core-public.savedobjectsstart.md) | | -| [SavedObjectsUpdateOptions](./kibana-plugin-core-public.savedobjectsupdateoptions.md) | | -| [ToastOptions](./kibana-plugin-core-public.toastoptions.md) | Options available for [IToasts](./kibana-plugin-core-public.itoasts.md) APIs. | -| [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) | UiSettings parameters defined by the plugins. | -| [UiSettingsState](./kibana-plugin-core-public.uisettingsstate.md) | | -| [UserProvidedValues](./kibana-plugin-core-public.userprovidedvalues.md) | Describes the values explicitly set by user. | - -## Variables - -| Variable | Description | -| --- | --- | -| [APP\_WRAPPER\_CLASS](./kibana-plugin-core-public.app_wrapper_class.md) | The class name for top level \*and\* nested application wrappers to ensure proper layout | -| [URL\_MAX\_LENGTH](./kibana-plugin-core-public.url_max_length.md) | The max URL length allowed by the current browser. Should be used to display warnings to users when query parameters cause URL to exceed this limit. | - -## Type Aliases - -| Type Alias | Description | -| --- | --- | -| [AppDeepLink](./kibana-plugin-core-public.appdeeplink.md) | Input type for registering secondary in-app locations for an application.Deep links must include at least one of path or deepLinks. A deep link that does not have a path represents a topological level in the application's hierarchy, but does not have a destination URL that is user-accessible. | -| [AppLeaveAction](./kibana-plugin-core-public.appleaveaction.md) | Possible actions to return from a [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md)See [AppLeaveConfirmAction](./kibana-plugin-core-public.appleaveconfirmaction.md) and [AppLeaveDefaultAction](./kibana-plugin-core-public.appleavedefaultaction.md) | -| [AppLeaveHandler](./kibana-plugin-core-public.appleavehandler.md) | A handler that will be executed before leaving the application, either when going to another application or when closing the browser tab or manually changing the url. Should return confirm to prompt a message to the user before leaving the page, or default to keep the default behavior (doing nothing).See [AppMountParameters](./kibana-plugin-core-public.appmountparameters.md) for detailed usage examples. | -| [AppMount](./kibana-plugin-core-public.appmount.md) | A mount function called when the user navigates to this app's route. | -| [AppUnmount](./kibana-plugin-core-public.appunmount.md) | A function called when an application should be unmounted from the page. This function should be synchronous. | -| [AppUpdatableFields](./kibana-plugin-core-public.appupdatablefields.md) | Defines the list of fields that can be updated via an [AppUpdater](./kibana-plugin-core-public.appupdater.md). | -| [AppUpdater](./kibana-plugin-core-public.appupdater.md) | Updater for applications. see [ApplicationSetup](./kibana-plugin-core-public.applicationsetup.md) | -| [ChromeBreadcrumb](./kibana-plugin-core-public.chromebreadcrumb.md) | | -| [ChromeHelpExtensionLinkBase](./kibana-plugin-core-public.chromehelpextensionlinkbase.md) | | -| [ChromeHelpExtensionMenuLink](./kibana-plugin-core-public.chromehelpextensionmenulink.md) | | -| [ExecutionContextStart](./kibana-plugin-core-public.executioncontextstart.md) | See [ExecutionContextSetup](./kibana-plugin-core-public.executioncontextsetup.md). | -| [FatalErrorsStart](./kibana-plugin-core-public.fatalerrorsstart.md) | FatalErrors stop the Kibana Public Core and displays a fatal error screen with details about the Kibana build and the error. | -| [HttpStart](./kibana-plugin-core-public.httpstart.md) | See [HttpSetup](./kibana-plugin-core-public.httpsetup.md) | -| [IToasts](./kibana-plugin-core-public.itoasts.md) | Methods for adding and removing global toast messages. See [ToastsApi](./kibana-plugin-core-public.toastsapi.md). | -| [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) | Represents a meta-information about a Kibana entity initiating a search request. | -| [MountPoint](./kibana-plugin-core-public.mountpoint.md) | A function that should mount DOM content inside the provided container element and return a handler to unmount it. | -| [NavType](./kibana-plugin-core-public.navtype.md) | | -| [PluginInitializer](./kibana-plugin-core-public.plugininitializer.md) | The plugin export at the root of a plugin's public directory should conform to this interface. | -| [PublicAppDeepLinkInfo](./kibana-plugin-core-public.publicappdeeplinkinfo.md) | Public information about a registered app's [deepLinks](./kibana-plugin-core-public.appdeeplink.md) | -| [PublicAppInfo](./kibana-plugin-core-public.publicappinfo.md) | Public information about a registered [application](./kibana-plugin-core-public.app.md) | -| [PublicUiSettingsParams](./kibana-plugin-core-public.publicuisettingsparams.md) | A sub-set of [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) exposed to the client-side. | -| [ResolveDeprecationResponse](./kibana-plugin-core-public.resolvedeprecationresponse.md) | | -| [SavedObjectAttribute](./kibana-plugin-core-public.savedobjectattribute.md) | Type definition for a Saved Object attribute value | -| [SavedObjectAttributeSingle](./kibana-plugin-core-public.savedobjectattributesingle.md) | Don't use this type, it's simply a helper type for [SavedObjectAttribute](./kibana-plugin-core-public.savedobjectattribute.md) | -| [SavedObjectsImportWarning](./kibana-plugin-core-public.savedobjectsimportwarning.md) | Composite type of all the possible types of import warnings.See [SavedObjectsImportSimpleWarning](./kibana-plugin-core-public.savedobjectsimportsimplewarning.md) and [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) for more details. | -| [SavedObjectsNamespaceType](./kibana-plugin-core-public.savedobjectsnamespacetype.md) | The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global. | -| [StartServicesAccessor](./kibana-plugin-core-public.startservicesaccessor.md) | Allows plugins to get access to APIs available in start inside async handlers, such as [App.mount](./kibana-plugin-core-public.app.mount.md). Promise will not resolve until Core and plugin dependencies have completed start. | -| [Toast](./kibana-plugin-core-public.toast.md) | | -| [ToastInput](./kibana-plugin-core-public.toastinput.md) | Inputs for [IToasts](./kibana-plugin-core-public.itoasts.md) APIs. | -| [ToastInputFields](./kibana-plugin-core-public.toastinputfields.md) | Allowed fields for [ToastInput](./kibana-plugin-core-public.toastinput.md). | -| [ToastsSetup](./kibana-plugin-core-public.toastssetup.md) | [IToasts](./kibana-plugin-core-public.itoasts.md) | -| [ToastsStart](./kibana-plugin-core-public.toastsstart.md) | [IToasts](./kibana-plugin-core-public.itoasts.md) | -| [UiSettingsType](./kibana-plugin-core-public.uisettingstype.md) | UI element type to represent the settings. | -| [UnmountCallback](./kibana-plugin-core-public.unmountcallback.md) | A function that will unmount the element previously mounted by the associated [MountPoint](./kibana-plugin-core-public.mountpoint.md) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.mountpoint.md b/docs/development/core/public/kibana-plugin-core-public.mountpoint.md deleted file mode 100644 index 41c6269b3e6da..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.mountpoint.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [MountPoint](./kibana-plugin-core-public.mountpoint.md) - -## MountPoint type - -A function that should mount DOM content inside the provided container element and return a handler to unmount it. - -Signature: - -```typescript -export declare type MountPoint = (element: T) => UnmountCallback; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.deeplinkid.md b/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.deeplinkid.md deleted file mode 100644 index 4039e1338fc1c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.deeplinkid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) > [deepLinkId](./kibana-plugin-core-public.navigatetoappoptions.deeplinkid.md) - -## NavigateToAppOptions.deepLinkId property - -optional [deep link](./kibana-plugin-core-public.app.deeplinks.md) id inside the application to navigate to. If an additional [path](./kibana-plugin-core-public.navigatetoappoptions.path.md) is defined it will be appended to the deep link path. - -Signature: - -```typescript -deepLinkId?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.md b/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.md deleted file mode 100644 index 337e9db1f80d2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) - -## NavigateToAppOptions interface - -Options for the [navigateToApp API](./kibana-plugin-core-public.applicationstart.navigatetoapp.md) - -Signature: - -```typescript -export interface NavigateToAppOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [deepLinkId?](./kibana-plugin-core-public.navigatetoappoptions.deeplinkid.md) | string | (Optional) optional [deep link](./kibana-plugin-core-public.app.deeplinks.md) id inside the application to navigate to. If an additional [path](./kibana-plugin-core-public.navigatetoappoptions.path.md) is defined it will be appended to the deep link path. | -| [openInNewTab?](./kibana-plugin-core-public.navigatetoappoptions.openinnewtab.md) | boolean | (Optional) if true, will open the app in new tab, will share session information via window.open if base | -| [path?](./kibana-plugin-core-public.navigatetoappoptions.path.md) | string | (Optional) optional path inside application to deep link to. If undefined, will use [the app's default path](./kibana-plugin-core-public.app.defaultpath.md) as default. | -| [replace?](./kibana-plugin-core-public.navigatetoappoptions.replace.md) | boolean | (Optional) if true, will not create a new history entry when navigating (using replace instead of push) | -| [skipAppLeave?](./kibana-plugin-core-public.navigatetoappoptions.skipappleave.md) | boolean | (Optional) if true, will bypass the default onAppLeave behavior | -| [state?](./kibana-plugin-core-public.navigatetoappoptions.state.md) | unknown | (Optional) optional state to forward to the application | - diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.openinnewtab.md b/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.openinnewtab.md deleted file mode 100644 index 4609fa68b3824..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.openinnewtab.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) > [openInNewTab](./kibana-plugin-core-public.navigatetoappoptions.openinnewtab.md) - -## NavigateToAppOptions.openInNewTab property - -if true, will open the app in new tab, will share session information via window.open if base - -Signature: - -```typescript -openInNewTab?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.path.md b/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.path.md deleted file mode 100644 index b39fc8c324ad9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.path.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) > [path](./kibana-plugin-core-public.navigatetoappoptions.path.md) - -## NavigateToAppOptions.path property - -optional path inside application to deep link to. If undefined, will use [the app's default path](./kibana-plugin-core-public.app.defaultpath.md) as default. - -Signature: - -```typescript -path?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.replace.md b/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.replace.md deleted file mode 100644 index 8a7440025aedc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.replace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) > [replace](./kibana-plugin-core-public.navigatetoappoptions.replace.md) - -## NavigateToAppOptions.replace property - -if true, will not create a new history entry when navigating (using `replace` instead of `push`) - -Signature: - -```typescript -replace?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.skipappleave.md b/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.skipappleave.md deleted file mode 100644 index 553d557a92daa..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.skipappleave.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) > [skipAppLeave](./kibana-plugin-core-public.navigatetoappoptions.skipappleave.md) - -## NavigateToAppOptions.skipAppLeave property - -if true, will bypass the default onAppLeave behavior - -Signature: - -```typescript -skipAppLeave?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.state.md b/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.state.md deleted file mode 100644 index ccb76f7bbf18e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetoappoptions.state.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) > [state](./kibana-plugin-core-public.navigatetoappoptions.state.md) - -## NavigateToAppOptions.state property - -optional state to forward to the application - -Signature: - -```typescript -state?: unknown; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.forceredirect.md b/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.forceredirect.md deleted file mode 100644 index a71196093a9a0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.forceredirect.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToUrlOptions](./kibana-plugin-core-public.navigatetourloptions.md) > [forceRedirect](./kibana-plugin-core-public.navigatetourloptions.forceredirect.md) - -## NavigateToUrlOptions.forceRedirect property - -if true will force a full page reload/refresh/assign, overriding the outcome of other url checks against current the location (effectively using `window.location.assign` instead of `push`) - -Signature: - -```typescript -forceRedirect?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.md b/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.md deleted file mode 100644 index 2ee7b4f843c67..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToUrlOptions](./kibana-plugin-core-public.navigatetourloptions.md) - -## NavigateToUrlOptions interface - -Options for the [navigateToUrl API](./kibana-plugin-core-public.applicationstart.navigatetourl.md) - -Signature: - -```typescript -export interface NavigateToUrlOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [forceRedirect?](./kibana-plugin-core-public.navigatetourloptions.forceredirect.md) | boolean | (Optional) if true will force a full page reload/refresh/assign, overriding the outcome of other url checks against current the location (effectively using window.location.assign instead of push) | -| [skipAppLeave?](./kibana-plugin-core-public.navigatetourloptions.skipappleave.md) | boolean | (Optional) if true, will bypass the default onAppLeave behavior | - diff --git a/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.skipappleave.md b/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.skipappleave.md deleted file mode 100644 index f3685c02ff40d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navigatetourloptions.skipappleave.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavigateToUrlOptions](./kibana-plugin-core-public.navigatetourloptions.md) > [skipAppLeave](./kibana-plugin-core-public.navigatetourloptions.skipappleave.md) - -## NavigateToUrlOptions.skipAppLeave property - -if true, will bypass the default onAppLeave behavior - -Signature: - -```typescript -skipAppLeave?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.navtype.md b/docs/development/core/public/kibana-plugin-core-public.navtype.md deleted file mode 100644 index 8f1d9a4351754..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.navtype.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NavType](./kibana-plugin-core-public.navtype.md) - -## NavType type - -Signature: - -```typescript -export declare type NavType = 'modern' | 'legacy'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.notificationssetup.md b/docs/development/core/public/kibana-plugin-core-public.notificationssetup.md deleted file mode 100644 index efaeafa1afb1a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.notificationssetup.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NotificationsSetup](./kibana-plugin-core-public.notificationssetup.md) - -## NotificationsSetup interface - - -Signature: - -```typescript -export interface NotificationsSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [toasts](./kibana-plugin-core-public.notificationssetup.toasts.md) | ToastsSetup | [ToastsSetup](./kibana-plugin-core-public.toastssetup.md) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.notificationssetup.toasts.md b/docs/development/core/public/kibana-plugin-core-public.notificationssetup.toasts.md deleted file mode 100644 index f544ce98989b2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.notificationssetup.toasts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NotificationsSetup](./kibana-plugin-core-public.notificationssetup.md) > [toasts](./kibana-plugin-core-public.notificationssetup.toasts.md) - -## NotificationsSetup.toasts property - -[ToastsSetup](./kibana-plugin-core-public.toastssetup.md) - -Signature: - -```typescript -toasts: ToastsSetup; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.notificationsstart.md b/docs/development/core/public/kibana-plugin-core-public.notificationsstart.md deleted file mode 100644 index 0e77badd51235..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.notificationsstart.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NotificationsStart](./kibana-plugin-core-public.notificationsstart.md) - -## NotificationsStart interface - - -Signature: - -```typescript -export interface NotificationsStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [toasts](./kibana-plugin-core-public.notificationsstart.toasts.md) | ToastsStart | [ToastsStart](./kibana-plugin-core-public.toastsstart.md) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.notificationsstart.toasts.md b/docs/development/core/public/kibana-plugin-core-public.notificationsstart.toasts.md deleted file mode 100644 index a047c66f04e71..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.notificationsstart.toasts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [NotificationsStart](./kibana-plugin-core-public.notificationsstart.md) > [toasts](./kibana-plugin-core-public.notificationsstart.toasts.md) - -## NotificationsStart.toasts property - -[ToastsStart](./kibana-plugin-core-public.toastsstart.md) - -Signature: - -```typescript -toasts: ToastsStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.add.md b/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.add.md deleted file mode 100644 index fd3ce0b3a4292..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.add.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) > [add](./kibana-plugin-core-public.overlaybannersstart.add.md) - -## OverlayBannersStart.add() method - -Add a new banner - -Signature: - -```typescript -add(mount: MountPoint, priority?: number): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| mount | MountPoint | [MountPoint](./kibana-plugin-core-public.mountpoint.md) | -| priority | number | optional priority order to display this banner. Higher priority values are shown first. | - -Returns: - -string - -a unique identifier for the given banner to be used with [OverlayBannersStart.remove()](./kibana-plugin-core-public.overlaybannersstart.remove.md) and [OverlayBannersStart.replace()](./kibana-plugin-core-public.overlaybannersstart.replace.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.getcomponent.md b/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.getcomponent.md deleted file mode 100644 index b5f0ab1d01299..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.getcomponent.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) > [getComponent](./kibana-plugin-core-public.overlaybannersstart.getcomponent.md) - -## OverlayBannersStart.getComponent() method - -Signature: - -```typescript -getComponent(): JSX.Element; -``` -Returns: - -JSX.Element - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.md b/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.md deleted file mode 100644 index f81da84d58bdc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) - -## OverlayBannersStart interface - - -Signature: - -```typescript -export interface OverlayBannersStart -``` - -## Methods - -| Method | Description | -| --- | --- | -| [add(mount, priority)](./kibana-plugin-core-public.overlaybannersstart.add.md) | Add a new banner | -| [getComponent()](./kibana-plugin-core-public.overlaybannersstart.getcomponent.md) | | -| [remove(id)](./kibana-plugin-core-public.overlaybannersstart.remove.md) | Remove a banner | -| [replace(id, mount, priority)](./kibana-plugin-core-public.overlaybannersstart.replace.md) | Replace a banner in place | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.remove.md b/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.remove.md deleted file mode 100644 index ce1e3ee08bd51..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.remove.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) > [remove](./kibana-plugin-core-public.overlaybannersstart.remove.md) - -## OverlayBannersStart.remove() method - -Remove a banner - -Signature: - -```typescript -remove(id: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string | the unique identifier for the banner returned by [OverlayBannersStart.add()](./kibana-plugin-core-public.overlaybannersstart.add.md) | - -Returns: - -boolean - -if the banner was found or not - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.replace.md b/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.replace.md deleted file mode 100644 index ea16c739cc847..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaybannersstart.replace.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) > [replace](./kibana-plugin-core-public.overlaybannersstart.replace.md) - -## OverlayBannersStart.replace() method - -Replace a banner in place - -Signature: - -```typescript -replace(id: string | undefined, mount: MountPoint, priority?: number): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string \| undefined | the unique identifier for the banner returned by [OverlayBannersStart.add()](./kibana-plugin-core-public.overlaybannersstart.add.md) | -| mount | MountPoint | [MountPoint](./kibana-plugin-core-public.mountpoint.md) | -| priority | number | optional priority order to display this banner. Higher priority values are shown first. | - -Returns: - -string - -a new identifier for the given banner to be used with [OverlayBannersStart.remove()](./kibana-plugin-core-public.overlaybannersstart.remove.md) and [OverlayBannersStart.replace()](./kibana-plugin-core-public.overlaybannersstart.replace.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._aria-label_.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._aria-label_.md deleted file mode 100644 index f135fa9618958..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._aria-label_.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > ["aria-label"](./kibana-plugin-core-public.overlayflyoutopenoptions._aria-label_.md) - -## OverlayFlyoutOpenOptions."aria-label" property - -Signature: - -```typescript -'aria-label'?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._data-test-subj_.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._data-test-subj_.md deleted file mode 100644 index d583aae0e0b19..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions._data-test-subj_.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > ["data-test-subj"](./kibana-plugin-core-public.overlayflyoutopenoptions._data-test-subj_.md) - -## OverlayFlyoutOpenOptions."data-test-subj" property - -Signature: - -```typescript -'data-test-subj'?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.classname.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.classname.md deleted file mode 100644 index 26f6db77cccea..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.classname.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [className](./kibana-plugin-core-public.overlayflyoutopenoptions.classname.md) - -## OverlayFlyoutOpenOptions.className property - -Signature: - -```typescript -className?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.closebuttonarialabel.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.closebuttonarialabel.md deleted file mode 100644 index 44014b7f0d816..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.closebuttonarialabel.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [closeButtonAriaLabel](./kibana-plugin-core-public.overlayflyoutopenoptions.closebuttonarialabel.md) - -## OverlayFlyoutOpenOptions.closeButtonAriaLabel property - -Signature: - -```typescript -closeButtonAriaLabel?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.hideclosebutton.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.hideclosebutton.md deleted file mode 100644 index 149a53f35d34d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.hideclosebutton.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [hideCloseButton](./kibana-plugin-core-public.overlayflyoutopenoptions.hideclosebutton.md) - -## OverlayFlyoutOpenOptions.hideCloseButton property - -Signature: - -```typescript -hideCloseButton?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maskprops.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maskprops.md deleted file mode 100644 index 3cb3e0b4902a9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maskprops.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [maskProps](./kibana-plugin-core-public.overlayflyoutopenoptions.maskprops.md) - -## OverlayFlyoutOpenOptions.maskProps property - -Signature: - -```typescript -maskProps?: EuiOverlayMaskProps; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maxwidth.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maxwidth.md deleted file mode 100644 index 4f582e746191f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.maxwidth.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [maxWidth](./kibana-plugin-core-public.overlayflyoutopenoptions.maxwidth.md) - -## OverlayFlyoutOpenOptions.maxWidth property - -Signature: - -```typescript -maxWidth?: boolean | number | string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.md deleted file mode 100644 index 86117422e5faf..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) - -## OverlayFlyoutOpenOptions interface - - -Signature: - -```typescript -export interface OverlayFlyoutOpenOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| ["aria-label"?](./kibana-plugin-core-public.overlayflyoutopenoptions._aria-label_.md) | string | (Optional) | -| ["data-test-subj"?](./kibana-plugin-core-public.overlayflyoutopenoptions._data-test-subj_.md) | string | (Optional) | -| [className?](./kibana-plugin-core-public.overlayflyoutopenoptions.classname.md) | string | (Optional) | -| [closeButtonAriaLabel?](./kibana-plugin-core-public.overlayflyoutopenoptions.closebuttonarialabel.md) | string | (Optional) | -| [hideCloseButton?](./kibana-plugin-core-public.overlayflyoutopenoptions.hideclosebutton.md) | boolean | (Optional) | -| [maskProps?](./kibana-plugin-core-public.overlayflyoutopenoptions.maskprops.md) | EuiOverlayMaskProps | (Optional) | -| [maxWidth?](./kibana-plugin-core-public.overlayflyoutopenoptions.maxwidth.md) | boolean \| number \| string | (Optional) | -| [onClose?](./kibana-plugin-core-public.overlayflyoutopenoptions.onclose.md) | (flyout: OverlayRef) => void | (Optional) EuiFlyout onClose handler. If provided the consumer is responsible for calling flyout.close() to close the flyout; | -| [outsideClickCloses?](./kibana-plugin-core-public.overlayflyoutopenoptions.outsideclickcloses.md) | boolean | (Optional) | -| [ownFocus?](./kibana-plugin-core-public.overlayflyoutopenoptions.ownfocus.md) | boolean | (Optional) | -| [size?](./kibana-plugin-core-public.overlayflyoutopenoptions.size.md) | EuiFlyoutSize | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.onclose.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.onclose.md deleted file mode 100644 index 5cfbba4c84a36..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.onclose.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [onClose](./kibana-plugin-core-public.overlayflyoutopenoptions.onclose.md) - -## OverlayFlyoutOpenOptions.onClose property - -EuiFlyout onClose handler. If provided the consumer is responsible for calling flyout.close() to close the flyout; - -Signature: - -```typescript -onClose?: (flyout: OverlayRef) => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.outsideclickcloses.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.outsideclickcloses.md deleted file mode 100644 index acb9bac6f55da..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.outsideclickcloses.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [outsideClickCloses](./kibana-plugin-core-public.overlayflyoutopenoptions.outsideclickcloses.md) - -## OverlayFlyoutOpenOptions.outsideClickCloses property - -Signature: - -```typescript -outsideClickCloses?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.ownfocus.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.ownfocus.md deleted file mode 100644 index 337ce2c48e1d9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.ownfocus.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [ownFocus](./kibana-plugin-core-public.overlayflyoutopenoptions.ownfocus.md) - -## OverlayFlyoutOpenOptions.ownFocus property - -Signature: - -```typescript -ownFocus?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.size.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.size.md deleted file mode 100644 index 3754242dc7c26..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutopenoptions.size.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) > [size](./kibana-plugin-core-public.overlayflyoutopenoptions.size.md) - -## OverlayFlyoutOpenOptions.size property - -Signature: - -```typescript -size?: EuiFlyoutSize; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.md deleted file mode 100644 index 790fd57320413..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutStart](./kibana-plugin-core-public.overlayflyoutstart.md) - -## OverlayFlyoutStart interface - -APIs to open and manage fly-out dialogs. - -Signature: - -```typescript -export interface OverlayFlyoutStart -``` - -## Methods - -| Method | Description | -| --- | --- | -| [open(mount, options)](./kibana-plugin-core-public.overlayflyoutstart.open.md) | Opens a flyout panel with the given mount point inside. You can use close() on the returned FlyoutRef to close the flyout. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.open.md b/docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.open.md deleted file mode 100644 index 94290eb91f942..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayflyoutstart.open.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayFlyoutStart](./kibana-plugin-core-public.overlayflyoutstart.md) > [open](./kibana-plugin-core-public.overlayflyoutstart.open.md) - -## OverlayFlyoutStart.open() method - -Opens a flyout panel with the given mount point inside. You can use `close()` on the returned FlyoutRef to close the flyout. - -Signature: - -```typescript -open(mount: MountPoint, options?: OverlayFlyoutOpenOptions): OverlayRef; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| mount | MountPoint | [MountPoint](./kibana-plugin-core-public.mountpoint.md) - Mounts the children inside a flyout panel | -| options | OverlayFlyoutOpenOptions | [OverlayFlyoutOpenOptions](./kibana-plugin-core-public.overlayflyoutopenoptions.md) - options for the flyout [OverlayRef](./kibana-plugin-core-public.overlayref.md) A reference to the opened flyout panel. | - -Returns: - -OverlayRef - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions._data-test-subj_.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions._data-test-subj_.md deleted file mode 100644 index 3569b2153c3da..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions._data-test-subj_.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > ["data-test-subj"](./kibana-plugin-core-public.overlaymodalconfirmoptions._data-test-subj_.md) - -## OverlayModalConfirmOptions."data-test-subj" property - -Signature: - -```typescript -'data-test-subj'?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.buttoncolor.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.buttoncolor.md deleted file mode 100644 index 5c827e19e42e1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.buttoncolor.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [buttonColor](./kibana-plugin-core-public.overlaymodalconfirmoptions.buttoncolor.md) - -## OverlayModalConfirmOptions.buttonColor property - -Signature: - -```typescript -buttonColor?: EuiConfirmModalProps['buttonColor']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.cancelbuttontext.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.cancelbuttontext.md deleted file mode 100644 index 0c0b9fd48dbd6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.cancelbuttontext.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [cancelButtonText](./kibana-plugin-core-public.overlaymodalconfirmoptions.cancelbuttontext.md) - -## OverlayModalConfirmOptions.cancelButtonText property - -Signature: - -```typescript -cancelButtonText?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.classname.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.classname.md deleted file mode 100644 index 0a622aeaac418..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.classname.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [className](./kibana-plugin-core-public.overlaymodalconfirmoptions.classname.md) - -## OverlayModalConfirmOptions.className property - -Signature: - -```typescript -className?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.closebuttonarialabel.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.closebuttonarialabel.md deleted file mode 100644 index 8a321a0b07b4c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.closebuttonarialabel.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [closeButtonAriaLabel](./kibana-plugin-core-public.overlaymodalconfirmoptions.closebuttonarialabel.md) - -## OverlayModalConfirmOptions.closeButtonAriaLabel property - -Signature: - -```typescript -closeButtonAriaLabel?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.confirmbuttontext.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.confirmbuttontext.md deleted file mode 100644 index f84d834369f5b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.confirmbuttontext.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [confirmButtonText](./kibana-plugin-core-public.overlaymodalconfirmoptions.confirmbuttontext.md) - -## OverlayModalConfirmOptions.confirmButtonText property - -Signature: - -```typescript -confirmButtonText?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.defaultfocusedbutton.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.defaultfocusedbutton.md deleted file mode 100644 index c5edf48b54ea8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.defaultfocusedbutton.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [defaultFocusedButton](./kibana-plugin-core-public.overlaymodalconfirmoptions.defaultfocusedbutton.md) - -## OverlayModalConfirmOptions.defaultFocusedButton property - -Signature: - -```typescript -defaultFocusedButton?: EuiConfirmModalProps['defaultFocusedButton']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.maxwidth.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.maxwidth.md deleted file mode 100644 index 488b4eb3794fb..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.maxwidth.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [maxWidth](./kibana-plugin-core-public.overlaymodalconfirmoptions.maxwidth.md) - -## OverlayModalConfirmOptions.maxWidth property - -Sets the max-width of the modal. Set to `true` to use the default (`euiBreakpoints 'm'`), set to `false` to not restrict the width, set to a number for a custom width in px, set to a string for a custom width in custom measurement. - -Signature: - -```typescript -maxWidth?: boolean | number | string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.md deleted file mode 100644 index 2f672e551ba51..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) - -## OverlayModalConfirmOptions interface - - -Signature: - -```typescript -export interface OverlayModalConfirmOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| ["data-test-subj"?](./kibana-plugin-core-public.overlaymodalconfirmoptions._data-test-subj_.md) | string | (Optional) | -| [buttonColor?](./kibana-plugin-core-public.overlaymodalconfirmoptions.buttoncolor.md) | EuiConfirmModalProps\['buttonColor'\] | (Optional) | -| [cancelButtonText?](./kibana-plugin-core-public.overlaymodalconfirmoptions.cancelbuttontext.md) | string | (Optional) | -| [className?](./kibana-plugin-core-public.overlaymodalconfirmoptions.classname.md) | string | (Optional) | -| [closeButtonAriaLabel?](./kibana-plugin-core-public.overlaymodalconfirmoptions.closebuttonarialabel.md) | string | (Optional) | -| [confirmButtonText?](./kibana-plugin-core-public.overlaymodalconfirmoptions.confirmbuttontext.md) | string | (Optional) | -| [defaultFocusedButton?](./kibana-plugin-core-public.overlaymodalconfirmoptions.defaultfocusedbutton.md) | EuiConfirmModalProps\['defaultFocusedButton'\] | (Optional) | -| [maxWidth?](./kibana-plugin-core-public.overlaymodalconfirmoptions.maxwidth.md) | boolean \| number \| string | (Optional) Sets the max-width of the modal. Set to true to use the default (euiBreakpoints 'm'), set to false to not restrict the width, set to a number for a custom width in px, set to a string for a custom width in custom measurement. | -| [title?](./kibana-plugin-core-public.overlaymodalconfirmoptions.title.md) | string | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.title.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.title.md deleted file mode 100644 index cfbe41e0a7e9f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalconfirmoptions.title.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) > [title](./kibana-plugin-core-public.overlaymodalconfirmoptions.title.md) - -## OverlayModalConfirmOptions.title property - -Signature: - -```typescript -title?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions._data-test-subj_.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions._data-test-subj_.md deleted file mode 100644 index f0eba659dc62b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions._data-test-subj_.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) > ["data-test-subj"](./kibana-plugin-core-public.overlaymodalopenoptions._data-test-subj_.md) - -## OverlayModalOpenOptions."data-test-subj" property - -Signature: - -```typescript -'data-test-subj'?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.classname.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.classname.md deleted file mode 100644 index 769387b8c35ff..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.classname.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) > [className](./kibana-plugin-core-public.overlaymodalopenoptions.classname.md) - -## OverlayModalOpenOptions.className property - -Signature: - -```typescript -className?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.closebuttonarialabel.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.closebuttonarialabel.md deleted file mode 100644 index 4e685055b9e17..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.closebuttonarialabel.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) > [closeButtonAriaLabel](./kibana-plugin-core-public.overlaymodalopenoptions.closebuttonarialabel.md) - -## OverlayModalOpenOptions.closeButtonAriaLabel property - -Signature: - -```typescript -closeButtonAriaLabel?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md deleted file mode 100644 index 0ae888f9cb361..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) > [maxWidth](./kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md) - -## OverlayModalOpenOptions.maxWidth property - -Signature: - -```typescript -maxWidth?: boolean | number | string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md deleted file mode 100644 index 5fc978ea26262..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) - -## OverlayModalOpenOptions interface - - -Signature: - -```typescript -export interface OverlayModalOpenOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| ["data-test-subj"?](./kibana-plugin-core-public.overlaymodalopenoptions._data-test-subj_.md) | string | (Optional) | -| [className?](./kibana-plugin-core-public.overlaymodalopenoptions.classname.md) | string | (Optional) | -| [closeButtonAriaLabel?](./kibana-plugin-core-public.overlaymodalopenoptions.closebuttonarialabel.md) | string | (Optional) | -| [maxWidth?](./kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md) | boolean \| number \| string | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.md deleted file mode 100644 index 1d8fe1a92dd90..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalStart](./kibana-plugin-core-public.overlaymodalstart.md) - -## OverlayModalStart interface - -APIs to open and manage modal dialogs. - -Signature: - -```typescript -export interface OverlayModalStart -``` - -## Methods - -| Method | Description | -| --- | --- | -| [open(mount, options)](./kibana-plugin-core-public.overlaymodalstart.open.md) | Opens a modal panel with the given mount point inside. You can use close() on the returned OverlayRef to close the modal. | -| [openConfirm(message, options)](./kibana-plugin-core-public.overlaymodalstart.openconfirm.md) | Opens a confirmation modal with the given text or mountpoint as a message. Returns a Promise resolving to true if user confirmed or false otherwise. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.open.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.open.md deleted file mode 100644 index 35bfa406b4d17..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.open.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalStart](./kibana-plugin-core-public.overlaymodalstart.md) > [open](./kibana-plugin-core-public.overlaymodalstart.open.md) - -## OverlayModalStart.open() method - -Opens a modal panel with the given mount point inside. You can use `close()` on the returned OverlayRef to close the modal. - -Signature: - -```typescript -open(mount: MountPoint, options?: OverlayModalOpenOptions): OverlayRef; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| mount | MountPoint | [MountPoint](./kibana-plugin-core-public.mountpoint.md) - Mounts the children inside the modal | -| options | OverlayModalOpenOptions | [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) - options for the modal [OverlayRef](./kibana-plugin-core-public.overlayref.md) A reference to the opened modal. | - -Returns: - -OverlayRef - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.openconfirm.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.openconfirm.md deleted file mode 100644 index 056f512de87bf..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalstart.openconfirm.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalStart](./kibana-plugin-core-public.overlaymodalstart.md) > [openConfirm](./kibana-plugin-core-public.overlaymodalstart.openconfirm.md) - -## OverlayModalStart.openConfirm() method - -Opens a confirmation modal with the given text or mountpoint as a message. Returns a Promise resolving to `true` if user confirmed or `false` otherwise. - -Signature: - -```typescript -openConfirm(message: MountPoint | string, options?: OverlayModalConfirmOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| message | MountPoint \| string | [MountPoint](./kibana-plugin-core-public.mountpoint.md) - string or mountpoint to be used a the confirm message body | -| options | OverlayModalConfirmOptions | [OverlayModalConfirmOptions](./kibana-plugin-core-public.overlaymodalconfirmoptions.md) - options for the confirm modal | - -Returns: - -Promise<boolean> - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayref.close.md b/docs/development/core/public/kibana-plugin-core-public.overlayref.close.md deleted file mode 100644 index 454723f6ffd09..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayref.close.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayRef](./kibana-plugin-core-public.overlayref.md) > [close](./kibana-plugin-core-public.overlayref.close.md) - -## OverlayRef.close() method - -Closes the referenced overlay if it's still open which in turn will resolve the `onClose` Promise. If the overlay had already been closed this method does nothing. - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayref.md b/docs/development/core/public/kibana-plugin-core-public.overlayref.md deleted file mode 100644 index da11e284f285d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayref.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayRef](./kibana-plugin-core-public.overlayref.md) - -## OverlayRef interface - -Returned by [OverlayStart](./kibana-plugin-core-public.overlaystart.md) methods for closing a mounted overlay. - -Signature: - -```typescript -export interface OverlayRef -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [onClose](./kibana-plugin-core-public.overlayref.onclose.md) | Promise<void> | A Promise that will resolve once this overlay is closed.Overlays can close from user interaction, calling close() on the overlay reference or another overlay replacing yours via openModal or openFlyout. | - -## Methods - -| Method | Description | -| --- | --- | -| [close()](./kibana-plugin-core-public.overlayref.close.md) | Closes the referenced overlay if it's still open which in turn will resolve the onClose Promise. If the overlay had already been closed this method does nothing. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlayref.onclose.md b/docs/development/core/public/kibana-plugin-core-public.overlayref.onclose.md deleted file mode 100644 index 3752c6ecf7de0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlayref.onclose.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayRef](./kibana-plugin-core-public.overlayref.md) > [onClose](./kibana-plugin-core-public.overlayref.onclose.md) - -## OverlayRef.onClose property - -A Promise that will resolve once this overlay is closed. - -Overlays can close from user interaction, calling `close()` on the overlay reference or another overlay replacing yours via `openModal` or `openFlyout`. - -Signature: - -```typescript -onClose: Promise; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaystart.banners.md b/docs/development/core/public/kibana-plugin-core-public.overlaystart.banners.md deleted file mode 100644 index 2cb1565a4cfc4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaystart.banners.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayStart](./kibana-plugin-core-public.overlaystart.md) > [banners](./kibana-plugin-core-public.overlaystart.banners.md) - -## OverlayStart.banners property - -[OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) - -Signature: - -```typescript -banners: OverlayBannersStart; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaystart.md b/docs/development/core/public/kibana-plugin-core-public.overlaystart.md deleted file mode 100644 index 3bbdd4ab9b918..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaystart.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayStart](./kibana-plugin-core-public.overlaystart.md) - -## OverlayStart interface - - -Signature: - -```typescript -export interface OverlayStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [banners](./kibana-plugin-core-public.overlaystart.banners.md) | OverlayBannersStart | [OverlayBannersStart](./kibana-plugin-core-public.overlaybannersstart.md) | -| [openConfirm](./kibana-plugin-core-public.overlaystart.openconfirm.md) | OverlayModalStart\['openConfirm'\] | | -| [openFlyout](./kibana-plugin-core-public.overlaystart.openflyout.md) | OverlayFlyoutStart\['open'\] | | -| [openModal](./kibana-plugin-core-public.overlaystart.openmodal.md) | OverlayModalStart\['open'\] | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaystart.openconfirm.md b/docs/development/core/public/kibana-plugin-core-public.overlaystart.openconfirm.md deleted file mode 100644 index cfa27f4ea6f60..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaystart.openconfirm.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayStart](./kibana-plugin-core-public.overlaystart.md) > [openConfirm](./kibana-plugin-core-public.overlaystart.openconfirm.md) - -## OverlayStart.openConfirm property - - -Signature: - -```typescript -openConfirm: OverlayModalStart['openConfirm']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaystart.openflyout.md b/docs/development/core/public/kibana-plugin-core-public.overlaystart.openflyout.md deleted file mode 100644 index 8059918b0ec10..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaystart.openflyout.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayStart](./kibana-plugin-core-public.overlaystart.md) > [openFlyout](./kibana-plugin-core-public.overlaystart.openflyout.md) - -## OverlayStart.openFlyout property - - -Signature: - -```typescript -openFlyout: OverlayFlyoutStart['open']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaystart.openmodal.md b/docs/development/core/public/kibana-plugin-core-public.overlaystart.openmodal.md deleted file mode 100644 index 5b55084c78727..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.overlaystart.openmodal.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayStart](./kibana-plugin-core-public.overlaystart.md) > [openModal](./kibana-plugin-core-public.overlaystart.openmodal.md) - -## OverlayStart.openModal property - - -Signature: - -```typescript -openModal: OverlayModalStart['open']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.plugin_2.md b/docs/development/core/public/kibana-plugin-core-public.plugin_2.md deleted file mode 100644 index da8cef9b83cc7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugin_2.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Plugin\_2](./kibana-plugin-core-public.plugin_2.md) - -## Plugin\_2 interface - -The interface that should be returned by a `PluginInitializer`. - -Signature: - -```typescript -export interface Plugin -``` - -## Methods - -| Method | Description | -| --- | --- | -| [setup(core, plugins)](./kibana-plugin-core-public.plugin_2.setup.md) | | -| [start(core, plugins)](./kibana-plugin-core-public.plugin_2.start.md) | | -| [stop()?](./kibana-plugin-core-public.plugin_2.stop.md) | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.plugin_2.setup.md b/docs/development/core/public/kibana-plugin-core-public.plugin_2.setup.md deleted file mode 100644 index 5ebb5a1a74811..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugin_2.setup.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Plugin\_2](./kibana-plugin-core-public.plugin_2.md) > [setup](./kibana-plugin-core-public.plugin_2.setup.md) - -## Plugin\_2.setup() method - -Signature: - -```typescript -setup(core: CoreSetup, plugins: TPluginsSetup): TSetup; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| core | CoreSetup<TPluginsStart, TStart> | | -| plugins | TPluginsSetup | | - -Returns: - -TSetup - diff --git a/docs/development/core/public/kibana-plugin-core-public.plugin_2.start.md b/docs/development/core/public/kibana-plugin-core-public.plugin_2.start.md deleted file mode 100644 index f4979ee033aac..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugin_2.start.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Plugin\_2](./kibana-plugin-core-public.plugin_2.md) > [start](./kibana-plugin-core-public.plugin_2.start.md) - -## Plugin\_2.start() method - -Signature: - -```typescript -start(core: CoreStart, plugins: TPluginsStart): TStart; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| core | CoreStart | | -| plugins | TPluginsStart | | - -Returns: - -TStart - diff --git a/docs/development/core/public/kibana-plugin-core-public.plugin_2.stop.md b/docs/development/core/public/kibana-plugin-core-public.plugin_2.stop.md deleted file mode 100644 index 69532f2d0e09d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugin_2.stop.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Plugin\_2](./kibana-plugin-core-public.plugin_2.md) > [stop](./kibana-plugin-core-public.plugin_2.stop.md) - -## Plugin\_2.stop() method - -Signature: - -```typescript -stop?(): void; -``` -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.plugininitializer.md b/docs/development/core/public/kibana-plugin-core-public.plugininitializer.md deleted file mode 100644 index 1fcc2999dfd2e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugininitializer.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PluginInitializer](./kibana-plugin-core-public.plugininitializer.md) - -## PluginInitializer type - -The `plugin` export at the root of a plugin's `public` directory should conform to this interface. - -Signature: - -```typescript -export declare type PluginInitializer = (core: PluginInitializerContext) => Plugin; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.config.md b/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.config.md deleted file mode 100644 index 0f4d7df94a30e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.config.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PluginInitializerContext](./kibana-plugin-core-public.plugininitializercontext.md) > [config](./kibana-plugin-core-public.plugininitializercontext.config.md) - -## PluginInitializerContext.config property - -Signature: - -```typescript -readonly config: { - get: () => T; - }; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.env.md b/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.env.md deleted file mode 100644 index 532561eafc4d7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.env.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PluginInitializerContext](./kibana-plugin-core-public.plugininitializercontext.md) > [env](./kibana-plugin-core-public.plugininitializercontext.env.md) - -## PluginInitializerContext.env property - -Signature: - -```typescript -readonly env: { - mode: Readonly; - packageInfo: Readonly; - }; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.md b/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.md deleted file mode 100644 index 3304b4bf3def4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PluginInitializerContext](./kibana-plugin-core-public.plugininitializercontext.md) - -## PluginInitializerContext interface - -The available core services passed to a `PluginInitializer` - -Signature: - -```typescript -export interface PluginInitializerContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [config](./kibana-plugin-core-public.plugininitializercontext.config.md) | { get: <T extends object = ConfigSchema>() => T; } | | -| [env](./kibana-plugin-core-public.plugininitializercontext.env.md) | { mode: Readonly<EnvironmentMode>; packageInfo: Readonly<PackageInfo>; } | | -| [opaqueId](./kibana-plugin-core-public.plugininitializercontext.opaqueid.md) | PluginOpaqueId | A symbol used to identify this plugin in the system. Needed when registering handlers or context providers. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.opaqueid.md b/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.opaqueid.md deleted file mode 100644 index 8ee0c3a415ee3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.plugininitializercontext.opaqueid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PluginInitializerContext](./kibana-plugin-core-public.plugininitializercontext.md) > [opaqueId](./kibana-plugin-core-public.plugininitializercontext.opaqueid.md) - -## PluginInitializerContext.opaqueId property - -A symbol used to identify this plugin in the system. Needed when registering handlers or context providers. - -Signature: - -```typescript -readonly opaqueId: PluginOpaqueId; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.publicappdeeplinkinfo.md b/docs/development/core/public/kibana-plugin-core-public.publicappdeeplinkinfo.md deleted file mode 100644 index 40fd98687c619..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.publicappdeeplinkinfo.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PublicAppDeepLinkInfo](./kibana-plugin-core-public.publicappdeeplinkinfo.md) - -## PublicAppDeepLinkInfo type - -Public information about a registered app's [deepLinks](./kibana-plugin-core-public.appdeeplink.md) - -Signature: - -```typescript -export declare type PublicAppDeepLinkInfo = Omit & { - deepLinks: PublicAppDeepLinkInfo[]; - keywords: string[]; - navLinkStatus: AppNavLinkStatus; - searchable: boolean; -}; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.publicappinfo.md b/docs/development/core/public/kibana-plugin-core-public.publicappinfo.md deleted file mode 100644 index 01d23ae47a0d9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.publicappinfo.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PublicAppInfo](./kibana-plugin-core-public.publicappinfo.md) - -## PublicAppInfo type - -Public information about a registered [application](./kibana-plugin-core-public.app.md) - -Signature: - -```typescript -export declare type PublicAppInfo = Omit & { - status: AppStatus; - navLinkStatus: AppNavLinkStatus; - appRoute: string; - keywords: string[]; - deepLinks: PublicAppDeepLinkInfo[]; - searchable: boolean; -}; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.publicuisettingsparams.md b/docs/development/core/public/kibana-plugin-core-public.publicuisettingsparams.md deleted file mode 100644 index 678a69289ff23..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.publicuisettingsparams.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PublicUiSettingsParams](./kibana-plugin-core-public.publicuisettingsparams.md) - -## PublicUiSettingsParams type - -A sub-set of [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) exposed to the client-side. - -Signature: - -```typescript -export declare type PublicUiSettingsParams = Omit; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.resolvedeprecationresponse.md b/docs/development/core/public/kibana-plugin-core-public.resolvedeprecationresponse.md deleted file mode 100644 index 928bf8c07004e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.resolvedeprecationresponse.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResolveDeprecationResponse](./kibana-plugin-core-public.resolvedeprecationresponse.md) - -## ResolveDeprecationResponse type - -Signature: - -```typescript -export declare type ResolveDeprecationResponse = { - status: 'ok'; -} | { - status: 'fail'; - reason: string; -}; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_purpose.md b/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_purpose.md deleted file mode 100644 index fb6f98eda62d1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_purpose.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResolvedSimpleSavedObject](./kibana-plugin-core-public.resolvedsimplesavedobject.md) > [alias\_purpose](./kibana-plugin-core-public.resolvedsimplesavedobject.alias_purpose.md) - -## ResolvedSimpleSavedObject.alias\_purpose property - -The reason this alias was created. - -Currently this is used to determine whether or not a toast should be shown when a user is redirected from a legacy URL; if the alias was created because of saved object conversion, then we will display a toast telling the user that the object has a new URL. - -\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is `'aliasMatch'` or `'conflict'`). - -Signature: - -```typescript -alias_purpose?: SavedObjectsResolveResponse['alias_purpose']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_target_id.md b/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_target_id.md deleted file mode 100644 index 0e82842ef749d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.alias_target_id.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResolvedSimpleSavedObject](./kibana-plugin-core-public.resolvedsimplesavedobject.md) > [alias\_target\_id](./kibana-plugin-core-public.resolvedsimplesavedobject.alias_target_id.md) - -## ResolvedSimpleSavedObject.alias\_target\_id property - -The ID of the object that the legacy URL alias points to. - -\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is `'aliasMatch'` or `'conflict'`). - -Signature: - -```typescript -alias_target_id?: SavedObjectsResolveResponse['alias_target_id']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.md b/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.md deleted file mode 100644 index 92ae014380f14..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResolvedSimpleSavedObject](./kibana-plugin-core-public.resolvedsimplesavedobject.md) - -## ResolvedSimpleSavedObject interface - -This interface is a very simple wrapper for SavedObjects resolved from the server with the [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md). - -Signature: - -```typescript -export interface ResolvedSimpleSavedObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [alias\_purpose?](./kibana-plugin-core-public.resolvedsimplesavedobject.alias_purpose.md) | SavedObjectsResolveResponse\['alias\_purpose'\] | (Optional) The reason this alias was created.Currently this is used to determine whether or not a toast should be shown when a user is redirected from a legacy URL; if the alias was created because of saved object conversion, then we will display a toast telling the user that the object has a new URL.\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is 'aliasMatch' or 'conflict'). | -| [alias\_target\_id?](./kibana-plugin-core-public.resolvedsimplesavedobject.alias_target_id.md) | SavedObjectsResolveResponse\['alias\_target\_id'\] | (Optional) The ID of the object that the legacy URL alias points to.\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is 'aliasMatch' or 'conflict'). | -| [outcome](./kibana-plugin-core-public.resolvedsimplesavedobject.outcome.md) | SavedObjectsResolveResponse\['outcome'\] | The outcome for a successful resolve call is one of the following values:\* 'exactMatch' -- One document exactly matched the given ID. \* '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. | -| [saved\_object](./kibana-plugin-core-public.resolvedsimplesavedobject.saved_object.md) | SimpleSavedObject<T> | The saved object that was found. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.outcome.md b/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.outcome.md deleted file mode 100644 index ceeef7706cc0f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.outcome.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResolvedSimpleSavedObject](./kibana-plugin-core-public.resolvedsimplesavedobject.md) > [outcome](./kibana-plugin-core-public.resolvedsimplesavedobject.outcome.md) - -## ResolvedSimpleSavedObject.outcome property - -The outcome for a successful `resolve` call is one of the following values: - -\* `'exactMatch'` -- One document exactly matched the given ID. \* `'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. - -Signature: - -```typescript -outcome: SavedObjectsResolveResponse['outcome']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.saved_object.md b/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.saved_object.md deleted file mode 100644 index 7d90791a26fd8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.resolvedsimplesavedobject.saved_object.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResolvedSimpleSavedObject](./kibana-plugin-core-public.resolvedsimplesavedobject.md) > [saved\_object](./kibana-plugin-core-public.resolvedsimplesavedobject.saved_object.md) - -## ResolvedSimpleSavedObject.saved\_object property - -The saved object that was found. - -Signature: - -```typescript -saved_object: SimpleSavedObject; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.attributes.md b/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.attributes.md deleted file mode 100644 index bf64b25c04f92..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResponseErrorBody](./kibana-plugin-core-public.responseerrorbody.md) > [attributes](./kibana-plugin-core-public.responseerrorbody.attributes.md) - -## ResponseErrorBody.attributes property - -Signature: - -```typescript -attributes?: Record; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.md b/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.md deleted file mode 100644 index 5bc9103691014..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResponseErrorBody](./kibana-plugin-core-public.responseerrorbody.md) - -## ResponseErrorBody interface - - -Signature: - -```typescript -export interface ResponseErrorBody -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes?](./kibana-plugin-core-public.responseerrorbody.attributes.md) | Record<string, unknown> | (Optional) | -| [message](./kibana-plugin-core-public.responseerrorbody.message.md) | string | | -| [statusCode](./kibana-plugin-core-public.responseerrorbody.statuscode.md) | number | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.message.md b/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.message.md deleted file mode 100644 index a3355ddafde1e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.message.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResponseErrorBody](./kibana-plugin-core-public.responseerrorbody.md) > [message](./kibana-plugin-core-public.responseerrorbody.message.md) - -## ResponseErrorBody.message property - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.statuscode.md b/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.statuscode.md deleted file mode 100644 index a342bb0187d72..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.responseerrorbody.statuscode.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ResponseErrorBody](./kibana-plugin-core-public.responseerrorbody.md) > [statusCode](./kibana-plugin-core-public.responseerrorbody.statuscode.md) - -## ResponseErrorBody.statusCode property - -Signature: - -```typescript -statusCode: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.attributes.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.attributes.md deleted file mode 100644 index e8b1e0927baff..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.attributes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [attributes](./kibana-plugin-core-public.savedobject.attributes.md) - -## SavedObject.attributes property - -The data for a Saved Object is stored as an object in the `attributes` property. - -Signature: - -```typescript -attributes: T; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.coremigrationversion.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.coremigrationversion.md deleted file mode 100644 index 9060a5d6777fe..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.coremigrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [coreMigrationVersion](./kibana-plugin-core-public.savedobject.coremigrationversion.md) - -## SavedObject.coreMigrationVersion property - -A semver value that is used when upgrading objects between Kibana versions. - -Signature: - -```typescript -coreMigrationVersion?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.error.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.error.md deleted file mode 100644 index ab9a611fc3a5c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [error](./kibana-plugin-core-public.savedobject.error.md) - -## SavedObject.error property - -Signature: - -```typescript -error?: SavedObjectError; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.id.md deleted file mode 100644 index 34387f24bfcef..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [id](./kibana-plugin-core-public.savedobject.id.md) - -## SavedObject.id property - -The ID of this Saved Object, guaranteed to be unique for all objects of the same `type` - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.md deleted file mode 100644 index 283a960013305..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) - -## SavedObject interface - -Signature: - -```typescript -export interface SavedObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes](./kibana-plugin-core-public.savedobject.attributes.md) | T | The data for a Saved Object is stored as an object in the attributes property. | -| [coreMigrationVersion?](./kibana-plugin-core-public.savedobject.coremigrationversion.md) | string | (Optional) A semver value that is used when upgrading objects between Kibana versions. | -| [error?](./kibana-plugin-core-public.savedobject.error.md) | SavedObjectError | (Optional) | -| [id](./kibana-plugin-core-public.savedobject.id.md) | string | The ID of this Saved Object, guaranteed to be unique for all objects of the same type | -| [migrationVersion?](./kibana-plugin-core-public.savedobject.migrationversion.md) | SavedObjectsMigrationVersion | (Optional) Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | -| [namespaces?](./kibana-plugin-core-public.savedobject.namespaces.md) | string\[\] | (Optional) Space(s) that this saved object exists in. This attribute is not used for "global" saved object types which are registered with namespaceType: 'agnostic'. | -| [originId?](./kibana-plugin-core-public.savedobject.originid.md) | string | (Optional) The ID of the saved object this originated from. This is set if this object's id was regenerated; that can happen during migration from a legacy single-namespace type, or during import. It is only set during migration or create operations. This is used during import to ensure that ID regeneration is deterministic, so saved objects will be overwritten if they are imported multiple times into a given space. | -| [references](./kibana-plugin-core-public.savedobject.references.md) | SavedObjectReference\[\] | A reference to another saved object. | -| [type](./kibana-plugin-core-public.savedobject.type.md) | string | The type of Saved Object. Each plugin can define it's own custom Saved Object types. | -| [updated\_at?](./kibana-plugin-core-public.savedobject.updated_at.md) | string | (Optional) Timestamp of the last time this document had been updated. | -| [version?](./kibana-plugin-core-public.savedobject.version.md) | string | (Optional) An opaque version number which changes on each successful write operation. Can be used for implementing optimistic concurrency control. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.migrationversion.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.migrationversion.md deleted file mode 100644 index c13b6dc429208..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.migrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [migrationVersion](./kibana-plugin-core-public.savedobject.migrationversion.md) - -## SavedObject.migrationVersion property - -Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. - -Signature: - -```typescript -migrationVersion?: SavedObjectsMigrationVersion; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.namespaces.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.namespaces.md deleted file mode 100644 index 3418b964ab2d7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.namespaces.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [namespaces](./kibana-plugin-core-public.savedobject.namespaces.md) - -## SavedObject.namespaces property - -Space(s) that this saved object exists in. This attribute is not used for "global" saved object types which are registered with `namespaceType: 'agnostic'`. - -Signature: - -```typescript -namespaces?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.originid.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.originid.md deleted file mode 100644 index f5bab09b9bcc0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.originid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [originId](./kibana-plugin-core-public.savedobject.originid.md) - -## SavedObject.originId property - -The ID of the saved object this originated from. This is set if this object's `id` was regenerated; that can happen during migration from a legacy single-namespace type, or during import. It is only set during migration or create operations. This is used during import to ensure that ID regeneration is deterministic, so saved objects will be overwritten if they are imported multiple times into a given space. - -Signature: - -```typescript -originId?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.references.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.references.md deleted file mode 100644 index 09f6b8fb12b42..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.references.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [references](./kibana-plugin-core-public.savedobject.references.md) - -## SavedObject.references property - -A reference to another saved object. - -Signature: - -```typescript -references: SavedObjectReference[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.type.md deleted file mode 100644 index ccaa1f1d5231c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [type](./kibana-plugin-core-public.savedobject.type.md) - -## SavedObject.type property - -The type of Saved Object. Each plugin can define it's own custom Saved Object types. - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.updated_at.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.updated_at.md deleted file mode 100644 index 111d4b676f00a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.updated_at.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [updated\_at](./kibana-plugin-core-public.savedobject.updated_at.md) - -## SavedObject.updated\_at property - -Timestamp of the last time this document had been updated. - -Signature: - -```typescript -updated_at?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobject.version.md b/docs/development/core/public/kibana-plugin-core-public.savedobject.version.md deleted file mode 100644 index 23b8b3f40da2a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobject.version.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObject](./kibana-plugin-core-public.savedobject.md) > [version](./kibana-plugin-core-public.savedobject.version.md) - -## SavedObject.version property - -An opaque version number which changes on each successful write operation. Can be used for implementing optimistic concurrency control. - -Signature: - -```typescript -version?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectattribute.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectattribute.md deleted file mode 100644 index 2d7be060e28fe..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectattribute.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectAttribute](./kibana-plugin-core-public.savedobjectattribute.md) - -## SavedObjectAttribute type - -Type definition for a Saved Object attribute value - -Signature: - -```typescript -export declare type SavedObjectAttribute = SavedObjectAttributeSingle | SavedObjectAttributeSingle[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectattributes.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectattributes.md deleted file mode 100644 index 0493f52b11425..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectattributes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectAttributes](./kibana-plugin-core-public.savedobjectattributes.md) - -## SavedObjectAttributes interface - -The data for a Saved Object is stored as an object in the `attributes` property. - -Signature: - -```typescript -export interface SavedObjectAttributes -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectattributesingle.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectattributesingle.md deleted file mode 100644 index 388cfac2d9c33..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectattributesingle.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectAttributeSingle](./kibana-plugin-core-public.savedobjectattributesingle.md) - -## SavedObjectAttributeSingle type - -Don't use this type, it's simply a helper type for [SavedObjectAttribute](./kibana-plugin-core-public.savedobjectattribute.md) - -Signature: - -```typescript -export declare type SavedObjectAttributeSingle = string | number | boolean | null | undefined | SavedObjectAttributes; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.error.md b/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.error.md deleted file mode 100644 index 87180a520090f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectError](./kibana-plugin-core-public.savedobjecterror.md) > [error](./kibana-plugin-core-public.savedobjecterror.error.md) - -## SavedObjectError.error property - -Signature: - -```typescript -error: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.md b/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.md deleted file mode 100644 index f6e8874b212b0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectError](./kibana-plugin-core-public.savedobjecterror.md) - -## SavedObjectError interface - -Signature: - -```typescript -export interface SavedObjectError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error](./kibana-plugin-core-public.savedobjecterror.error.md) | string | | -| [message](./kibana-plugin-core-public.savedobjecterror.message.md) | string | | -| [metadata?](./kibana-plugin-core-public.savedobjecterror.metadata.md) | Record<string, unknown> | (Optional) | -| [statusCode](./kibana-plugin-core-public.savedobjecterror.statuscode.md) | number | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.message.md b/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.message.md deleted file mode 100644 index 2a51d4d1a514d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.message.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectError](./kibana-plugin-core-public.savedobjecterror.md) > [message](./kibana-plugin-core-public.savedobjecterror.message.md) - -## SavedObjectError.message property - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.metadata.md b/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.metadata.md deleted file mode 100644 index a2725f0206655..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.metadata.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectError](./kibana-plugin-core-public.savedobjecterror.md) > [metadata](./kibana-plugin-core-public.savedobjecterror.metadata.md) - -## SavedObjectError.metadata property - -Signature: - -```typescript -metadata?: Record; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.statuscode.md b/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.statuscode.md deleted file mode 100644 index 75a57e98fece2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjecterror.statuscode.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectError](./kibana-plugin-core-public.savedobjecterror.md) > [statusCode](./kibana-plugin-core-public.savedobjecterror.statuscode.md) - -## SavedObjectError.statusCode property - -Signature: - -```typescript -statusCode: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.id.md deleted file mode 100644 index 91f0213f7e3f0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReference](./kibana-plugin-core-public.savedobjectreference.md) > [id](./kibana-plugin-core-public.savedobjectreference.id.md) - -## SavedObjectReference.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.md deleted file mode 100644 index e63ba254602db..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReference](./kibana-plugin-core-public.savedobjectreference.md) - -## SavedObjectReference interface - -A reference to another saved object. - -Signature: - -```typescript -export interface SavedObjectReference -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-public.savedobjectreference.id.md) | string | | -| [name](./kibana-plugin-core-public.savedobjectreference.name.md) | string | | -| [type](./kibana-plugin-core-public.savedobjectreference.type.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.name.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.name.md deleted file mode 100644 index a5389047b5a4b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReference](./kibana-plugin-core-public.savedobjectreference.md) > [name](./kibana-plugin-core-public.savedobjectreference.name.md) - -## SavedObjectReference.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.type.md deleted file mode 100644 index 9547d52c404b2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreference.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReference](./kibana-plugin-core-public.savedobjectreference.md) > [type](./kibana-plugin-core-public.savedobjectreference.type.md) - -## SavedObjectReference.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.id.md deleted file mode 100644 index 10e01d7e7a931..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [id](./kibana-plugin-core-public.savedobjectreferencewithcontext.id.md) - -## SavedObjectReferenceWithContext.id property - -The ID of the referenced object - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.inboundreferences.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.inboundreferences.md deleted file mode 100644 index 722b11f0c7ba9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.inboundreferences.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [inboundReferences](./kibana-plugin-core-public.savedobjectreferencewithcontext.inboundreferences.md) - -## SavedObjectReferenceWithContext.inboundReferences property - -References to this object; note that this does not contain \_all inbound references everywhere for this object\_, it only contains inbound references for the scope of this operation - -Signature: - -```typescript -inboundReferences: Array<{ - type: string; - id: string; - name: string; - }>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.ismissing.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.ismissing.md deleted file mode 100644 index 8a4b378850764..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.ismissing.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [isMissing](./kibana-plugin-core-public.savedobjectreferencewithcontext.ismissing.md) - -## SavedObjectReferenceWithContext.isMissing property - -Whether or not this object or reference is missing - -Signature: - -```typescript -isMissing?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.md deleted file mode 100644 index 2b43bafbede5c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) - -## SavedObjectReferenceWithContext interface - -A returned input object or one of its references, with additional context. - -Signature: - -```typescript -export interface SavedObjectReferenceWithContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-public.savedobjectreferencewithcontext.id.md) | string | The ID of the referenced object | -| [inboundReferences](./kibana-plugin-core-public.savedobjectreferencewithcontext.inboundreferences.md) | Array<{ type: string; id: string; name: string; }> | References to this object; note that this does not contain \_all inbound references everywhere for this object\_, it only contains inbound references for the scope of this operation | -| [isMissing?](./kibana-plugin-core-public.savedobjectreferencewithcontext.ismissing.md) | boolean | (Optional) Whether or not this object or reference is missing | -| [originId?](./kibana-plugin-core-public.savedobjectreferencewithcontext.originid.md) | string | (Optional) The origin ID of the referenced object (if it has one) | -| [spaces](./kibana-plugin-core-public.savedobjectreferencewithcontext.spaces.md) | string\[\] | The space(s) that the referenced object exists in | -| [spacesWithMatchingAliases?](./kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingaliases.md) | string\[\] | (Optional) The space(s) that legacy URL aliases matching this type/id exist in | -| [spacesWithMatchingOrigins?](./kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingorigins.md) | string\[\] | (Optional) The space(s) that objects matching this origin exist in (including this one) | -| [type](./kibana-plugin-core-public.savedobjectreferencewithcontext.type.md) | string | The type of the referenced object | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.originid.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.originid.md deleted file mode 100644 index 418041ea5df60..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.originid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [originId](./kibana-plugin-core-public.savedobjectreferencewithcontext.originid.md) - -## SavedObjectReferenceWithContext.originId property - -The origin ID of the referenced object (if it has one) - -Signature: - -```typescript -originId?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaces.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaces.md deleted file mode 100644 index 9140e94721f1e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaces.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [spaces](./kibana-plugin-core-public.savedobjectreferencewithcontext.spaces.md) - -## SavedObjectReferenceWithContext.spaces property - -The space(s) that the referenced object exists in - -Signature: - -```typescript -spaces: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingaliases.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingaliases.md deleted file mode 100644 index 02b0c9c0949df..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingaliases.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [spacesWithMatchingAliases](./kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingaliases.md) - -## SavedObjectReferenceWithContext.spacesWithMatchingAliases property - -The space(s) that legacy URL aliases matching this type/id exist in - -Signature: - -```typescript -spacesWithMatchingAliases?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingorigins.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingorigins.md deleted file mode 100644 index 88a7ebb5f2234..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingorigins.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [spacesWithMatchingOrigins](./kibana-plugin-core-public.savedobjectreferencewithcontext.spaceswithmatchingorigins.md) - -## SavedObjectReferenceWithContext.spacesWithMatchingOrigins property - -The space(s) that objects matching this origin exist in (including this one) - -Signature: - -```typescript -spacesWithMatchingOrigins?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.type.md deleted file mode 100644 index d2e341627153c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectreferencewithcontext.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-public.savedobjectreferencewithcontext.md) > [type](./kibana-plugin-core-public.savedobjectreferencewithcontext.type.md) - -## SavedObjectReferenceWithContext.type property - -The type of the referenced object - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.md deleted file mode 100644 index f86d3b5afc04e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBaseOptions](./kibana-plugin-core-public.savedobjectsbaseoptions.md) - -## SavedObjectsBaseOptions interface - - -Signature: - -```typescript -export interface SavedObjectsBaseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [namespace?](./kibana-plugin-core-public.savedobjectsbaseoptions.namespace.md) | string | (Optional) Specify the namespace for this operation | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.namespace.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.namespace.md deleted file mode 100644 index 5b394750d618c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbaseoptions.namespace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBaseOptions](./kibana-plugin-core-public.savedobjectsbaseoptions.md) > [namespace](./kibana-plugin-core-public.savedobjectsbaseoptions.namespace.md) - -## SavedObjectsBaseOptions.namespace property - -Specify the namespace for this operation - -Signature: - -```typescript -namespace?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.md deleted file mode 100644 index 3926231db17b5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBatchResponse](./kibana-plugin-core-public.savedobjectsbatchresponse.md) - -## SavedObjectsBatchResponse interface - - -Signature: - -```typescript -export interface SavedObjectsBatchResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [savedObjects](./kibana-plugin-core-public.savedobjectsbatchresponse.savedobjects.md) | Array<SimpleSavedObject<T>> | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.savedobjects.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.savedobjects.md deleted file mode 100644 index 53db81aaad89a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbatchresponse.savedobjects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBatchResponse](./kibana-plugin-core-public.savedobjectsbatchresponse.md) > [savedObjects](./kibana-plugin-core-public.savedobjectsbatchresponse.savedobjects.md) - -## SavedObjectsBatchResponse.savedObjects property - -Signature: - -```typescript -savedObjects: Array>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.attributes.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.attributes.md deleted file mode 100644 index fea1505c9b6f3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-public.savedobjectsbulkcreateobject.md) > [attributes](./kibana-plugin-core-public.savedobjectsbulkcreateobject.attributes.md) - -## SavedObjectsBulkCreateObject.attributes property - -Signature: - -```typescript -attributes: T; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.md deleted file mode 100644 index f9ff61859b1a8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-public.savedobjectsbulkcreateobject.md) - -## SavedObjectsBulkCreateObject interface - -Signature: - -```typescript -export interface SavedObjectsBulkCreateObject extends SavedObjectsCreateOptions -``` -Extends: SavedObjectsCreateOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes](./kibana-plugin-core-public.savedobjectsbulkcreateobject.attributes.md) | T | | -| [type](./kibana-plugin-core-public.savedobjectsbulkcreateobject.type.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.type.md deleted file mode 100644 index afadde06db494..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-public.savedobjectsbulkcreateobject.md) > [type](./kibana-plugin-core-public.savedobjectsbulkcreateobject.type.md) - -## SavedObjectsBulkCreateObject.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.md deleted file mode 100644 index ada12c064e0a1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkCreateOptions](./kibana-plugin-core-public.savedobjectsbulkcreateoptions.md) - -## SavedObjectsBulkCreateOptions interface - - -Signature: - -```typescript -export interface SavedObjectsBulkCreateOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [overwrite?](./kibana-plugin-core-public.savedobjectsbulkcreateoptions.overwrite.md) | boolean | (Optional) If a document with the given id already exists, overwrite it's contents (default=false). | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.overwrite.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.overwrite.md deleted file mode 100644 index 20d5f84b1cf33..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkcreateoptions.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkCreateOptions](./kibana-plugin-core-public.savedobjectsbulkcreateoptions.md) > [overwrite](./kibana-plugin-core-public.savedobjectsbulkcreateoptions.overwrite.md) - -## SavedObjectsBulkCreateOptions.overwrite property - -If a document with the given `id` already exists, overwrite it's contents (default=false). - -Signature: - -```typescript -overwrite?: boolean; -``` 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 deleted file mode 100644 index 6a8fd52a4dc49..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[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 deleted file mode 100644 index fbff3d3bd8f25..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[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 deleted file mode 100644 index 09c7991012da8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[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 deleted file mode 100644 index 311b1bf262875..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[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<ResolvedSimpleSavedObject<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 deleted file mode 100644 index e2bf3828841de..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.resolved_objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[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.savedobjectsbulkupdateobject.attributes.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.attributes.md deleted file mode 100644 index 1c124970287e0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-public.savedobjectsbulkupdateobject.md) > [attributes](./kibana-plugin-core-public.savedobjectsbulkupdateobject.attributes.md) - -## SavedObjectsBulkUpdateObject.attributes property - -Signature: - -```typescript -attributes: T; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.id.md deleted file mode 100644 index 4fad01d2f2641..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-public.savedobjectsbulkupdateobject.md) > [id](./kibana-plugin-core-public.savedobjectsbulkupdateobject.id.md) - -## SavedObjectsBulkUpdateObject.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.md deleted file mode 100644 index f28d99cb110c6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-public.savedobjectsbulkupdateobject.md) - -## SavedObjectsBulkUpdateObject interface - - -Signature: - -```typescript -export interface SavedObjectsBulkUpdateObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes](./kibana-plugin-core-public.savedobjectsbulkupdateobject.attributes.md) | T | | -| [id](./kibana-plugin-core-public.savedobjectsbulkupdateobject.id.md) | string | | -| [references?](./kibana-plugin-core-public.savedobjectsbulkupdateobject.references.md) | SavedObjectReference\[\] | (Optional) | -| [type](./kibana-plugin-core-public.savedobjectsbulkupdateobject.type.md) | string | | -| [version?](./kibana-plugin-core-public.savedobjectsbulkupdateobject.version.md) | string | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.references.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.references.md deleted file mode 100644 index 64b9b56a5c0d9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.references.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-public.savedobjectsbulkupdateobject.md) > [references](./kibana-plugin-core-public.savedobjectsbulkupdateobject.references.md) - -## SavedObjectsBulkUpdateObject.references property - -Signature: - -```typescript -references?: SavedObjectReference[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.type.md deleted file mode 100644 index 2dd5a879491a8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-public.savedobjectsbulkupdateobject.md) > [type](./kibana-plugin-core-public.savedobjectsbulkupdateobject.type.md) - -## SavedObjectsBulkUpdateObject.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.version.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.version.md deleted file mode 100644 index 18e4259e89b35..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateobject.version.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-public.savedobjectsbulkupdateobject.md) > [version](./kibana-plugin-core-public.savedobjectsbulkupdateobject.version.md) - -## SavedObjectsBulkUpdateObject.version property - -Signature: - -```typescript -version?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.md deleted file mode 100644 index a2cdd3eb801e6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-public.savedobjectsbulkupdateoptions.md) - -## SavedObjectsBulkUpdateOptions interface - - -Signature: - -```typescript -export interface SavedObjectsBulkUpdateOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [namespace?](./kibana-plugin-core-public.savedobjectsbulkupdateoptions.namespace.md) | string | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.namespace.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.namespace.md deleted file mode 100644 index a6c0e92098bdc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkupdateoptions.namespace.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-public.savedobjectsbulkupdateoptions.md) > [namespace](./kibana-plugin-core-public.savedobjectsbulkupdateoptions.namespace.md) - -## SavedObjectsBulkUpdateOptions.namespace property - -Signature: - -```typescript -namespace?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkcreate.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkcreate.md deleted file mode 100644 index 98c5e250644ff..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkcreate.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [bulkCreate](./kibana-plugin-core-public.savedobjectsclientcontract.bulkcreate.md) - -## SavedObjectsClientContract.bulkCreate() method - -Creates multiple documents at once - -Signature: - -```typescript -bulkCreate(objects: SavedObjectsBulkCreateObject[], options?: SavedObjectsBulkCreateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsBulkCreateObject\[\] | | -| options | SavedObjectsBulkCreateOptions | | - -Returns: - -Promise<SavedObjectsBatchResponse<unknown>> - -The result of the create operation containing created saved objects. - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkget.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkget.md deleted file mode 100644 index b091f14308177..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkget.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [bulkGet](./kibana-plugin-core-public.savedobjectsclientcontract.bulkget.md) - -## SavedObjectsClientContract.bulkGet() method - -Returns an array of objects by id - -Signature: - -```typescript -bulkGet(objects: Array<{ - id: string; - type: string; - }>): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | Array<{ id: string; type: string; }> | an array ids, or an array of objects containing id and optionally type | - -Returns: - -Promise<SavedObjectsBatchResponse<unknown>> - -The saved objects with the given type and ids requested - -## Example - -bulkGet(\[ { id: 'one', type: 'config' }, { id: 'foo', type: 'index-pattern' } \]) - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkresolve.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkresolve.md deleted file mode 100644 index cb67bdc19d23c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkresolve.md +++ /dev/null @@ -1,35 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [bulkResolve](./kibana-plugin-core-public.savedobjectsclientcontract.bulkresolve.md) - -## SavedObjectsClientContract.bulkResolve() method - -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>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | Array<{ id: string; type: string; }> | an array of objects containing id, type | - -Returns: - -Promise<SavedObjectsBulkResolveResponse<T>> - -The bulk resolve result for the saved objects for the given types and ids. - -## 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.savedobjectsclientcontract.bulkupdate.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkupdate.md deleted file mode 100644 index 84c461708218c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.bulkupdate.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [bulkUpdate](./kibana-plugin-core-public.savedobjectsclientcontract.bulkupdate.md) - -## SavedObjectsClientContract.bulkUpdate() method - -Update multiple documents at once - -Signature: - -```typescript -bulkUpdate(objects: SavedObjectsBulkUpdateObject[]): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsBulkUpdateObject\[\] | \[{ type, id, attributes, options: { version, references } }\] | - -Returns: - -Promise<SavedObjectsBatchResponse<T>> - -The result of the update operation containing both failed and updated saved objects. - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.create.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.create.md deleted file mode 100644 index 76906c0dba8d5..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.create.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [create](./kibana-plugin-core-public.savedobjectsclientcontract.create.md) - -## SavedObjectsClientContract.create() method - -Persists an object - -Signature: - -```typescript -create(type: string, attributes: T, options?: SavedObjectsCreateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| attributes | T | | -| options | SavedObjectsCreateOptions | | - -Returns: - -Promise<SimpleSavedObject<T>> - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.delete.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.delete.md deleted file mode 100644 index 39aee28ee7e01..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.delete.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [delete](./kibana-plugin-core-public.savedobjectsclientcontract.delete.md) - -## SavedObjectsClientContract.delete() method - -Deletes an object - -Signature: - -```typescript -delete(type: string, id: string, options?: SavedObjectsDeleteOptions): Promise<{}>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| options | SavedObjectsDeleteOptions | | - -Returns: - -Promise<{}> - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.find.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.find.md deleted file mode 100644 index 8173773e461f3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.find.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [find](./kibana-plugin-core-public.savedobjectsclientcontract.find.md) - -## SavedObjectsClientContract.find() method - -Search for objects - -Signature: - -```typescript -find(options: SavedObjectsFindOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | SavedObjectsFindOptions | {string} options.type {string} options.search {string} options.searchFields - see Elasticsearch Simple Query String Query field argument for more information {integer} \[options.page=1\] {integer} \[options.perPage=20\] {array} options.fields {object} \[options.hasReference\] - { type, id } | - -Returns: - -Promise<SavedObjectsFindResponsePublic<T>> - -A find result with objects matching the specified search. - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.get.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.get.md deleted file mode 100644 index 4184e0a16ab5e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.get.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [get](./kibana-plugin-core-public.savedobjectsclientcontract.get.md) - -## SavedObjectsClientContract.get() method - -Fetches a single object - -Signature: - -```typescript -get(type: string, id: string): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | - -Returns: - -Promise<SimpleSavedObject<T>> - -The saved object for the given type and id. - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.md deleted file mode 100644 index bdc76b58f8dc2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) - -## SavedObjectsClientContract interface - -The client-side SavedObjectsClient is a thin convenience library around the SavedObjects HTTP API for interacting with Saved Objects. - -Signature: - -```typescript -export interface SavedObjectsClientContract -``` - -## Methods - -| Method | Description | -| --- | --- | -| [bulkCreate(objects, options)](./kibana-plugin-core-public.savedobjectsclientcontract.bulkcreate.md) | Creates multiple documents at once | -| [bulkGet(objects)](./kibana-plugin-core-public.savedobjectsclientcontract.bulkget.md) | Returns an array of objects by id | -| [bulkResolve(objects)](./kibana-plugin-core-public.savedobjectsclientcontract.bulkresolve.md) | Resolves an array of objects by id, using any legacy URL aliases if they exist | -| [bulkUpdate(objects)](./kibana-plugin-core-public.savedobjectsclientcontract.bulkupdate.md) | Update multiple documents at once | -| [create(type, attributes, options)](./kibana-plugin-core-public.savedobjectsclientcontract.create.md) | Persists an object | -| [delete(type, id, options)](./kibana-plugin-core-public.savedobjectsclientcontract.delete.md) | Deletes an object | -| [find(options)](./kibana-plugin-core-public.savedobjectsclientcontract.find.md) | Search for objects | -| [get(type, id)](./kibana-plugin-core-public.savedobjectsclientcontract.get.md) | Fetches a single object | -| [resolve(type, id)](./kibana-plugin-core-public.savedobjectsclientcontract.resolve.md) | Resolves a single object | -| [update(type, id, attributes, options)](./kibana-plugin-core-public.savedobjectsclientcontract.update.md) | Updates an object | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.resolve.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.resolve.md deleted file mode 100644 index 6e9c9a1c9c945..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.resolve.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [resolve](./kibana-plugin-core-public.savedobjectsclientcontract.resolve.md) - -## SavedObjectsClientContract.resolve() method - -Resolves a single object - -Signature: - -```typescript -resolve(type: string, id: string): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | - -Returns: - -Promise<ResolvedSimpleSavedObject<T>> - -The resolve result for the saved object for the given type and id. - - 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 for the `resolve` API is unique to the public client, which batches individual calls with `bulkResolve` under the hood. We don't throw an error in that case for legacy compatibility reasons. - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.update.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.update.md deleted file mode 100644 index 0652404b91ad4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclientcontract.update.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) > [update](./kibana-plugin-core-public.savedobjectsclientcontract.update.md) - -## SavedObjectsClientContract.update() method - -Updates an object - -Signature: - -```typescript -update(type: string, id: string, attributes: T, options?: SavedObjectsUpdateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| attributes | T | | -| options | SavedObjectsUpdateOptions | {integer} options.version - ensures version matches that of persisted object {object} options.migrationVersion - The optional migrationVersion of this document | - -Returns: - -Promise<SimpleSavedObject<T>> - - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md deleted file mode 100644 index a356850fa1ad4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCollectMultiNamespaceReferencesResponse](./kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md) - -## SavedObjectsCollectMultiNamespaceReferencesResponse interface - -The response when object references are collected. - -Signature: - -```typescript -export interface SavedObjectsCollectMultiNamespaceReferencesResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [objects](./kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.objects.md) | SavedObjectReferenceWithContext\[\] | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.objects.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.objects.md deleted file mode 100644 index 66a7a19d18288..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCollectMultiNamespaceReferencesResponse](./kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md) > [objects](./kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.objects.md) - -## SavedObjectsCollectMultiNamespaceReferencesResponse.objects property - -Signature: - -```typescript -objects: SavedObjectReferenceWithContext[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.coremigrationversion.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.coremigrationversion.md deleted file mode 100644 index 3c1d068f458bc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.coremigrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-public.savedobjectscreateoptions.md) > [coreMigrationVersion](./kibana-plugin-core-public.savedobjectscreateoptions.coremigrationversion.md) - -## SavedObjectsCreateOptions.coreMigrationVersion property - -A semver value that is used when upgrading objects between Kibana versions. - -Signature: - -```typescript -coreMigrationVersion?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.id.md deleted file mode 100644 index 14e64cc9b7b34..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-public.savedobjectscreateoptions.md) > [id](./kibana-plugin-core-public.savedobjectscreateoptions.id.md) - -## SavedObjectsCreateOptions.id property - -(Not recommended) Specify an id instead of having the saved objects service generate one for you. - -Signature: - -```typescript -id?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.md deleted file mode 100644 index 835a9e87a1dba..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-public.savedobjectscreateoptions.md) - -## SavedObjectsCreateOptions interface - - -Signature: - -```typescript -export interface SavedObjectsCreateOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [coreMigrationVersion?](./kibana-plugin-core-public.savedobjectscreateoptions.coremigrationversion.md) | string | (Optional) A semver value that is used when upgrading objects between Kibana versions. | -| [id?](./kibana-plugin-core-public.savedobjectscreateoptions.id.md) | string | (Optional) (Not recommended) Specify an id instead of having the saved objects service generate one for you. | -| [migrationVersion?](./kibana-plugin-core-public.savedobjectscreateoptions.migrationversion.md) | SavedObjectsMigrationVersion | (Optional) Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | -| [overwrite?](./kibana-plugin-core-public.savedobjectscreateoptions.overwrite.md) | boolean | (Optional) If a document with the given id already exists, overwrite it's contents (default=false). | -| [references?](./kibana-plugin-core-public.savedobjectscreateoptions.references.md) | SavedObjectReference\[\] | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.migrationversion.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.migrationversion.md deleted file mode 100644 index 4ea4386303a58..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.migrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-public.savedobjectscreateoptions.md) > [migrationVersion](./kibana-plugin-core-public.savedobjectscreateoptions.migrationversion.md) - -## SavedObjectsCreateOptions.migrationVersion property - -Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. - -Signature: - -```typescript -migrationVersion?: SavedObjectsMigrationVersion; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.overwrite.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.overwrite.md deleted file mode 100644 index aa3e102e6c042..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-public.savedobjectscreateoptions.md) > [overwrite](./kibana-plugin-core-public.savedobjectscreateoptions.overwrite.md) - -## SavedObjectsCreateOptions.overwrite property - -If a document with the given `id` already exists, overwrite it's contents (default=false). - -Signature: - -```typescript -overwrite?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.references.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.references.md deleted file mode 100644 index ef67cdb771630..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectscreateoptions.references.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-public.savedobjectscreateoptions.md) > [references](./kibana-plugin-core-public.savedobjectscreateoptions.references.md) - -## SavedObjectsCreateOptions.references property - -Signature: - -```typescript -references?: SavedObjectReference[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.defaultsearchoperator.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.defaultsearchoperator.md deleted file mode 100644 index f1c2fd08a21f1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.defaultsearchoperator.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [defaultSearchOperator](./kibana-plugin-core-public.savedobjectsfindoptions.defaultsearchoperator.md) - -## SavedObjectsFindOptions.defaultSearchOperator property - -The search operator to use with the provided filter. Defaults to `OR` - -Signature: - -```typescript -defaultSearchOperator?: 'AND' | 'OR'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.fields.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.fields.md deleted file mode 100644 index 39bc1d3161bd4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.fields.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [fields](./kibana-plugin-core-public.savedobjectsfindoptions.fields.md) - -## SavedObjectsFindOptions.fields property - -An array of fields to include in the results - -Signature: - -```typescript -fields?: string[]; -``` - -## Example - -SavedObjects.find({type: 'dashboard', fields: \['attributes.name', 'attributes.location'\]}) - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.filter.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.filter.md deleted file mode 100644 index 2c20fe2dab00f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.filter.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [filter](./kibana-plugin-core-public.savedobjectsfindoptions.filter.md) - -## SavedObjectsFindOptions.filter property - -Signature: - -```typescript -filter?: string | KueryNode; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreference.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreference.md deleted file mode 100644 index 25ce8fa7b6018..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreference.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [hasReference](./kibana-plugin-core-public.savedobjectsfindoptions.hasreference.md) - -## SavedObjectsFindOptions.hasReference property - -Search for documents having a reference to the specified objects. Use `hasReferenceOperator` to specify the operator to use when searching for multiple references. - -Signature: - -```typescript -hasReference?: SavedObjectsFindOptionsReference | SavedObjectsFindOptionsReference[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreferenceoperator.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreferenceoperator.md deleted file mode 100644 index 3681d1c9d34d9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.hasreferenceoperator.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [hasReferenceOperator](./kibana-plugin-core-public.savedobjectsfindoptions.hasreferenceoperator.md) - -## SavedObjectsFindOptions.hasReferenceOperator property - -The operator to use when searching by multiple references using the `hasReference` option. Defaults to `OR` - -Signature: - -```typescript -hasReferenceOperator?: 'AND' | 'OR'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md deleted file mode 100644 index 98ac48f6cdbd8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md +++ /dev/null @@ -1,36 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) - -## SavedObjectsFindOptions interface - - -Signature: - -```typescript -export interface SavedObjectsFindOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [defaultSearchOperator?](./kibana-plugin-core-public.savedobjectsfindoptions.defaultsearchoperator.md) | 'AND' \| 'OR' | (Optional) The search operator to use with the provided filter. Defaults to OR | -| [fields?](./kibana-plugin-core-public.savedobjectsfindoptions.fields.md) | string\[\] | (Optional) An array of fields to include in the results | -| [filter?](./kibana-plugin-core-public.savedobjectsfindoptions.filter.md) | string \| KueryNode | (Optional) | -| [hasReference?](./kibana-plugin-core-public.savedobjectsfindoptions.hasreference.md) | SavedObjectsFindOptionsReference \| SavedObjectsFindOptionsReference\[\] | (Optional) Search for documents having a reference to the specified objects. Use hasReferenceOperator to specify the operator to use when searching for multiple references. | -| [hasReferenceOperator?](./kibana-plugin-core-public.savedobjectsfindoptions.hasreferenceoperator.md) | 'AND' \| 'OR' | (Optional) The operator to use when searching by multiple references using the hasReference option. Defaults to OR | -| [namespaces?](./kibana-plugin-core-public.savedobjectsfindoptions.namespaces.md) | string\[\] | (Optional) | -| [page?](./kibana-plugin-core-public.savedobjectsfindoptions.page.md) | number | (Optional) | -| [perPage?](./kibana-plugin-core-public.savedobjectsfindoptions.perpage.md) | number | (Optional) | -| [pit?](./kibana-plugin-core-public.savedobjectsfindoptions.pit.md) | SavedObjectsPitParams | (Optional) Search against a specific Point In Time (PIT) that you've opened with . | -| [preference?](./kibana-plugin-core-public.savedobjectsfindoptions.preference.md) | string | (Optional) An optional ES preference value to be used for the query \* | -| [rootSearchFields?](./kibana-plugin-core-public.savedobjectsfindoptions.rootsearchfields.md) | string\[\] | (Optional) The fields to perform the parsed query against. Unlike the searchFields argument, these are expected to be root fields and will not be modified. If used in conjunction with searchFields, both are concatenated together. | -| [search?](./kibana-plugin-core-public.savedobjectsfindoptions.search.md) | string | (Optional) Search documents using the Elasticsearch Simple Query String syntax. See Elasticsearch Simple Query String query argument for more information | -| [searchAfter?](./kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md) | estypes.Id\[\] | (Optional) Use the sort values from the previous page to retrieve the next page of results. | -| [searchFields?](./kibana-plugin-core-public.savedobjectsfindoptions.searchfields.md) | string\[\] | (Optional) The fields to perform the parsed query against. See Elasticsearch Simple Query String fields argument for more information | -| [sortField?](./kibana-plugin-core-public.savedobjectsfindoptions.sortfield.md) | string | (Optional) | -| [sortOrder?](./kibana-plugin-core-public.savedobjectsfindoptions.sortorder.md) | estypes.SortOrder | (Optional) | -| [type](./kibana-plugin-core-public.savedobjectsfindoptions.type.md) | string \| string\[\] | | -| [typeToNamespacesMap?](./kibana-plugin-core-public.savedobjectsfindoptions.typetonamespacesmap.md) | Map<string, string\[\] \| undefined> | (Optional) This map defines each type to search for, and the namespace(s) to search for the type in; this is only intended to be used by a saved object client wrapper. If this is defined, it supersedes the type and namespaces fields when building the Elasticsearch query. Any types that are not included in this map will be excluded entirely. If a type is included but its value is undefined, the operation will search for that type in the Default namespace. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.namespaces.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.namespaces.md deleted file mode 100644 index 9cc9d64db1f65..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.namespaces.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [namespaces](./kibana-plugin-core-public.savedobjectsfindoptions.namespaces.md) - -## SavedObjectsFindOptions.namespaces property - -Signature: - -```typescript -namespaces?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.page.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.page.md deleted file mode 100644 index e009a4ac8e393..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.page.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [page](./kibana-plugin-core-public.savedobjectsfindoptions.page.md) - -## SavedObjectsFindOptions.page property - -Signature: - -```typescript -page?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.perpage.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.perpage.md deleted file mode 100644 index 0c6f3464d194c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.perpage.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [perPage](./kibana-plugin-core-public.savedobjectsfindoptions.perpage.md) - -## SavedObjectsFindOptions.perPage property - -Signature: - -```typescript -perPage?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.pit.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.pit.md deleted file mode 100644 index 2284a4d8d210d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.pit.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [pit](./kibana-plugin-core-public.savedobjectsfindoptions.pit.md) - -## SavedObjectsFindOptions.pit property - -Search against a specific Point In Time (PIT) that you've opened with . - -Signature: - -```typescript -pit?: SavedObjectsPitParams; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.preference.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.preference.md deleted file mode 100644 index 8a30cb99c57bc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.preference.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [preference](./kibana-plugin-core-public.savedobjectsfindoptions.preference.md) - -## SavedObjectsFindOptions.preference property - -An optional ES preference value to be used for the query \* - -Signature: - -```typescript -preference?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.rootsearchfields.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.rootsearchfields.md deleted file mode 100644 index faa971509eca2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.rootsearchfields.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [rootSearchFields](./kibana-plugin-core-public.savedobjectsfindoptions.rootsearchfields.md) - -## SavedObjectsFindOptions.rootSearchFields property - -The fields to perform the parsed query against. Unlike the `searchFields` argument, these are expected to be root fields and will not be modified. If used in conjunction with `searchFields`, both are concatenated together. - -Signature: - -```typescript -rootSearchFields?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.search.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.search.md deleted file mode 100644 index a7d149b58be02..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.search.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [search](./kibana-plugin-core-public.savedobjectsfindoptions.search.md) - -## SavedObjectsFindOptions.search property - -Search documents using the Elasticsearch Simple Query String syntax. See Elasticsearch Simple Query String `query` argument for more information - -Signature: - -```typescript -search?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md deleted file mode 100644 index 7016e1f1b72de..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [searchAfter](./kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md) - -## SavedObjectsFindOptions.searchAfter property - -Use the sort values from the previous page to retrieve the next page of results. - -Signature: - -```typescript -searchAfter?: estypes.Id[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchfields.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchfields.md deleted file mode 100644 index c99864ac8c046..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchfields.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [searchFields](./kibana-plugin-core-public.savedobjectsfindoptions.searchfields.md) - -## SavedObjectsFindOptions.searchFields property - -The fields to perform the parsed query against. See Elasticsearch Simple Query String `fields` argument for more information - -Signature: - -```typescript -searchFields?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortfield.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortfield.md deleted file mode 100644 index 7b5072c0e19df..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortfield.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [sortField](./kibana-plugin-core-public.savedobjectsfindoptions.sortfield.md) - -## SavedObjectsFindOptions.sortField property - -Signature: - -```typescript -sortField?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortorder.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortorder.md deleted file mode 100644 index 36f99e51ea8c6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.sortorder.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [sortOrder](./kibana-plugin-core-public.savedobjectsfindoptions.sortorder.md) - -## SavedObjectsFindOptions.sortOrder property - -Signature: - -```typescript -sortOrder?: estypes.SortOrder; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.type.md deleted file mode 100644 index b4ce216fab1ad..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [type](./kibana-plugin-core-public.savedobjectsfindoptions.type.md) - -## SavedObjectsFindOptions.type property - -Signature: - -```typescript -type: string | string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.typetonamespacesmap.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.typetonamespacesmap.md deleted file mode 100644 index 4af8c9ddeaff4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.typetonamespacesmap.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [typeToNamespacesMap](./kibana-plugin-core-public.savedobjectsfindoptions.typetonamespacesmap.md) - -## SavedObjectsFindOptions.typeToNamespacesMap property - -This map defines each type to search for, and the namespace(s) to search for the type in; this is only intended to be used by a saved object client wrapper. If this is defined, it supersedes the `type` and `namespaces` fields when building the Elasticsearch query. Any types that are not included in this map will be excluded entirely. If a type is included but its value is undefined, the operation will search for that type in the Default namespace. - -Signature: - -```typescript -typeToNamespacesMap?: Map; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.id.md deleted file mode 100644 index 5e4c8dd982a0f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptionsReference](./kibana-plugin-core-public.savedobjectsfindoptionsreference.md) > [id](./kibana-plugin-core-public.savedobjectsfindoptionsreference.id.md) - -## SavedObjectsFindOptionsReference.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.md deleted file mode 100644 index cab03bf71393c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptionsReference](./kibana-plugin-core-public.savedobjectsfindoptionsreference.md) - -## SavedObjectsFindOptionsReference interface - - -Signature: - -```typescript -export interface SavedObjectsFindOptionsReference -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-public.savedobjectsfindoptionsreference.id.md) | string | | -| [type](./kibana-plugin-core-public.savedobjectsfindoptionsreference.type.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.type.md deleted file mode 100644 index 3779bfd204a4b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptionsreference.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptionsReference](./kibana-plugin-core-public.savedobjectsfindoptionsreference.md) > [type](./kibana-plugin-core-public.savedobjectsfindoptionsreference.type.md) - -## SavedObjectsFindOptionsReference.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.aggregations.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.aggregations.md deleted file mode 100644 index 14401b02f25c7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.aggregations.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindResponsePublic](./kibana-plugin-core-public.savedobjectsfindresponsepublic.md) > [aggregations](./kibana-plugin-core-public.savedobjectsfindresponsepublic.aggregations.md) - -## SavedObjectsFindResponsePublic.aggregations property - -Signature: - -```typescript -aggregations?: A; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.md deleted file mode 100644 index dd26960a95766..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindResponsePublic](./kibana-plugin-core-public.savedobjectsfindresponsepublic.md) - -## SavedObjectsFindResponsePublic interface - -Return type of the Saved Objects `find()` method. - -\*Note\*: this type is different between the Public and Server Saved Objects clients. - -Signature: - -```typescript -export interface SavedObjectsFindResponsePublic extends SavedObjectsBatchResponse -``` -Extends: SavedObjectsBatchResponse<T> - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [aggregations?](./kibana-plugin-core-public.savedobjectsfindresponsepublic.aggregations.md) | A | (Optional) | -| [page](./kibana-plugin-core-public.savedobjectsfindresponsepublic.page.md) | number | | -| [perPage](./kibana-plugin-core-public.savedobjectsfindresponsepublic.perpage.md) | number | | -| [total](./kibana-plugin-core-public.savedobjectsfindresponsepublic.total.md) | number | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.page.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.page.md deleted file mode 100644 index 77b59c8012a5d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.page.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindResponsePublic](./kibana-plugin-core-public.savedobjectsfindresponsepublic.md) > [page](./kibana-plugin-core-public.savedobjectsfindresponsepublic.page.md) - -## SavedObjectsFindResponsePublic.page property - -Signature: - -```typescript -page: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.perpage.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.perpage.md deleted file mode 100644 index b6c6f1a6bff47..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.perpage.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindResponsePublic](./kibana-plugin-core-public.savedobjectsfindresponsepublic.md) > [perPage](./kibana-plugin-core-public.savedobjectsfindresponsepublic.perpage.md) - -## SavedObjectsFindResponsePublic.perPage property - -Signature: - -```typescript -perPage: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.total.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.total.md deleted file mode 100644 index ea551d6be0d7e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindresponsepublic.total.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindResponsePublic](./kibana-plugin-core-public.savedobjectsfindresponsepublic.md) > [total](./kibana-plugin-core-public.savedobjectsfindresponsepublic.total.md) - -## SavedObjectsFindResponsePublic.total property - -Signature: - -```typescript -total: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.actionpath.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.actionpath.md deleted file mode 100644 index 8752120b27c87..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.actionpath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) > [actionPath](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.actionpath.md) - -## SavedObjectsImportActionRequiredWarning.actionPath property - -The path (without the basePath) that the user should be redirect to address this warning. - -Signature: - -```typescript -actionPath: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.buttonlabel.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.buttonlabel.md deleted file mode 100644 index ae7daba4860ef..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.buttonlabel.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) > [buttonLabel](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.buttonlabel.md) - -## SavedObjectsImportActionRequiredWarning.buttonLabel property - -An optional label to use for the link button. If unspecified, a default label will be used. - -Signature: - -```typescript -buttonLabel?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md deleted file mode 100644 index fe148fdc2ff1a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) - -## SavedObjectsImportActionRequiredWarning interface - -A warning meant to notify that a specific user action is required to finalize the import of some type of object. - - The `actionUrl` must be a path relative to the basePath, and not include it. - -Signature: - -```typescript -export interface SavedObjectsImportActionRequiredWarning -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [actionPath](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.actionpath.md) | string | The path (without the basePath) that the user should be redirect to address this warning. | -| [buttonLabel?](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.buttonlabel.md) | string | (Optional) An optional label to use for the link button. If unspecified, a default label will be used. | -| [message](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.message.md) | string | The translated message to display to the user. | -| [type](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.type.md) | 'action\_required' | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.message.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.message.md deleted file mode 100644 index c0f322892577e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.message.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) > [message](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.message.md) - -## SavedObjectsImportActionRequiredWarning.message property - -The translated message to display to the user. - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.type.md deleted file mode 100644 index ee88f6a0d5d85..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) > [type](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.type.md) - -## SavedObjectsImportActionRequiredWarning.type property - -Signature: - -```typescript -type: 'action_required'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.destinations.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.destinations.md deleted file mode 100644 index 59ce43c4bea62..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.destinations.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md) > [destinations](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.destinations.md) - -## SavedObjectsImportAmbiguousConflictError.destinations property - -Signature: - -```typescript -destinations: Array<{ - id: string; - title?: string; - updatedAt?: string; - }>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md deleted file mode 100644 index 2d136bb870de7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md) - -## SavedObjectsImportAmbiguousConflictError interface - -Represents a failure to import due to a conflict, which can be resolved in different ways with an overwrite. - -Signature: - -```typescript -export interface SavedObjectsImportAmbiguousConflictError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [destinations](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.destinations.md) | Array<{ id: string; title?: string; updatedAt?: string; }> | | -| [type](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.type.md) | 'ambiguous\_conflict' | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.type.md deleted file mode 100644 index 600c56988ac75..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.md) > [type](./kibana-plugin-core-public.savedobjectsimportambiguousconflicterror.type.md) - -## SavedObjectsImportAmbiguousConflictError.type property - -Signature: - -```typescript -type: 'ambiguous_conflict'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.destinationid.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.destinationid.md deleted file mode 100644 index ba4002d932f57..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.destinationid.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportConflictError](./kibana-plugin-core-public.savedobjectsimportconflicterror.md) > [destinationId](./kibana-plugin-core-public.savedobjectsimportconflicterror.destinationid.md) - -## SavedObjectsImportConflictError.destinationId property - -Signature: - -```typescript -destinationId?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.md deleted file mode 100644 index 57737986ba4ca..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportConflictError](./kibana-plugin-core-public.savedobjectsimportconflicterror.md) - -## SavedObjectsImportConflictError interface - -Represents a failure to import due to a conflict. - -Signature: - -```typescript -export interface SavedObjectsImportConflictError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [destinationId?](./kibana-plugin-core-public.savedobjectsimportconflicterror.destinationid.md) | string | (Optional) | -| [type](./kibana-plugin-core-public.savedobjectsimportconflicterror.type.md) | 'conflict' | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.type.md deleted file mode 100644 index 651e230e6de8a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportconflicterror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportConflictError](./kibana-plugin-core-public.savedobjectsimportconflicterror.md) > [type](./kibana-plugin-core-public.savedobjectsimportconflicterror.type.md) - -## SavedObjectsImportConflictError.type property - -Signature: - -```typescript -type: 'conflict'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.error.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.error.md deleted file mode 100644 index 16628e83b8af9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportFailure](./kibana-plugin-core-public.savedobjectsimportfailure.md) > [error](./kibana-plugin-core-public.savedobjectsimportfailure.error.md) - -## SavedObjectsImportFailure.error property - -Signature: - -```typescript -error: SavedObjectsImportConflictError | SavedObjectsImportAmbiguousConflictError | SavedObjectsImportUnsupportedTypeError | SavedObjectsImportMissingReferencesError | SavedObjectsImportUnknownError; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.id.md deleted file mode 100644 index 2279241083241..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportFailure](./kibana-plugin-core-public.savedobjectsimportfailure.md) > [id](./kibana-plugin-core-public.savedobjectsimportfailure.id.md) - -## SavedObjectsImportFailure.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.md deleted file mode 100644 index e7de1014bdaf2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportFailure](./kibana-plugin-core-public.savedobjectsimportfailure.md) - -## SavedObjectsImportFailure interface - -Represents a failure to import. - -Signature: - -```typescript -export interface SavedObjectsImportFailure -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error](./kibana-plugin-core-public.savedobjectsimportfailure.error.md) | SavedObjectsImportConflictError \| SavedObjectsImportAmbiguousConflictError \| SavedObjectsImportUnsupportedTypeError \| SavedObjectsImportMissingReferencesError \| SavedObjectsImportUnknownError | | -| [id](./kibana-plugin-core-public.savedobjectsimportfailure.id.md) | string | | -| [meta](./kibana-plugin-core-public.savedobjectsimportfailure.meta.md) | { title?: string; icon?: string; } | | -| [overwrite?](./kibana-plugin-core-public.savedobjectsimportfailure.overwrite.md) | boolean | (Optional) If overwrite is specified, an attempt was made to overwrite an existing object. | -| [type](./kibana-plugin-core-public.savedobjectsimportfailure.type.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.meta.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.meta.md deleted file mode 100644 index 4ea9455098035..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.meta.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportFailure](./kibana-plugin-core-public.savedobjectsimportfailure.md) > [meta](./kibana-plugin-core-public.savedobjectsimportfailure.meta.md) - -## SavedObjectsImportFailure.meta property - -Signature: - -```typescript -meta: { - title?: string; - icon?: string; - }; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.overwrite.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.overwrite.md deleted file mode 100644 index 579a16697b406..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportFailure](./kibana-plugin-core-public.savedobjectsimportfailure.md) > [overwrite](./kibana-plugin-core-public.savedobjectsimportfailure.overwrite.md) - -## SavedObjectsImportFailure.overwrite property - -If `overwrite` is specified, an attempt was made to overwrite an existing object. - -Signature: - -```typescript -overwrite?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.type.md deleted file mode 100644 index 68411093a92ce..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportfailure.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportFailure](./kibana-plugin-core-public.savedobjectsimportfailure.md) > [type](./kibana-plugin-core-public.savedobjectsimportfailure.type.md) - -## SavedObjectsImportFailure.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md deleted file mode 100644 index 6c03ab263084c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md) - -## SavedObjectsImportMissingReferencesError interface - -Represents a failure to import due to missing references. - -Signature: - -```typescript -export interface SavedObjectsImportMissingReferencesError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [references](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.references.md) | Array<{ type: string; id: string; }> | | -| [type](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.type.md) | 'missing\_references' | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.references.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.references.md deleted file mode 100644 index b479956ed7125..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.references.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md) > [references](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.references.md) - -## SavedObjectsImportMissingReferencesError.references property - -Signature: - -```typescript -references: Array<{ - type: string; - id: string; - }>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.type.md deleted file mode 100644 index 6c0caa258c5fb..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.md) > [type](./kibana-plugin-core-public.savedobjectsimportmissingreferenceserror.type.md) - -## SavedObjectsImportMissingReferencesError.type property - -Signature: - -```typescript -type: 'missing_references'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.errors.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.errors.md deleted file mode 100644 index 073eac20b04ac..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.errors.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportResponse](./kibana-plugin-core-public.savedobjectsimportresponse.md) > [errors](./kibana-plugin-core-public.savedobjectsimportresponse.errors.md) - -## SavedObjectsImportResponse.errors property - -Signature: - -```typescript -errors?: SavedObjectsImportFailure[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.md deleted file mode 100644 index 5b6139723a101..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportResponse](./kibana-plugin-core-public.savedobjectsimportresponse.md) - -## SavedObjectsImportResponse interface - -The response describing the result of an import. - -Signature: - -```typescript -export interface SavedObjectsImportResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [errors?](./kibana-plugin-core-public.savedobjectsimportresponse.errors.md) | SavedObjectsImportFailure\[\] | (Optional) | -| [success](./kibana-plugin-core-public.savedobjectsimportresponse.success.md) | boolean | | -| [successCount](./kibana-plugin-core-public.savedobjectsimportresponse.successcount.md) | number | | -| [successResults?](./kibana-plugin-core-public.savedobjectsimportresponse.successresults.md) | SavedObjectsImportSuccess\[\] | (Optional) | -| [warnings](./kibana-plugin-core-public.savedobjectsimportresponse.warnings.md) | SavedObjectsImportWarning\[\] | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.success.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.success.md deleted file mode 100644 index 3c6492f340418..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.success.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportResponse](./kibana-plugin-core-public.savedobjectsimportresponse.md) > [success](./kibana-plugin-core-public.savedobjectsimportresponse.success.md) - -## SavedObjectsImportResponse.success property - -Signature: - -```typescript -success: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successcount.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successcount.md deleted file mode 100644 index caa296c3ef291..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successcount.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportResponse](./kibana-plugin-core-public.savedobjectsimportresponse.md) > [successCount](./kibana-plugin-core-public.savedobjectsimportresponse.successcount.md) - -## SavedObjectsImportResponse.successCount property - -Signature: - -```typescript -successCount: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successresults.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successresults.md deleted file mode 100644 index 51a47b6c2d953..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.successresults.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportResponse](./kibana-plugin-core-public.savedobjectsimportresponse.md) > [successResults](./kibana-plugin-core-public.savedobjectsimportresponse.successresults.md) - -## SavedObjectsImportResponse.successResults property - -Signature: - -```typescript -successResults?: SavedObjectsImportSuccess[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.warnings.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.warnings.md deleted file mode 100644 index 2e55a2e30f9cb..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportresponse.warnings.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportResponse](./kibana-plugin-core-public.savedobjectsimportresponse.md) > [warnings](./kibana-plugin-core-public.savedobjectsimportresponse.warnings.md) - -## SavedObjectsImportResponse.warnings property - -Signature: - -```typescript -warnings: SavedObjectsImportWarning[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.createnewcopy.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.createnewcopy.md deleted file mode 100644 index f60c713973d58..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.createnewcopy.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) > [createNewCopy](./kibana-plugin-core-public.savedobjectsimportretry.createnewcopy.md) - -## SavedObjectsImportRetry.createNewCopy property - -If `createNewCopy` is specified, the new object has a new (undefined) origin ID. This is only needed for the case where `createNewCopies` mode is disabled and ambiguous source conflicts are detected. - -Signature: - -```typescript -createNewCopy?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.destinationid.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.destinationid.md deleted file mode 100644 index 5131d1d01ff02..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.destinationid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) > [destinationId](./kibana-plugin-core-public.savedobjectsimportretry.destinationid.md) - -## SavedObjectsImportRetry.destinationId property - -The object ID that will be created or overwritten. If not specified, the `id` field will be used. - -Signature: - -```typescript -destinationId?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.id.md deleted file mode 100644 index 961c61a2cba6c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) > [id](./kibana-plugin-core-public.savedobjectsimportretry.id.md) - -## SavedObjectsImportRetry.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.ignoremissingreferences.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.ignoremissingreferences.md deleted file mode 100644 index 4ce833f2966cc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.ignoremissingreferences.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) > [ignoreMissingReferences](./kibana-plugin-core-public.savedobjectsimportretry.ignoremissingreferences.md) - -## SavedObjectsImportRetry.ignoreMissingReferences property - -If `ignoreMissingReferences` is specified, reference validation will be skipped for this object. - -Signature: - -```typescript -ignoreMissingReferences?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.md deleted file mode 100644 index 80a3145ae7e55..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) - -## SavedObjectsImportRetry interface - -Describes a retry operation for importing a saved object. - -Signature: - -```typescript -export interface SavedObjectsImportRetry -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createNewCopy?](./kibana-plugin-core-public.savedobjectsimportretry.createnewcopy.md) | boolean | (Optional) If createNewCopy is specified, the new object has a new (undefined) origin ID. This is only needed for the case where createNewCopies mode is disabled and ambiguous source conflicts are detected. | -| [destinationId?](./kibana-plugin-core-public.savedobjectsimportretry.destinationid.md) | string | (Optional) The object ID that will be created or overwritten. If not specified, the id field will be used. | -| [id](./kibana-plugin-core-public.savedobjectsimportretry.id.md) | string | | -| [ignoreMissingReferences?](./kibana-plugin-core-public.savedobjectsimportretry.ignoremissingreferences.md) | boolean | (Optional) If ignoreMissingReferences is specified, reference validation will be skipped for this object. | -| [overwrite](./kibana-plugin-core-public.savedobjectsimportretry.overwrite.md) | boolean | | -| [replaceReferences](./kibana-plugin-core-public.savedobjectsimportretry.replacereferences.md) | Array<{ type: string; from: string; to: string; }> | | -| [type](./kibana-plugin-core-public.savedobjectsimportretry.type.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.overwrite.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.overwrite.md deleted file mode 100644 index 51ea151a9cdb3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.overwrite.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) > [overwrite](./kibana-plugin-core-public.savedobjectsimportretry.overwrite.md) - -## SavedObjectsImportRetry.overwrite property - -Signature: - -```typescript -overwrite: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.replacereferences.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.replacereferences.md deleted file mode 100644 index 2b0fd703c0d81..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.replacereferences.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) > [replaceReferences](./kibana-plugin-core-public.savedobjectsimportretry.replacereferences.md) - -## SavedObjectsImportRetry.replaceReferences property - -Signature: - -```typescript -replaceReferences: Array<{ - type: string; - from: string; - to: string; - }>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.type.md deleted file mode 100644 index 86ccd13d7ff55..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportretry.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportRetry](./kibana-plugin-core-public.savedobjectsimportretry.md) > [type](./kibana-plugin-core-public.savedobjectsimportretry.type.md) - -## SavedObjectsImportRetry.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.md deleted file mode 100644 index 304779a1589f9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSimpleWarning](./kibana-plugin-core-public.savedobjectsimportsimplewarning.md) - -## SavedObjectsImportSimpleWarning interface - -A simple informative warning that will be displayed to the user. - -Signature: - -```typescript -export interface SavedObjectsImportSimpleWarning -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [message](./kibana-plugin-core-public.savedobjectsimportsimplewarning.message.md) | string | The translated message to display to the user | -| [type](./kibana-plugin-core-public.savedobjectsimportsimplewarning.type.md) | 'simple' | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.message.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.message.md deleted file mode 100644 index 42c94e14e3d28..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.message.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSimpleWarning](./kibana-plugin-core-public.savedobjectsimportsimplewarning.md) > [message](./kibana-plugin-core-public.savedobjectsimportsimplewarning.message.md) - -## SavedObjectsImportSimpleWarning.message property - -The translated message to display to the user - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.type.md deleted file mode 100644 index 86a4cbfa434e7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsimplewarning.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSimpleWarning](./kibana-plugin-core-public.savedobjectsimportsimplewarning.md) > [type](./kibana-plugin-core-public.savedobjectsimportsimplewarning.type.md) - -## SavedObjectsImportSimpleWarning.type property - -Signature: - -```typescript -type: 'simple'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.createnewcopy.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.createnewcopy.md deleted file mode 100644 index 8867331c1e4b7..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.createnewcopy.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) > [createNewCopy](./kibana-plugin-core-public.savedobjectsimportsuccess.createnewcopy.md) - -## SavedObjectsImportSuccess.createNewCopy property - -> Warning: This API is now obsolete. -> -> Can be removed when https://github.com/elastic/kibana/issues/91615 is done. If `createNewCopy` is specified, the new object has a new (undefined) origin ID. This is only needed for the case where `createNewCopies` mode is disabled and ambiguous source conflicts are detected. When `createNewCopies` mode is permanently enabled, this field will be redundant and can be removed. -> - -Signature: - -```typescript -createNewCopy?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.destinationid.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.destinationid.md deleted file mode 100644 index 55611a77aeb67..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.destinationid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) > [destinationId](./kibana-plugin-core-public.savedobjectsimportsuccess.destinationid.md) - -## SavedObjectsImportSuccess.destinationId property - -If `destinationId` is specified, the new object has a new ID that is different from the import ID. - -Signature: - -```typescript -destinationId?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.id.md deleted file mode 100644 index 6d6271e37dffe..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) > [id](./kibana-plugin-core-public.savedobjectsimportsuccess.id.md) - -## SavedObjectsImportSuccess.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.md deleted file mode 100644 index 57ca4b7a787f6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) - -## SavedObjectsImportSuccess interface - -Represents a successful import. - -Signature: - -```typescript -export interface SavedObjectsImportSuccess -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createNewCopy?](./kibana-plugin-core-public.savedobjectsimportsuccess.createnewcopy.md) | boolean | (Optional) | -| [destinationId?](./kibana-plugin-core-public.savedobjectsimportsuccess.destinationid.md) | string | (Optional) If destinationId is specified, the new object has a new ID that is different from the import ID. | -| [id](./kibana-plugin-core-public.savedobjectsimportsuccess.id.md) | string | | -| [meta](./kibana-plugin-core-public.savedobjectsimportsuccess.meta.md) | { title?: string; icon?: string; } | | -| [overwrite?](./kibana-plugin-core-public.savedobjectsimportsuccess.overwrite.md) | boolean | (Optional) If overwrite is specified, this object overwrote an existing one (or will do so, in the case of a pending resolution). | -| [type](./kibana-plugin-core-public.savedobjectsimportsuccess.type.md) | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.meta.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.meta.md deleted file mode 100644 index d1c7bc92b5cbf..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.meta.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) > [meta](./kibana-plugin-core-public.savedobjectsimportsuccess.meta.md) - -## SavedObjectsImportSuccess.meta property - -Signature: - -```typescript -meta: { - title?: string; - icon?: string; - }; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.overwrite.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.overwrite.md deleted file mode 100644 index 18ae2ca9bee3d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) > [overwrite](./kibana-plugin-core-public.savedobjectsimportsuccess.overwrite.md) - -## SavedObjectsImportSuccess.overwrite property - -If `overwrite` is specified, this object overwrote an existing one (or will do so, in the case of a pending resolution). - -Signature: - -```typescript -overwrite?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.type.md deleted file mode 100644 index 6ac14455d281f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportsuccess.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-public.savedobjectsimportsuccess.md) > [type](./kibana-plugin-core-public.savedobjectsimportsuccess.type.md) - -## SavedObjectsImportSuccess.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.md deleted file mode 100644 index fc78e04dee8ac..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-public.savedobjectsimportunknownerror.md) - -## SavedObjectsImportUnknownError interface - -Represents a failure to import due to an unknown reason. - -Signature: - -```typescript -export interface SavedObjectsImportUnknownError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [message](./kibana-plugin-core-public.savedobjectsimportunknownerror.message.md) | string | | -| [statusCode](./kibana-plugin-core-public.savedobjectsimportunknownerror.statuscode.md) | number | | -| [type](./kibana-plugin-core-public.savedobjectsimportunknownerror.type.md) | 'unknown' | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.message.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.message.md deleted file mode 100644 index 4445b3527657f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.message.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-public.savedobjectsimportunknownerror.md) > [message](./kibana-plugin-core-public.savedobjectsimportunknownerror.message.md) - -## SavedObjectsImportUnknownError.message property - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.statuscode.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.statuscode.md deleted file mode 100644 index 929631cf84b2e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.statuscode.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-public.savedobjectsimportunknownerror.md) > [statusCode](./kibana-plugin-core-public.savedobjectsimportunknownerror.statuscode.md) - -## SavedObjectsImportUnknownError.statusCode property - -Signature: - -```typescript -statusCode: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.type.md deleted file mode 100644 index 9febc279bb093..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunknownerror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-public.savedobjectsimportunknownerror.md) > [type](./kibana-plugin-core-public.savedobjectsimportunknownerror.type.md) - -## SavedObjectsImportUnknownError.type property - -Signature: - -```typescript -type: 'unknown'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.md deleted file mode 100644 index de805f05a12e9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportUnsupportedTypeError](./kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.md) - -## SavedObjectsImportUnsupportedTypeError interface - -Represents a failure to import due to having an unsupported saved object type. - -Signature: - -```typescript -export interface SavedObjectsImportUnsupportedTypeError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.type.md) | 'unsupported\_type' | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.type.md deleted file mode 100644 index ca8c2a419095f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportUnsupportedTypeError](./kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.md) > [type](./kibana-plugin-core-public.savedobjectsimportunsupportedtypeerror.type.md) - -## SavedObjectsImportUnsupportedTypeError.type property - -Signature: - -```typescript -type: 'unsupported_type'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportwarning.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportwarning.md deleted file mode 100644 index a9a9a70774970..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsimportwarning.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsImportWarning](./kibana-plugin-core-public.savedobjectsimportwarning.md) - -## SavedObjectsImportWarning type - -Composite type of all the possible types of import warnings. - -See [SavedObjectsImportSimpleWarning](./kibana-plugin-core-public.savedobjectsimportsimplewarning.md) and [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) for more details. - -Signature: - -```typescript -export declare type SavedObjectsImportWarning = SavedObjectsImportSimpleWarning | SavedObjectsImportActionRequiredWarning; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsmigrationversion.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsmigrationversion.md deleted file mode 100644 index f1132b98bc84e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsmigrationversion.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsMigrationVersion](./kibana-plugin-core-public.savedobjectsmigrationversion.md) - -## SavedObjectsMigrationVersion interface - -Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. - -Signature: - -```typescript -export interface SavedObjectsMigrationVersion -``` - -## Example - -migrationVersion: { dashboard: '7.1.1', space: '6.6.6', } - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md deleted file mode 100644 index cf5e6cb29a532..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsNamespaceType](./kibana-plugin-core-public.savedobjectsnamespacetype.md) - -## SavedObjectsNamespaceType type - -The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global. - -Signature: - -```typescript -export declare type SavedObjectsNamespaceType = 'single' | 'multiple' | 'multiple-isolated' | 'agnostic'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_purpose.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_purpose.md deleted file mode 100644 index 5e56fe402b10b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_purpose.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-public.savedobjectsresolveresponse.md) > [alias\_purpose](./kibana-plugin-core-public.savedobjectsresolveresponse.alias_purpose.md) - -## SavedObjectsResolveResponse.alias\_purpose property - -The reason this alias was created. - -Currently this is used to determine whether or not a toast should be shown when a user is redirected from a legacy URL; if the alias was created because of saved object conversion, then we will display a toast telling the user that the object has a new URL. - -\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is `'aliasMatch'` or `'conflict'`). - -Signature: - -```typescript -alias_purpose?: 'savedObjectConversion' | 'savedObjectImport'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_target_id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_target_id.md deleted file mode 100644 index 534c5ffde730b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.alias_target_id.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-public.savedobjectsresolveresponse.md) > [alias\_target\_id](./kibana-plugin-core-public.savedobjectsresolveresponse.alias_target_id.md) - -## SavedObjectsResolveResponse.alias\_target\_id property - -The ID of the object that the legacy URL alias points to. - -\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is `'aliasMatch'` or `'conflict'`). - -Signature: - -```typescript -alias_target_id?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.md deleted file mode 100644 index e212b1ea8b002..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-public.savedobjectsresolveresponse.md) - -## SavedObjectsResolveResponse interface - - -Signature: - -```typescript -export interface SavedObjectsResolveResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [alias\_purpose?](./kibana-plugin-core-public.savedobjectsresolveresponse.alias_purpose.md) | 'savedObjectConversion' \| 'savedObjectImport' | (Optional) The reason this alias was created.Currently this is used to determine whether or not a toast should be shown when a user is redirected from a legacy URL; if the alias was created because of saved object conversion, then we will display a toast telling the user that the object has a new URL.\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is 'aliasMatch' or 'conflict'). | -| [alias\_target\_id?](./kibana-plugin-core-public.savedobjectsresolveresponse.alias_target_id.md) | string | (Optional) The ID of the object that the legacy URL alias points to.\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is 'aliasMatch' or 'conflict'). | -| [outcome](./kibana-plugin-core-public.savedobjectsresolveresponse.outcome.md) | 'exactMatch' \| 'aliasMatch' \| 'conflict' | The outcome for a successful resolve call is one of the following values:\* 'exactMatch' -- One document exactly matched the given ID. \* '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. | -| [saved\_object](./kibana-plugin-core-public.savedobjectsresolveresponse.saved_object.md) | SavedObject<T> | The saved object that was found. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.outcome.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.outcome.md deleted file mode 100644 index ff4367d804e5d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.outcome.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-public.savedobjectsresolveresponse.md) > [outcome](./kibana-plugin-core-public.savedobjectsresolveresponse.outcome.md) - -## SavedObjectsResolveResponse.outcome property - -The outcome for a successful `resolve` call is one of the following values: - -\* `'exactMatch'` -- One document exactly matched the given ID. \* `'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. - -Signature: - -```typescript -outcome: 'exactMatch' | 'aliasMatch' | 'conflict'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.saved_object.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.saved_object.md deleted file mode 100644 index d8a74d766d582..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsresolveresponse.saved_object.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-public.savedobjectsresolveresponse.md) > [saved\_object](./kibana-plugin-core-public.savedobjectsresolveresponse.saved_object.md) - -## SavedObjectsResolveResponse.saved\_object property - -The saved object that was found. - -Signature: - -```typescript -saved_object: SavedObject; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.client.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.client.md deleted file mode 100644 index 4dc8c5ae41dbc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.client.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsStart](./kibana-plugin-core-public.savedobjectsstart.md) > [client](./kibana-plugin-core-public.savedobjectsstart.client.md) - -## SavedObjectsStart.client property - -[SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) - -Signature: - -```typescript -client: SavedObjectsClientContract; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.md deleted file mode 100644 index 774ef2a35a833..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsStart](./kibana-plugin-core-public.savedobjectsstart.md) - -## SavedObjectsStart interface - - -Signature: - -```typescript -export interface SavedObjectsStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [client](./kibana-plugin-core-public.savedobjectsstart.client.md) | SavedObjectsClientContract | [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.md deleted file mode 100644 index 4a9b85e7b67e6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-public.savedobjectsupdateoptions.md) - -## SavedObjectsUpdateOptions interface - - -Signature: - -```typescript -export interface SavedObjectsUpdateOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [references?](./kibana-plugin-core-public.savedobjectsupdateoptions.references.md) | SavedObjectReference\[\] | (Optional) | -| [upsert?](./kibana-plugin-core-public.savedobjectsupdateoptions.upsert.md) | Attributes | (Optional) | -| [version?](./kibana-plugin-core-public.savedobjectsupdateoptions.version.md) | string | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.references.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.references.md deleted file mode 100644 index 87bd774a062a1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.references.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-public.savedobjectsupdateoptions.md) > [references](./kibana-plugin-core-public.savedobjectsupdateoptions.references.md) - -## SavedObjectsUpdateOptions.references property - -Signature: - -```typescript -references?: SavedObjectReference[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.upsert.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.upsert.md deleted file mode 100644 index 611fd54a527fd..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.upsert.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-public.savedobjectsupdateoptions.md) > [upsert](./kibana-plugin-core-public.savedobjectsupdateoptions.upsert.md) - -## SavedObjectsUpdateOptions.upsert property - -Signature: - -```typescript -upsert?: Attributes; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.version.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.version.md deleted file mode 100644 index d3d90b0c443da..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsupdateoptions.version.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-public.savedobjectsupdateoptions.md) > [version](./kibana-plugin-core-public.savedobjectsupdateoptions.version.md) - -## SavedObjectsUpdateOptions.version property - -Signature: - -```typescript -version?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory._constructor_.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory._constructor_.md deleted file mode 100644 index 67264a26ac5db..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory._constructor_.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [(constructor)](./kibana-plugin-core-public.scopedhistory._constructor_.md) - -## ScopedHistory.(constructor) - -Constructs a new instance of the `ScopedHistory` class - -Signature: - -```typescript -constructor(parentHistory: History, basePath: string); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| parentHistory | History<HistoryLocationState> | | -| basePath | string | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.action.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.action.md deleted file mode 100644 index 40971b6617dce..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.action.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [action](./kibana-plugin-core-public.scopedhistory.action.md) - -## ScopedHistory.action property - -The last action dispatched on the history stack. - -Signature: - -```typescript -get action(): Action; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.block.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.block.md deleted file mode 100644 index acbb06c6aa6ec..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.block.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [block](./kibana-plugin-core-public.scopedhistory.block.md) - -## ScopedHistory.block property - -Add a block prompt requesting user confirmation when navigating away from the current page. - -Signature: - -```typescript -block: (prompt?: string | boolean | TransitionPromptHook | undefined) => UnregisterCallback; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.createhref.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.createhref.md deleted file mode 100644 index 5ab31c0ba6ff2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.createhref.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [createHref](./kibana-plugin-core-public.scopedhistory.createhref.md) - -## ScopedHistory.createHref property - -Creates an href (string) to the location. If `prependBasePath` is true (default), it will prepend the location's path with the scoped history basePath. - -Signature: - -```typescript -createHref: (location: LocationDescriptorObject, { prependBasePath }?: { - prependBasePath?: boolean | undefined; - }) => Href; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.createsubhistory.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.createsubhistory.md deleted file mode 100644 index 7c5dfccb5b008..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.createsubhistory.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [createSubHistory](./kibana-plugin-core-public.scopedhistory.createsubhistory.md) - -## ScopedHistory.createSubHistory property - -Creates a `ScopedHistory` for a subpath of this `ScopedHistory`. Useful for applications that may have sub-apps that do not need access to the containing application's history. - -Signature: - -```typescript -createSubHistory: (basePath: string) => ScopedHistory; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.go.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.go.md deleted file mode 100644 index 33d3e94c9171d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.go.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [go](./kibana-plugin-core-public.scopedhistory.go.md) - -## ScopedHistory.go property - -Send the user forward or backwards in the history stack. - -Signature: - -```typescript -go: (n: number) => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.goback.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.goback.md deleted file mode 100644 index ba32ac45d4b5a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.goback.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [goBack](./kibana-plugin-core-public.scopedhistory.goback.md) - -## ScopedHistory.goBack property - -Send the user one location back in the history stack. Equivalent to calling [ScopedHistory.go(-1)](./kibana-plugin-core-public.scopedhistory.go.md). If no more entries are available backwards, this is a no-op. - -Signature: - -```typescript -goBack: () => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.goforward.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.goforward.md deleted file mode 100644 index 9918cb0407cd8..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.goforward.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [goForward](./kibana-plugin-core-public.scopedhistory.goforward.md) - -## ScopedHistory.goForward property - -Send the user one location forward in the history stack. Equivalent to calling [ScopedHistory.go(1)](./kibana-plugin-core-public.scopedhistory.go.md). If no more entries are available forwards, this is a no-op. - -Signature: - -```typescript -goForward: () => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.length.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.length.md deleted file mode 100644 index 0205261b57539..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.length.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [length](./kibana-plugin-core-public.scopedhistory.length.md) - -## ScopedHistory.length property - -The number of entries in the history stack, including all entries forwards and backwards from the current location. - -Signature: - -```typescript -get length(): number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.listen.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.listen.md deleted file mode 100644 index febf88639b67c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.listen.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [listen](./kibana-plugin-core-public.scopedhistory.listen.md) - -## ScopedHistory.listen property - -Adds a listener for location updates. - -Signature: - -```typescript -listen: (listener: (location: Location, action: Action) => void) => UnregisterCallback; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.location.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.location.md deleted file mode 100644 index 45227a2b15ad0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.location.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [location](./kibana-plugin-core-public.scopedhistory.location.md) - -## ScopedHistory.location property - -The current location of the history stack. - -Signature: - -```typescript -get location(): Location; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.md deleted file mode 100644 index a3c369b143b4a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.md +++ /dev/null @@ -1,42 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) - -## ScopedHistory class - -A wrapper around a `History` instance that is scoped to a particular base path of the history stack. Behaves similarly to the `basename` option except that this wrapper hides any history stack entries from outside the scope of this base path. - -This wrapper also allows Core and Plugins to share a single underlying global `History` instance without exposing the history of other applications. - -The [createSubHistory](./kibana-plugin-core-public.scopedhistory.createsubhistory.md) method is particularly useful for applications that contain any number of "sub-apps" which should not have access to the main application's history or basePath. - -Signature: - -```typescript -export declare class ScopedHistory implements History -``` -Implements: History<HistoryLocationState> - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(parentHistory, basePath)](./kibana-plugin-core-public.scopedhistory._constructor_.md) | | Constructs a new instance of the ScopedHistory class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [action](./kibana-plugin-core-public.scopedhistory.action.md) | | Action | The last action dispatched on the history stack. | -| [block](./kibana-plugin-core-public.scopedhistory.block.md) | | (prompt?: string \| boolean \| TransitionPromptHook<HistoryLocationState> \| undefined) => UnregisterCallback | Add a block prompt requesting user confirmation when navigating away from the current page. | -| [createHref](./kibana-plugin-core-public.scopedhistory.createhref.md) | | (location: LocationDescriptorObject<HistoryLocationState>, { prependBasePath }?: { prependBasePath?: boolean \| undefined; }) => Href | Creates an href (string) to the location. If prependBasePath is true (default), it will prepend the location's path with the scoped history basePath. | -| [createSubHistory](./kibana-plugin-core-public.scopedhistory.createsubhistory.md) | | (basePath: string) => ScopedHistory<HistoryLocationState> | Creates a ScopedHistory for a subpath of this ScopedHistory. Useful for applications that may have sub-apps that do not need access to the containing application's history. | -| [go](./kibana-plugin-core-public.scopedhistory.go.md) | | (n: number) => void | Send the user forward or backwards in the history stack. | -| [goBack](./kibana-plugin-core-public.scopedhistory.goback.md) | | () => void | Send the user one location back in the history stack. Equivalent to calling [ScopedHistory.go(-1)](./kibana-plugin-core-public.scopedhistory.go.md). If no more entries are available backwards, this is a no-op. | -| [goForward](./kibana-plugin-core-public.scopedhistory.goforward.md) | | () => void | Send the user one location forward in the history stack. Equivalent to calling [ScopedHistory.go(1)](./kibana-plugin-core-public.scopedhistory.go.md). If no more entries are available forwards, this is a no-op. | -| [length](./kibana-plugin-core-public.scopedhistory.length.md) | | number | The number of entries in the history stack, including all entries forwards and backwards from the current location. | -| [listen](./kibana-plugin-core-public.scopedhistory.listen.md) | | (listener: (location: Location<HistoryLocationState>, action: Action) => void) => UnregisterCallback | Adds a listener for location updates. | -| [location](./kibana-plugin-core-public.scopedhistory.location.md) | | Location<HistoryLocationState> | The current location of the history stack. | -| [push](./kibana-plugin-core-public.scopedhistory.push.md) | | (pathOrLocation: Path \| LocationDescriptorObject<HistoryLocationState>, state?: HistoryLocationState \| undefined) => void | Pushes a new location onto the history stack. If there are forward entries in the stack, they will be removed. | -| [replace](./kibana-plugin-core-public.scopedhistory.replace.md) | | (pathOrLocation: Path \| LocationDescriptorObject<HistoryLocationState>, state?: HistoryLocationState \| undefined) => void | Replaces the current location in the history stack. Does not remove forward or backward entries. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.push.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.push.md deleted file mode 100644 index 226203502c5e0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.push.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [push](./kibana-plugin-core-public.scopedhistory.push.md) - -## ScopedHistory.push property - -Pushes a new location onto the history stack. If there are forward entries in the stack, they will be removed. - -Signature: - -```typescript -push: (pathOrLocation: Path | LocationDescriptorObject, state?: HistoryLocationState | undefined) => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.replace.md b/docs/development/core/public/kibana-plugin-core-public.scopedhistory.replace.md deleted file mode 100644 index 545c81ead0984..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.scopedhistory.replace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ScopedHistory](./kibana-plugin-core-public.scopedhistory.md) > [replace](./kibana-plugin-core-public.scopedhistory.replace.md) - -## ScopedHistory.replace property - -Replaces the current location in the history stack. Does not remove forward or backward entries. - -Signature: - -```typescript -replace: (pathOrLocation: Path | LocationDescriptorObject, state?: HistoryLocationState | undefined) => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject._constructor_.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject._constructor_.md deleted file mode 100644 index 412154f7ac2e3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject._constructor_.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [(constructor)](./kibana-plugin-core-public.simplesavedobject._constructor_.md) - -## SimpleSavedObject.(constructor) - -Constructs a new instance of the `SimpleSavedObject` class - -Signature: - -```typescript -constructor(client: SavedObjectsClientContract, { id, type, version, attributes, error, references, migrationVersion, coreMigrationVersion, namespaces, updated_at: updatedAt, }: SavedObjectType); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| client | SavedObjectsClientContract | | -| { id, type, version, attributes, error, references, migrationVersion, coreMigrationVersion, namespaces, updated\_at: updatedAt, } | SavedObjectType<T> | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject._version.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject._version.md deleted file mode 100644 index 2e5d708143c5e..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject._version.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [\_version](./kibana-plugin-core-public.simplesavedobject._version.md) - -## SimpleSavedObject.\_version property - -Signature: - -```typescript -_version?: SavedObjectType['version']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.attributes.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.attributes.md deleted file mode 100644 index cdca741c10adc..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [attributes](./kibana-plugin-core-public.simplesavedobject.attributes.md) - -## SimpleSavedObject.attributes property - -Signature: - -```typescript -attributes: T; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.coremigrationversion.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.coremigrationversion.md deleted file mode 100644 index 8e2217fab6eee..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.coremigrationversion.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [coreMigrationVersion](./kibana-plugin-core-public.simplesavedobject.coremigrationversion.md) - -## SimpleSavedObject.coreMigrationVersion property - -Signature: - -```typescript -coreMigrationVersion: SavedObjectType['coreMigrationVersion']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.delete.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.delete.md deleted file mode 100644 index cb848bff56430..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.delete.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [delete](./kibana-plugin-core-public.simplesavedobject.delete.md) - -## SimpleSavedObject.delete() method - -Signature: - -```typescript -delete(): Promise<{}>; -``` -Returns: - -Promise<{}> - diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.error.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.error.md deleted file mode 100644 index 326b255272582..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [error](./kibana-plugin-core-public.simplesavedobject.error.md) - -## SimpleSavedObject.error property - -Signature: - -```typescript -error: SavedObjectType['error']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.get.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.get.md deleted file mode 100644 index 9a9c27d78c06c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.get.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [get](./kibana-plugin-core-public.simplesavedobject.get.md) - -## SimpleSavedObject.get() method - -Signature: - -```typescript -get(key: string): any; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| key | string | | - -Returns: - -any - diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.has.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.has.md deleted file mode 100644 index acd0ff02c7d23..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.has.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [has](./kibana-plugin-core-public.simplesavedobject.has.md) - -## SimpleSavedObject.has() method - -Signature: - -```typescript -has(key: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| key | string | | - -Returns: - -boolean - diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.id.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.id.md deleted file mode 100644 index 92c560f661e96..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [id](./kibana-plugin-core-public.simplesavedobject.id.md) - -## SimpleSavedObject.id property - -Signature: - -```typescript -id: SavedObjectType['id']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.md deleted file mode 100644 index f151dc8bb5e09..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.md +++ /dev/null @@ -1,47 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) - -## SimpleSavedObject class - -This class is a very simple wrapper for SavedObjects loaded from the server with the [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md). - -It provides basic functionality for creating/saving/deleting saved objects, but doesn't include any type-specific implementations. - -Signature: - -```typescript -export declare class SimpleSavedObject -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(client, { id, type, version, attributes, error, references, migrationVersion, coreMigrationVersion, namespaces, updated\_at: updatedAt, })](./kibana-plugin-core-public.simplesavedobject._constructor_.md) | | Constructs a new instance of the SimpleSavedObject class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [\_version?](./kibana-plugin-core-public.simplesavedobject._version.md) | | SavedObjectType<T>\['version'\] | (Optional) | -| [attributes](./kibana-plugin-core-public.simplesavedobject.attributes.md) | | T | | -| [coreMigrationVersion](./kibana-plugin-core-public.simplesavedobject.coremigrationversion.md) | | SavedObjectType<T>\['coreMigrationVersion'\] | | -| [error](./kibana-plugin-core-public.simplesavedobject.error.md) | | SavedObjectType<T>\['error'\] | | -| [id](./kibana-plugin-core-public.simplesavedobject.id.md) | | SavedObjectType<T>\['id'\] | | -| [migrationVersion](./kibana-plugin-core-public.simplesavedobject.migrationversion.md) | | SavedObjectType<T>\['migrationVersion'\] | | -| [namespaces](./kibana-plugin-core-public.simplesavedobject.namespaces.md) | | SavedObjectType<T>\['namespaces'\] | Space(s) that this saved object exists in. This attribute is not used for "global" saved object types which are registered with namespaceType: 'agnostic'. | -| [references](./kibana-plugin-core-public.simplesavedobject.references.md) | | SavedObjectType<T>\['references'\] | | -| [type](./kibana-plugin-core-public.simplesavedobject.type.md) | | SavedObjectType<T>\['type'\] | | -| [updatedAt](./kibana-plugin-core-public.simplesavedobject.updatedat.md) | | SavedObjectType<T>\['updated\_at'\] | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [delete()](./kibana-plugin-core-public.simplesavedobject.delete.md) | | | -| [get(key)](./kibana-plugin-core-public.simplesavedobject.get.md) | | | -| [has(key)](./kibana-plugin-core-public.simplesavedobject.has.md) | | | -| [save()](./kibana-plugin-core-public.simplesavedobject.save.md) | | | -| [set(key, value)](./kibana-plugin-core-public.simplesavedobject.set.md) | | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.migrationversion.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.migrationversion.md deleted file mode 100644 index a5d17f72513a2..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.migrationversion.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [migrationVersion](./kibana-plugin-core-public.simplesavedobject.migrationversion.md) - -## SimpleSavedObject.migrationVersion property - -Signature: - -```typescript -migrationVersion: SavedObjectType['migrationVersion']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.namespaces.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.namespaces.md deleted file mode 100644 index 7fb0a4e3a717a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.namespaces.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [namespaces](./kibana-plugin-core-public.simplesavedobject.namespaces.md) - -## SimpleSavedObject.namespaces property - -Space(s) that this saved object exists in. This attribute is not used for "global" saved object types which are registered with `namespaceType: 'agnostic'`. - -Signature: - -```typescript -namespaces: SavedObjectType['namespaces']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.references.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.references.md deleted file mode 100644 index 805309a151105..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.references.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [references](./kibana-plugin-core-public.simplesavedobject.references.md) - -## SimpleSavedObject.references property - -Signature: - -```typescript -references: SavedObjectType['references']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.save.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.save.md deleted file mode 100644 index fdd262c70d4e6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.save.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [save](./kibana-plugin-core-public.simplesavedobject.save.md) - -## SimpleSavedObject.save() method - -Signature: - -```typescript -save(): Promise>; -``` -Returns: - -Promise<SimpleSavedObject<T>> - diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.set.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.set.md deleted file mode 100644 index e3a6621f520bd..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.set.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [set](./kibana-plugin-core-public.simplesavedobject.set.md) - -## SimpleSavedObject.set() method - -Signature: - -```typescript -set(key: string, value: any): T; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| key | string | | -| value | any | | - -Returns: - -T - diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.type.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.type.md deleted file mode 100644 index ce5874bc3e0cf..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [type](./kibana-plugin-core-public.simplesavedobject.type.md) - -## SimpleSavedObject.type property - -Signature: - -```typescript -type: SavedObjectType['type']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.updatedat.md b/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.updatedat.md deleted file mode 100644 index 80b1f95969934..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.simplesavedobject.updatedat.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SimpleSavedObject](./kibana-plugin-core-public.simplesavedobject.md) > [updatedAt](./kibana-plugin-core-public.simplesavedobject.updatedat.md) - -## SimpleSavedObject.updatedAt property - -Signature: - -```typescript -updatedAt: SavedObjectType['updated_at']; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.startservicesaccessor.md b/docs/development/core/public/kibana-plugin-core-public.startservicesaccessor.md deleted file mode 100644 index ad53307d53d69..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.startservicesaccessor.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [StartServicesAccessor](./kibana-plugin-core-public.startservicesaccessor.md) - -## StartServicesAccessor type - -Allows plugins to get access to APIs available in start inside async handlers, such as [App.mount](./kibana-plugin-core-public.app.mount.md). Promise will not resolve until Core and plugin dependencies have completed `start`. - -Signature: - -```typescript -export declare type StartServicesAccessor = () => Promise<[CoreStart, TPluginsStart, TStart]>; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.toast.md b/docs/development/core/public/kibana-plugin-core-public.toast.md deleted file mode 100644 index 4acdfa4763d9c..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toast.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [Toast](./kibana-plugin-core-public.toast.md) - -## Toast type - -Signature: - -```typescript -export declare type Toast = ToastInputFields & { - id: string; -}; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.toastinput.md b/docs/development/core/public/kibana-plugin-core-public.toastinput.md deleted file mode 100644 index c6e58227293b6..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastinput.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastInput](./kibana-plugin-core-public.toastinput.md) - -## ToastInput type - -Inputs for [IToasts](./kibana-plugin-core-public.itoasts.md) APIs. - -Signature: - -```typescript -export declare type ToastInput = string | ToastInputFields; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.toastinputfields.md b/docs/development/core/public/kibana-plugin-core-public.toastinputfields.md deleted file mode 100644 index 4eed737726835..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastinputfields.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastInputFields](./kibana-plugin-core-public.toastinputfields.md) - -## ToastInputFields type - -Allowed fields for [ToastInput](./kibana-plugin-core-public.toastinput.md). - -Signature: - -```typescript -export declare type ToastInputFields = Pick> & { - title?: string | MountPoint; - text?: string | MountPoint; -}; -``` - -## Remarks - -`id` cannot be specified. - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastoptions.md b/docs/development/core/public/kibana-plugin-core-public.toastoptions.md deleted file mode 100644 index c140a2e52b036..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastoptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastOptions](./kibana-plugin-core-public.toastoptions.md) - -## ToastOptions interface - -Options available for [IToasts](./kibana-plugin-core-public.itoasts.md) APIs. - -Signature: - -```typescript -export interface ToastOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [toastLifeTimeMs?](./kibana-plugin-core-public.toastoptions.toastlifetimems.md) | number | (Optional) How long should the toast remain on screen. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastoptions.toastlifetimems.md b/docs/development/core/public/kibana-plugin-core-public.toastoptions.toastlifetimems.md deleted file mode 100644 index bb0e2f9afc83b..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastoptions.toastlifetimems.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastOptions](./kibana-plugin-core-public.toastoptions.md) > [toastLifeTimeMs](./kibana-plugin-core-public.toastoptions.toastlifetimems.md) - -## ToastOptions.toastLifeTimeMs property - -How long should the toast remain on screen. - -Signature: - -```typescript -toastLifeTimeMs?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi._constructor_.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi._constructor_.md deleted file mode 100644 index c50cc4d6469ea..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi._constructor_.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [(constructor)](./kibana-plugin-core-public.toastsapi._constructor_.md) - -## ToastsApi.(constructor) - -Constructs a new instance of the `ToastsApi` class - -Signature: - -```typescript -constructor(deps: { - uiSettings: IUiSettingsClient; - }); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| deps | { uiSettings: IUiSettingsClient; } | | - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.add.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.add.md deleted file mode 100644 index 7bee5af0c3be4..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.add.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [add](./kibana-plugin-core-public.toastsapi.add.md) - -## ToastsApi.add() method - -Adds a new toast to current array of toast. - -Signature: - -```typescript -add(toastOrTitle: ToastInput): Toast; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| toastOrTitle | ToastInput | a [ToastInput](./kibana-plugin-core-public.toastinput.md) | - -Returns: - -Toast - -a [Toast](./kibana-plugin-core-public.toast.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.adddanger.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.adddanger.md deleted file mode 100644 index f73a84996ff92..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.adddanger.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [addDanger](./kibana-plugin-core-public.toastsapi.adddanger.md) - -## ToastsApi.addDanger() method - -Adds a new toast pre-configured with the danger color and alert icon. - -Signature: - -```typescript -addDanger(toastOrTitle: ToastInput, options?: ToastOptions): Toast; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| toastOrTitle | ToastInput | a [ToastInput](./kibana-plugin-core-public.toastinput.md) | -| options | ToastOptions | a [ToastOptions](./kibana-plugin-core-public.toastoptions.md) | - -Returns: - -Toast - -a [Toast](./kibana-plugin-core-public.toast.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.adderror.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.adderror.md deleted file mode 100644 index c1520ea392f70..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.adderror.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [addError](./kibana-plugin-core-public.toastsapi.adderror.md) - -## ToastsApi.addError() method - -Adds a new toast that displays an exception message with a button to open the full stacktrace in a modal. - -Signature: - -```typescript -addError(error: Error, options: ErrorToastOptions): Toast; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | an Error instance. | -| options | ErrorToastOptions | [ErrorToastOptions](./kibana-plugin-core-public.errortoastoptions.md) | - -Returns: - -Toast - -a [Toast](./kibana-plugin-core-public.toast.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.addinfo.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.addinfo.md deleted file mode 100644 index 7029482663155..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.addinfo.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [addInfo](./kibana-plugin-core-public.toastsapi.addinfo.md) - -## ToastsApi.addInfo() method - -Adds a new toast pre-configured with the info color and info icon. - -Signature: - -```typescript -addInfo(toastOrTitle: ToastInput, options?: ToastOptions): Toast; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| toastOrTitle | ToastInput | a [ToastInput](./kibana-plugin-core-public.toastinput.md) | -| options | ToastOptions | a [ToastOptions](./kibana-plugin-core-public.toastoptions.md) | - -Returns: - -Toast - -a [Toast](./kibana-plugin-core-public.toast.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.addsuccess.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.addsuccess.md deleted file mode 100644 index b9cf4da3b43af..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.addsuccess.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [addSuccess](./kibana-plugin-core-public.toastsapi.addsuccess.md) - -## ToastsApi.addSuccess() method - -Adds a new toast pre-configured with the success color and check icon. - -Signature: - -```typescript -addSuccess(toastOrTitle: ToastInput, options?: ToastOptions): Toast; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| toastOrTitle | ToastInput | a [ToastInput](./kibana-plugin-core-public.toastinput.md) | -| options | ToastOptions | a [ToastOptions](./kibana-plugin-core-public.toastoptions.md) | - -Returns: - -Toast - -a [Toast](./kibana-plugin-core-public.toast.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.addwarning.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.addwarning.md deleted file mode 100644 index 790af0d26220a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.addwarning.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [addWarning](./kibana-plugin-core-public.toastsapi.addwarning.md) - -## ToastsApi.addWarning() method - -Adds a new toast pre-configured with the warning color and help icon. - -Signature: - -```typescript -addWarning(toastOrTitle: ToastInput, options?: ToastOptions): Toast; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| toastOrTitle | ToastInput | a [ToastInput](./kibana-plugin-core-public.toastinput.md) | -| options | ToastOptions | a [ToastOptions](./kibana-plugin-core-public.toastoptions.md) | - -Returns: - -Toast - -a [Toast](./kibana-plugin-core-public.toast.md) - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.get_.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.get_.md deleted file mode 100644 index 275d30fd54e0f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.get_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [get$](./kibana-plugin-core-public.toastsapi.get_.md) - -## ToastsApi.get$() method - -Observable of the toast messages to show to the user. - -Signature: - -```typescript -get$(): Rx.Observable; -``` -Returns: - -Rx.Observable<Toast\[\]> - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.md deleted file mode 100644 index 4d7f9dcacfa6f..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.md +++ /dev/null @@ -1,34 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) - -## ToastsApi class - -Methods for adding and removing global toast messages. - -Signature: - -```typescript -export declare class ToastsApi implements IToasts -``` -Implements: IToasts - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(deps)](./kibana-plugin-core-public.toastsapi._constructor_.md) | | Constructs a new instance of the ToastsApi class | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [add(toastOrTitle)](./kibana-plugin-core-public.toastsapi.add.md) | | Adds a new toast to current array of toast. | -| [addDanger(toastOrTitle, options)](./kibana-plugin-core-public.toastsapi.adddanger.md) | | Adds a new toast pre-configured with the danger color and alert icon. | -| [addError(error, options)](./kibana-plugin-core-public.toastsapi.adderror.md) | | Adds a new toast that displays an exception message with a button to open the full stacktrace in a modal. | -| [addInfo(toastOrTitle, options)](./kibana-plugin-core-public.toastsapi.addinfo.md) | | Adds a new toast pre-configured with the info color and info icon. | -| [addSuccess(toastOrTitle, options)](./kibana-plugin-core-public.toastsapi.addsuccess.md) | | Adds a new toast pre-configured with the success color and check icon. | -| [addWarning(toastOrTitle, options)](./kibana-plugin-core-public.toastsapi.addwarning.md) | | Adds a new toast pre-configured with the warning color and help icon. | -| [get$()](./kibana-plugin-core-public.toastsapi.get_.md) | | Observable of the toast messages to show to the user. | -| [remove(toastOrId)](./kibana-plugin-core-public.toastsapi.remove.md) | | Removes a toast from the current array of toasts if present. | - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsapi.remove.md b/docs/development/core/public/kibana-plugin-core-public.toastsapi.remove.md deleted file mode 100644 index aeac9f46b7901..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsapi.remove.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsApi](./kibana-plugin-core-public.toastsapi.md) > [remove](./kibana-plugin-core-public.toastsapi.remove.md) - -## ToastsApi.remove() method - -Removes a toast from the current array of toasts if present. - -Signature: - -```typescript -remove(toastOrId: Toast | string): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| toastOrId | Toast \| string | a [Toast](./kibana-plugin-core-public.toast.md) returned by [ToastsApi.add()](./kibana-plugin-core-public.toastsapi.add.md) or its id | - -Returns: - -void - diff --git a/docs/development/core/public/kibana-plugin-core-public.toastssetup.md b/docs/development/core/public/kibana-plugin-core-public.toastssetup.md deleted file mode 100644 index c704a3ec1d80a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastssetup.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsSetup](./kibana-plugin-core-public.toastssetup.md) - -## ToastsSetup type - -[IToasts](./kibana-plugin-core-public.itoasts.md) - -Signature: - -```typescript -export declare type ToastsSetup = IToasts; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.toastsstart.md b/docs/development/core/public/kibana-plugin-core-public.toastsstart.md deleted file mode 100644 index 3b2cf97e4ddf0..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.toastsstart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ToastsStart](./kibana-plugin-core-public.toastsstart.md) - -## ToastsStart type - -[IToasts](./kibana-plugin-core-public.itoasts.md) - -Signature: - -```typescript -export declare type ToastsStart = IToasts; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.category.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.category.md deleted file mode 100644 index 4b67d32e6bc27..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.category.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [category](./kibana-plugin-core-public.uisettingsparams.category.md) - -## UiSettingsParams.category property - -used to group the configured setting in the UI - -Signature: - -```typescript -category?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.deprecation.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.deprecation.md deleted file mode 100644 index a68cbed7662e3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.deprecation.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [deprecation](./kibana-plugin-core-public.uisettingsparams.deprecation.md) - -## UiSettingsParams.deprecation property - -optional deprecation information. Used to generate a deprecation warning. - -Signature: - -```typescript -deprecation?: DeprecationSettings; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.description.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.description.md deleted file mode 100644 index 25e616dbaa90a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.description.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [description](./kibana-plugin-core-public.uisettingsparams.description.md) - -## UiSettingsParams.description property - -description provided to a user in UI - -Signature: - -```typescript -description?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md deleted file mode 100644 index 325ce96f36ca3..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) - -## UiSettingsParams interface - -UiSettings parameters defined by the plugins. - -Signature: - -```typescript -export interface UiSettingsParams -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [category?](./kibana-plugin-core-public.uisettingsparams.category.md) | string\[\] | (Optional) used to group the configured setting in the UI | -| [deprecation?](./kibana-plugin-core-public.uisettingsparams.deprecation.md) | DeprecationSettings | (Optional) optional deprecation information. Used to generate a deprecation warning. | -| [description?](./kibana-plugin-core-public.uisettingsparams.description.md) | string | (Optional) description provided to a user in UI | -| [metric?](./kibana-plugin-core-public.uisettingsparams.metric.md) | { type: UiCounterMetricType; name: string; } | (Optional) Metric to track once this property changes | -| [name?](./kibana-plugin-core-public.uisettingsparams.name.md) | string | (Optional) title in the UI | -| [optionLabels?](./kibana-plugin-core-public.uisettingsparams.optionlabels.md) | Record<string, string> | (Optional) text labels for 'select' type UI element | -| [options?](./kibana-plugin-core-public.uisettingsparams.options.md) | string\[\] | (Optional) array of permitted values for this setting | -| [order?](./kibana-plugin-core-public.uisettingsparams.order.md) | number | (Optional) index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI. settings without order defined will be displayed last and ordered by name | -| [readonly?](./kibana-plugin-core-public.uisettingsparams.readonly.md) | boolean | (Optional) a flag indicating that value cannot be changed | -| [requiresPageReload?](./kibana-plugin-core-public.uisettingsparams.requirespagereload.md) | boolean | (Optional) a flag indicating whether new value applying requires page reloading | -| [schema](./kibana-plugin-core-public.uisettingsparams.schema.md) | Type<T> | | -| [sensitive?](./kibana-plugin-core-public.uisettingsparams.sensitive.md) | boolean | (Optional) a flag indicating that value might contain user sensitive data. used by telemetry to mask the value of the setting when sent. | -| [type?](./kibana-plugin-core-public.uisettingsparams.type.md) | UiSettingsType | (Optional) defines a type of UI element [UiSettingsType](./kibana-plugin-core-public.uisettingstype.md) | -| [value?](./kibana-plugin-core-public.uisettingsparams.value.md) | T | (Optional) default value to fall back to if a user doesn't provide any | - diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.metric.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.metric.md deleted file mode 100644 index c6d288ec8f542..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.metric.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [metric](./kibana-plugin-core-public.uisettingsparams.metric.md) - -## UiSettingsParams.metric property - -> Warning: This API is now obsolete. -> -> Temporary measure until https://github.com/elastic/kibana/issues/83084 is in place -> - -Metric to track once this property changes - -Signature: - -```typescript -metric?: { - type: UiCounterMetricType; - name: string; - }; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.name.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.name.md deleted file mode 100644 index a86ba4d49725a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [name](./kibana-plugin-core-public.uisettingsparams.name.md) - -## UiSettingsParams.name property - -title in the UI - -Signature: - -```typescript -name?: string; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.optionlabels.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.optionlabels.md deleted file mode 100644 index 35e90878a0dab..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.optionlabels.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [optionLabels](./kibana-plugin-core-public.uisettingsparams.optionlabels.md) - -## UiSettingsParams.optionLabels property - -text labels for 'select' type UI element - -Signature: - -```typescript -optionLabels?: Record; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.options.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.options.md deleted file mode 100644 index 60060d7c3223d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.options.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [options](./kibana-plugin-core-public.uisettingsparams.options.md) - -## UiSettingsParams.options property - -array of permitted values for this setting - -Signature: - -```typescript -options?: string[]; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.order.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.order.md deleted file mode 100644 index d93aaeb904616..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.order.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [order](./kibana-plugin-core-public.uisettingsparams.order.md) - -## UiSettingsParams.order property - -index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI. - - settings without order defined will be displayed last and ordered by name - -Signature: - -```typescript -order?: number; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.readonly.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.readonly.md deleted file mode 100644 index 03c5cd6201825..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.readonly.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [readonly](./kibana-plugin-core-public.uisettingsparams.readonly.md) - -## UiSettingsParams.readonly property - -a flag indicating that value cannot be changed - -Signature: - -```typescript -readonly?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.requirespagereload.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.requirespagereload.md deleted file mode 100644 index 2ce396dbc6a81..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.requirespagereload.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [requiresPageReload](./kibana-plugin-core-public.uisettingsparams.requirespagereload.md) - -## UiSettingsParams.requiresPageReload property - -a flag indicating whether new value applying requires page reloading - -Signature: - -```typescript -requiresPageReload?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.schema.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.schema.md deleted file mode 100644 index f90d5161f96a9..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.schema.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [schema](./kibana-plugin-core-public.uisettingsparams.schema.md) - -## UiSettingsParams.schema property - -Signature: - -```typescript -schema: Type; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.sensitive.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.sensitive.md deleted file mode 100644 index e12f3c5649f17..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.sensitive.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [sensitive](./kibana-plugin-core-public.uisettingsparams.sensitive.md) - -## UiSettingsParams.sensitive property - -a flag indicating that value might contain user sensitive data. used by telemetry to mask the value of the setting when sent. - -Signature: - -```typescript -sensitive?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.type.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.type.md deleted file mode 100644 index 128e8f3ce7761..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [type](./kibana-plugin-core-public.uisettingsparams.type.md) - -## UiSettingsParams.type property - -defines a type of UI element [UiSettingsType](./kibana-plugin-core-public.uisettingstype.md) - -Signature: - -```typescript -type?: UiSettingsType; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.value.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.value.md deleted file mode 100644 index 2740f169eeecb..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.value.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [value](./kibana-plugin-core-public.uisettingsparams.value.md) - -## UiSettingsParams.value property - -default value to fall back to if a user doesn't provide any - -Signature: - -```typescript -value?: T; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsstate.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsstate.md deleted file mode 100644 index 8aae7904276e1..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingsstate.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsState](./kibana-plugin-core-public.uisettingsstate.md) - -## UiSettingsState interface - - -Signature: - -```typescript -export interface UiSettingsState -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingstype.md b/docs/development/core/public/kibana-plugin-core-public.uisettingstype.md deleted file mode 100644 index 65e6264ea1e08..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.uisettingstype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsType](./kibana-plugin-core-public.uisettingstype.md) - -## UiSettingsType type - -UI element type to represent the settings. - -Signature: - -```typescript -export declare type UiSettingsType = 'undefined' | 'json' | 'markdown' | 'number' | 'select' | 'boolean' | 'string' | 'array' | 'image' | 'color'; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.unmountcallback.md b/docs/development/core/public/kibana-plugin-core-public.unmountcallback.md deleted file mode 100644 index e4570de5a0f31..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.unmountcallback.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UnmountCallback](./kibana-plugin-core-public.unmountcallback.md) - -## UnmountCallback type - -A function that will unmount the element previously mounted by the associated [MountPoint](./kibana-plugin-core-public.mountpoint.md) - -Signature: - -```typescript -export declare type UnmountCallback = () => void; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.url_max_length.md b/docs/development/core/public/kibana-plugin-core-public.url_max_length.md deleted file mode 100644 index 993320d51909a..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.url_max_length.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [URL\_MAX\_LENGTH](./kibana-plugin-core-public.url_max_length.md) - -## URL\_MAX\_LENGTH variable - -The max URL length allowed by the current browser. Should be used to display warnings to users when query parameters cause URL to exceed this limit. - -Signature: - -```typescript -URL_MAX_LENGTH: number -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.isoverridden.md b/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.isoverridden.md deleted file mode 100644 index 2d9994e442f00..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.isoverridden.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UserProvidedValues](./kibana-plugin-core-public.userprovidedvalues.md) > [isOverridden](./kibana-plugin-core-public.userprovidedvalues.isoverridden.md) - -## UserProvidedValues.isOverridden property - -Signature: - -```typescript -isOverridden?: boolean; -``` diff --git a/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.md b/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.md deleted file mode 100644 index eb8f0124c3341..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UserProvidedValues](./kibana-plugin-core-public.userprovidedvalues.md) - -## UserProvidedValues interface - -Describes the values explicitly set by user. - -Signature: - -```typescript -export interface UserProvidedValues -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [isOverridden?](./kibana-plugin-core-public.userprovidedvalues.isoverridden.md) | boolean | (Optional) | -| [userValue?](./kibana-plugin-core-public.userprovidedvalues.uservalue.md) | T | (Optional) | - diff --git a/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.uservalue.md b/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.uservalue.md deleted file mode 100644 index 8925852f6e80d..0000000000000 --- a/docs/development/core/public/kibana-plugin-core-public.userprovidedvalues.uservalue.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UserProvidedValues](./kibana-plugin-core-public.userprovidedvalues.md) > [userValue](./kibana-plugin-core-public.userprovidedvalues.uservalue.md) - -## UserProvidedValues.userValue property - -Signature: - -```typescript -userValue?: T; -``` diff --git a/docs/development/core/server/index.md b/docs/development/core/server/index.md deleted file mode 100644 index 2f215c322cdc8..0000000000000 --- a/docs/development/core/server/index.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) - -## API Reference - -## Packages - -| Package | Description | -| --- | --- | -| [kibana-plugin-core-server](./kibana-plugin-core-server.md) | The Kibana Core APIs for server-side plugins.A plugin requires a kibana.json file at it's root directory that follows to define static plugin information required to load the plugin.A plugin's server/index file must contain a named import, plugin, that implements which returns an object that implements .The plugin integrates with the core system via lifecycle events: setup, start, and stop. In each lifecycle method, the plugin will receive the corresponding core services available (either or ) and any interfaces returned by dependency plugins' lifecycle method. Anything returned by the plugin's lifecycle method will be exposed to downstream dependencies when their corresponding lifecycle methods are invoked. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.analyticsservicepreboot.md b/docs/development/core/server/kibana-plugin-core-server.analyticsservicepreboot.md deleted file mode 100644 index e1129181dbb49..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.analyticsservicepreboot.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AnalyticsServicePreboot](./kibana-plugin-core-server.analyticsservicepreboot.md) - -## AnalyticsServicePreboot type - -Exposes the public APIs of the AnalyticsClient during the preboot phase - -Signature: - -```typescript -export declare type AnalyticsServicePreboot = Omit; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.analyticsservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.analyticsservicesetup.md deleted file mode 100644 index 5dc90eb0c1f03..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.analyticsservicesetup.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AnalyticsServiceSetup](./kibana-plugin-core-server.analyticsservicesetup.md) - -## AnalyticsServiceSetup type - -Exposes the public APIs of the AnalyticsClient during the setup phase. - -Signature: - -```typescript -export declare type AnalyticsServiceSetup = Omit; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.analyticsservicestart.md b/docs/development/core/server/kibana-plugin-core-server.analyticsservicestart.md deleted file mode 100644 index 828577889da61..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.analyticsservicestart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AnalyticsServiceStart](./kibana-plugin-core-server.analyticsservicestart.md) - -## AnalyticsServiceStart type - -Exposes the public APIs of the AnalyticsClient during the start phase - -Signature: - -```typescript -export declare type AnalyticsServiceStart = Pick; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.app_wrapper_class.md b/docs/development/core/server/kibana-plugin-core-server.app_wrapper_class.md deleted file mode 100644 index cdb0b909bf79d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.app_wrapper_class.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [APP\_WRAPPER\_CLASS](./kibana-plugin-core-server.app_wrapper_class.md) - -## APP\_WRAPPER\_CLASS variable - -The class name for top level \*and\* nested application wrappers to ensure proper layout - -Signature: - -```typescript -APP_WRAPPER_CLASS = "kbnAppWrapper" -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.appcategory.arialabel.md b/docs/development/core/server/kibana-plugin-core-server.appcategory.arialabel.md deleted file mode 100644 index fe81f7cffaa41..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.appcategory.arialabel.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AppCategory](./kibana-plugin-core-server.appcategory.md) > [ariaLabel](./kibana-plugin-core-server.appcategory.arialabel.md) - -## AppCategory.ariaLabel property - -If the visual label isn't appropriate for screen readers, can override it here - -Signature: - -```typescript -ariaLabel?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.appcategory.euiicontype.md b/docs/development/core/server/kibana-plugin-core-server.appcategory.euiicontype.md deleted file mode 100644 index 79de37ea619f3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.appcategory.euiicontype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AppCategory](./kibana-plugin-core-server.appcategory.md) > [euiIconType](./kibana-plugin-core-server.appcategory.euiicontype.md) - -## AppCategory.euiIconType property - -Define an icon to be used for the category If the category is only 1 item, and no icon is defined, will default to the product icon Defaults to initials if no icon is defined - -Signature: - -```typescript -euiIconType?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.appcategory.id.md b/docs/development/core/server/kibana-plugin-core-server.appcategory.id.md deleted file mode 100644 index f0889d200725a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.appcategory.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AppCategory](./kibana-plugin-core-server.appcategory.md) > [id](./kibana-plugin-core-server.appcategory.id.md) - -## AppCategory.id property - -Unique identifier for the categories - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.appcategory.label.md b/docs/development/core/server/kibana-plugin-core-server.appcategory.label.md deleted file mode 100644 index 9405118ed7a11..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.appcategory.label.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AppCategory](./kibana-plugin-core-server.appcategory.md) > [label](./kibana-plugin-core-server.appcategory.label.md) - -## AppCategory.label property - -Label used for category name. Also used as aria-label if one isn't set. - -Signature: - -```typescript -label: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.appcategory.md b/docs/development/core/server/kibana-plugin-core-server.appcategory.md deleted file mode 100644 index ca5e8b354d451..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.appcategory.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AppCategory](./kibana-plugin-core-server.appcategory.md) - -## AppCategory interface - -A category definition for nav links to know where to sort them in the left hand nav - -Signature: - -```typescript -export interface AppCategory -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [ariaLabel?](./kibana-plugin-core-server.appcategory.arialabel.md) | string | (Optional) If the visual label isn't appropriate for screen readers, can override it here | -| [euiIconType?](./kibana-plugin-core-server.appcategory.euiicontype.md) | string | (Optional) Define an icon to be used for the category If the category is only 1 item, and no icon is defined, will default to the product icon Defaults to initials if no icon is defined | -| [id](./kibana-plugin-core-server.appcategory.id.md) | string | Unique identifier for the categories | -| [label](./kibana-plugin-core-server.appcategory.label.md) | string | Label used for category name. Also used as aria-label if one isn't set. | -| [order?](./kibana-plugin-core-server.appcategory.order.md) | number | (Optional) The order that categories will be sorted in Prefer large steps between categories to allow for further editing (Default categories are in steps of 1000) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.appcategory.order.md b/docs/development/core/server/kibana-plugin-core-server.appcategory.order.md deleted file mode 100644 index aba1b886076ad..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.appcategory.order.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AppCategory](./kibana-plugin-core-server.appcategory.md) > [order](./kibana-plugin-core-server.appcategory.order.md) - -## AppCategory.order property - -The order that categories will be sorted in Prefer large steps between categories to allow for further editing (Default categories are in steps of 1000) - -Signature: - -```typescript -order?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.md b/docs/development/core/server/kibana-plugin-core-server.asyncplugin.md deleted file mode 100644 index bd528e59878ea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AsyncPlugin](./kibana-plugin-core-server.asyncplugin.md) - -## AsyncPlugin interface - -> Warning: This API is now obsolete. -> -> Asynchronous lifecycles are deprecated, and should be migrated to sync 8.8.0 -> - -A plugin with asynchronous lifecycle methods. - -Signature: - -```typescript -export interface AsyncPlugin -``` - -## Methods - -| Method | Description | -| --- | --- | -| [setup(core, plugins)](./kibana-plugin-core-server.asyncplugin.setup.md) | | -| [start(core, plugins)](./kibana-plugin-core-server.asyncplugin.start.md) | | -| [stop()?](./kibana-plugin-core-server.asyncplugin.stop.md) | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.setup.md b/docs/development/core/server/kibana-plugin-core-server.asyncplugin.setup.md deleted file mode 100644 index 73752d6c9bd20..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.setup.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AsyncPlugin](./kibana-plugin-core-server.asyncplugin.md) > [setup](./kibana-plugin-core-server.asyncplugin.setup.md) - -## AsyncPlugin.setup() method - -Signature: - -```typescript -setup(core: CoreSetup, plugins: TPluginsSetup): TSetup | Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| core | CoreSetup | | -| plugins | TPluginsSetup | | - -Returns: - -TSetup \| Promise<TSetup> - diff --git a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.start.md b/docs/development/core/server/kibana-plugin-core-server.asyncplugin.start.md deleted file mode 100644 index 98cf74341062a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.start.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AsyncPlugin](./kibana-plugin-core-server.asyncplugin.md) > [start](./kibana-plugin-core-server.asyncplugin.start.md) - -## AsyncPlugin.start() method - -Signature: - -```typescript -start(core: CoreStart, plugins: TPluginsStart): TStart | Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| core | CoreStart | | -| plugins | TPluginsStart | | - -Returns: - -TStart \| Promise<TStart> - diff --git a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.stop.md b/docs/development/core/server/kibana-plugin-core-server.asyncplugin.stop.md deleted file mode 100644 index 80c554f343346..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.asyncplugin.stop.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AsyncPlugin](./kibana-plugin-core-server.asyncplugin.md) > [stop](./kibana-plugin-core-server.asyncplugin.stop.md) - -## AsyncPlugin.stop() method - -Signature: - -```typescript -stop?(): void; -``` -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.authenticated.md b/docs/development/core/server/kibana-plugin-core-server.authenticated.md deleted file mode 100644 index 90b480d4a026c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authenticated.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Authenticated](./kibana-plugin-core-server.authenticated.md) - -## Authenticated interface - - -Signature: - -```typescript -export interface Authenticated extends AuthResultParams -``` -Extends: AuthResultParams - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-server.authenticated.type.md) | AuthResultType.authenticated | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authenticated.type.md b/docs/development/core/server/kibana-plugin-core-server.authenticated.type.md deleted file mode 100644 index f655ecac12606..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authenticated.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Authenticated](./kibana-plugin-core-server.authenticated.md) > [type](./kibana-plugin-core-server.authenticated.type.md) - -## Authenticated.type property - -Signature: - -```typescript -type: AuthResultType.authenticated; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authenticationhandler.md b/docs/development/core/server/kibana-plugin-core-server.authenticationhandler.md deleted file mode 100644 index d7a456dc127af..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authenticationhandler.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthenticationHandler](./kibana-plugin-core-server.authenticationhandler.md) - -## AuthenticationHandler type - -See [AuthToolkit](./kibana-plugin-core-server.authtoolkit.md). - -Signature: - -```typescript -export declare type AuthenticationHandler = (request: KibanaRequest, response: LifecycleResponseFactory, toolkit: AuthToolkit) => AuthResult | IKibanaResponse | Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authheaders.md b/docs/development/core/server/kibana-plugin-core-server.authheaders.md deleted file mode 100644 index 60c3c0be7e552..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authheaders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthHeaders](./kibana-plugin-core-server.authheaders.md) - -## AuthHeaders type - -Auth Headers map - -Signature: - -```typescript -export declare type AuthHeaders = Record; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authnothandled.md b/docs/development/core/server/kibana-plugin-core-server.authnothandled.md deleted file mode 100644 index 297f60e4bd8ac..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authnothandled.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthNotHandled](./kibana-plugin-core-server.authnothandled.md) - -## AuthNotHandled interface - - -Signature: - -```typescript -export interface AuthNotHandled -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-server.authnothandled.type.md) | AuthResultType.notHandled | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authnothandled.type.md b/docs/development/core/server/kibana-plugin-core-server.authnothandled.type.md deleted file mode 100644 index 0e328b704153d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authnothandled.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthNotHandled](./kibana-plugin-core-server.authnothandled.md) > [type](./kibana-plugin-core-server.authnothandled.type.md) - -## AuthNotHandled.type property - -Signature: - -```typescript -type: AuthResultType.notHandled; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authredirected.md b/docs/development/core/server/kibana-plugin-core-server.authredirected.md deleted file mode 100644 index 4da08e49056f7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authredirected.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthRedirected](./kibana-plugin-core-server.authredirected.md) - -## AuthRedirected interface - - -Signature: - -```typescript -export interface AuthRedirected extends AuthRedirectedParams -``` -Extends: AuthRedirectedParams - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-server.authredirected.type.md) | AuthResultType.redirected | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authredirected.type.md b/docs/development/core/server/kibana-plugin-core-server.authredirected.type.md deleted file mode 100644 index b906656818b85..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authredirected.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthRedirected](./kibana-plugin-core-server.authredirected.md) > [type](./kibana-plugin-core-server.authredirected.type.md) - -## AuthRedirected.type property - -Signature: - -```typescript -type: AuthResultType.redirected; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authredirectedparams.headers.md b/docs/development/core/server/kibana-plugin-core-server.authredirectedparams.headers.md deleted file mode 100644 index b500e0c494f61..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authredirectedparams.headers.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthRedirectedParams](./kibana-plugin-core-server.authredirectedparams.md) > [headers](./kibana-plugin-core-server.authredirectedparams.headers.md) - -## AuthRedirectedParams.headers property - -Headers to attach for auth redirect. Must include "location" header - -Signature: - -```typescript -headers: { - location: string; - } & ResponseHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authredirectedparams.md b/docs/development/core/server/kibana-plugin-core-server.authredirectedparams.md deleted file mode 100644 index 2f6ef7c6f6ba4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authredirectedparams.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthRedirectedParams](./kibana-plugin-core-server.authredirectedparams.md) - -## AuthRedirectedParams interface - -Result of auth redirection. - -Signature: - -```typescript -export interface AuthRedirectedParams -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [headers](./kibana-plugin-core-server.authredirectedparams.headers.md) | { location: string; } & ResponseHeaders | Headers to attach for auth redirect. Must include "location" header | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authresult.md b/docs/development/core/server/kibana-plugin-core-server.authresult.md deleted file mode 100644 index e523353d83f4a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authresult.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthResult](./kibana-plugin-core-server.authresult.md) - -## AuthResult type - - -Signature: - -```typescript -export declare type AuthResult = Authenticated | AuthNotHandled | AuthRedirected; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authresultparams.md b/docs/development/core/server/kibana-plugin-core-server.authresultparams.md deleted file mode 100644 index 7e907a9bf7a77..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authresultparams.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthResultParams](./kibana-plugin-core-server.authresultparams.md) - -## AuthResultParams interface - -Result of successful authentication. - -Signature: - -```typescript -export interface AuthResultParams -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [requestHeaders?](./kibana-plugin-core-server.authresultparams.requestheaders.md) | AuthHeaders | (Optional) Auth specific headers to attach to a request object. Used to perform a request to Elasticsearch on behalf of an authenticated user. | -| [responseHeaders?](./kibana-plugin-core-server.authresultparams.responseheaders.md) | AuthHeaders | (Optional) Auth specific headers to attach to a response object. Used to send back authentication mechanism related headers to a client when needed. | -| [state?](./kibana-plugin-core-server.authresultparams.state.md) | Record<string, any> | (Optional) Data to associate with an incoming request. Any downstream plugin may get access to the data. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authresultparams.requestheaders.md b/docs/development/core/server/kibana-plugin-core-server.authresultparams.requestheaders.md deleted file mode 100644 index aa5b054a93e56..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authresultparams.requestheaders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthResultParams](./kibana-plugin-core-server.authresultparams.md) > [requestHeaders](./kibana-plugin-core-server.authresultparams.requestheaders.md) - -## AuthResultParams.requestHeaders property - -Auth specific headers to attach to a request object. Used to perform a request to Elasticsearch on behalf of an authenticated user. - -Signature: - -```typescript -requestHeaders?: AuthHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authresultparams.responseheaders.md b/docs/development/core/server/kibana-plugin-core-server.authresultparams.responseheaders.md deleted file mode 100644 index 5a203c83f6394..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authresultparams.responseheaders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthResultParams](./kibana-plugin-core-server.authresultparams.md) > [responseHeaders](./kibana-plugin-core-server.authresultparams.responseheaders.md) - -## AuthResultParams.responseHeaders property - -Auth specific headers to attach to a response object. Used to send back authentication mechanism related headers to a client when needed. - -Signature: - -```typescript -responseHeaders?: AuthHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authresultparams.state.md b/docs/development/core/server/kibana-plugin-core-server.authresultparams.state.md deleted file mode 100644 index 8d35f1676b318..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authresultparams.state.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthResultParams](./kibana-plugin-core-server.authresultparams.md) > [state](./kibana-plugin-core-server.authresultparams.state.md) - -## AuthResultParams.state property - -Data to associate with an incoming request. Any downstream plugin may get access to the data. - -Signature: - -```typescript -state?: Record; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authresulttype.md b/docs/development/core/server/kibana-plugin-core-server.authresulttype.md deleted file mode 100644 index 5e68edd9aa66b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authresulttype.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthResultType](./kibana-plugin-core-server.authresulttype.md) - -## AuthResultType enum - - -Signature: - -```typescript -export declare enum AuthResultType -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| authenticated | "authenticated" | | -| notHandled | "notHandled" | | -| redirected | "redirected" | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authstatus.md b/docs/development/core/server/kibana-plugin-core-server.authstatus.md deleted file mode 100644 index d022392c6f188..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authstatus.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthStatus](./kibana-plugin-core-server.authstatus.md) - -## AuthStatus enum - -Status indicating an outcome of the authentication. - -Signature: - -```typescript -export declare enum AuthStatus -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| authenticated | "authenticated" | auth interceptor successfully authenticated a user | -| unauthenticated | "unauthenticated" | auth interceptor failed user authentication | -| unknown | "unknown" | auth interceptor has not been registered | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.authenticated.md b/docs/development/core/server/kibana-plugin-core-server.authtoolkit.authenticated.md deleted file mode 100644 index 7cfb4efd29662..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.authenticated.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthToolkit](./kibana-plugin-core-server.authtoolkit.md) > [authenticated](./kibana-plugin-core-server.authtoolkit.authenticated.md) - -## AuthToolkit.authenticated property - -Authentication is successful with given credentials, allow request to pass through - -Signature: - -```typescript -authenticated: (data?: AuthResultParams) => AuthResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.md b/docs/development/core/server/kibana-plugin-core-server.authtoolkit.md deleted file mode 100644 index 24b561d04bbb7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthToolkit](./kibana-plugin-core-server.authtoolkit.md) - -## AuthToolkit interface - -A tool set defining an outcome of Auth interceptor for incoming request. - -Signature: - -```typescript -export interface AuthToolkit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [authenticated](./kibana-plugin-core-server.authtoolkit.authenticated.md) | (data?: AuthResultParams) => AuthResult | Authentication is successful with given credentials, allow request to pass through | -| [notHandled](./kibana-plugin-core-server.authtoolkit.nothandled.md) | () => AuthResult | User has no credentials. Allows user to access a resource when authRequired is 'optional' Rejects a request when authRequired: true | -| [redirected](./kibana-plugin-core-server.authtoolkit.redirected.md) | (headers: { location: string; } & ResponseHeaders) => AuthResult | Redirects user to another location to complete authentication when authRequired: true Allows user to access a resource without redirection when authRequired: 'optional' | - diff --git a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.nothandled.md b/docs/development/core/server/kibana-plugin-core-server.authtoolkit.nothandled.md deleted file mode 100644 index 577faa6562558..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.nothandled.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthToolkit](./kibana-plugin-core-server.authtoolkit.md) > [notHandled](./kibana-plugin-core-server.authtoolkit.nothandled.md) - -## AuthToolkit.notHandled property - -User has no credentials. Allows user to access a resource when authRequired is 'optional' Rejects a request when authRequired: true - -Signature: - -```typescript -notHandled: () => AuthResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.redirected.md b/docs/development/core/server/kibana-plugin-core-server.authtoolkit.redirected.md deleted file mode 100644 index 92d2181f24765..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.authtoolkit.redirected.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [AuthToolkit](./kibana-plugin-core-server.authtoolkit.md) > [redirected](./kibana-plugin-core-server.authtoolkit.redirected.md) - -## AuthToolkit.redirected property - -Redirects user to another location to complete authentication when authRequired: true Allows user to access a resource without redirection when authRequired: 'optional' - -Signature: - -```typescript -redirected: (headers: { - location: string; - } & ResponseHeaders) => AuthResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.correctiveactions.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.correctiveactions.md deleted file mode 100644 index 273945166735b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.correctiveactions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) > [correctiveActions](./kibana-plugin-core-server.basedeprecationdetails.correctiveactions.md) - -## BaseDeprecationDetails.correctiveActions property - -corrective action needed to fix this deprecation. - -Signature: - -```typescript -correctiveActions: { - api?: { - path: string; - method: 'POST' | 'PUT'; - body?: { - [key: string]: any; - }; - omitContextFromBody?: boolean; - }; - manualSteps: string[]; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.deprecationtype.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.deprecationtype.md deleted file mode 100644 index 072dfd17418f9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.deprecationtype.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) > [deprecationType](./kibana-plugin-core-server.basedeprecationdetails.deprecationtype.md) - -## BaseDeprecationDetails.deprecationType property - -(optional) Used to identify between different deprecation types. Example use case: in Upgrade Assistant, we may want to allow the user to sort by deprecation type or show each type in a separate tab. - -Feel free to add new types if necessary. Predefined types are necessary to reduce having similar definitions with different keywords across kibana deprecations. - -Signature: - -```typescript -deprecationType?: 'config' | 'feature'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.documentationurl.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.documentationurl.md deleted file mode 100644 index c8f0762acdce6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.documentationurl.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) > [documentationUrl](./kibana-plugin-core-server.basedeprecationdetails.documentationurl.md) - -## BaseDeprecationDetails.documentationUrl property - -(optional) link to the documentation for more details on the deprecation. - -Signature: - -```typescript -documentationUrl?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.level.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.level.md deleted file mode 100644 index ad755805d00b9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.level.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) > [level](./kibana-plugin-core-server.basedeprecationdetails.level.md) - -## BaseDeprecationDetails.level property - -levels: - warning: will not break deployment upon upgrade - critical: needs to be addressed before upgrade. - fetch\_error: Deprecations service failed to grab the deprecation details for the domain. - -Signature: - -```typescript -level: 'warning' | 'critical' | 'fetch_error'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.md deleted file mode 100644 index bcd96e35295ac..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) - -## BaseDeprecationDetails interface - -Base properties shared by all types of deprecations - -Signature: - -```typescript -export interface BaseDeprecationDetails -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [correctiveActions](./kibana-plugin-core-server.basedeprecationdetails.correctiveactions.md) | { api?: { path: string; method: 'POST' \| 'PUT'; body?: { \[key: string\]: any; }; omitContextFromBody?: boolean; }; manualSteps: string\[\]; } | corrective action needed to fix this deprecation. | -| [deprecationType?](./kibana-plugin-core-server.basedeprecationdetails.deprecationtype.md) | 'config' \| 'feature' | (Optional) (optional) Used to identify between different deprecation types. Example use case: in Upgrade Assistant, we may want to allow the user to sort by deprecation type or show each type in a separate tab.Feel free to add new types if necessary. Predefined types are necessary to reduce having similar definitions with different keywords across kibana deprecations. | -| [documentationUrl?](./kibana-plugin-core-server.basedeprecationdetails.documentationurl.md) | string | (Optional) (optional) link to the documentation for more details on the deprecation. | -| [level](./kibana-plugin-core-server.basedeprecationdetails.level.md) | 'warning' \| 'critical' \| 'fetch\_error' | levels: - warning: will not break deployment upon upgrade - critical: needs to be addressed before upgrade. - fetch\_error: Deprecations service failed to grab the deprecation details for the domain. | -| [message](./kibana-plugin-core-server.basedeprecationdetails.message.md) | string | The description message to be displayed for the deprecation. Check the README for writing deprecations in src/core/server/deprecations/README.mdx | -| [requireRestart?](./kibana-plugin-core-server.basedeprecationdetails.requirerestart.md) | boolean | (Optional) (optional) specify the fix for this deprecation requires a full kibana restart. | -| [title](./kibana-plugin-core-server.basedeprecationdetails.title.md) | string | The title of the deprecation. Check the README for writing deprecations in src/core/server/deprecations/README.mdx | - diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.message.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.message.md deleted file mode 100644 index 5802bc316cc08..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.message.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) > [message](./kibana-plugin-core-server.basedeprecationdetails.message.md) - -## BaseDeprecationDetails.message property - -The description message to be displayed for the deprecation. Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.requirerestart.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.requirerestart.md deleted file mode 100644 index 3f589600d0458..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.requirerestart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) > [requireRestart](./kibana-plugin-core-server.basedeprecationdetails.requirerestart.md) - -## BaseDeprecationDetails.requireRestart property - -(optional) specify the fix for this deprecation requires a full kibana restart. - -Signature: - -```typescript -requireRestart?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.title.md b/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.title.md deleted file mode 100644 index b6788a4faa7c5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basedeprecationdetails.title.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) > [title](./kibana-plugin-core-server.basedeprecationdetails.title.md) - -## BaseDeprecationDetails.title property - -The title of the deprecation. Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` - -Signature: - -```typescript -title: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basepath.get.md b/docs/development/core/server/kibana-plugin-core-server.basepath.get.md deleted file mode 100644 index b35c6e657b01f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basepath.get.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BasePath](./kibana-plugin-core-server.basepath.md) > [get](./kibana-plugin-core-server.basepath.get.md) - -## BasePath.get property - -returns `basePath` value, specific for an incoming request. - -Signature: - -```typescript -get: (request: KibanaRequest) => string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basepath.md b/docs/development/core/server/kibana-plugin-core-server.basepath.md deleted file mode 100644 index 4fae861cf1659..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basepath.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BasePath](./kibana-plugin-core-server.basepath.md) - -## BasePath class - -Access or manipulate the Kibana base path - -Signature: - -```typescript -export declare class BasePath -``` - -## Remarks - -The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `BasePath` class. - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [get](./kibana-plugin-core-server.basepath.get.md) | | (request: KibanaRequest) => string | returns basePath value, specific for an incoming request. | -| [prepend](./kibana-plugin-core-server.basepath.prepend.md) | | (path: string) => string | Prepends path with the basePath. | -| [publicBaseUrl?](./kibana-plugin-core-server.basepath.publicbaseurl.md) | | string | (Optional) The server's publicly exposed base URL, if configured. Includes protocol, host, port (optional) and the [BasePath.serverBasePath](./kibana-plugin-core-server.basepath.serverbasepath.md). | -| [remove](./kibana-plugin-core-server.basepath.remove.md) | | (path: string) => string | Removes the prepended basePath from the path. | -| [serverBasePath](./kibana-plugin-core-server.basepath.serverbasepath.md) | | string | returns the server's basePathSee [BasePath.get](./kibana-plugin-core-server.basepath.get.md) for getting the basePath value for a specific request | -| [set](./kibana-plugin-core-server.basepath.set.md) | | (request: KibanaRequest, requestSpecificBasePath: string) => void | sets basePath value, specific for an incoming request. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.basepath.prepend.md b/docs/development/core/server/kibana-plugin-core-server.basepath.prepend.md deleted file mode 100644 index 94ddf74372cc4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basepath.prepend.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BasePath](./kibana-plugin-core-server.basepath.md) > [prepend](./kibana-plugin-core-server.basepath.prepend.md) - -## BasePath.prepend property - -Prepends `path` with the basePath. - -Signature: - -```typescript -prepend: (path: string) => string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basepath.publicbaseurl.md b/docs/development/core/server/kibana-plugin-core-server.basepath.publicbaseurl.md deleted file mode 100644 index 65842333ac246..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basepath.publicbaseurl.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BasePath](./kibana-plugin-core-server.basepath.md) > [publicBaseUrl](./kibana-plugin-core-server.basepath.publicbaseurl.md) - -## BasePath.publicBaseUrl property - -The server's publicly exposed base URL, if configured. Includes protocol, host, port (optional) and the [BasePath.serverBasePath](./kibana-plugin-core-server.basepath.serverbasepath.md). - -Signature: - -```typescript -readonly publicBaseUrl?: string; -``` - -## Remarks - -Should be used for generating external URL links back to this Kibana instance. - diff --git a/docs/development/core/server/kibana-plugin-core-server.basepath.remove.md b/docs/development/core/server/kibana-plugin-core-server.basepath.remove.md deleted file mode 100644 index 13ccd9db6ab86..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basepath.remove.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BasePath](./kibana-plugin-core-server.basepath.md) > [remove](./kibana-plugin-core-server.basepath.remove.md) - -## BasePath.remove property - -Removes the prepended basePath from the `path`. - -Signature: - -```typescript -remove: (path: string) => string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basepath.serverbasepath.md b/docs/development/core/server/kibana-plugin-core-server.basepath.serverbasepath.md deleted file mode 100644 index 01fc9b69055f0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basepath.serverbasepath.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BasePath](./kibana-plugin-core-server.basepath.md) > [serverBasePath](./kibana-plugin-core-server.basepath.serverbasepath.md) - -## BasePath.serverBasePath property - -returns the server's basePath - -See [BasePath.get](./kibana-plugin-core-server.basepath.get.md) for getting the basePath value for a specific request - -Signature: - -```typescript -readonly serverBasePath: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.basepath.set.md b/docs/development/core/server/kibana-plugin-core-server.basepath.set.md deleted file mode 100644 index b90767022d594..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.basepath.set.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [BasePath](./kibana-plugin-core-server.basepath.md) > [set](./kibana-plugin-core-server.basepath.set.md) - -## BasePath.set property - -sets `basePath` value, specific for an incoming request. - -Signature: - -```typescript -set: (request: KibanaRequest, requestSpecificBasePath: string) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilities.catalogue.md b/docs/development/core/server/kibana-plugin-core-server.capabilities.catalogue.md deleted file mode 100644 index 7b93d3b885d23..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilities.catalogue.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Capabilities](./kibana-plugin-core-server.capabilities.md) > [catalogue](./kibana-plugin-core-server.capabilities.catalogue.md) - -## Capabilities.catalogue property - -Catalogue capabilities. Catalogue entries drive the visibility of the Kibana homepage options. - -Signature: - -```typescript -catalogue: Record; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilities.management.md b/docs/development/core/server/kibana-plugin-core-server.capabilities.management.md deleted file mode 100644 index 968faadf43774..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilities.management.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Capabilities](./kibana-plugin-core-server.capabilities.md) > [management](./kibana-plugin-core-server.capabilities.management.md) - -## Capabilities.management property - -Management section capabilities. - -Signature: - -```typescript -management: { - [sectionId: string]: Record; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilities.md b/docs/development/core/server/kibana-plugin-core-server.capabilities.md deleted file mode 100644 index a5900e96a86b5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilities.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Capabilities](./kibana-plugin-core-server.capabilities.md) - -## Capabilities interface - -The read-only set of capabilities available for the current UI session. Capabilities are simple key-value pairs of (string, boolean), where the string denotes the capability ID, and the boolean is a flag indicating if the capability is enabled or disabled. - -Signature: - -```typescript -export interface Capabilities -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [catalogue](./kibana-plugin-core-server.capabilities.catalogue.md) | Record<string, boolean> | Catalogue capabilities. Catalogue entries drive the visibility of the Kibana homepage options. | -| [management](./kibana-plugin-core-server.capabilities.management.md) | { \[sectionId: string\]: Record<string, boolean>; } | Management section capabilities. | -| [navLinks](./kibana-plugin-core-server.capabilities.navlinks.md) | Record<string, boolean> | Navigation link capabilities. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilities.navlinks.md b/docs/development/core/server/kibana-plugin-core-server.capabilities.navlinks.md deleted file mode 100644 index 0e68239ff4eee..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilities.navlinks.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Capabilities](./kibana-plugin-core-server.capabilities.md) > [navLinks](./kibana-plugin-core-server.capabilities.navlinks.md) - -## Capabilities.navLinks property - -Navigation link capabilities. - -Signature: - -```typescript -navLinks: Record; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilitiesprovider.md b/docs/development/core/server/kibana-plugin-core-server.capabilitiesprovider.md deleted file mode 100644 index 2f71e4b9bb18a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilitiesprovider.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CapabilitiesProvider](./kibana-plugin-core-server.capabilitiesprovider.md) - -## CapabilitiesProvider type - -See [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) - -Signature: - -```typescript -export declare type CapabilitiesProvider = () => Partial; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.md b/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.md deleted file mode 100644 index 19e7f05b20415..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) - -## CapabilitiesSetup interface - -APIs to manage the [Capabilities](./kibana-plugin-core-server.capabilities.md) that will be used by the application. - -Plugins relying on capabilities to toggle some of their features should register them during the setup phase using the `registerProvider` method. - -Plugins having the responsibility to restrict capabilities depending on a given context should register their capabilities switcher using the `registerSwitcher` method. - -Refers to the methods documentation for complete description and examples. - -Signature: - -```typescript -export interface CapabilitiesSetup -``` - -## Methods - -| Method | Description | -| --- | --- | -| [registerProvider(provider)](./kibana-plugin-core-server.capabilitiessetup.registerprovider.md) | Register a [CapabilitiesProvider](./kibana-plugin-core-server.capabilitiesprovider.md) to be used to provide [Capabilities](./kibana-plugin-core-server.capabilities.md) when resolving them. | -| [registerSwitcher(switcher)](./kibana-plugin-core-server.capabilitiessetup.registerswitcher.md) | Register a [CapabilitiesSwitcher](./kibana-plugin-core-server.capabilitiesswitcher.md) to be used to change the default state of the [Capabilities](./kibana-plugin-core-server.capabilities.md) entries when resolving them.A capabilities switcher can only change the state of existing capabilities. Capabilities added or removed when invoking the switcher will be ignored. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerprovider.md b/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerprovider.md deleted file mode 100644 index 9122f7e0f11ed..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerprovider.md +++ /dev/null @@ -1,45 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) > [registerProvider](./kibana-plugin-core-server.capabilitiessetup.registerprovider.md) - -## CapabilitiesSetup.registerProvider() method - -Register a [CapabilitiesProvider](./kibana-plugin-core-server.capabilitiesprovider.md) to be used to provide [Capabilities](./kibana-plugin-core-server.capabilities.md) when resolving them. - -Signature: - -```typescript -registerProvider(provider: CapabilitiesProvider): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| provider | CapabilitiesProvider | | - -Returns: - -void - -## Example - -How to register a plugin's capabilities during setup - -```ts -// my-plugin/server/plugin.ts -public setup(core: CoreSetup, deps: {}) { - core.capabilities.registerProvider(() => { - return { - catalogue: { - myPlugin: true, - }, - myPlugin: { - someFeature: true, - featureDisabledByDefault: false, - }, - } - }); -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerswitcher.md b/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerswitcher.md deleted file mode 100644 index c07703c1f365f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilitiessetup.registerswitcher.md +++ /dev/null @@ -1,58 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) > [registerSwitcher](./kibana-plugin-core-server.capabilitiessetup.registerswitcher.md) - -## CapabilitiesSetup.registerSwitcher() method - -Register a [CapabilitiesSwitcher](./kibana-plugin-core-server.capabilitiesswitcher.md) to be used to change the default state of the [Capabilities](./kibana-plugin-core-server.capabilities.md) entries when resolving them. - -A capabilities switcher can only change the state of existing capabilities. Capabilities added or removed when invoking the switcher will be ignored. - -Signature: - -```typescript -registerSwitcher(switcher: CapabilitiesSwitcher): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| switcher | CapabilitiesSwitcher | | - -Returns: - -void - -## Example - -How to restrict some capabilities - -```ts -// my-plugin/server/plugin.ts -public setup(core: CoreSetup, deps: {}) { - core.capabilities.registerSwitcher((request, capabilities, useDefaultCapabilities) => { - // useDefaultCapabilities is a special case that switchers typically don't have to concern themselves with. - // The default capabilities are typically the ones you provide in your CapabilitiesProvider, but this flag - // gives each switcher an opportunity to change the default capabilities of other plugins' capabilities. - // For example, you may decide to flip another plugin's capability to false if today is Tuesday, - // but you wouldn't want to do this when we are requesting the default set of capabilities. - if (useDefaultCapabilities) { - return { - somePlugin: { - featureEnabledByDefault: true - } - } - } - if(myPluginApi.shouldRestrictSomePluginBecauseOf(request)) { - return { - somePlugin: { - featureEnabledByDefault: false // `featureEnabledByDefault` will be disabled. All other capabilities will remain unchanged. - } - } - } - return {}; // All capabilities will remain unchanged. - }); -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.md b/docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.md deleted file mode 100644 index 217a782be9d8b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md) - -## CapabilitiesStart interface - -APIs to access the application [Capabilities](./kibana-plugin-core-server.capabilities.md). - -Signature: - -```typescript -export interface CapabilitiesStart -``` - -## Methods - -| Method | Description | -| --- | --- | -| [resolveCapabilities(request, options)](./kibana-plugin-core-server.capabilitiesstart.resolvecapabilities.md) | Resolve the [Capabilities](./kibana-plugin-core-server.capabilities.md) to be used for given request | - diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.resolvecapabilities.md b/docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.resolvecapabilities.md deleted file mode 100644 index a9dc279526065..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilitiesstart.resolvecapabilities.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md) > [resolveCapabilities](./kibana-plugin-core-server.capabilitiesstart.resolvecapabilities.md) - -## CapabilitiesStart.resolveCapabilities() method - -Resolve the [Capabilities](./kibana-plugin-core-server.capabilities.md) to be used for given request - -Signature: - -```typescript -resolveCapabilities(request: KibanaRequest, options?: ResolveCapabilitiesOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| request | KibanaRequest | | -| options | ResolveCapabilitiesOptions | | - -Returns: - -Promise<Capabilities> - diff --git a/docs/development/core/server/kibana-plugin-core-server.capabilitiesswitcher.md b/docs/development/core/server/kibana-plugin-core-server.capabilitiesswitcher.md deleted file mode 100644 index e6a0a9a096671..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.capabilitiesswitcher.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CapabilitiesSwitcher](./kibana-plugin-core-server.capabilitiesswitcher.md) - -## CapabilitiesSwitcher type - -See [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) - -Signature: - -```typescript -export declare type CapabilitiesSwitcher = (request: KibanaRequest, uiCapabilities: Capabilities, useDefaultCapabilities: boolean) => Partial | Promise>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.configpath.md b/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.configpath.md deleted file mode 100644 index 7af6c16d86e4a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.configpath.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ConfigDeprecationDetails](./kibana-plugin-core-server.configdeprecationdetails.md) > [configPath](./kibana-plugin-core-server.configdeprecationdetails.configpath.md) - -## ConfigDeprecationDetails.configPath property - -Signature: - -```typescript -configPath: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.deprecationtype.md b/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.deprecationtype.md deleted file mode 100644 index fb3737062f986..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.deprecationtype.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ConfigDeprecationDetails](./kibana-plugin-core-server.configdeprecationdetails.md) > [deprecationType](./kibana-plugin-core-server.configdeprecationdetails.deprecationtype.md) - -## ConfigDeprecationDetails.deprecationType property - -Signature: - -```typescript -deprecationType: 'config'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.md b/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.md deleted file mode 100644 index 6065d1fc1889f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.configdeprecationdetails.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ConfigDeprecationDetails](./kibana-plugin-core-server.configdeprecationdetails.md) - -## ConfigDeprecationDetails interface - - -Signature: - -```typescript -export interface ConfigDeprecationDetails extends BaseDeprecationDetails -``` -Extends: BaseDeprecationDetails - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [configPath](./kibana-plugin-core-server.configdeprecationdetails.configpath.md) | string | | -| [deprecationType](./kibana-plugin-core-server.configdeprecationdetails.deprecationtype.md) | 'config' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.contextsetup.createcontextcontainer.md b/docs/development/core/server/kibana-plugin-core-server.contextsetup.createcontextcontainer.md deleted file mode 100644 index 5e60dd7e2ffd7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.contextsetup.createcontextcontainer.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ContextSetup](./kibana-plugin-core-server.contextsetup.md) > [createContextContainer](./kibana-plugin-core-server.contextsetup.createcontextcontainer.md) - -## ContextSetup.createContextContainer() method - -Creates a new [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) for a service owner. - -Signature: - -```typescript -createContextContainer(): IContextContainer; -``` -Returns: - -IContextContainer - diff --git a/docs/development/core/server/kibana-plugin-core-server.contextsetup.md b/docs/development/core/server/kibana-plugin-core-server.contextsetup.md deleted file mode 100644 index a15adccc97714..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.contextsetup.md +++ /dev/null @@ -1,136 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ContextSetup](./kibana-plugin-core-server.contextsetup.md) - -## ContextSetup interface - -An object that handles registration of context providers and configuring handlers with context. - -Signature: - -```typescript -export interface ContextSetup -``` - -## Remarks - -A [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) can be used by any Core service or plugin (known as the "service owner") which wishes to expose APIs in a handler function. The container object will manage registering context providers and configuring a handler with all of the contexts that should be exposed to the handler's plugin. This is dependent on the dependencies that the handler's plugin declares. - -Contexts providers are executed in the order they were registered. Each provider gets access to context values provided by any plugins that it depends on. - -In order to configure a handler with context, you must call the [IContextContainer.createHandler()](./kibana-plugin-core-server.icontextcontainer.createhandler.md) function and use the returned handler which will automatically build a context object when called. - -When registering context or creating handlers, the \_calling plugin's opaque id\_ must be provided. This id is passed in via the plugin's initializer and can be accessed from the [PluginInitializerContext.opaqueId](./kibana-plugin-core-server.plugininitializercontext.opaqueid.md) Note this should NOT be the context service owner's id, but the plugin that is actually registering the context or handler. - -```ts -// Correct -class MyPlugin { - private readonly handlers = new Map(); - - setup(core) { - this.contextContainer = core.context.createContextContainer(); - return { - registerContext(pluginOpaqueId, contextName, provider) { - this.contextContainer.registerContext(pluginOpaqueId, contextName, provider); - }, - registerRoute(pluginOpaqueId, path, handler) { - this.handlers.set( - path, - this.contextContainer.createHandler(pluginOpaqueId, handler) - ); - } - } - } -} - -// Incorrect -class MyPlugin { - private readonly handlers = new Map(); - - constructor(private readonly initContext: PluginInitializerContext) {} - - setup(core) { - this.contextContainer = core.context.createContextContainer(); - return { - registerContext(contextName, provider) { - // BUG! - // This would leak this context to all handlers rather that only plugins that depend on the calling plugin. - this.contextContainer.registerContext(this.initContext.opaqueId, contextName, provider); - }, - registerRoute(path, handler) { - this.handlers.set( - path, - // BUG! - // This handler will not receive any contexts provided by other dependencies of the calling plugin. - this.contextContainer.createHandler(this.initContext.opaqueId, handler) - ); - } - } - } -} -``` - -## Example - -Say we're creating a plugin for rendering visualizations that allows new rendering methods to be registered. If we want to offer context to these rendering methods, we can leverage the ContextService to manage these contexts. - -```ts -export interface VizRenderContext { - core: { - i18n: I18nStart; - uiSettings: IUiSettingsClient; - } - [contextName: string]: unknown; -} - -export type VizRenderer = (context: VizRenderContext, domElement: HTMLElement) => () => void; -// When a renderer is bound via `contextContainer.createHandler` this is the type that will be returned. -type BoundVizRenderer = (domElement: HTMLElement) => () => void; - -class VizRenderingPlugin { - private readonly contextContainer?: IContextContainer; - private readonly vizRenderers = new Map(); - - constructor(private readonly initContext: PluginInitializerContext) {} - - setup(core) { - this.contextContainer = core.context.createContextContainer(); - - return { - registerContext: this.contextContainer.registerContext, - registerVizRenderer: (plugin: PluginOpaqueId, renderMethod: string, renderer: VizTypeRenderer) => - this.vizRenderers.set(renderMethod, this.contextContainer.createHandler(plugin, renderer)), - }; - } - - start(core) { - // Register the core context available to all renderers. Use the VizRendererContext's opaqueId as the first arg. - this.contextContainer.registerContext(this.initContext.opaqueId, 'core', () => ({ - i18n: core.i18n, - uiSettings: core.uiSettings - })); - - return { - registerContext: this.contextContainer.registerContext, - - renderVizualization: (renderMethod: string, domElement: HTMLElement) => { - if (!this.vizRenderer.has(renderMethod)) { - throw new Error(`Render method '${renderMethod}' has not been registered`); - } - - // The handler can now be called directly with only an `HTMLElement` and will automatically - // have a new `context` object created and populated by the context container. - const handler = this.vizRenderers.get(renderMethod) - return handler(domElement); - } - }; - } -} -``` - -## Methods - -| Method | Description | -| --- | --- | -| [createContextContainer()](./kibana-plugin-core-server.contextsetup.createcontextcontainer.md) | Creates a new [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) for a service owner. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.corepreboot.analytics.md b/docs/development/core/server/kibana-plugin-core-server.corepreboot.analytics.md deleted file mode 100644 index b9846fa851b35..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corepreboot.analytics.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CorePreboot](./kibana-plugin-core-server.corepreboot.md) > [analytics](./kibana-plugin-core-server.corepreboot.analytics.md) - -## CorePreboot.analytics property - -[AnalyticsServicePreboot](./kibana-plugin-core-server.analyticsservicepreboot.md) - -Signature: - -```typescript -analytics: AnalyticsServicePreboot; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corepreboot.elasticsearch.md b/docs/development/core/server/kibana-plugin-core-server.corepreboot.elasticsearch.md deleted file mode 100644 index 7d3b5296b5988..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corepreboot.elasticsearch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CorePreboot](./kibana-plugin-core-server.corepreboot.md) > [elasticsearch](./kibana-plugin-core-server.corepreboot.elasticsearch.md) - -## CorePreboot.elasticsearch property - -[ElasticsearchServicePreboot](./kibana-plugin-core-server.elasticsearchservicepreboot.md) - -Signature: - -```typescript -elasticsearch: ElasticsearchServicePreboot; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corepreboot.http.md b/docs/development/core/server/kibana-plugin-core-server.corepreboot.http.md deleted file mode 100644 index 0df643c6f133b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corepreboot.http.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CorePreboot](./kibana-plugin-core-server.corepreboot.md) > [http](./kibana-plugin-core-server.corepreboot.http.md) - -## CorePreboot.http property - -[HttpServicePreboot](./kibana-plugin-core-server.httpservicepreboot.md) - -Signature: - -```typescript -http: HttpServicePreboot; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corepreboot.md b/docs/development/core/server/kibana-plugin-core-server.corepreboot.md deleted file mode 100644 index 027dca5362f8d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corepreboot.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CorePreboot](./kibana-plugin-core-server.corepreboot.md) - -## CorePreboot interface - -Context passed to the `setup` method of `preboot` plugins. - -Signature: - -```typescript -export interface CorePreboot -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [analytics](./kibana-plugin-core-server.corepreboot.analytics.md) | AnalyticsServicePreboot | [AnalyticsServicePreboot](./kibana-plugin-core-server.analyticsservicepreboot.md) | -| [elasticsearch](./kibana-plugin-core-server.corepreboot.elasticsearch.md) | ElasticsearchServicePreboot | [ElasticsearchServicePreboot](./kibana-plugin-core-server.elasticsearchservicepreboot.md) | -| [http](./kibana-plugin-core-server.corepreboot.http.md) | HttpServicePreboot | [HttpServicePreboot](./kibana-plugin-core-server.httpservicepreboot.md) | -| [preboot](./kibana-plugin-core-server.corepreboot.preboot.md) | PrebootServicePreboot | [PrebootServicePreboot](./kibana-plugin-core-server.prebootservicepreboot.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.corepreboot.preboot.md b/docs/development/core/server/kibana-plugin-core-server.corepreboot.preboot.md deleted file mode 100644 index 3780a92053a5e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corepreboot.preboot.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CorePreboot](./kibana-plugin-core-server.corepreboot.md) > [preboot](./kibana-plugin-core-server.corepreboot.preboot.md) - -## CorePreboot.preboot property - -[PrebootServicePreboot](./kibana-plugin-core-server.prebootservicepreboot.md) - -Signature: - -```typescript -preboot: PrebootServicePreboot; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.deprecations.md b/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.deprecations.md deleted file mode 100644 index 51d93371e518e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.deprecations.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreRequestHandlerContext](./kibana-plugin-core-server.corerequesthandlercontext.md) > [deprecations](./kibana-plugin-core-server.corerequesthandlercontext.deprecations.md) - -## CoreRequestHandlerContext.deprecations property - -Signature: - -```typescript -deprecations: { - client: DeprecationsClient; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.elasticsearch.md b/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.elasticsearch.md deleted file mode 100644 index 22ff84ce1cb57..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.elasticsearch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreRequestHandlerContext](./kibana-plugin-core-server.corerequesthandlercontext.md) > [elasticsearch](./kibana-plugin-core-server.corerequesthandlercontext.elasticsearch.md) - -## CoreRequestHandlerContext.elasticsearch property - -Signature: - -```typescript -elasticsearch: { - client: IScopedClusterClient; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.md b/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.md deleted file mode 100644 index 47297bcddc906..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreRequestHandlerContext](./kibana-plugin-core-server.corerequesthandlercontext.md) - -## CoreRequestHandlerContext interface - -The `core` context provided to route handler. - -Provides the following clients and services: - [savedObjects.client](./kibana-plugin-core-server.savedobjectsclient.md) - Saved Objects client which uses the credentials of the incoming request - [savedObjects.typeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) - Type registry containing all the registered types. - [elasticsearch.client](./kibana-plugin-core-server.iscopedclusterclient.md) - Elasticsearch data client which uses the credentials of the incoming request - [uiSettings.client](./kibana-plugin-core-server.iuisettingsclient.md) - uiSettings client which uses the credentials of the incoming request - -Signature: - -```typescript -export interface CoreRequestHandlerContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [deprecations](./kibana-plugin-core-server.corerequesthandlercontext.deprecations.md) | { client: DeprecationsClient; } | | -| [elasticsearch](./kibana-plugin-core-server.corerequesthandlercontext.elasticsearch.md) | { client: IScopedClusterClient; } | | -| [savedObjects](./kibana-plugin-core-server.corerequesthandlercontext.savedobjects.md) | { client: SavedObjectsClientContract; typeRegistry: ISavedObjectTypeRegistry; getClient: (options?: SavedObjectsClientProviderOptions) => SavedObjectsClientContract; getExporter: (client: SavedObjectsClientContract) => ISavedObjectsExporter; getImporter: (client: SavedObjectsClientContract) => ISavedObjectsImporter; } | | -| [uiSettings](./kibana-plugin-core-server.corerequesthandlercontext.uisettings.md) | { client: IUiSettingsClient; } | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.savedobjects.md b/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.savedobjects.md deleted file mode 100644 index 6d1aa0a8bb5f1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.savedobjects.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreRequestHandlerContext](./kibana-plugin-core-server.corerequesthandlercontext.md) > [savedObjects](./kibana-plugin-core-server.corerequesthandlercontext.savedobjects.md) - -## CoreRequestHandlerContext.savedObjects property - -Signature: - -```typescript -savedObjects: { - client: SavedObjectsClientContract; - typeRegistry: ISavedObjectTypeRegistry; - getClient: (options?: SavedObjectsClientProviderOptions) => SavedObjectsClientContract; - getExporter: (client: SavedObjectsClientContract) => ISavedObjectsExporter; - getImporter: (client: SavedObjectsClientContract) => ISavedObjectsImporter; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.uisettings.md b/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.uisettings.md deleted file mode 100644 index f76dcc8965a03..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corerequesthandlercontext.uisettings.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreRequestHandlerContext](./kibana-plugin-core-server.corerequesthandlercontext.md) > [uiSettings](./kibana-plugin-core-server.corerequesthandlercontext.uisettings.md) - -## CoreRequestHandlerContext.uiSettings property - -Signature: - -```typescript -uiSettings: { - client: IUiSettingsClient; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.analytics.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.analytics.md deleted file mode 100644 index 3e6d8a5c2c230..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.analytics.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [analytics](./kibana-plugin-core-server.coresetup.analytics.md) - -## CoreSetup.analytics property - -[AnalyticsServiceSetup](./kibana-plugin-core-server.analyticsservicesetup.md) - -Signature: - -```typescript -analytics: AnalyticsServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.capabilities.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.capabilities.md deleted file mode 100644 index 29e66998ab825..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.capabilities.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [capabilities](./kibana-plugin-core-server.coresetup.capabilities.md) - -## CoreSetup.capabilities property - -[CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) - -Signature: - -```typescript -capabilities: CapabilitiesSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.context.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.context.md deleted file mode 100644 index fd8a71f3ff93c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.context.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [context](./kibana-plugin-core-server.coresetup.context.md) - -## CoreSetup.context property - -[ContextSetup](./kibana-plugin-core-server.contextsetup.md) - -Signature: - -```typescript -context: ContextSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.deprecations.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.deprecations.md deleted file mode 100644 index 436cc29b6e343..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.deprecations.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [deprecations](./kibana-plugin-core-server.coresetup.deprecations.md) - -## CoreSetup.deprecations property - -[DeprecationsServiceSetup](./kibana-plugin-core-server.deprecationsservicesetup.md) - -Signature: - -```typescript -deprecations: DeprecationsServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.doclinks.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.doclinks.md deleted file mode 100644 index 68dcc7c9af53f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.doclinks.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [docLinks](./kibana-plugin-core-server.coresetup.doclinks.md) - -## CoreSetup.docLinks property - - -Signature: - -```typescript -docLinks: DocLinksServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.elasticsearch.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.elasticsearch.md deleted file mode 100644 index ed1a87034f51d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.elasticsearch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [elasticsearch](./kibana-plugin-core-server.coresetup.elasticsearch.md) - -## CoreSetup.elasticsearch property - -[ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) - -Signature: - -```typescript -elasticsearch: ElasticsearchServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.executioncontext.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.executioncontext.md deleted file mode 100644 index 847b353aee44f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.executioncontext.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [executionContext](./kibana-plugin-core-server.coresetup.executioncontext.md) - -## CoreSetup.executionContext property - -[ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) - -Signature: - -```typescript -executionContext: ExecutionContextSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.getstartservices.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.getstartservices.md deleted file mode 100644 index 1f326449156f0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.getstartservices.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [getStartServices](./kibana-plugin-core-server.coresetup.getstartservices.md) - -## CoreSetup.getStartServices property - -[StartServicesAccessor](./kibana-plugin-core-server.startservicesaccessor.md) - -Signature: - -```typescript -getStartServices: StartServicesAccessor; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.http.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.http.md deleted file mode 100644 index a8028827cc0a4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.http.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [http](./kibana-plugin-core-server.coresetup.http.md) - -## CoreSetup.http property - -[HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) - -Signature: - -```typescript -http: HttpServiceSetup & { - resources: HttpResources; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.i18n.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.i18n.md deleted file mode 100644 index cac878c1e4449..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.i18n.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [i18n](./kibana-plugin-core-server.coresetup.i18n.md) - -## CoreSetup.i18n property - -[I18nServiceSetup](./kibana-plugin-core-server.i18nservicesetup.md) - -Signature: - -```typescript -i18n: I18nServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.logging.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.logging.md deleted file mode 100644 index 78fcc9be2c677..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.logging.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [logging](./kibana-plugin-core-server.coresetup.logging.md) - -## CoreSetup.logging property - - -Signature: - -```typescript -logging: LoggingServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.md deleted file mode 100644 index cb8d26dc4dda4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.md +++ /dev/null @@ -1,34 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) - -## CoreSetup interface - -Context passed to the `setup` method of `standard` plugins. - -Signature: - -```typescript -export interface CoreSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [analytics](./kibana-plugin-core-server.coresetup.analytics.md) | AnalyticsServiceSetup | [AnalyticsServiceSetup](./kibana-plugin-core-server.analyticsservicesetup.md) | -| [capabilities](./kibana-plugin-core-server.coresetup.capabilities.md) | CapabilitiesSetup | [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) | -| [context](./kibana-plugin-core-server.coresetup.context.md) | ContextSetup | [ContextSetup](./kibana-plugin-core-server.contextsetup.md) | -| [deprecations](./kibana-plugin-core-server.coresetup.deprecations.md) | DeprecationsServiceSetup | [DeprecationsServiceSetup](./kibana-plugin-core-server.deprecationsservicesetup.md) | -| [docLinks](./kibana-plugin-core-server.coresetup.doclinks.md) | DocLinksServiceSetup | | -| [elasticsearch](./kibana-plugin-core-server.coresetup.elasticsearch.md) | ElasticsearchServiceSetup | [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) | -| [executionContext](./kibana-plugin-core-server.coresetup.executioncontext.md) | ExecutionContextSetup | [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) | -| [getStartServices](./kibana-plugin-core-server.coresetup.getstartservices.md) | StartServicesAccessor<TPluginsStart, TStart> | [StartServicesAccessor](./kibana-plugin-core-server.startservicesaccessor.md) | -| [http](./kibana-plugin-core-server.coresetup.http.md) | HttpServiceSetup & { resources: HttpResources; } | [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) | -| [i18n](./kibana-plugin-core-server.coresetup.i18n.md) | I18nServiceSetup | [I18nServiceSetup](./kibana-plugin-core-server.i18nservicesetup.md) | -| [logging](./kibana-plugin-core-server.coresetup.logging.md) | LoggingServiceSetup | | -| [metrics](./kibana-plugin-core-server.coresetup.metrics.md) | MetricsServiceSetup | [MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) | -| [savedObjects](./kibana-plugin-core-server.coresetup.savedobjects.md) | SavedObjectsServiceSetup | [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) | -| [status](./kibana-plugin-core-server.coresetup.status.md) | StatusServiceSetup | [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) | -| [uiSettings](./kibana-plugin-core-server.coresetup.uisettings.md) | UiSettingsServiceSetup | [UiSettingsServiceSetup](./kibana-plugin-core-server.uisettingsservicesetup.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.metrics.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.metrics.md deleted file mode 100644 index 77c9e867ef8ea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.metrics.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [metrics](./kibana-plugin-core-server.coresetup.metrics.md) - -## CoreSetup.metrics property - -[MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) - -Signature: - -```typescript -metrics: MetricsServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.savedobjects.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.savedobjects.md deleted file mode 100644 index 4b448b89bd3cd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.savedobjects.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [savedObjects](./kibana-plugin-core-server.coresetup.savedobjects.md) - -## CoreSetup.savedObjects property - -[SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) - -Signature: - -```typescript -savedObjects: SavedObjectsServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.status.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.status.md deleted file mode 100644 index f5ea627a9f008..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.status.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [status](./kibana-plugin-core-server.coresetup.status.md) - -## CoreSetup.status property - -[StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) - -Signature: - -```typescript -status: StatusServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.uisettings.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.uisettings.md deleted file mode 100644 index 60aff70155a72..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.uisettings.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [uiSettings](./kibana-plugin-core-server.coresetup.uisettings.md) - -## CoreSetup.uiSettings property - -[UiSettingsServiceSetup](./kibana-plugin-core-server.uisettingsservicesetup.md) - -Signature: - -```typescript -uiSettings: UiSettingsServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.analytics.md b/docs/development/core/server/kibana-plugin-core-server.corestart.analytics.md deleted file mode 100644 index 7ea48c183f30e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.analytics.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [analytics](./kibana-plugin-core-server.corestart.analytics.md) - -## CoreStart.analytics property - -[AnalyticsServiceStart](./kibana-plugin-core-server.analyticsservicestart.md) - -Signature: - -```typescript -analytics: AnalyticsServiceStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.capabilities.md b/docs/development/core/server/kibana-plugin-core-server.corestart.capabilities.md deleted file mode 100644 index 20705b7554c3a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.capabilities.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [capabilities](./kibana-plugin-core-server.corestart.capabilities.md) - -## CoreStart.capabilities property - -[CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md) - -Signature: - -```typescript -capabilities: CapabilitiesStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.doclinks.md b/docs/development/core/server/kibana-plugin-core-server.corestart.doclinks.md deleted file mode 100644 index e647d291d9172..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.doclinks.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [docLinks](./kibana-plugin-core-server.corestart.doclinks.md) - -## CoreStart.docLinks property - - -Signature: - -```typescript -docLinks: DocLinksServiceStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.elasticsearch.md b/docs/development/core/server/kibana-plugin-core-server.corestart.elasticsearch.md deleted file mode 100644 index d8f518ceebd64..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.elasticsearch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [elasticsearch](./kibana-plugin-core-server.corestart.elasticsearch.md) - -## CoreStart.elasticsearch property - -[ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) - -Signature: - -```typescript -elasticsearch: ElasticsearchServiceStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.executioncontext.md b/docs/development/core/server/kibana-plugin-core-server.corestart.executioncontext.md deleted file mode 100644 index e58f4dc4afa32..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.executioncontext.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [executionContext](./kibana-plugin-core-server.corestart.executioncontext.md) - -## CoreStart.executionContext property - -[ExecutionContextStart](./kibana-plugin-core-server.executioncontextstart.md) - -Signature: - -```typescript -executionContext: ExecutionContextStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.http.md b/docs/development/core/server/kibana-plugin-core-server.corestart.http.md deleted file mode 100644 index d81049dfbd340..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.http.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [http](./kibana-plugin-core-server.corestart.http.md) - -## CoreStart.http property - -[HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) - -Signature: - -```typescript -http: HttpServiceStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.md b/docs/development/core/server/kibana-plugin-core-server.corestart.md deleted file mode 100644 index f5566e6671ef1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) - -## CoreStart interface - -Context passed to the plugins `start` method. - -Signature: - -```typescript -export interface CoreStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [analytics](./kibana-plugin-core-server.corestart.analytics.md) | AnalyticsServiceStart | [AnalyticsServiceStart](./kibana-plugin-core-server.analyticsservicestart.md) | -| [capabilities](./kibana-plugin-core-server.corestart.capabilities.md) | CapabilitiesStart | [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md) | -| [docLinks](./kibana-plugin-core-server.corestart.doclinks.md) | DocLinksServiceStart | | -| [elasticsearch](./kibana-plugin-core-server.corestart.elasticsearch.md) | ElasticsearchServiceStart | [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) | -| [executionContext](./kibana-plugin-core-server.corestart.executioncontext.md) | ExecutionContextStart | [ExecutionContextStart](./kibana-plugin-core-server.executioncontextstart.md) | -| [http](./kibana-plugin-core-server.corestart.http.md) | HttpServiceStart | [HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) | -| [metrics](./kibana-plugin-core-server.corestart.metrics.md) | MetricsServiceStart | [MetricsServiceStart](./kibana-plugin-core-server.metricsservicestart.md) | -| [savedObjects](./kibana-plugin-core-server.corestart.savedobjects.md) | SavedObjectsServiceStart | [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) | -| [uiSettings](./kibana-plugin-core-server.corestart.uisettings.md) | UiSettingsServiceStart | [UiSettingsServiceStart](./kibana-plugin-core-server.uisettingsservicestart.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.metrics.md b/docs/development/core/server/kibana-plugin-core-server.corestart.metrics.md deleted file mode 100644 index 2c32f730c4c9b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.metrics.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [metrics](./kibana-plugin-core-server.corestart.metrics.md) - -## CoreStart.metrics property - -[MetricsServiceStart](./kibana-plugin-core-server.metricsservicestart.md) - -Signature: - -```typescript -metrics: MetricsServiceStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.savedobjects.md b/docs/development/core/server/kibana-plugin-core-server.corestart.savedobjects.md deleted file mode 100644 index cc31c256df88e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.savedobjects.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [savedObjects](./kibana-plugin-core-server.corestart.savedobjects.md) - -## CoreStart.savedObjects property - -[SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) - -Signature: - -```typescript -savedObjects: SavedObjectsServiceStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestart.uisettings.md b/docs/development/core/server/kibana-plugin-core-server.corestart.uisettings.md deleted file mode 100644 index 95c298820f3c3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.uisettings.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStart](./kibana-plugin-core-server.corestart.md) > [uiSettings](./kibana-plugin-core-server.corestart.uisettings.md) - -## CoreStart.uiSettings property - -[UiSettingsServiceStart](./kibana-plugin-core-server.uisettingsservicestart.md) - -Signature: - -```typescript -uiSettings: UiSettingsServiceStart; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md b/docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md deleted file mode 100644 index b41e7020c38e9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStatus](./kibana-plugin-core-server.corestatus.md) > [elasticsearch](./kibana-plugin-core-server.corestatus.elasticsearch.md) - -## CoreStatus.elasticsearch property - -Signature: - -```typescript -elasticsearch: ServiceStatus; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestatus.md b/docs/development/core/server/kibana-plugin-core-server.corestatus.md deleted file mode 100644 index 8d44ab49dfcb7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestatus.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStatus](./kibana-plugin-core-server.corestatus.md) - -## CoreStatus interface - -Status of core services. - -Signature: - -```typescript -export interface CoreStatus -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [elasticsearch](./kibana-plugin-core-server.corestatus.elasticsearch.md) | ServiceStatus | | -| [savedObjects](./kibana-plugin-core-server.corestatus.savedobjects.md) | ServiceStatus | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md b/docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md deleted file mode 100644 index d554c6f70d720..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStatus](./kibana-plugin-core-server.corestatus.md) > [savedObjects](./kibana-plugin-core-server.corestatus.savedobjects.md) - -## CoreStatus.savedObjects property - -Signature: - -```typescript -savedObjects: ServiceStatus; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.countresponse._shards.md b/docs/development/core/server/kibana-plugin-core-server.countresponse._shards.md deleted file mode 100644 index 0f31a554e2208..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.countresponse._shards.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CountResponse](./kibana-plugin-core-server.countresponse.md) > [\_shards](./kibana-plugin-core-server.countresponse._shards.md) - -## CountResponse.\_shards property - -Signature: - -```typescript -_shards: ShardsInfo; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.countresponse.count.md b/docs/development/core/server/kibana-plugin-core-server.countresponse.count.md deleted file mode 100644 index 3cd1a6aaf6644..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.countresponse.count.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CountResponse](./kibana-plugin-core-server.countresponse.md) > [count](./kibana-plugin-core-server.countresponse.count.md) - -## CountResponse.count property - -Signature: - -```typescript -count: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.countresponse.md b/docs/development/core/server/kibana-plugin-core-server.countresponse.md deleted file mode 100644 index 53793dc87bf33..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.countresponse.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CountResponse](./kibana-plugin-core-server.countresponse.md) - -## CountResponse interface - - -Signature: - -```typescript -export interface CountResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [\_shards](./kibana-plugin-core-server.countresponse._shards.md) | ShardsInfo | | -| [count](./kibana-plugin-core-server.countresponse.count.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.cspconfig.default.md b/docs/development/core/server/kibana-plugin-core-server.cspconfig.default.md deleted file mode 100644 index 7668cf56dab83..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.cspconfig.default.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CspConfig](./kibana-plugin-core-server.cspconfig.md) > [DEFAULT](./kibana-plugin-core-server.cspconfig.default.md) - -## CspConfig.DEFAULT property - -Signature: - -```typescript -static readonly DEFAULT: CspConfig; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.cspconfig.disableembedding.md b/docs/development/core/server/kibana-plugin-core-server.cspconfig.disableembedding.md deleted file mode 100644 index bbd7c42c302d1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.cspconfig.disableembedding.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CspConfig](./kibana-plugin-core-server.cspconfig.md) > [disableEmbedding](./kibana-plugin-core-server.cspconfig.disableembedding.md) - -## CspConfig.disableEmbedding property - -Signature: - -```typescript -readonly disableEmbedding: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.cspconfig.header.md b/docs/development/core/server/kibana-plugin-core-server.cspconfig.header.md deleted file mode 100644 index ebde18e7b3586..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.cspconfig.header.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CspConfig](./kibana-plugin-core-server.cspconfig.md) > [header](./kibana-plugin-core-server.cspconfig.header.md) - -## CspConfig.header property - -Signature: - -```typescript -readonly header: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.cspconfig.md b/docs/development/core/server/kibana-plugin-core-server.cspconfig.md deleted file mode 100644 index 3d2f4bb683742..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.cspconfig.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CspConfig](./kibana-plugin-core-server.cspconfig.md) - -## CspConfig class - -CSP configuration for use in Kibana. - -Signature: - -```typescript -export declare class CspConfig implements ICspConfig -``` -Implements: ICspConfig - -## Remarks - -The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `CspConfig` class. - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [DEFAULT](./kibana-plugin-core-server.cspconfig.default.md) | static | CspConfig | | -| [disableEmbedding](./kibana-plugin-core-server.cspconfig.disableembedding.md) | | boolean | | -| [header](./kibana-plugin-core-server.cspconfig.header.md) | | string | | -| [strict](./kibana-plugin-core-server.cspconfig.strict.md) | | boolean | | -| [warnLegacyBrowsers](./kibana-plugin-core-server.cspconfig.warnlegacybrowsers.md) | | boolean | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.cspconfig.strict.md b/docs/development/core/server/kibana-plugin-core-server.cspconfig.strict.md deleted file mode 100644 index 303d04373db73..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.cspconfig.strict.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CspConfig](./kibana-plugin-core-server.cspconfig.md) > [strict](./kibana-plugin-core-server.cspconfig.strict.md) - -## CspConfig.strict property - -Signature: - -```typescript -readonly strict: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.cspconfig.warnlegacybrowsers.md b/docs/development/core/server/kibana-plugin-core-server.cspconfig.warnlegacybrowsers.md deleted file mode 100644 index 70c93c57864b7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.cspconfig.warnlegacybrowsers.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CspConfig](./kibana-plugin-core-server.cspconfig.md) > [warnLegacyBrowsers](./kibana-plugin-core-server.cspconfig.warnlegacybrowsers.md) - -## CspConfig.warnLegacyBrowsers property - -Signature: - -```typescript -readonly warnLegacyBrowsers: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.body.md b/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.body.md deleted file mode 100644 index da37b33fe1bd0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CustomHttpResponseOptions](./kibana-plugin-core-server.customhttpresponseoptions.md) > [body](./kibana-plugin-core-server.customhttpresponseoptions.body.md) - -## CustomHttpResponseOptions.body property - -HTTP message to send to the client - -Signature: - -```typescript -body?: T; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.bypasserrorformat.md b/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.bypasserrorformat.md deleted file mode 100644 index bbd97ab517d29..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.bypasserrorformat.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CustomHttpResponseOptions](./kibana-plugin-core-server.customhttpresponseoptions.md) > [bypassErrorFormat](./kibana-plugin-core-server.customhttpresponseoptions.bypasserrorformat.md) - -## CustomHttpResponseOptions.bypassErrorFormat property - -Bypass the default error formatting - -Signature: - -```typescript -bypassErrorFormat?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.headers.md b/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.headers.md deleted file mode 100644 index f317037482575..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CustomHttpResponseOptions](./kibana-plugin-core-server.customhttpresponseoptions.md) > [headers](./kibana-plugin-core-server.customhttpresponseoptions.headers.md) - -## CustomHttpResponseOptions.headers property - -HTTP Headers with additional information about response - -Signature: - -```typescript -headers?: ResponseHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.md b/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.md deleted file mode 100644 index 84cb55f5c1054..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CustomHttpResponseOptions](./kibana-plugin-core-server.customhttpresponseoptions.md) - -## CustomHttpResponseOptions interface - -HTTP response parameters for a response with adjustable status code. - -Signature: - -```typescript -export interface CustomHttpResponseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-server.customhttpresponseoptions.body.md) | T | (Optional) HTTP message to send to the client | -| [bypassErrorFormat?](./kibana-plugin-core-server.customhttpresponseoptions.bypasserrorformat.md) | boolean | (Optional) Bypass the default error formatting | -| [headers?](./kibana-plugin-core-server.customhttpresponseoptions.headers.md) | ResponseHeaders | (Optional) HTTP Headers with additional information about response | -| [statusCode](./kibana-plugin-core-server.customhttpresponseoptions.statuscode.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.statuscode.md b/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.statuscode.md deleted file mode 100644 index 67cadcb5545a9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.customhttpresponseoptions.statuscode.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CustomHttpResponseOptions](./kibana-plugin-core-server.customhttpresponseoptions.md) > [statusCode](./kibana-plugin-core-server.customhttpresponseoptions.statuscode.md) - -## CustomHttpResponseOptions.statusCode property - -Signature: - -```typescript -statusCode: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.customrequesthandlercontext.md b/docs/development/core/server/kibana-plugin-core-server.customrequesthandlercontext.md deleted file mode 100644 index afaf8c278565a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.customrequesthandlercontext.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CustomRequestHandlerContext](./kibana-plugin-core-server.customrequesthandlercontext.md) - -## CustomRequestHandlerContext type - - -Signature: - -```typescript -export declare type CustomRequestHandlerContext = RequestHandlerContext & { - [Key in keyof T]: T[Key] extends Promise ? T[Key] : Promise; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._id.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._id.md deleted file mode 100644 index ccc6a76361f26..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [\_id](./kibana-plugin-core-server.deletedocumentresponse._id.md) - -## DeleteDocumentResponse.\_id property - -Signature: - -```typescript -_id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._index.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._index.md deleted file mode 100644 index a9a04bb2b2ed7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._index.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [\_index](./kibana-plugin-core-server.deletedocumentresponse._index.md) - -## DeleteDocumentResponse.\_index property - -Signature: - -```typescript -_index: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._shards.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._shards.md deleted file mode 100644 index e3d5e9208db0a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._shards.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [\_shards](./kibana-plugin-core-server.deletedocumentresponse._shards.md) - -## DeleteDocumentResponse.\_shards property - -Signature: - -```typescript -_shards: ShardsResponse; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._type.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._type.md deleted file mode 100644 index 690852e20a76e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [\_type](./kibana-plugin-core-server.deletedocumentresponse._type.md) - -## DeleteDocumentResponse.\_type property - -Signature: - -```typescript -_type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._version.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._version.md deleted file mode 100644 index acfe8ef55ae71..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse._version.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [\_version](./kibana-plugin-core-server.deletedocumentresponse._version.md) - -## DeleteDocumentResponse.\_version property - -Signature: - -```typescript -_version: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.error.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.error.md deleted file mode 100644 index aafe850188998..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.error.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [error](./kibana-plugin-core-server.deletedocumentresponse.error.md) - -## DeleteDocumentResponse.error property - -Signature: - -```typescript -error?: { - type: string; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.found.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.found.md deleted file mode 100644 index 00bc89bda66ed..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.found.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [found](./kibana-plugin-core-server.deletedocumentresponse.found.md) - -## DeleteDocumentResponse.found property - -Signature: - -```typescript -found: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.md deleted file mode 100644 index fe6712ea3b61c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) - -## DeleteDocumentResponse interface - - -Signature: - -```typescript -export interface DeleteDocumentResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [\_id](./kibana-plugin-core-server.deletedocumentresponse._id.md) | string | | -| [\_index](./kibana-plugin-core-server.deletedocumentresponse._index.md) | string | | -| [\_shards](./kibana-plugin-core-server.deletedocumentresponse._shards.md) | ShardsResponse | | -| [\_type](./kibana-plugin-core-server.deletedocumentresponse._type.md) | string | | -| [\_version](./kibana-plugin-core-server.deletedocumentresponse._version.md) | number | | -| [error?](./kibana-plugin-core-server.deletedocumentresponse.error.md) | { type: string; } | (Optional) | -| [found](./kibana-plugin-core-server.deletedocumentresponse.found.md) | boolean | | -| [result](./kibana-plugin-core-server.deletedocumentresponse.result.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.result.md b/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.result.md deleted file mode 100644 index 88f7568d3d9bc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deletedocumentresponse.result.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) > [result](./kibana-plugin-core-server.deletedocumentresponse.result.md) - -## DeleteDocumentResponse.result property - -Signature: - -```typescript -result: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsclient.getalldeprecations.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsclient.getalldeprecations.md deleted file mode 100644 index 90cd8daca24cd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsclient.getalldeprecations.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationsClient](./kibana-plugin-core-server.deprecationsclient.md) > [getAllDeprecations](./kibana-plugin-core-server.deprecationsclient.getalldeprecations.md) - -## DeprecationsClient.getAllDeprecations property - -Signature: - -```typescript -getAllDeprecations: () => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsclient.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsclient.md deleted file mode 100644 index 0e724e251b266..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsclient.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationsClient](./kibana-plugin-core-server.deprecationsclient.md) - -## DeprecationsClient interface - -Server-side client that provides access to fetch all Kibana deprecations - -Signature: - -```typescript -export interface DeprecationsClient -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [getAllDeprecations](./kibana-plugin-core-server.deprecationsclient.getalldeprecations.md) | () => Promise<DomainDeprecationDetails\[\]> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsdetails.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsdetails.md deleted file mode 100644 index d8ced1da62416..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsdetails.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationsDetails](./kibana-plugin-core-server.deprecationsdetails.md) - -## DeprecationsDetails type - - -Signature: - -```typescript -export declare type DeprecationsDetails = ConfigDeprecationDetails | FeatureDeprecationDetails; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.doclinkskey.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.doclinkskey.md deleted file mode 100644 index 9ad751f8082be..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.doclinkskey.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationSettings](./kibana-plugin-core-server.deprecationsettings.md) > [docLinksKey](./kibana-plugin-core-server.deprecationsettings.doclinkskey.md) - -## DeprecationSettings.docLinksKey property - -Key to documentation links - -Signature: - -```typescript -docLinksKey: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.md deleted file mode 100644 index 917ca933d63a1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationSettings](./kibana-plugin-core-server.deprecationsettings.md) - -## DeprecationSettings interface - -UiSettings deprecation field options. - -Signature: - -```typescript -export interface DeprecationSettings -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [docLinksKey](./kibana-plugin-core-server.deprecationsettings.doclinkskey.md) | string | Key to documentation links | -| [message](./kibana-plugin-core-server.deprecationsettings.message.md) | string | Deprecation message | - diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.message.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.message.md deleted file mode 100644 index 238600aff4e55..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsettings.message.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationSettings](./kibana-plugin-core-server.deprecationsettings.md) > [message](./kibana-plugin-core-server.deprecationsettings.message.md) - -## DeprecationSettings.message property - -Deprecation message - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.md deleted file mode 100644 index 1fcefeea9b0ba..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.md +++ /dev/null @@ -1,85 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationsServiceSetup](./kibana-plugin-core-server.deprecationsservicesetup.md) - -## DeprecationsServiceSetup interface - -The deprecations service provides a way for the Kibana platform to communicate deprecated features and configs with its users. These deprecations are only communicated if the deployment is using these features. Allowing for a user tailored experience for upgrading the stack version. - -The Deprecation service is consumed by the upgrade assistant to assist with the upgrade experience. - -If a deprecated feature can be resolved without manual user intervention. Using correctiveActions.api allows the Upgrade Assistant to use this api to correct the deprecation upon a user trigger. - -Signature: - -```typescript -export interface DeprecationsServiceSetup -``` - -## Example - - -```ts -import { DeprecationsDetails, GetDeprecationsContext, CoreSetup } from 'src/core/server'; -import { i18n } from '@kbn/i18n'; - -async function getDeprecations({ esClient, savedObjectsClient }: GetDeprecationsContext): Promise { - const deprecations: DeprecationsDetails[] = []; - const count = await getFooCount(savedObjectsClient); - if (count > 0) { - deprecations.push({ - title: i18n.translate('xpack.foo.deprecations.title', { - defaultMessage: `Foo's are deprecated` - }), - message: i18n.translate('xpack.foo.deprecations.message', { - defaultMessage: `You have {count} Foo's. Migrate your Foo's to a dashboard to continue using them.`, - values: { count }, - }), - documentationUrl: - 'https://www.elastic.co/guide/en/kibana/current/foo.html', - level: 'warning', - correctiveActions: { - manualSteps: [ - i18n.translate('xpack.foo.deprecations.manualStepOneMessage', { - defaultMessage: 'Navigate to the Kibana Dashboard and click "Create dashboard".', - }), - i18n.translate('xpack.foo.deprecations.manualStepTwoMessage', { - defaultMessage: 'Select Foo from the "New Visualization" window.', - }), - ], - api: { - path: '/internal/security/users/test_dashboard_user', - method: 'POST', - body: { - username: 'test_dashboard_user', - roles: [ - "machine_learning_user", - "enrich_user", - "kibana_admin" - ], - full_name: "Alison Goryachev", - email: "alisongoryachev@gmail.com", - metadata: {}, - enabled: true - } - }, - }, - }); - } - return deprecations; -} - - -export class Plugin() { - setup: (core: CoreSetup) => { - core.deprecations.registerDeprecations({ getDeprecations }); - } -} -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [registerDeprecations](./kibana-plugin-core-server.deprecationsservicesetup.registerdeprecations.md) | (deprecationContext: RegisterDeprecationsConfig) => void | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.registerdeprecations.md b/docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.registerdeprecations.md deleted file mode 100644 index 07c2a3ad0ce55..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.deprecationsservicesetup.registerdeprecations.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DeprecationsServiceSetup](./kibana-plugin-core-server.deprecationsservicesetup.md) > [registerDeprecations](./kibana-plugin-core-server.deprecationsservicesetup.registerdeprecations.md) - -## DeprecationsServiceSetup.registerDeprecations property - -Signature: - -```typescript -registerDeprecations: (deprecationContext: RegisterDeprecationsConfig) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.destructiveroutemethod.md b/docs/development/core/server/kibana-plugin-core-server.destructiveroutemethod.md deleted file mode 100644 index 2c112ac7f6217..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.destructiveroutemethod.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [DestructiveRouteMethod](./kibana-plugin-core-server.destructiveroutemethod.md) - -## DestructiveRouteMethod type - -Set of HTTP methods changing the state of the server. - -Signature: - -```typescript -export declare type DestructiveRouteMethod = 'post' | 'put' | 'delete' | 'patch'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchclient.md deleted file mode 100644 index 1dfb1ab7a0b42..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchclient.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchClient](./kibana-plugin-core-server.elasticsearchclient.md) - -## ElasticsearchClient type - -Client used to query the elasticsearch cluster. - -Signature: - -```typescript -export declare type ElasticsearchClient = Omit; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md deleted file mode 100644 index 2a8a99c17ad63..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchClientConfig](./kibana-plugin-core-server.elasticsearchclientconfig.md) - -## ElasticsearchClientConfig type - -Configuration options to be used to create a [cluster client](./kibana-plugin-core-server.iclusterclient.md) using the [createClient API](./kibana-plugin-core-server.elasticsearchservicestart.createclient.md) - -Signature: - -```typescript -export declare type ElasticsearchClientConfig = Pick & { - pingTimeout?: ElasticsearchConfig['pingTimeout'] | ClientOptions['pingTimeout']; - requestTimeout?: ElasticsearchConfig['requestTimeout'] | ClientOptions['requestTimeout']; - ssl?: Partial; - keepAlive?: boolean; - caFingerprint?: ClientOptions['caFingerprint']; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig._constructor_.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig._constructor_.md deleted file mode 100644 index a8d9f1183b3e5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig._constructor_.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [(constructor)](./kibana-plugin-core-server.elasticsearchconfig._constructor_.md) - -## ElasticsearchConfig.(constructor) - -Constructs a new instance of the `ElasticsearchConfig` class - -Signature: - -```typescript -constructor(rawConfig: ElasticsearchConfigType); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| rawConfig | ElasticsearchConfigType | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.apiversion.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.apiversion.md deleted file mode 100644 index 06ca6a2b9a691..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.apiversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [apiVersion](./kibana-plugin-core-server.elasticsearchconfig.apiversion.md) - -## ElasticsearchConfig.apiVersion property - -Version of the Elasticsearch (6.7, 7.1 or `master`) client will be connecting to. - -Signature: - -```typescript -readonly apiVersion: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.compression.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.compression.md deleted file mode 100644 index 5bc85dfb05647..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.compression.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [compression](./kibana-plugin-core-server.elasticsearchconfig.compression.md) - -## ElasticsearchConfig.compression property - -Whether to use compression for communications with elasticsearch. - -Signature: - -```typescript -readonly compression: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.customheaders.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.customheaders.md deleted file mode 100644 index 93f94687956b9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.customheaders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [customHeaders](./kibana-plugin-core-server.elasticsearchconfig.customheaders.md) - -## ElasticsearchConfig.customHeaders property - -Header names and values to send to Elasticsearch with every request. These headers cannot be overwritten by client-side headers and aren't affected by `requestHeadersWhitelist` configuration. - -Signature: - -```typescript -readonly customHeaders: ElasticsearchConfigType['customHeaders']; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.healthcheckdelay.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.healthcheckdelay.md deleted file mode 100644 index 904168a869d14..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.healthcheckdelay.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [healthCheckDelay](./kibana-plugin-core-server.elasticsearchconfig.healthcheckdelay.md) - -## ElasticsearchConfig.healthCheckDelay property - -The interval between health check requests Kibana sends to the Elasticsearch. - -Signature: - -```typescript -readonly healthCheckDelay: Duration; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.hosts.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.hosts.md deleted file mode 100644 index f702512287c1c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.hosts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [hosts](./kibana-plugin-core-server.elasticsearchconfig.hosts.md) - -## ElasticsearchConfig.hosts property - -Hosts that the client will connect to. If sniffing is enabled, this list will be used as seeds to discover the rest of your cluster. - -Signature: - -```typescript -readonly hosts: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ignoreversionmismatch.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ignoreversionmismatch.md deleted file mode 100644 index 9d708f28a66c8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ignoreversionmismatch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [ignoreVersionMismatch](./kibana-plugin-core-server.elasticsearchconfig.ignoreversionmismatch.md) - -## ElasticsearchConfig.ignoreVersionMismatch property - -Whether to allow kibana to connect to a non-compatible elasticsearch node. - -Signature: - -```typescript -readonly ignoreVersionMismatch: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.maxsockets.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.maxsockets.md deleted file mode 100644 index 64403f0cad543..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.maxsockets.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [maxSockets](./kibana-plugin-core-server.elasticsearchconfig.maxsockets.md) - -## ElasticsearchConfig.maxSockets property - -The maximum number of sockets that can be used for communications with elasticsearch. - -Signature: - -```typescript -readonly maxSockets: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md deleted file mode 100644 index 593836664d5bf..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md +++ /dev/null @@ -1,43 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) - -## ElasticsearchConfig class - -Wrapper of config schema. - -Signature: - -```typescript -export declare class ElasticsearchConfig -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(rawConfig)](./kibana-plugin-core-server.elasticsearchconfig._constructor_.md) | | Constructs a new instance of the ElasticsearchConfig class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [apiVersion](./kibana-plugin-core-server.elasticsearchconfig.apiversion.md) | | string | Version of the Elasticsearch (6.7, 7.1 or master) client will be connecting to. | -| [compression](./kibana-plugin-core-server.elasticsearchconfig.compression.md) | | boolean | Whether to use compression for communications with elasticsearch. | -| [customHeaders](./kibana-plugin-core-server.elasticsearchconfig.customheaders.md) | | ElasticsearchConfigType\['customHeaders'\] | Header names and values to send to Elasticsearch with every request. These headers cannot be overwritten by client-side headers and aren't affected by requestHeadersWhitelist configuration. | -| [healthCheckDelay](./kibana-plugin-core-server.elasticsearchconfig.healthcheckdelay.md) | | Duration | The interval between health check requests Kibana sends to the Elasticsearch. | -| [hosts](./kibana-plugin-core-server.elasticsearchconfig.hosts.md) | | string\[\] | Hosts that the client will connect to. If sniffing is enabled, this list will be used as seeds to discover the rest of your cluster. | -| [ignoreVersionMismatch](./kibana-plugin-core-server.elasticsearchconfig.ignoreversionmismatch.md) | | boolean | Whether to allow kibana to connect to a non-compatible elasticsearch node. | -| [maxSockets](./kibana-plugin-core-server.elasticsearchconfig.maxsockets.md) | | number | The maximum number of sockets that can be used for communications with elasticsearch. | -| [password?](./kibana-plugin-core-server.elasticsearchconfig.password.md) | | string | (Optional) If Elasticsearch is protected with basic authentication, this setting provides the password that the Kibana server uses to perform its administrative functions. | -| [pingTimeout](./kibana-plugin-core-server.elasticsearchconfig.pingtimeout.md) | | Duration | Timeout after which PING HTTP request will be aborted and retried. | -| [requestHeadersWhitelist](./kibana-plugin-core-server.elasticsearchconfig.requestheaderswhitelist.md) | | string\[\] | List of Kibana client-side headers to send to Elasticsearch when request scoped cluster client is used. If this is an empty array then \*no\* client-side will be sent. | -| [requestTimeout](./kibana-plugin-core-server.elasticsearchconfig.requesttimeout.md) | | Duration | Timeout after which HTTP request will be aborted and retried. | -| [serviceAccountToken?](./kibana-plugin-core-server.elasticsearchconfig.serviceaccounttoken.md) | | string | (Optional) If Elasticsearch security features are enabled, this setting provides the service account token that the Kibana server users to perform its administrative functions.This is an alternative to specifying a username and password. | -| [shardTimeout](./kibana-plugin-core-server.elasticsearchconfig.shardtimeout.md) | | Duration | Timeout for Elasticsearch to wait for responses from shards. Set to 0 to disable. | -| [sniffInterval](./kibana-plugin-core-server.elasticsearchconfig.sniffinterval.md) | | false \| Duration | Interval to perform a sniff operation and make sure the list of nodes is complete. If false then sniffing is disabled. | -| [sniffOnConnectionFault](./kibana-plugin-core-server.elasticsearchconfig.sniffonconnectionfault.md) | | boolean | Specifies whether the client should immediately sniff for a more current list of nodes when a connection dies. | -| [sniffOnStart](./kibana-plugin-core-server.elasticsearchconfig.sniffonstart.md) | | boolean | Specifies whether the client should attempt to detect the rest of the cluster when it is first instantiated. | -| [ssl](./kibana-plugin-core-server.elasticsearchconfig.ssl.md) | | Pick<SslConfigSchema, Exclude<keyof SslConfigSchema, 'certificateAuthorities' \| 'keystore' \| 'truststore'>> & { certificateAuthorities?: string\[\]; } | Set of settings configure SSL connection between Kibana and Elasticsearch that are required when xpack.ssl.verification_mode in Elasticsearch is set to either certificate or full. | -| [username?](./kibana-plugin-core-server.elasticsearchconfig.username.md) | | string | (Optional) If Elasticsearch is protected with basic authentication, this setting provides the username that the Kibana server uses to perform its administrative functions. Cannot be used in conjunction with serviceAccountToken. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.password.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.password.md deleted file mode 100644 index 2f927b5bc7c76..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.password.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [password](./kibana-plugin-core-server.elasticsearchconfig.password.md) - -## ElasticsearchConfig.password property - -If Elasticsearch is protected with basic authentication, this setting provides the password that the Kibana server uses to perform its administrative functions. - -Signature: - -```typescript -readonly password?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.pingtimeout.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.pingtimeout.md deleted file mode 100644 index 07e37974219de..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.pingtimeout.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [pingTimeout](./kibana-plugin-core-server.elasticsearchconfig.pingtimeout.md) - -## ElasticsearchConfig.pingTimeout property - -Timeout after which PING HTTP request will be aborted and retried. - -Signature: - -```typescript -readonly pingTimeout: Duration; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requestheaderswhitelist.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requestheaderswhitelist.md deleted file mode 100644 index c19dcd3896366..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requestheaderswhitelist.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [requestHeadersWhitelist](./kibana-plugin-core-server.elasticsearchconfig.requestheaderswhitelist.md) - -## ElasticsearchConfig.requestHeadersWhitelist property - -List of Kibana client-side headers to send to Elasticsearch when request scoped cluster client is used. If this is an empty array then \*no\* client-side will be sent. - -Signature: - -```typescript -readonly requestHeadersWhitelist: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requesttimeout.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requesttimeout.md deleted file mode 100644 index f43cfc754b1f6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.requesttimeout.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [requestTimeout](./kibana-plugin-core-server.elasticsearchconfig.requesttimeout.md) - -## ElasticsearchConfig.requestTimeout property - -Timeout after which HTTP request will be aborted and retried. - -Signature: - -```typescript -readonly requestTimeout: Duration; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.serviceaccounttoken.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.serviceaccounttoken.md deleted file mode 100644 index 5934e83de17a4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.serviceaccounttoken.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [serviceAccountToken](./kibana-plugin-core-server.elasticsearchconfig.serviceaccounttoken.md) - -## ElasticsearchConfig.serviceAccountToken property - -If Elasticsearch security features are enabled, this setting provides the service account token that the Kibana server users to perform its administrative functions. - -This is an alternative to specifying a username and password. - -Signature: - -```typescript -readonly serviceAccountToken?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.shardtimeout.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.shardtimeout.md deleted file mode 100644 index c29f00a074e3f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.shardtimeout.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [shardTimeout](./kibana-plugin-core-server.elasticsearchconfig.shardtimeout.md) - -## ElasticsearchConfig.shardTimeout property - -Timeout for Elasticsearch to wait for responses from shards. Set to 0 to disable. - -Signature: - -```typescript -readonly shardTimeout: Duration; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffinterval.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffinterval.md deleted file mode 100644 index 19f6968b13863..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffinterval.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [sniffInterval](./kibana-plugin-core-server.elasticsearchconfig.sniffinterval.md) - -## ElasticsearchConfig.sniffInterval property - -Interval to perform a sniff operation and make sure the list of nodes is complete. If `false` then sniffing is disabled. - -Signature: - -```typescript -readonly sniffInterval: false | Duration; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonconnectionfault.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonconnectionfault.md deleted file mode 100644 index a632b446a55fd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonconnectionfault.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [sniffOnConnectionFault](./kibana-plugin-core-server.elasticsearchconfig.sniffonconnectionfault.md) - -## ElasticsearchConfig.sniffOnConnectionFault property - -Specifies whether the client should immediately sniff for a more current list of nodes when a connection dies. - -Signature: - -```typescript -readonly sniffOnConnectionFault: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonstart.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonstart.md deleted file mode 100644 index 09f3431c71880..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.sniffonstart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [sniffOnStart](./kibana-plugin-core-server.elasticsearchconfig.sniffonstart.md) - -## ElasticsearchConfig.sniffOnStart property - -Specifies whether the client should attempt to detect the rest of the cluster when it is first instantiated. - -Signature: - -```typescript -readonly sniffOnStart: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ssl.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ssl.md deleted file mode 100644 index f88fc57339475..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.ssl.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [ssl](./kibana-plugin-core-server.elasticsearchconfig.ssl.md) - -## ElasticsearchConfig.ssl property - -Set of settings configure SSL connection between Kibana and Elasticsearch that are required when `xpack.ssl.verification_mode` in Elasticsearch is set to either `certificate` or `full`. - -Signature: - -```typescript -readonly ssl: Pick> & { - certificateAuthorities?: string[]; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.username.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.username.md deleted file mode 100644 index 959870ff43a0f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.username.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [username](./kibana-plugin-core-server.elasticsearchconfig.username.md) - -## ElasticsearchConfig.username property - -If Elasticsearch is protected with basic authentication, this setting provides the username that the Kibana server uses to perform its administrative functions. Cannot be used in conjunction with serviceAccountToken. - -Signature: - -```typescript -readonly username?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.credentialsspecified.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.credentialsspecified.md deleted file mode 100644 index df99d5ec4b831..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.credentialsspecified.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfigPreboot](./kibana-plugin-core-server.elasticsearchconfigpreboot.md) > [credentialsSpecified](./kibana-plugin-core-server.elasticsearchconfigpreboot.credentialsspecified.md) - -## ElasticsearchConfigPreboot.credentialsSpecified property - -Indicates whether Elasticsearch configuration includes credentials (`username`, `password` or `serviceAccountToken`). - -Signature: - -```typescript -readonly credentialsSpecified: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.hosts.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.hosts.md deleted file mode 100644 index e9ad47b61419e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.hosts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfigPreboot](./kibana-plugin-core-server.elasticsearchconfigpreboot.md) > [hosts](./kibana-plugin-core-server.elasticsearchconfigpreboot.hosts.md) - -## ElasticsearchConfigPreboot.hosts property - -Hosts that the client will connect to. If sniffing is enabled, this list will be used as seeds to discover the rest of your cluster. - -Signature: - -```typescript -readonly hosts: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.md deleted file mode 100644 index d7d3e8d70e8d7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfigpreboot.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfigPreboot](./kibana-plugin-core-server.elasticsearchconfigpreboot.md) - -## ElasticsearchConfigPreboot interface - -A limited set of Elasticsearch configuration entries exposed to the `preboot` plugins at `setup`. - -Signature: - -```typescript -export interface ElasticsearchConfigPreboot -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [credentialsSpecified](./kibana-plugin-core-server.elasticsearchconfigpreboot.credentialsspecified.md) | boolean | Indicates whether Elasticsearch configuration includes credentials (username, password or serviceAccountToken). | -| [hosts](./kibana-plugin-core-server.elasticsearchconfigpreboot.hosts.md) | string\[\] | Hosts that the client will connect to. If sniffing is enabled, this list will be used as seeds to discover the rest of your cluster. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.error.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.error.md deleted file mode 100644 index 7191caea54929..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.error.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchErrorDetails](./kibana-plugin-core-server.elasticsearcherrordetails.md) > [error](./kibana-plugin-core-server.elasticsearcherrordetails.error.md) - -## ElasticsearchErrorDetails.error property - -Signature: - -```typescript -error?: { - type: string; - reason?: string; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.md deleted file mode 100644 index 570a161db20e0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearcherrordetails.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchErrorDetails](./kibana-plugin-core-server.elasticsearcherrordetails.md) - -## ElasticsearchErrorDetails interface - - -Signature: - -```typescript -export interface ElasticsearchErrorDetails -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error?](./kibana-plugin-core-server.elasticsearcherrordetails.error.md) | { type: string; reason?: string; } | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.config.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.config.md deleted file mode 100644 index c4284248ea894..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.config.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServicePreboot](./kibana-plugin-core-server.elasticsearchservicepreboot.md) > [config](./kibana-plugin-core-server.elasticsearchservicepreboot.config.md) - -## ElasticsearchServicePreboot.config property - -A limited set of Elasticsearch configuration entries. - -Signature: - -```typescript -readonly config: Readonly; -``` - -## Example - - -```js -const { hosts, credentialsSpecified } = core.elasticsearch.config; -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.createclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.createclient.md deleted file mode 100644 index 070cb7905b585..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.createclient.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServicePreboot](./kibana-plugin-core-server.elasticsearchservicepreboot.md) > [createClient](./kibana-plugin-core-server.elasticsearchservicepreboot.createclient.md) - -## ElasticsearchServicePreboot.createClient property - -Create application specific Elasticsearch cluster API client with customized config. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). - -Signature: - -```typescript -readonly createClient: (type: string, clientConfig?: Partial) => ICustomClusterClient; -``` - -## Example - - -```js -const client = elasticsearch.createClient('my-app-name', config); -const data = await client.asInternalUser.search(); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.md deleted file mode 100644 index 14dc099d13835..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicepreboot.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServicePreboot](./kibana-plugin-core-server.elasticsearchservicepreboot.md) - -## ElasticsearchServicePreboot interface - - -Signature: - -```typescript -export interface ElasticsearchServicePreboot -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [config](./kibana-plugin-core-server.elasticsearchservicepreboot.config.md) | Readonly<ElasticsearchConfigPreboot> | A limited set of Elasticsearch configuration entries. | -| [createClient](./kibana-plugin-core-server.elasticsearchservicepreboot.createclient.md) | (type: string, clientConfig?: Partial<ElasticsearchClientConfig>) => ICustomClusterClient | Create application specific Elasticsearch cluster API client with customized config. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.legacy.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.legacy.md deleted file mode 100644 index 03e2be0da7a10..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.legacy.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) > [legacy](./kibana-plugin-core-server.elasticsearchservicesetup.legacy.md) - -## ElasticsearchServiceSetup.legacy property - -> Warning: This API is now obsolete. -> -> - -Signature: - -```typescript -legacy: { - readonly config$: Observable; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md deleted file mode 100644 index f66333427a224..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) - -## ElasticsearchServiceSetup interface - - -Signature: - -```typescript -export interface ElasticsearchServiceSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [legacy](./kibana-plugin-core-server.elasticsearchservicesetup.legacy.md) | { readonly config$: Observable<ElasticsearchConfig>; } | | -| [setUnauthorizedErrorHandler](./kibana-plugin-core-server.elasticsearchservicesetup.setunauthorizederrorhandler.md) | (handler: UnauthorizedErrorHandler) => void | Register a handler that will be called when unauthorized (401) errors are returned from any API call to elasticsearch performed on behalf of a user via a [scoped cluster client](./kibana-plugin-core-server.iscopedclusterclient.md). | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.setunauthorizederrorhandler.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.setunauthorizederrorhandler.md deleted file mode 100644 index ee403a800d934..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.setunauthorizederrorhandler.md +++ /dev/null @@ -1,35 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) > [setUnauthorizedErrorHandler](./kibana-plugin-core-server.elasticsearchservicesetup.setunauthorizederrorhandler.md) - -## ElasticsearchServiceSetup.setUnauthorizedErrorHandler property - -Register a handler that will be called when unauthorized (401) errors are returned from any API call to elasticsearch performed on behalf of a user via a [scoped cluster client](./kibana-plugin-core-server.iscopedclusterclient.md). - -Signature: - -```typescript -setUnauthorizedErrorHandler: (handler: UnauthorizedErrorHandler) => void; -``` - -## Remarks - -The handler will only be invoked for scoped client bound to real [request](./kibana-plugin-core-server.kibanarequest.md) instances. - -## Example - - -```ts -const handler: UnauthorizedErrorHandler = ({ request, error }, toolkit) => { - const reauthenticationResult = await authenticator.reauthenticate(request, error); - if (reauthenticationResult.succeeded()) { - return toolkit.retry({ - authHeaders: reauthenticationResult.authHeaders, - }); - } - return toolkit.notHandled(); -} - -coreSetup.elasticsearch.setUnauthorizedErrorHandler(handler); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.client.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.client.md deleted file mode 100644 index 59f302170c53a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.client.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) > [client](./kibana-plugin-core-server.elasticsearchservicestart.client.md) - -## ElasticsearchServiceStart.client property - -A pre-configured [Elasticsearch client](./kibana-plugin-core-server.iclusterclient.md) - -Signature: - -```typescript -readonly client: IClusterClient; -``` - -## Example - - -```js -const client = core.elasticsearch.client; -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.createclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.createclient.md deleted file mode 100644 index 26930c6f02b32..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.createclient.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) > [createClient](./kibana-plugin-core-server.elasticsearchservicestart.createclient.md) - -## ElasticsearchServiceStart.createClient property - -Create application specific Elasticsearch cluster API client with customized config. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). - -Signature: - -```typescript -readonly createClient: (type: string, clientConfig?: Partial) => ICustomClusterClient; -``` - -## Example - - -```js -const client = elasticsearch.createClient('my-app-name', config); -const data = await client.asInternalUser.search(); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.md deleted file mode 100644 index 66ff94ee9c80d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) - -## ElasticsearchServiceStart interface - - -Signature: - -```typescript -export interface ElasticsearchServiceStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [client](./kibana-plugin-core-server.elasticsearchservicestart.client.md) | IClusterClient | A pre-configured [Elasticsearch client](./kibana-plugin-core-server.iclusterclient.md) | -| [createClient](./kibana-plugin-core-server.elasticsearchservicestart.createclient.md) | (type: string, clientConfig?: Partial<ElasticsearchClientConfig>) => ICustomClusterClient | Create application specific Elasticsearch cluster API client with customized config. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md deleted file mode 100644 index f8a45fe9a5a9c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) > [incompatibleNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md) - -## ElasticsearchStatusMeta.incompatibleNodes property - -Signature: - -```typescript -incompatibleNodes: NodesVersionCompatibility['incompatibleNodes']; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md deleted file mode 100644 index 82748932c2102..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) - -## ElasticsearchStatusMeta interface - - -Signature: - -```typescript -export interface ElasticsearchStatusMeta -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [incompatibleNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md) | NodesVersionCompatibility\['incompatibleNodes'\] | | -| [nodesInfoRequestError?](./kibana-plugin-core-server.elasticsearchstatusmeta.nodesinforequesterror.md) | NodesVersionCompatibility\['nodesInfoRequestError'\] | (Optional) | -| [warningNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md) | NodesVersionCompatibility\['warningNodes'\] | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.nodesinforequesterror.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.nodesinforequesterror.md deleted file mode 100644 index 1b46078a1a453..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.nodesinforequesterror.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) > [nodesInfoRequestError](./kibana-plugin-core-server.elasticsearchstatusmeta.nodesinforequesterror.md) - -## ElasticsearchStatusMeta.nodesInfoRequestError property - -Signature: - -```typescript -nodesInfoRequestError?: NodesVersionCompatibility['nodesInfoRequestError']; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md deleted file mode 100644 index 7374ccd9e7fa8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) > [warningNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md) - -## ElasticsearchStatusMeta.warningNodes property - -Signature: - -```typescript -warningNodes: NodesVersionCompatibility['warningNodes']; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.body.md b/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.body.md deleted file mode 100644 index 102e0c8f64b5a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ErrorHttpResponseOptions](./kibana-plugin-core-server.errorhttpresponseoptions.md) > [body](./kibana-plugin-core-server.errorhttpresponseoptions.body.md) - -## ErrorHttpResponseOptions.body property - -HTTP message to send to the client - -Signature: - -```typescript -body?: ResponseError; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.headers.md b/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.headers.md deleted file mode 100644 index bbd91156347b5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ErrorHttpResponseOptions](./kibana-plugin-core-server.errorhttpresponseoptions.md) > [headers](./kibana-plugin-core-server.errorhttpresponseoptions.headers.md) - -## ErrorHttpResponseOptions.headers property - -HTTP Headers with additional information about response - -Signature: - -```typescript -headers?: ResponseHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.md b/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.md deleted file mode 100644 index 3a037e71ac1e2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.errorhttpresponseoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ErrorHttpResponseOptions](./kibana-plugin-core-server.errorhttpresponseoptions.md) - -## ErrorHttpResponseOptions interface - -HTTP response parameters - -Signature: - -```typescript -export interface ErrorHttpResponseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-server.errorhttpresponseoptions.body.md) | ResponseError | (Optional) HTTP message to send to the client | -| [headers?](./kibana-plugin-core-server.errorhttpresponseoptions.headers.md) | ResponseHeaders | (Optional) HTTP Headers with additional information about response | - diff --git a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor._constructor_.md b/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor._constructor_.md deleted file mode 100644 index ae9df8b406be6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor._constructor_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [EventLoopDelaysMonitor](./kibana-plugin-core-server.eventloopdelaysmonitor.md) > [(constructor)](./kibana-plugin-core-server.eventloopdelaysmonitor._constructor_.md) - -## EventLoopDelaysMonitor.(constructor) - -Creating a new instance from EventLoopDelaysMonitor will automatically start tracking event loop delays. - -Signature: - -```typescript -constructor(); -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.collect.md b/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.collect.md deleted file mode 100644 index ff9c57787f71d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.collect.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [EventLoopDelaysMonitor](./kibana-plugin-core-server.eventloopdelaysmonitor.md) > [collect](./kibana-plugin-core-server.eventloopdelaysmonitor.collect.md) - -## EventLoopDelaysMonitor.collect() method - -Collect gathers event loop delays metrics from nodejs perf\_hooks.monitorEventLoopDelay the histogram calculations start from the last time `reset` was called or this EventLoopDelaysMonitor instance was created. - -Returns metrics in milliseconds. - -Signature: - -```typescript -collect(): IntervalHistogram; -``` -Returns: - -IntervalHistogram - -{IntervalHistogram} - diff --git a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.md b/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.md deleted file mode 100644 index e5d35547d3bdb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [EventLoopDelaysMonitor](./kibana-plugin-core-server.eventloopdelaysmonitor.md) - -## EventLoopDelaysMonitor class - -Signature: - -```typescript -export declare class EventLoopDelaysMonitor -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)()](./kibana-plugin-core-server.eventloopdelaysmonitor._constructor_.md) | | Creating a new instance from EventLoopDelaysMonitor will automatically start tracking event loop delays. | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [collect()](./kibana-plugin-core-server.eventloopdelaysmonitor.collect.md) | | Collect gathers event loop delays metrics from nodejs perf\_hooks.monitorEventLoopDelay the histogram calculations start from the last time reset was called or this EventLoopDelaysMonitor instance was created.Returns metrics in milliseconds. | -| [reset()](./kibana-plugin-core-server.eventloopdelaysmonitor.reset.md) | | Resets the collected histogram data. | -| [stop()](./kibana-plugin-core-server.eventloopdelaysmonitor.stop.md) | | Disables updating the interval timer for collecting new data points. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.reset.md b/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.reset.md deleted file mode 100644 index a65cc7c99842d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.reset.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [EventLoopDelaysMonitor](./kibana-plugin-core-server.eventloopdelaysmonitor.md) > [reset](./kibana-plugin-core-server.eventloopdelaysmonitor.reset.md) - -## EventLoopDelaysMonitor.reset() method - -Resets the collected histogram data. - -Signature: - -```typescript -reset(): void; -``` -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.stop.md b/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.stop.md deleted file mode 100644 index d63c963b384e6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.eventloopdelaysmonitor.stop.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [EventLoopDelaysMonitor](./kibana-plugin-core-server.eventloopdelaysmonitor.md) > [stop](./kibana-plugin-core-server.eventloopdelaysmonitor.stop.md) - -## EventLoopDelaysMonitor.stop() method - -Disables updating the interval timer for collecting new data points. - -Signature: - -```typescript -stop(): void; -``` -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.getaslabels.md b/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.getaslabels.md deleted file mode 100644 index c8816a3deee4d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.getaslabels.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) > [getAsLabels](./kibana-plugin-core-server.executioncontextsetup.getaslabels.md) - -## ExecutionContextSetup.getAsLabels() method - -Signature: - -```typescript -getAsLabels(): apm.Labels; -``` -Returns: - -apm.Labels - diff --git a/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.md b/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.md deleted file mode 100644 index 7fdc4d1ec1d57..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) - -## ExecutionContextSetup interface - - -Signature: - -```typescript -export interface ExecutionContextSetup -``` - -## Methods - -| Method | Description | -| --- | --- | -| [getAsLabels()](./kibana-plugin-core-server.executioncontextsetup.getaslabels.md) | | -| [withContext(context, fn)](./kibana-plugin-core-server.executioncontextsetup.withcontext.md) | Keeps track of execution context while the passed function is executed. Data are carried over all async operations spawned by the passed function. The nested calls stack the registered context on top of each other. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.withcontext.md b/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.withcontext.md deleted file mode 100644 index 2bfef6db2f907..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.executioncontextsetup.withcontext.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) > [withContext](./kibana-plugin-core-server.executioncontextsetup.withcontext.md) - -## ExecutionContextSetup.withContext() method - -Keeps track of execution context while the passed function is executed. Data are carried over all async operations spawned by the passed function. The nested calls stack the registered context on top of each other. - -Signature: - -```typescript -withContext(context: KibanaExecutionContext | undefined, fn: (...args: any[]) => R): R; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| context | KibanaExecutionContext \| undefined | | -| fn | (...args: any\[\]) => R | | - -Returns: - -R - diff --git a/docs/development/core/server/kibana-plugin-core-server.executioncontextstart.md b/docs/development/core/server/kibana-plugin-core-server.executioncontextstart.md deleted file mode 100644 index 115c09471b3f7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.executioncontextstart.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ExecutionContextStart](./kibana-plugin-core-server.executioncontextstart.md) - -## ExecutionContextStart type - - -Signature: - -```typescript -export declare type ExecutionContextStart = ExecutionContextSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.exposedtobrowserdescriptor.md b/docs/development/core/server/kibana-plugin-core-server.exposedtobrowserdescriptor.md deleted file mode 100644 index b2bb3f5928dcc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.exposedtobrowserdescriptor.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ExposedToBrowserDescriptor](./kibana-plugin-core-server.exposedtobrowserdescriptor.md) - -## ExposedToBrowserDescriptor type - -Type defining the list of configuration properties that will be exposed on the client-side Object properties can either be fully exposed - -Signature: - -```typescript -export declare type ExposedToBrowserDescriptor = { - [Key in keyof T]?: T[Key] extends Maybe ? boolean : T[Key] extends Maybe ? // can be nested for objects - ExposedToBrowserDescriptor | boolean : boolean; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.fakerequest.headers.md b/docs/development/core/server/kibana-plugin-core-server.fakerequest.headers.md deleted file mode 100644 index 55d1dc7edc05e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.fakerequest.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [FakeRequest](./kibana-plugin-core-server.fakerequest.md) > [headers](./kibana-plugin-core-server.fakerequest.headers.md) - -## FakeRequest.headers property - -Headers used for authentication against Elasticsearch - -Signature: - -```typescript -headers: Headers; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.fakerequest.md b/docs/development/core/server/kibana-plugin-core-server.fakerequest.md deleted file mode 100644 index 6b8bfe33d19c4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.fakerequest.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [FakeRequest](./kibana-plugin-core-server.fakerequest.md) - -## FakeRequest interface - -Fake request object created manually by Kibana plugins. - -Signature: - -```typescript -export interface FakeRequest -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [headers](./kibana-plugin-core-server.fakerequest.headers.md) | Headers | Headers used for authentication against Elasticsearch | - diff --git a/docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.deprecationtype.md b/docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.deprecationtype.md deleted file mode 100644 index b530874d3678b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.deprecationtype.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [FeatureDeprecationDetails](./kibana-plugin-core-server.featuredeprecationdetails.md) > [deprecationType](./kibana-plugin-core-server.featuredeprecationdetails.deprecationtype.md) - -## FeatureDeprecationDetails.deprecationType property - -Signature: - -```typescript -deprecationType?: 'feature' | undefined; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.md b/docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.md deleted file mode 100644 index c92f352ce7e5e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.featuredeprecationdetails.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [FeatureDeprecationDetails](./kibana-plugin-core-server.featuredeprecationdetails.md) - -## FeatureDeprecationDetails interface - - -Signature: - -```typescript -export interface FeatureDeprecationDetails extends BaseDeprecationDetails -``` -Extends: BaseDeprecationDetails - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [deprecationType?](./kibana-plugin-core-server.featuredeprecationdetails.deprecationtype.md) | 'feature' \| undefined | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.getauthheaders.md b/docs/development/core/server/kibana-plugin-core-server.getauthheaders.md deleted file mode 100644 index 2f1502a5ea0ea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getauthheaders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetAuthHeaders](./kibana-plugin-core-server.getauthheaders.md) - -## GetAuthHeaders type - -Get headers to authenticate a user against Elasticsearch. - -Signature: - -```typescript -export declare type GetAuthHeaders = (request: KibanaRequest) => AuthHeaders | undefined; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getauthstate.md b/docs/development/core/server/kibana-plugin-core-server.getauthstate.md deleted file mode 100644 index 979a6b5b5792b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getauthstate.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetAuthState](./kibana-plugin-core-server.getauthstate.md) - -## GetAuthState type - -Gets authentication state for a request. Returned by `auth` interceptor. - -Signature: - -```typescript -export declare type GetAuthState = (request: KibanaRequest) => { - status: AuthStatus; - state: T; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.esclient.md b/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.esclient.md deleted file mode 100644 index 70c1864bf905f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.esclient.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetDeprecationsContext](./kibana-plugin-core-server.getdeprecationscontext.md) > [esClient](./kibana-plugin-core-server.getdeprecationscontext.esclient.md) - -## GetDeprecationsContext.esClient property - -Signature: - -```typescript -esClient: IScopedClusterClient; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.md b/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.md deleted file mode 100644 index 2362966866852..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetDeprecationsContext](./kibana-plugin-core-server.getdeprecationscontext.md) - -## GetDeprecationsContext interface - - -Signature: - -```typescript -export interface GetDeprecationsContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [esClient](./kibana-plugin-core-server.getdeprecationscontext.esclient.md) | IScopedClusterClient | | -| [savedObjectsClient](./kibana-plugin-core-server.getdeprecationscontext.savedobjectsclient.md) | SavedObjectsClientContract | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.savedobjectsclient.md b/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.savedobjectsclient.md deleted file mode 100644 index 66da52d3b5824..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getdeprecationscontext.savedobjectsclient.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetDeprecationsContext](./kibana-plugin-core-server.getdeprecationscontext.md) > [savedObjectsClient](./kibana-plugin-core-server.getdeprecationscontext.savedobjectsclient.md) - -## GetDeprecationsContext.savedObjectsClient property - -Signature: - -```typescript -savedObjectsClient: SavedObjectsClientContract; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._id.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._id.md deleted file mode 100644 index d31b61f3962c8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_id](./kibana-plugin-core-server.getresponse._id.md) - -## GetResponse.\_id property - -Signature: - -```typescript -_id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._index.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._index.md deleted file mode 100644 index 0353ec1a17b2c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._index.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_index](./kibana-plugin-core-server.getresponse._index.md) - -## GetResponse.\_index property - -Signature: - -```typescript -_index: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._primary_term.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._primary_term.md deleted file mode 100644 index 8412302ab727d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._primary_term.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_primary\_term](./kibana-plugin-core-server.getresponse._primary_term.md) - -## GetResponse.\_primary\_term property - -Signature: - -```typescript -_primary_term: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._routing.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._routing.md deleted file mode 100644 index 1af3ed31ee112..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._routing.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_routing](./kibana-plugin-core-server.getresponse._routing.md) - -## GetResponse.\_routing property - -Signature: - -```typescript -_routing?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._seq_no.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._seq_no.md deleted file mode 100644 index e8d72563f8149..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._seq_no.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_seq\_no](./kibana-plugin-core-server.getresponse._seq_no.md) - -## GetResponse.\_seq\_no property - -Signature: - -```typescript -_seq_no: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._source.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._source.md deleted file mode 100644 index 97aacb42992a3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._source.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_source](./kibana-plugin-core-server.getresponse._source.md) - -## GetResponse.\_source property - -Signature: - -```typescript -_source: T; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._type.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._type.md deleted file mode 100644 index b3205e2fe91d7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_type](./kibana-plugin-core-server.getresponse._type.md) - -## GetResponse.\_type property - -Signature: - -```typescript -_type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse._version.md b/docs/development/core/server/kibana-plugin-core-server.getresponse._version.md deleted file mode 100644 index 23d3a8c91f4a2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse._version.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [\_version](./kibana-plugin-core-server.getresponse._version.md) - -## GetResponse.\_version property - -Signature: - -```typescript -_version: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse.found.md b/docs/development/core/server/kibana-plugin-core-server.getresponse.found.md deleted file mode 100644 index 8d34a3e743cca..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse.found.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) > [found](./kibana-plugin-core-server.getresponse.found.md) - -## GetResponse.found property - -Signature: - -```typescript -found: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.getresponse.md b/docs/development/core/server/kibana-plugin-core-server.getresponse.md deleted file mode 100644 index 5068be8a5689a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.getresponse.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [GetResponse](./kibana-plugin-core-server.getresponse.md) - -## GetResponse interface - - -Signature: - -```typescript -export interface GetResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [\_id](./kibana-plugin-core-server.getresponse._id.md) | string | | -| [\_index](./kibana-plugin-core-server.getresponse._index.md) | string | | -| [\_primary\_term](./kibana-plugin-core-server.getresponse._primary_term.md) | number | | -| [\_routing?](./kibana-plugin-core-server.getresponse._routing.md) | string | (Optional) | -| [\_seq\_no](./kibana-plugin-core-server.getresponse._seq_no.md) | number | | -| [\_source](./kibana-plugin-core-server.getresponse._source.md) | T | | -| [\_type](./kibana-plugin-core-server.getresponse._type.md) | string | | -| [\_version](./kibana-plugin-core-server.getresponse._version.md) | number | | -| [found](./kibana-plugin-core-server.getresponse.found.md) | boolean | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.handlercontexttype.md b/docs/development/core/server/kibana-plugin-core-server.handlercontexttype.md deleted file mode 100644 index 6fef414209d71..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.handlercontexttype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HandlerContextType](./kibana-plugin-core-server.handlercontexttype.md) - -## HandlerContextType type - -Extracts the type of the first argument of a [HandlerFunction](./kibana-plugin-core-server.handlerfunction.md) to represent the type of the context. - -Signature: - -```typescript -export declare type HandlerContextType> = T extends HandlerFunction ? U : never; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.handlerfunction.md b/docs/development/core/server/kibana-plugin-core-server.handlerfunction.md deleted file mode 100644 index 2b41e5a978be2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.handlerfunction.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HandlerFunction](./kibana-plugin-core-server.handlerfunction.md) - -## HandlerFunction type - -A function that accepts a context object and an optional number of additional arguments. Used for the generic types in [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) - -Signature: - -```typescript -export declare type HandlerFunction = (context: T, ...args: any[]) => any; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.handlerparameters.md b/docs/development/core/server/kibana-plugin-core-server.handlerparameters.md deleted file mode 100644 index 3e5a2f24eddc7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.handlerparameters.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HandlerParameters](./kibana-plugin-core-server.handlerparameters.md) - -## HandlerParameters type - -Extracts the types of the additional arguments of a [HandlerFunction](./kibana-plugin-core-server.handlerfunction.md), excluding the [HandlerContextType](./kibana-plugin-core-server.handlercontexttype.md). - -Signature: - -```typescript -export declare type HandlerParameters> = T extends (context: any, ...args: infer U) => any ? U : never; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.headers_2.md b/docs/development/core/server/kibana-plugin-core-server.headers_2.md deleted file mode 100644 index 398827f2bf3d1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.headers_2.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Headers\_2](./kibana-plugin-core-server.headers_2.md) - -## Headers\_2 type - -Http request headers to read. - -Signature: - -```typescript -export declare type Headers = { - [header in KnownHeaders]?: string | string[] | undefined; -} & { - [header: string]: string | string[] | undefined; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpauth.get.md b/docs/development/core/server/kibana-plugin-core-server.httpauth.get.md deleted file mode 100644 index 4ea67cf895a27..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpauth.get.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpAuth](./kibana-plugin-core-server.httpauth.md) > [get](./kibana-plugin-core-server.httpauth.get.md) - -## HttpAuth.get property - -Gets authentication state for a request. Returned by `auth` interceptor. [GetAuthState](./kibana-plugin-core-server.getauthstate.md) - -Signature: - -```typescript -get: GetAuthState; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpauth.isauthenticated.md b/docs/development/core/server/kibana-plugin-core-server.httpauth.isauthenticated.md deleted file mode 100644 index 54db6bce5f161..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpauth.isauthenticated.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpAuth](./kibana-plugin-core-server.httpauth.md) > [isAuthenticated](./kibana-plugin-core-server.httpauth.isauthenticated.md) - -## HttpAuth.isAuthenticated property - -Returns authentication status for a request. [IsAuthenticated](./kibana-plugin-core-server.isauthenticated.md) - -Signature: - -```typescript -isAuthenticated: IsAuthenticated; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpauth.md b/docs/development/core/server/kibana-plugin-core-server.httpauth.md deleted file mode 100644 index 4b47be615c79c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpauth.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpAuth](./kibana-plugin-core-server.httpauth.md) - -## HttpAuth interface - - -Signature: - -```typescript -export interface HttpAuth -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [get](./kibana-plugin-core-server.httpauth.get.md) | GetAuthState | Gets authentication state for a request. Returned by auth interceptor. [GetAuthState](./kibana-plugin-core-server.getauthstate.md) | -| [isAuthenticated](./kibana-plugin-core-server.httpauth.isauthenticated.md) | IsAuthenticated | Returns authentication status for a request. [IsAuthenticated](./kibana-plugin-core-server.isauthenticated.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresources.md b/docs/development/core/server/kibana-plugin-core-server.httpresources.md deleted file mode 100644 index 0b1854d7cbcd9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresources.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResources](./kibana-plugin-core-server.httpresources.md) - -## HttpResources interface - -HttpResources service is responsible for serving static & dynamic assets for Kibana application via HTTP. Provides API allowing plug-ins to respond with: - a pre-configured HTML page bootstrapping Kibana client app - custom HTML page - custom JS script file. - -Signature: - -```typescript -export interface HttpResources -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [register](./kibana-plugin-core-server.httpresources.register.md) | <P, Q, B, Context extends RequestHandlerContext = RequestHandlerContext>(route: RouteConfig<P, Q, B, 'get'>, handler: HttpResourcesRequestHandler<P, Q, B, Context>) => void | To register a route handler executing passed function to form response. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresources.register.md b/docs/development/core/server/kibana-plugin-core-server.httpresources.register.md deleted file mode 100644 index ee9569aeb37b4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresources.register.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResources](./kibana-plugin-core-server.httpresources.md) > [register](./kibana-plugin-core-server.httpresources.register.md) - -## HttpResources.register property - -To register a route handler executing passed function to form response. - -Signature: - -```typescript -register: (route: RouteConfig, handler: HttpResourcesRequestHandler) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.headers.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.headers.md deleted file mode 100644 index bb6dec504ff42..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.headers.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesRenderOptions](./kibana-plugin-core-server.httpresourcesrenderoptions.md) > [headers](./kibana-plugin-core-server.httpresourcesrenderoptions.headers.md) - -## HttpResourcesRenderOptions.headers property - -HTTP Headers with additional information about response. - -Signature: - -```typescript -headers?: ResponseHeaders; -``` - -## Remarks - -All HTML pages are already pre-configured with `content-security-policy` header that cannot be overridden. - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.md deleted file mode 100644 index 9fcdc1b338783..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesrenderoptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesRenderOptions](./kibana-plugin-core-server.httpresourcesrenderoptions.md) - -## HttpResourcesRenderOptions interface - -Allows to configure HTTP response parameters - -Signature: - -```typescript -export interface HttpResourcesRenderOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [headers?](./kibana-plugin-core-server.httpresourcesrenderoptions.headers.md) | ResponseHeaders | (Optional) HTTP Headers with additional information about response. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesrequesthandler.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesrequesthandler.md deleted file mode 100644 index 49854ac003860..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesrequesthandler.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesRequestHandler](./kibana-plugin-core-server.httpresourcesrequesthandler.md) - -## HttpResourcesRequestHandler type - -Extended version of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) having access to [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) to respond with HTML or JS resources. - -Signature: - -```typescript -export declare type HttpResourcesRequestHandler

= RequestHandler; -``` - -## Example - -\`\`\`typescript httpResources.register({ path: '/login', validate: { params: schema.object({ id: schema.string() }), }, }, async (context, request, response) => { //.. return response.renderCoreApp(); }); - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesresponseoptions.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesresponseoptions.md deleted file mode 100644 index 2ea3ea7e58c78..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesresponseoptions.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesResponseOptions](./kibana-plugin-core-server.httpresourcesresponseoptions.md) - -## HttpResourcesResponseOptions type - -HTTP Resources response parameters - -Signature: - -```typescript -export declare type HttpResourcesResponseOptions = HttpResponseOptions; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.md deleted file mode 100644 index 05e7af5dcbedf..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) - -## HttpResourcesServiceToolkit interface - -Extended set of [KibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) helpers used to respond with HTML or JS resource. - -Signature: - -```typescript -export interface HttpResourcesServiceToolkit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [renderAnonymousCoreApp](./kibana-plugin-core-server.httpresourcesservicetoolkit.renderanonymouscoreapp.md) | (options?: HttpResourcesRenderOptions) => Promise<IKibanaResponse> | To respond with HTML page bootstrapping Kibana application without retrieving user-specific information. | -| [renderCoreApp](./kibana-plugin-core-server.httpresourcesservicetoolkit.rendercoreapp.md) | (options?: HttpResourcesRenderOptions) => Promise<IKibanaResponse> | To respond with HTML page bootstrapping Kibana application. | -| [renderHtml](./kibana-plugin-core-server.httpresourcesservicetoolkit.renderhtml.md) | (options: HttpResourcesResponseOptions) => IKibanaResponse | To respond with a custom HTML page. | -| [renderJs](./kibana-plugin-core-server.httpresourcesservicetoolkit.renderjs.md) | (options: HttpResourcesResponseOptions) => IKibanaResponse | To respond with a custom JS script file. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderanonymouscoreapp.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderanonymouscoreapp.md deleted file mode 100644 index 3dce9d88c8036..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderanonymouscoreapp.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) > [renderAnonymousCoreApp](./kibana-plugin-core-server.httpresourcesservicetoolkit.renderanonymouscoreapp.md) - -## HttpResourcesServiceToolkit.renderAnonymousCoreApp property - -To respond with HTML page bootstrapping Kibana application without retrieving user-specific information. - -Signature: - -```typescript -renderAnonymousCoreApp: (options?: HttpResourcesRenderOptions) => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.rendercoreapp.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.rendercoreapp.md deleted file mode 100644 index eb4f095bc19be..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.rendercoreapp.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) > [renderCoreApp](./kibana-plugin-core-server.httpresourcesservicetoolkit.rendercoreapp.md) - -## HttpResourcesServiceToolkit.renderCoreApp property - -To respond with HTML page bootstrapping Kibana application. - -Signature: - -```typescript -renderCoreApp: (options?: HttpResourcesRenderOptions) => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderhtml.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderhtml.md deleted file mode 100644 index 325d19625df44..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderhtml.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) > [renderHtml](./kibana-plugin-core-server.httpresourcesservicetoolkit.renderhtml.md) - -## HttpResourcesServiceToolkit.renderHtml property - -To respond with a custom HTML page. - -Signature: - -```typescript -renderHtml: (options: HttpResourcesResponseOptions) => IKibanaResponse; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderjs.md b/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderjs.md deleted file mode 100644 index f8d4418fc6cba..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderjs.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) > [renderJs](./kibana-plugin-core-server.httpresourcesservicetoolkit.renderjs.md) - -## HttpResourcesServiceToolkit.renderJs property - -To respond with a custom JS script file. - -Signature: - -```typescript -renderJs: (options: HttpResourcesResponseOptions) => IKibanaResponse; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.body.md b/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.body.md deleted file mode 100644 index bf61be9d7e606..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResponseOptions](./kibana-plugin-core-server.httpresponseoptions.md) > [body](./kibana-plugin-core-server.httpresponseoptions.body.md) - -## HttpResponseOptions.body property - -HTTP message to send to the client - -Signature: - -```typescript -body?: HttpResponsePayload; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.bypasserrorformat.md b/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.bypasserrorformat.md deleted file mode 100644 index 98792c47d564f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.bypasserrorformat.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResponseOptions](./kibana-plugin-core-server.httpresponseoptions.md) > [bypassErrorFormat](./kibana-plugin-core-server.httpresponseoptions.bypasserrorformat.md) - -## HttpResponseOptions.bypassErrorFormat property - -Bypass the default error formatting - -Signature: - -```typescript -bypassErrorFormat?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.headers.md b/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.headers.md deleted file mode 100644 index 7702c49d07c8b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResponseOptions](./kibana-plugin-core-server.httpresponseoptions.md) > [headers](./kibana-plugin-core-server.httpresponseoptions.headers.md) - -## HttpResponseOptions.headers property - -HTTP Headers with additional information about response - -Signature: - -```typescript -headers?: ResponseHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.md b/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.md deleted file mode 100644 index 9d10d91244157..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresponseoptions.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResponseOptions](./kibana-plugin-core-server.httpresponseoptions.md) - -## HttpResponseOptions interface - -HTTP response parameters - -Signature: - -```typescript -export interface HttpResponseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-server.httpresponseoptions.body.md) | HttpResponsePayload | (Optional) HTTP message to send to the client | -| [bypassErrorFormat?](./kibana-plugin-core-server.httpresponseoptions.bypasserrorformat.md) | boolean | (Optional) Bypass the default error formatting | -| [headers?](./kibana-plugin-core-server.httpresponseoptions.headers.md) | ResponseHeaders | (Optional) HTTP Headers with additional information about response | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpresponsepayload.md b/docs/development/core/server/kibana-plugin-core-server.httpresponsepayload.md deleted file mode 100644 index 8f72dc4daa8a4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpresponsepayload.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpResponsePayload](./kibana-plugin-core-server.httpresponsepayload.md) - -## HttpResponsePayload type - -Data send to the client as a response payload. - -Signature: - -```typescript -export declare type HttpResponsePayload = undefined | string | Record | Buffer | Stream; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.hostname.md b/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.hostname.md deleted file mode 100644 index 194a8aea16269..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.hostname.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServerInfo](./kibana-plugin-core-server.httpserverinfo.md) > [hostname](./kibana-plugin-core-server.httpserverinfo.hostname.md) - -## HttpServerInfo.hostname property - -The hostname of the server - -Signature: - -```typescript -hostname: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.md b/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.md deleted file mode 100644 index 151cb5d272403..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServerInfo](./kibana-plugin-core-server.httpserverinfo.md) - -## HttpServerInfo interface - -Information about what hostname, port, and protocol the server process is running on. Note that this may not match the URL that end-users access Kibana at. For the public URL, see [BasePath.publicBaseUrl](./kibana-plugin-core-server.basepath.publicbaseurl.md). - -Signature: - -```typescript -export interface HttpServerInfo -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [hostname](./kibana-plugin-core-server.httpserverinfo.hostname.md) | string | The hostname of the server | -| [name](./kibana-plugin-core-server.httpserverinfo.name.md) | string | The name of the Kibana server | -| [port](./kibana-plugin-core-server.httpserverinfo.port.md) | number | The port the server is listening on | -| [protocol](./kibana-plugin-core-server.httpserverinfo.protocol.md) | 'http' \| 'https' \| 'socket' | The protocol used by the server | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.name.md b/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.name.md deleted file mode 100644 index c35ed626f12c9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServerInfo](./kibana-plugin-core-server.httpserverinfo.md) > [name](./kibana-plugin-core-server.httpserverinfo.name.md) - -## HttpServerInfo.name property - -The name of the Kibana server - -Signature: - -```typescript -name: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.port.md b/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.port.md deleted file mode 100644 index e8ad0e8186fea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.port.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServerInfo](./kibana-plugin-core-server.httpserverinfo.md) > [port](./kibana-plugin-core-server.httpserverinfo.port.md) - -## HttpServerInfo.port property - -The port the server is listening on - -Signature: - -```typescript -port: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.protocol.md b/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.protocol.md deleted file mode 100644 index 9e7c672c2361f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpserverinfo.protocol.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServerInfo](./kibana-plugin-core-server.httpserverinfo.md) > [protocol](./kibana-plugin-core-server.httpserverinfo.protocol.md) - -## HttpServerInfo.protocol property - -The protocol used by the server - -Signature: - -```typescript -protocol: 'http' | 'https' | 'socket'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.basepath.md b/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.basepath.md deleted file mode 100644 index 9864f67d70a43..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.basepath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServicePreboot](./kibana-plugin-core-server.httpservicepreboot.md) > [basePath](./kibana-plugin-core-server.httpservicepreboot.basepath.md) - -## HttpServicePreboot.basePath property - -Access or manipulate the Kibana base path See [IBasePath](./kibana-plugin-core-server.ibasepath.md). - -Signature: - -```typescript -basePath: IBasePath; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.getserverinfo.md b/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.getserverinfo.md deleted file mode 100644 index 0c9636b8eb634..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.getserverinfo.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServicePreboot](./kibana-plugin-core-server.httpservicepreboot.md) > [getServerInfo](./kibana-plugin-core-server.httpservicepreboot.getserverinfo.md) - -## HttpServicePreboot.getServerInfo property - -Provides common [information](./kibana-plugin-core-server.httpserverinfo.md) about the running preboot http server. - -Signature: - -```typescript -getServerInfo: () => HttpServerInfo; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.md b/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.md deleted file mode 100644 index 87c62b63014e1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.md +++ /dev/null @@ -1,80 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServicePreboot](./kibana-plugin-core-server.httpservicepreboot.md) - -## HttpServicePreboot interface - -Kibana HTTP Service provides an abstraction to work with the HTTP stack at the `preboot` stage. This functionality allows Kibana to serve user requests even before Kibana becomes fully operational. Only Core and `preboot` plugins can define HTTP routes at this stage. - -Signature: - -```typescript -export interface HttpServicePreboot -``` - -## Example - -To handle an incoming request in your preboot plugin you should: - Use `@kbn/config-schema` package to create a schema to validate the request `params`, `query`, and `body`. Every incoming request will be validated against the created schema. If validation failed, the request is rejected with `400` status and `Bad request` error without calling the route's handler. To opt out of validating the request, specify `false`. - -```ts -import { schema, TypeOf } from '@kbn/config-schema'; -const validate = { - params: schema.object({ - id: schema.string(), - }), -}; -``` -- Declare a function to respond to incoming request. The function will receive `request` object containing request details: url, headers, matched route, as well as validated `params`, `query`, `body`. And `response` object instructing HTTP server to create HTTP response with information sent back to the client as the response body, headers, and HTTP status. Any exception raised during the handler call will generate `500 Server error` response and log error details for further investigation. See below for returning custom error responses. - -```ts -const handler = async (context: RequestHandlerContext, request: KibanaRequest, response: ResponseFactory) => { - const data = await findObject(request.params.id); - // creates a command to respond with 'not found' error - if (!data) { - return response.notFound(); - } - // creates a command to send found data to the client and set response headers - return response.ok({ - body: data, - headers: { 'content-type': 'application/json' } - }); -} -``` -\* - Acquire `preboot` [IRouter](./kibana-plugin-core-server.irouter.md) instance and register route handler for GET request to 'path/{id}' path. - -```ts -import { schema, TypeOf } from '@kbn/config-schema'; - -const validate = { - params: schema.object({ - id: schema.string(), - }), -}; - -httpPreboot.registerRoutes('my-plugin', (router) => { - router.get({ path: 'path/{id}', validate }, async (context, request, response) => { - const data = await findObject(request.params.id); - if (!data) { - return response.notFound(); - } - return response.ok({ - body: data, - headers: { 'content-type': 'application/json' } - }); - }); -}); -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [basePath](./kibana-plugin-core-server.httpservicepreboot.basepath.md) | IBasePath | Access or manipulate the Kibana base path See [IBasePath](./kibana-plugin-core-server.ibasepath.md). | -| [getServerInfo](./kibana-plugin-core-server.httpservicepreboot.getserverinfo.md) | () => HttpServerInfo | Provides common [information](./kibana-plugin-core-server.httpserverinfo.md) about the running preboot http server. | - -## Methods - -| Method | Description | -| --- | --- | -| [registerRoutes(path, callback)](./kibana-plugin-core-server.httpservicepreboot.registerroutes.md) | Provides ability to acquire preboot [IRouter](./kibana-plugin-core-server.irouter.md) instance for a particular top-level path and register handler functions for any number of nested routes. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.registerroutes.md b/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.registerroutes.md deleted file mode 100644 index dd90074fad39a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicepreboot.registerroutes.md +++ /dev/null @@ -1,39 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServicePreboot](./kibana-plugin-core-server.httpservicepreboot.md) > [registerRoutes](./kibana-plugin-core-server.httpservicepreboot.registerroutes.md) - -## HttpServicePreboot.registerRoutes() method - -Provides ability to acquire `preboot` [IRouter](./kibana-plugin-core-server.irouter.md) instance for a particular top-level path and register handler functions for any number of nested routes. - -Signature: - -```typescript -registerRoutes(path: string, callback: (router: IRouter) => void): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| path | string | | -| callback | (router: IRouter) => void | | - -Returns: - -void - -## Remarks - -Each route can have only one handler function, which is executed when the route is matched. See the [IRouter](./kibana-plugin-core-server.irouter.md) documentation for more information. - -## Example - - -```ts -registerRoutes('my-plugin', (router) => { - // handler is called when '/my-plugin/path' resource is requested with `GET` method - router.get({ path: '/path', validate: false }, (context, req, res) => res.ok({ content: 'ok' })); -}); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.basepath.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.basepath.md deleted file mode 100644 index ba10af1b8555a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.basepath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [basePath](./kibana-plugin-core-server.httpservicesetup.basepath.md) - -## HttpServiceSetup.basePath property - -Access or manipulate the Kibana base path See [IBasePath](./kibana-plugin-core-server.ibasepath.md). - -Signature: - -```typescript -basePath: IBasePath; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createcookiesessionstoragefactory.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createcookiesessionstoragefactory.md deleted file mode 100644 index bdc0acf1c4864..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createcookiesessionstoragefactory.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [createCookieSessionStorageFactory](./kibana-plugin-core-server.httpservicesetup.createcookiesessionstoragefactory.md) - -## HttpServiceSetup.createCookieSessionStorageFactory property - -Creates cookie based session storage factory [SessionStorageFactory](./kibana-plugin-core-server.sessionstoragefactory.md) - -Signature: - -```typescript -createCookieSessionStorageFactory: (cookieOptions: SessionStorageCookieOptions) => Promise>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createrouter.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createrouter.md deleted file mode 100644 index 7bdc7cd2e4e33..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createrouter.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [createRouter](./kibana-plugin-core-server.httpservicesetup.createrouter.md) - -## HttpServiceSetup.createRouter property - -Provides ability to declare a handler function for a particular path and HTTP request method. - -Signature: - -```typescript -createRouter: () => IRouter; -``` - -## Remarks - -Each route can have only one handler function, which is executed when the route is matched. See the [IRouter](./kibana-plugin-core-server.irouter.md) documentation for more information. - -## Example - - -```ts -const router = createRouter(); -// handler is called when '/path' resource is requested with `GET` method -router.get({ path: '/path', validate: false }, (context, req, res) => res.ok({ content: 'ok' })); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.csp.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.csp.md deleted file mode 100644 index 1e2b987e667c9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.csp.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [csp](./kibana-plugin-core-server.httpservicesetup.csp.md) - -## HttpServiceSetup.csp property - -The CSP config used for Kibana. - -Signature: - -```typescript -csp: ICspConfig; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.getserverinfo.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.getserverinfo.md deleted file mode 100644 index 9e257062722a2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.getserverinfo.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [getServerInfo](./kibana-plugin-core-server.httpservicesetup.getserverinfo.md) - -## HttpServiceSetup.getServerInfo property - -Provides common [information](./kibana-plugin-core-server.httpserverinfo.md) about the running http server. - -Signature: - -```typescript -getServerInfo: () => HttpServerInfo; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.md deleted file mode 100644 index bb03887e547e2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.md +++ /dev/null @@ -1,91 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) - -## HttpServiceSetup interface - -Kibana HTTP Service provides own abstraction for work with HTTP stack. Plugins don't have direct access to `hapi` server and its primitives anymore. Moreover, plugins shouldn't rely on the fact that HTTP Service uses one or another library under the hood. This gives the platform flexibility to upgrade or changing our internal HTTP stack without breaking plugins. If the HTTP Service lacks functionality you need, we are happy to discuss and support your needs. - -Signature: - -```typescript -export interface HttpServiceSetup -``` - -## Example - -To handle an incoming request in your plugin you should: - Create a `Router` instance. - -```ts -const router = httpSetup.createRouter(); -``` -- Use `@kbn/config-schema` package to create a schema to validate the request `params`, `query`, and `body`. Every incoming request will be validated against the created schema. If validation failed, the request is rejected with `400` status and `Bad request` error without calling the route's handler. To opt out of validating the request, specify `false`. - -```ts -import { schema, TypeOf } from '@kbn/config-schema'; -const validate = { - params: schema.object({ - id: schema.string(), - }), -}; -``` -- Declare a function to respond to incoming request. The function will receive `request` object containing request details: url, headers, matched route, as well as validated `params`, `query`, `body`. And `response` object instructing HTTP server to create HTTP response with information sent back to the client as the response body, headers, and HTTP status. Unlike, `hapi` route handler in the Legacy platform, any exception raised during the handler call will generate `500 Server error` response and log error details for further investigation. See below for returning custom error responses. - -```ts -const handler = async (context: RequestHandlerContext, request: KibanaRequest, response: ResponseFactory) => { - const data = await findObject(request.params.id); - // creates a command to respond with 'not found' error - if (!data) return response.notFound(); - // creates a command to send found data to the client and set response headers - return response.ok({ - body: data, - headers: { - 'content-type': 'application/json' - } - }); -} -``` -- Register route handler for GET request to 'path/{id}' path - -```ts -import { schema, TypeOf } from '@kbn/config-schema'; -const router = httpSetup.createRouter(); - -const validate = { - params: schema.object({ - id: schema.string(), - }), -}; - -router.get({ - path: 'path/{id}', - validate -}, -async (context, request, response) => { - const data = await findObject(request.params.id); - if (!data) return response.notFound(); - return response.ok({ - body: data, - headers: { - 'content-type': 'application/json' - } - }); -}); -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [basePath](./kibana-plugin-core-server.httpservicesetup.basepath.md) | IBasePath | Access or manipulate the Kibana base path See [IBasePath](./kibana-plugin-core-server.ibasepath.md). | -| [createCookieSessionStorageFactory](./kibana-plugin-core-server.httpservicesetup.createcookiesessionstoragefactory.md) | <T>(cookieOptions: SessionStorageCookieOptions<T>) => Promise<SessionStorageFactory<T>> | Creates cookie based session storage factory [SessionStorageFactory](./kibana-plugin-core-server.sessionstoragefactory.md) | -| [createRouter](./kibana-plugin-core-server.httpservicesetup.createrouter.md) | <Context extends RequestHandlerContext = RequestHandlerContext>() => IRouter<Context> | Provides ability to declare a handler function for a particular path and HTTP request method. | -| [csp](./kibana-plugin-core-server.httpservicesetup.csp.md) | ICspConfig | The CSP config used for Kibana. | -| [getServerInfo](./kibana-plugin-core-server.httpservicesetup.getserverinfo.md) | () => HttpServerInfo | Provides common [information](./kibana-plugin-core-server.httpserverinfo.md) about the running http server. | -| [registerAuth](./kibana-plugin-core-server.httpservicesetup.registerauth.md) | (handler: AuthenticationHandler) => void | To define custom authentication and/or authorization mechanism for incoming requests. | -| [registerOnPostAuth](./kibana-plugin-core-server.httpservicesetup.registeronpostauth.md) | (handler: OnPostAuthHandler) => void | To define custom logic after Auth interceptor did make sure a user has access to the requested resource. | -| [registerOnPreAuth](./kibana-plugin-core-server.httpservicesetup.registeronpreauth.md) | (handler: OnPreAuthHandler) => void | To define custom logic to perform for incoming requests before the Auth interceptor performs a check that user has access to requested resources. | -| [registerOnPreResponse](./kibana-plugin-core-server.httpservicesetup.registeronpreresponse.md) | (handler: OnPreResponseHandler) => void | To define custom logic to perform for the server response. | -| [registerOnPreRouting](./kibana-plugin-core-server.httpservicesetup.registeronprerouting.md) | (handler: OnPreRoutingHandler) => void | To define custom logic to perform for incoming requests before server performs a route lookup. | -| [registerRouteHandlerContext](./kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md) | <Context extends RequestHandlerContext, ContextName extends keyof Omit<Context, 'resolve'>>(contextName: ContextName, provider: RequestHandlerContextProvider<Context, ContextName>) => RequestHandlerContextContainer | Register a context provider for a route handler. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerauth.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerauth.md deleted file mode 100644 index d209b526afd76..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerauth.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [registerAuth](./kibana-plugin-core-server.httpservicesetup.registerauth.md) - -## HttpServiceSetup.registerAuth property - -To define custom authentication and/or authorization mechanism for incoming requests. - -Signature: - -```typescript -registerAuth: (handler: AuthenticationHandler) => void; -``` - -## Remarks - -A handler should return a state to associate with the incoming request. The state can be retrieved later via http.auth.get(..) Only one AuthenticationHandler can be registered. See [AuthenticationHandler](./kibana-plugin-core-server.authenticationhandler.md). - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpostauth.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpostauth.md deleted file mode 100644 index 41b82f428948a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpostauth.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [registerOnPostAuth](./kibana-plugin-core-server.httpservicesetup.registeronpostauth.md) - -## HttpServiceSetup.registerOnPostAuth property - -To define custom logic after Auth interceptor did make sure a user has access to the requested resource. - -Signature: - -```typescript -registerOnPostAuth: (handler: OnPostAuthHandler) => void; -``` - -## Remarks - -The auth state is available at stage via http.auth.get(..) Can register any number of registerOnPostAuth, which are called in sequence (from the first registered to the last). See [OnPostAuthHandler](./kibana-plugin-core-server.onpostauthhandler.md). - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreauth.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreauth.md deleted file mode 100644 index 57b1833df5e03..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreauth.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [registerOnPreAuth](./kibana-plugin-core-server.httpservicesetup.registeronpreauth.md) - -## HttpServiceSetup.registerOnPreAuth property - -To define custom logic to perform for incoming requests before the Auth interceptor performs a check that user has access to requested resources. - -Signature: - -```typescript -registerOnPreAuth: (handler: OnPreAuthHandler) => void; -``` - -## Remarks - -Can register any number of registerOnPreAuth, which are called in sequence (from the first registered to the last). See [OnPreAuthHandler](./kibana-plugin-core-server.onpreauthhandler.md). - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreresponse.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreresponse.md deleted file mode 100644 index 118bc06cc726c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronpreresponse.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [registerOnPreResponse](./kibana-plugin-core-server.httpservicesetup.registeronpreresponse.md) - -## HttpServiceSetup.registerOnPreResponse property - -To define custom logic to perform for the server response. - -Signature: - -```typescript -registerOnPreResponse: (handler: OnPreResponseHandler) => void; -``` - -## Remarks - -Doesn't provide the whole response object. Supports extending response with custom headers. See [OnPreResponseHandler](./kibana-plugin-core-server.onpreresponsehandler.md). - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronprerouting.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronprerouting.md deleted file mode 100644 index bdf5f15828669..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registeronprerouting.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [registerOnPreRouting](./kibana-plugin-core-server.httpservicesetup.registeronprerouting.md) - -## HttpServiceSetup.registerOnPreRouting property - -To define custom logic to perform for incoming requests before server performs a route lookup. - -Signature: - -```typescript -registerOnPreRouting: (handler: OnPreRoutingHandler) => void; -``` - -## Remarks - -It's the only place when you can forward a request to another URL right on the server. Can register any number of registerOnPreRouting, which are called in sequence (from the first registered to the last). See [OnPreRoutingHandler](./kibana-plugin-core-server.onpreroutinghandler.md). - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md deleted file mode 100644 index 23e009864dcd6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md +++ /dev/null @@ -1,41 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) > [registerRouteHandlerContext](./kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md) - -## HttpServiceSetup.registerRouteHandlerContext property - -Register a context provider for a route handler. - -Signature: - -```typescript -registerRouteHandlerContext: >(contextName: ContextName, provider: RequestHandlerContextProvider) => RequestHandlerContextContainer; -``` - -## Example - - -```ts - // my-plugin.ts - interface MyRequestHandlerContext extends RequestHandlerContext { - myApp: { search(id: string): Promise }; - } - deps.http.registerRouteHandlerContext( - 'myApp', - (context, req) => { - async function search (id: string) { - return await context.elasticsearch.client.asCurrentUser.find(id); - } - return { search }; - } - ); - -// my-route-handler.ts - import type { MyRequestHandlerContext } from './my-plugin.ts'; - const router = createRouter(); - router.get({ path: '/', validate: false }, async (context, req, res) => { - const response = await context.myApp.search(...); - return res.ok(response); - }); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.auth.md b/docs/development/core/server/kibana-plugin-core-server.httpservicestart.auth.md deleted file mode 100644 index f7dffee2e125c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.auth.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) > [auth](./kibana-plugin-core-server.httpservicestart.auth.md) - -## HttpServiceStart.auth property - -Auth status. See [HttpAuth](./kibana-plugin-core-server.httpauth.md) - -Signature: - -```typescript -auth: HttpAuth; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.basepath.md b/docs/development/core/server/kibana-plugin-core-server.httpservicestart.basepath.md deleted file mode 100644 index e8b2a0fc2cbaa..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.basepath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) > [basePath](./kibana-plugin-core-server.httpservicestart.basepath.md) - -## HttpServiceStart.basePath property - -Access or manipulate the Kibana base path See [IBasePath](./kibana-plugin-core-server.ibasepath.md). - -Signature: - -```typescript -basePath: IBasePath; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.getserverinfo.md b/docs/development/core/server/kibana-plugin-core-server.httpservicestart.getserverinfo.md deleted file mode 100644 index a95c8da64fdb0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.getserverinfo.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) > [getServerInfo](./kibana-plugin-core-server.httpservicestart.getserverinfo.md) - -## HttpServiceStart.getServerInfo property - -Provides common [information](./kibana-plugin-core-server.httpserverinfo.md) about the running http server. - -Signature: - -```typescript -getServerInfo: () => HttpServerInfo; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.md b/docs/development/core/server/kibana-plugin-core-server.httpservicestart.md deleted file mode 100644 index de6c259c7f7a5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.httpservicestart.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) - -## HttpServiceStart interface - - -Signature: - -```typescript -export interface HttpServiceStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [auth](./kibana-plugin-core-server.httpservicestart.auth.md) | HttpAuth | Auth status. See [HttpAuth](./kibana-plugin-core-server.httpauth.md) | -| [basePath](./kibana-plugin-core-server.httpservicestart.basepath.md) | IBasePath | Access or manipulate the Kibana base path See [IBasePath](./kibana-plugin-core-server.ibasepath.md). | -| [getServerInfo](./kibana-plugin-core-server.httpservicestart.getserverinfo.md) | () => HttpServerInfo | Provides common [information](./kibana-plugin-core-server.httpserverinfo.md) about the running http server. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.getlocale.md b/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.getlocale.md deleted file mode 100644 index fa98f34c6ac5e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.getlocale.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [I18nServiceSetup](./kibana-plugin-core-server.i18nservicesetup.md) > [getLocale](./kibana-plugin-core-server.i18nservicesetup.getlocale.md) - -## I18nServiceSetup.getLocale() method - -Return the locale currently in use. - -Signature: - -```typescript -getLocale(): string; -``` -Returns: - -string - diff --git a/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.gettranslationfiles.md b/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.gettranslationfiles.md deleted file mode 100644 index ebdb0babc3af7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.gettranslationfiles.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [I18nServiceSetup](./kibana-plugin-core-server.i18nservicesetup.md) > [getTranslationFiles](./kibana-plugin-core-server.i18nservicesetup.gettranslationfiles.md) - -## I18nServiceSetup.getTranslationFiles() method - -Return the absolute paths to translation files currently in use. - -Signature: - -```typescript -getTranslationFiles(): string[]; -``` -Returns: - -string\[\] - diff --git a/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.md deleted file mode 100644 index f68b7877953e7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.i18nservicesetup.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [I18nServiceSetup](./kibana-plugin-core-server.i18nservicesetup.md) - -## I18nServiceSetup interface - - -Signature: - -```typescript -export interface I18nServiceSetup -``` - -## Methods - -| Method | Description | -| --- | --- | -| [getLocale()](./kibana-plugin-core-server.i18nservicesetup.getlocale.md) | Return the locale currently in use. | -| [getTranslationFiles()](./kibana-plugin-core-server.i18nservicesetup.gettranslationfiles.md) | Return the absolute paths to translation files currently in use. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.ibasepath.md b/docs/development/core/server/kibana-plugin-core-server.ibasepath.md deleted file mode 100644 index 7f0c551d1da28..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ibasepath.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IBasePath](./kibana-plugin-core-server.ibasepath.md) - -## IBasePath type - -Access or manipulate the Kibana base path - -[BasePath](./kibana-plugin-core-server.basepath.md) - -Signature: - -```typescript -export declare type IBasePath = Pick; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iclusterclient.asinternaluser.md b/docs/development/core/server/kibana-plugin-core-server.iclusterclient.asinternaluser.md deleted file mode 100644 index c7adc345af5a3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iclusterclient.asinternaluser.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IClusterClient](./kibana-plugin-core-server.iclusterclient.md) > [asInternalUser](./kibana-plugin-core-server.iclusterclient.asinternaluser.md) - -## IClusterClient.asInternalUser property - -A [client](./kibana-plugin-core-server.elasticsearchclient.md) to be used to query the ES cluster on behalf of the Kibana internal user - -Signature: - -```typescript -readonly asInternalUser: ElasticsearchClient; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iclusterclient.asscoped.md b/docs/development/core/server/kibana-plugin-core-server.iclusterclient.asscoped.md deleted file mode 100644 index 301fcbfee5858..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iclusterclient.asscoped.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IClusterClient](./kibana-plugin-core-server.iclusterclient.md) > [asScoped](./kibana-plugin-core-server.iclusterclient.asscoped.md) - -## IClusterClient.asScoped property - -Creates a [scoped cluster client](./kibana-plugin-core-server.iscopedclusterclient.md) bound to given [request](./kibana-plugin-core-server.scopeablerequest.md) - -Signature: - -```typescript -asScoped: (request: ScopeableRequest) => IScopedClusterClient; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iclusterclient.md b/docs/development/core/server/kibana-plugin-core-server.iclusterclient.md deleted file mode 100644 index 969a32d96a3a0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iclusterclient.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IClusterClient](./kibana-plugin-core-server.iclusterclient.md) - -## IClusterClient interface - -Represents an Elasticsearch cluster API client created by the platform. It allows to call API on behalf of the internal Kibana user and the actual user that is derived from the request headers (via `asScoped(...)`). - -Signature: - -```typescript -export interface IClusterClient -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [asInternalUser](./kibana-plugin-core-server.iclusterclient.asinternaluser.md) | ElasticsearchClient | A [client](./kibana-plugin-core-server.elasticsearchclient.md) to be used to query the ES cluster on behalf of the Kibana internal user | -| [asScoped](./kibana-plugin-core-server.iclusterclient.asscoped.md) | (request: ScopeableRequest) => IScopedClusterClient | Creates a [scoped cluster client](./kibana-plugin-core-server.iscopedclusterclient.md) bound to given [request](./kibana-plugin-core-server.scopeablerequest.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.createhandler.md b/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.createhandler.md deleted file mode 100644 index ac13b86295f6d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.createhandler.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) > [createHandler](./kibana-plugin-core-server.icontextcontainer.createhandler.md) - -## IContextContainer.createHandler() method - -Create a new handler function pre-wired to context for the plugin. - -Signature: - -```typescript -createHandler(pluginOpaqueId: PluginOpaqueId, handler: RequestHandler): (...rest: HandlerParameters) => ShallowPromise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| pluginOpaqueId | PluginOpaqueId | The plugin opaque ID for the plugin that registers this handler. | -| handler | RequestHandler | Handler function to pass context object to. | - -Returns: - -(...rest: HandlerParameters<RequestHandler>) => ShallowPromise<ReturnType<RequestHandler>> - -A function that takes `RequestHandler` parameters, calls `handler` with a new context, and returns a Promise of the `handler` return value. - diff --git a/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.md b/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.md deleted file mode 100644 index 99cddecb38d43..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.md +++ /dev/null @@ -1,79 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) - -## IContextContainer interface - -An object that handles registration of context providers and configuring handlers with context. - -Signature: - -```typescript -export interface IContextContainer -``` - -## Remarks - -A [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) can be used by any Core service or plugin (known as the "service owner") which wishes to expose APIs in a handler function. The container object will manage registering context providers and configuring a handler with all of the contexts that should be exposed to the handler's plugin. This is dependent on the dependencies that the handler's plugin declares. - -Contexts providers are executed in the order they were registered. Each provider gets access to context values provided by any plugins that it depends on. - -In order to configure a handler with context, you must call the [IContextContainer.createHandler()](./kibana-plugin-core-server.icontextcontainer.createhandler.md) function and use the returned handler which will automatically build a context object when called. - -When registering context or creating handlers, the \_calling plugin's opaque id\_ must be provided. This id is passed in via the plugin's initializer and can be accessed from the [PluginInitializerContext.opaqueId](./kibana-plugin-core-server.plugininitializercontext.opaqueid.md) Note this should NOT be the context service owner's id, but the plugin that is actually registering the context or handler. - -```ts -// Correct -class MyPlugin { - private readonly handlers = new Map(); - - setup(core) { - this.contextContainer = core.context.createContextContainer(); - return { - registerContext(pluginOpaqueId, contextName, provider) { - this.contextContainer.registerContext(pluginOpaqueId, contextName, provider); - }, - registerRoute(pluginOpaqueId, path, handler) { - this.handlers.set( - path, - this.contextContainer.createHandler(pluginOpaqueId, handler) - ); - } - } - } -} - -// Incorrect -class MyPlugin { - private readonly handlers = new Map(); - - constructor(private readonly initContext: PluginInitializerContext) {} - - setup(core) { - this.contextContainer = core.context.createContextContainer(); - return { - registerContext(contextName, provider) { - // BUG! - // This would leak this context to all handlers rather that only plugins that depend on the calling plugin. - this.contextContainer.registerContext(this.initContext.opaqueId, contextName, provider); - }, - registerRoute(path, handler) { - this.handlers.set( - path, - // BUG! - // This handler will not receive any contexts provided by other dependencies of the calling plugin. - this.contextContainer.createHandler(this.initContext.opaqueId, handler) - ); - } - } - } -} -``` - -## Methods - -| Method | Description | -| --- | --- | -| [createHandler(pluginOpaqueId, handler)](./kibana-plugin-core-server.icontextcontainer.createhandler.md) | Create a new handler function pre-wired to context for the plugin. | -| [registerContext(pluginOpaqueId, contextName, provider)](./kibana-plugin-core-server.icontextcontainer.registercontext.md) | Register a new context provider. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.registercontext.md b/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.registercontext.md deleted file mode 100644 index 32b177df2b2ed..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icontextcontainer.registercontext.md +++ /dev/null @@ -1,34 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) > [registerContext](./kibana-plugin-core-server.icontextcontainer.registercontext.md) - -## IContextContainer.registerContext() method - -Register a new context provider. - -Signature: - -```typescript -registerContext(pluginOpaqueId: PluginOpaqueId, contextName: ContextName, provider: IContextProvider): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| pluginOpaqueId | PluginOpaqueId | The plugin opaque ID for the plugin that registers this context. | -| contextName | ContextName | The key of the TContext object this provider supplies the value for. | -| provider | IContextProvider<Context, ContextName> | A [IContextProvider](./kibana-plugin-core-server.icontextprovider.md) to be called each time a new context is created. | - -Returns: - -this - -The [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) for method chaining. - -## Remarks - -The value (or resolved Promise value) returned by the `provider` function will be attached to the context object on the key specified by `contextName`. - -Throws an exception if more than one provider is registered for the same `contextName`. - diff --git a/docs/development/core/server/kibana-plugin-core-server.icontextprovider.md b/docs/development/core/server/kibana-plugin-core-server.icontextprovider.md deleted file mode 100644 index eb2ec3cbf90b8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icontextprovider.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IContextProvider](./kibana-plugin-core-server.icontextprovider.md) - -## IContextProvider type - -A function that returns a context value for a specific key of given context type. - -Signature: - -```typescript -export declare type IContextProvider = (context: Omit, ...rest: HandlerParameters) => MaybePromise>; -``` - -## Remarks - -This function will be called each time a new context is built for a handler invocation. - diff --git a/docs/development/core/server/kibana-plugin-core-server.icspconfig.disableembedding.md b/docs/development/core/server/kibana-plugin-core-server.icspconfig.disableembedding.md deleted file mode 100644 index 42b177c348afe..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icspconfig.disableembedding.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ICspConfig](./kibana-plugin-core-server.icspconfig.md) > [disableEmbedding](./kibana-plugin-core-server.icspconfig.disableembedding.md) - -## ICspConfig.disableEmbedding property - -Whether or not embedding (using iframes) should be allowed by the CSP. If embedding is disabled, a restrictive 'frame-ancestors' rule will be added to the default CSP rules. - -Signature: - -```typescript -readonly disableEmbedding: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.icspconfig.header.md b/docs/development/core/server/kibana-plugin-core-server.icspconfig.header.md deleted file mode 100644 index 779a0184e9fb3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icspconfig.header.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ICspConfig](./kibana-plugin-core-server.icspconfig.md) > [header](./kibana-plugin-core-server.icspconfig.header.md) - -## ICspConfig.header property - -The CSP rules in a formatted directives string for use in a `Content-Security-Policy` header. - -Signature: - -```typescript -readonly header: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.icspconfig.md b/docs/development/core/server/kibana-plugin-core-server.icspconfig.md deleted file mode 100644 index d5667900a41e2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icspconfig.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ICspConfig](./kibana-plugin-core-server.icspconfig.md) - -## ICspConfig interface - -CSP configuration for use in Kibana. - -Signature: - -```typescript -export interface ICspConfig -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [disableEmbedding](./kibana-plugin-core-server.icspconfig.disableembedding.md) | boolean | Whether or not embedding (using iframes) should be allowed by the CSP. If embedding is disabled, a restrictive 'frame-ancestors' rule will be added to the default CSP rules. | -| [header](./kibana-plugin-core-server.icspconfig.header.md) | string | The CSP rules in a formatted directives string for use in a Content-Security-Policy header. | -| [strict](./kibana-plugin-core-server.icspconfig.strict.md) | boolean | Specify whether browsers that do not support CSP should be able to use Kibana. Use true to block and false to allow. | -| [warnLegacyBrowsers](./kibana-plugin-core-server.icspconfig.warnlegacybrowsers.md) | boolean | Specify whether users with legacy browsers should be warned about their lack of Kibana security compliance. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.icspconfig.strict.md b/docs/development/core/server/kibana-plugin-core-server.icspconfig.strict.md deleted file mode 100644 index d8ea8ec377831..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icspconfig.strict.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ICspConfig](./kibana-plugin-core-server.icspconfig.md) > [strict](./kibana-plugin-core-server.icspconfig.strict.md) - -## ICspConfig.strict property - -Specify whether browsers that do not support CSP should be able to use Kibana. Use `true` to block and `false` to allow. - -Signature: - -```typescript -readonly strict: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.icspconfig.warnlegacybrowsers.md b/docs/development/core/server/kibana-plugin-core-server.icspconfig.warnlegacybrowsers.md deleted file mode 100644 index 84286262bcbf2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icspconfig.warnlegacybrowsers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ICspConfig](./kibana-plugin-core-server.icspconfig.md) > [warnLegacyBrowsers](./kibana-plugin-core-server.icspconfig.warnlegacybrowsers.md) - -## ICspConfig.warnLegacyBrowsers property - -Specify whether users with legacy browsers should be warned about their lack of Kibana security compliance. - -Signature: - -```typescript -readonly warnLegacyBrowsers: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.close.md b/docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.close.md deleted file mode 100644 index 5fa2e93cca75b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.close.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ICustomClusterClient](./kibana-plugin-core-server.icustomclusterclient.md) > [close](./kibana-plugin-core-server.icustomclusterclient.close.md) - -## ICustomClusterClient.close property - -Closes the cluster client. After that client cannot be used and one should create a new client instance to be able to interact with Elasticsearch API. - -Signature: - -```typescript -close: () => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.md b/docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.md deleted file mode 100644 index 1c65137d1ddc1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.icustomclusterclient.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ICustomClusterClient](./kibana-plugin-core-server.icustomclusterclient.md) - -## ICustomClusterClient interface - -See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md) - -Signature: - -```typescript -export interface ICustomClusterClient extends IClusterClient -``` -Extends: IClusterClient - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [close](./kibana-plugin-core-server.icustomclusterclient.close.md) | () => Promise<void> | Closes the cluster client. After that client cannot be used and one should create a new client instance to be able to interact with Elasticsearch API. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.md b/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.md deleted file mode 100644 index 2ab3f52b9b553..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExecutionContextContainer](./kibana-plugin-core-server.iexecutioncontextcontainer.md) - -## IExecutionContextContainer interface - - -Signature: - -```typescript -export interface IExecutionContextContainer -``` - -## Methods - -| Method | Description | -| --- | --- | -| [toJSON()](./kibana-plugin-core-server.iexecutioncontextcontainer.tojson.md) | | -| [toString()](./kibana-plugin-core-server.iexecutioncontextcontainer.tostring.md) | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tojson.md b/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tojson.md deleted file mode 100644 index a561e6c319408..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tojson.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExecutionContextContainer](./kibana-plugin-core-server.iexecutioncontextcontainer.md) > [toJSON](./kibana-plugin-core-server.iexecutioncontextcontainer.tojson.md) - -## IExecutionContextContainer.toJSON() method - -Signature: - -```typescript -toJSON(): Readonly; -``` -Returns: - -Readonly<KibanaExecutionContext> - diff --git a/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tostring.md b/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tostring.md deleted file mode 100644 index 666da5bef3969..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexecutioncontextcontainer.tostring.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExecutionContextContainer](./kibana-plugin-core-server.iexecutioncontextcontainer.md) > [toString](./kibana-plugin-core-server.iexecutioncontextcontainer.tostring.md) - -## IExecutionContextContainer.toString() method - -Signature: - -```typescript -toString(): string; -``` -Returns: - -string - diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.md deleted file mode 100644 index b5490a9548dc1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlConfig](./kibana-plugin-core-server.iexternalurlconfig.md) - -## IExternalUrlConfig interface - -External Url configuration for use in Kibana. - -Signature: - -```typescript -export interface IExternalUrlConfig -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [policy](./kibana-plugin-core-server.iexternalurlconfig.policy.md) | IExternalUrlPolicy\[\] | A set of policies describing which external urls are allowed. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.policy.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.policy.md deleted file mode 100644 index b5b6f07038076..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.policy.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlConfig](./kibana-plugin-core-server.iexternalurlconfig.md) > [policy](./kibana-plugin-core-server.iexternalurlconfig.policy.md) - -## IExternalUrlConfig.policy property - -A set of policies describing which external urls are allowed. - -Signature: - -```typescript -readonly policy: IExternalUrlPolicy[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.allow.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.allow.md deleted file mode 100644 index 47d3dbf83f2b3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.allow.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) > [allow](./kibana-plugin-core-server.iexternalurlpolicy.allow.md) - -## IExternalUrlPolicy.allow property - -Indicates if this policy allows or denies access to the described destination. - -Signature: - -```typescript -allow: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.host.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.host.md deleted file mode 100644 index a549f80509474..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.host.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) > [host](./kibana-plugin-core-server.iexternalurlpolicy.host.md) - -## IExternalUrlPolicy.host property - -Optional host describing the external destination. May be combined with `protocol`. - -Signature: - -```typescript -host?: string; -``` - -## Example - - -```ts -// allows access to all of google.com, using any protocol. -allow: true, -host: 'google.com' -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.md deleted file mode 100644 index 45f7798eaf336..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) - -## IExternalUrlPolicy interface - -A policy describing whether access to an external destination is allowed. - -Signature: - -```typescript -export interface IExternalUrlPolicy -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [allow](./kibana-plugin-core-server.iexternalurlpolicy.allow.md) | boolean | Indicates if this policy allows or denies access to the described destination. | -| [host?](./kibana-plugin-core-server.iexternalurlpolicy.host.md) | string | (Optional) Optional host describing the external destination. May be combined with protocol. | -| [protocol?](./kibana-plugin-core-server.iexternalurlpolicy.protocol.md) | string | (Optional) Optional protocol describing the external destination. May be combined with host. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.protocol.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.protocol.md deleted file mode 100644 index 86f6e6164de4e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.protocol.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) > [protocol](./kibana-plugin-core-server.iexternalurlpolicy.protocol.md) - -## IExternalUrlPolicy.protocol property - -Optional protocol describing the external destination. May be combined with `host`. - -Signature: - -```typescript -protocol?: string; -``` - -## Example - - -```ts -// allows access to all destinations over the `https` protocol. -allow: true, -protocol: 'https' -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.md b/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.md deleted file mode 100644 index c71f5360834e8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaResponse](./kibana-plugin-core-server.ikibanaresponse.md) - -## IKibanaResponse interface - -A response data object, expected to returned as a result of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) execution - -Signature: - -```typescript -export interface IKibanaResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [options](./kibana-plugin-core-server.ikibanaresponse.options.md) | HttpResponseOptions | | -| [payload?](./kibana-plugin-core-server.ikibanaresponse.payload.md) | T | (Optional) | -| [status](./kibana-plugin-core-server.ikibanaresponse.status.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.options.md b/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.options.md deleted file mode 100644 index a91224a11282d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.options.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaResponse](./kibana-plugin-core-server.ikibanaresponse.md) > [options](./kibana-plugin-core-server.ikibanaresponse.options.md) - -## IKibanaResponse.options property - -Signature: - -```typescript -readonly options: HttpResponseOptions; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.payload.md b/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.payload.md deleted file mode 100644 index 2475402bfb9fc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.payload.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaResponse](./kibana-plugin-core-server.ikibanaresponse.md) > [payload](./kibana-plugin-core-server.ikibanaresponse.payload.md) - -## IKibanaResponse.payload property - -Signature: - -```typescript -readonly payload?: T; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.status.md b/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.status.md deleted file mode 100644 index 2d7494d0e22b5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanaresponse.status.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaResponse](./kibana-plugin-core-server.ikibanaresponse.md) > [status](./kibana-plugin-core-server.ikibanaresponse.status.md) - -## IKibanaResponse.status property - -Signature: - -```typescript -readonly status: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorizationerror.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorizationerror.md deleted file mode 100644 index 930179acf399a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorizationerror.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) > [authorizationError](./kibana-plugin-core-server.ikibanasocket.authorizationerror.md) - -## IKibanaSocket.authorizationError property - -The reason why the peer's certificate has not been verified. This property becomes available only when `authorized` is `false`. - -Signature: - -```typescript -readonly authorizationError?: Error; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorized.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorized.md deleted file mode 100644 index 5ead5a8556c92..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.authorized.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) > [authorized](./kibana-plugin-core-server.ikibanasocket.authorized.md) - -## IKibanaSocket.authorized property - -Indicates whether or not the peer certificate was signed by one of the specified CAs. When TLS isn't used the value is `undefined`. - -Signature: - -```typescript -readonly authorized?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate.md deleted file mode 100644 index 9f0dce061bcfc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) > [getPeerCertificate](./kibana-plugin-core-server.ikibanasocket.getpeercertificate.md) - -## IKibanaSocket.getPeerCertificate() method - -Signature: - -```typescript -getPeerCertificate(detailed: true): DetailedPeerCertificate | null; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| detailed | true | | - -Returns: - -DetailedPeerCertificate \| null - diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_1.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_1.md deleted file mode 100644 index 363fce50251d8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_1.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) > [getPeerCertificate](./kibana-plugin-core-server.ikibanasocket.getpeercertificate_1.md) - -## IKibanaSocket.getPeerCertificate() method - -Signature: - -```typescript -getPeerCertificate(detailed: false): PeerCertificate | null; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| detailed | false | | - -Returns: - -PeerCertificate \| null - diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_2.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_2.md deleted file mode 100644 index 24b11b6966000..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getpeercertificate_2.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) > [getPeerCertificate](./kibana-plugin-core-server.ikibanasocket.getpeercertificate_2.md) - -## IKibanaSocket.getPeerCertificate() method - -Returns an object representing the peer's certificate. The returned object has some properties corresponding to the field of the certificate. If detailed argument is true the full chain with issuer property will be returned, if false only the top certificate without issuer property. If the peer does not provide a certificate, it returns null. - -Signature: - -```typescript -getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate | null; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| detailed | boolean | If true; the full chain with issuer property will be returned. | - -Returns: - -PeerCertificate \| DetailedPeerCertificate \| null - -An object representing the peer's certificate. - diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getprotocol.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getprotocol.md deleted file mode 100644 index d605f2fd21bef..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.getprotocol.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) > [getProtocol](./kibana-plugin-core-server.ikibanasocket.getprotocol.md) - -## IKibanaSocket.getProtocol() method - -Returns a string containing the negotiated SSL/TLS protocol version of the current connection. The value 'unknown' will be returned for connected sockets that have not completed the handshaking process. The value null will be returned for server sockets or disconnected client sockets. See https://www.openssl.org/docs/man1.0.2/ssl/SSL\_get\_version.html for more information. - -Signature: - -```typescript -getProtocol(): string | null; -``` -Returns: - -string \| null - diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.md deleted file mode 100644 index bc8f59df9d211..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) - -## IKibanaSocket interface - -A tiny abstraction for TCP socket. - -Signature: - -```typescript -export interface IKibanaSocket -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [authorizationError?](./kibana-plugin-core-server.ikibanasocket.authorizationerror.md) | Error | (Optional) The reason why the peer's certificate has not been verified. This property becomes available only when authorized is false. | -| [authorized?](./kibana-plugin-core-server.ikibanasocket.authorized.md) | boolean | (Optional) Indicates whether or not the peer certificate was signed by one of the specified CAs. When TLS isn't used the value is undefined. | - -## Methods - -| Method | Description | -| --- | --- | -| [getPeerCertificate(detailed)](./kibana-plugin-core-server.ikibanasocket.getpeercertificate.md) | | -| [getPeerCertificate(detailed)](./kibana-plugin-core-server.ikibanasocket.getpeercertificate_1.md) | | -| [getPeerCertificate(detailed)](./kibana-plugin-core-server.ikibanasocket.getpeercertificate_2.md) | Returns an object representing the peer's certificate. The returned object has some properties corresponding to the field of the certificate. If detailed argument is true the full chain with issuer property will be returned, if false only the top certificate without issuer property. If the peer does not provide a certificate, it returns null. | -| [getProtocol()](./kibana-plugin-core-server.ikibanasocket.getprotocol.md) | Returns a string containing the negotiated SSL/TLS protocol version of the current connection. The value 'unknown' will be returned for connected sockets that have not completed the handshaking process. The value null will be returned for server sockets or disconnected client sockets. See https://www.openssl.org/docs/man1.0.2/ssl/SSL\_get\_version.html for more information. | -| [renegotiate(options)](./kibana-plugin-core-server.ikibanasocket.renegotiate.md) | Renegotiates a connection to obtain the peer's certificate. This cannot be used when the protocol version is TLSv1.3. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.renegotiate.md b/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.renegotiate.md deleted file mode 100644 index b4addde9b3179..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.ikibanasocket.renegotiate.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) > [renegotiate](./kibana-plugin-core-server.ikibanasocket.renegotiate.md) - -## IKibanaSocket.renegotiate() method - -Renegotiates a connection to obtain the peer's certificate. This cannot be used when the protocol version is TLSv1.3. - -Signature: - -```typescript -renegotiate(options: { - rejectUnauthorized?: boolean; - requestCert?: boolean; - }): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | { rejectUnauthorized?: boolean; requestCert?: boolean; } | The options may contain the following fields: rejectUnauthorized, requestCert (See tls.createServer() for details). | - -Returns: - -Promise<void> - -A Promise that will be resolved if renegotiation succeeded, or will be rejected if renegotiation failed. - diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.exceeds.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.exceeds.md deleted file mode 100644 index 664bdb8f24d7b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.exceeds.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [exceeds](./kibana-plugin-core-server.intervalhistogram.exceeds.md) - -## IntervalHistogram.exceeds property - -Signature: - -```typescript -exceeds: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.fromtimestamp.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.fromtimestamp.md deleted file mode 100644 index 00fa8dcb84430..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.fromtimestamp.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [fromTimestamp](./kibana-plugin-core-server.intervalhistogram.fromtimestamp.md) - -## IntervalHistogram.fromTimestamp property - -Signature: - -```typescript -fromTimestamp: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.lastupdatedat.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.lastupdatedat.md deleted file mode 100644 index 58e75fc2ba437..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.lastupdatedat.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [lastUpdatedAt](./kibana-plugin-core-server.intervalhistogram.lastupdatedat.md) - -## IntervalHistogram.lastUpdatedAt property - -Signature: - -```typescript -lastUpdatedAt: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.max.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.max.md deleted file mode 100644 index 14d7fe6b68c4b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.max.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [max](./kibana-plugin-core-server.intervalhistogram.max.md) - -## IntervalHistogram.max property - -Signature: - -```typescript -max: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.md deleted file mode 100644 index 56a87a1577e98..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) - -## IntervalHistogram interface - -an IntervalHistogram object that samples and reports the event loop delay over time. The delays will be reported in milliseconds. - -Signature: - -```typescript -export interface IntervalHistogram -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [exceeds](./kibana-plugin-core-server.intervalhistogram.exceeds.md) | number | | -| [fromTimestamp](./kibana-plugin-core-server.intervalhistogram.fromtimestamp.md) | string | | -| [lastUpdatedAt](./kibana-plugin-core-server.intervalhistogram.lastupdatedat.md) | string | | -| [max](./kibana-plugin-core-server.intervalhistogram.max.md) | number | | -| [mean](./kibana-plugin-core-server.intervalhistogram.mean.md) | number | | -| [min](./kibana-plugin-core-server.intervalhistogram.min.md) | number | | -| [percentiles](./kibana-plugin-core-server.intervalhistogram.percentiles.md) | { 50: number; 75: number; 95: number; 99: number; } | | -| [stddev](./kibana-plugin-core-server.intervalhistogram.stddev.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.mean.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.mean.md deleted file mode 100644 index e6794bfa5fe52..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.mean.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [mean](./kibana-plugin-core-server.intervalhistogram.mean.md) - -## IntervalHistogram.mean property - -Signature: - -```typescript -mean: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.min.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.min.md deleted file mode 100644 index d0eb929601f18..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.min.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [min](./kibana-plugin-core-server.intervalhistogram.min.md) - -## IntervalHistogram.min property - -Signature: - -```typescript -min: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.percentiles.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.percentiles.md deleted file mode 100644 index b0adc9531c0b1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.percentiles.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [percentiles](./kibana-plugin-core-server.intervalhistogram.percentiles.md) - -## IntervalHistogram.percentiles property - -Signature: - -```typescript -percentiles: { - 50: number; - 75: number; - 95: number; - 99: number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.stddev.md b/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.stddev.md deleted file mode 100644 index bca5ab56cb237..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.intervalhistogram.stddev.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) > [stddev](./kibana-plugin-core-server.intervalhistogram.stddev.md) - -## IntervalHistogram.stddev property - -Signature: - -```typescript -stddev: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irenderoptions.isanonymouspage.md b/docs/development/core/server/kibana-plugin-core-server.irenderoptions.isanonymouspage.md deleted file mode 100644 index dc2af11f9f9d3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irenderoptions.isanonymouspage.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRenderOptions](./kibana-plugin-core-server.irenderoptions.md) > [isAnonymousPage](./kibana-plugin-core-server.irenderoptions.isanonymouspage.md) - -## IRenderOptions.isAnonymousPage property - -Set whether the page is anonymous, which determines what plugins are enabled and whether to output user settings in the page metadata. `false` by default. - -Signature: - -```typescript -isAnonymousPage?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irenderoptions.md b/docs/development/core/server/kibana-plugin-core-server.irenderoptions.md deleted file mode 100644 index 84539a6aa73ca..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irenderoptions.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRenderOptions](./kibana-plugin-core-server.irenderoptions.md) - -## IRenderOptions interface - - -Signature: - -```typescript -export interface IRenderOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [isAnonymousPage?](./kibana-plugin-core-server.irenderoptions.isanonymouspage.md) | boolean | (Optional) Set whether the page is anonymous, which determines what plugins are enabled and whether to output user settings in the page metadata. false by default. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.delete.md b/docs/development/core/server/kibana-plugin-core-server.irouter.delete.md deleted file mode 100644 index a7b6dd5bc294e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.delete.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) > [delete](./kibana-plugin-core-server.irouter.delete.md) - -## IRouter.delete property - -Register a route handler for `DELETE` request. - -Signature: - -```typescript -delete: RouteRegistrar<'delete', Context>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.get.md b/docs/development/core/server/kibana-plugin-core-server.irouter.get.md deleted file mode 100644 index 7db694b38da47..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.get.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) > [get](./kibana-plugin-core-server.irouter.get.md) - -## IRouter.get property - -Register a route handler for `GET` request. - -Signature: - -```typescript -get: RouteRegistrar<'get', Context>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.handlelegacyerrors.md b/docs/development/core/server/kibana-plugin-core-server.irouter.handlelegacyerrors.md deleted file mode 100644 index 35d109975c83a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.handlelegacyerrors.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) > [handleLegacyErrors](./kibana-plugin-core-server.irouter.handlelegacyerrors.md) - -## IRouter.handleLegacyErrors property - -Wrap a router handler to catch and converts legacy boom errors to proper custom errors. - -Signature: - -```typescript -handleLegacyErrors: RequestHandlerWrapper; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.md b/docs/development/core/server/kibana-plugin-core-server.irouter.md deleted file mode 100644 index a751ea399c5a9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) - -## IRouter interface - -Registers route handlers for specified resource path and method. See [RouteConfig](./kibana-plugin-core-server.routeconfig.md) and [RequestHandler](./kibana-plugin-core-server.requesthandler.md) for more information about arguments to route registrations. - -Signature: - -```typescript -export interface IRouter -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [delete](./kibana-plugin-core-server.irouter.delete.md) | RouteRegistrar<'delete', Context> | Register a route handler for DELETE request. | -| [get](./kibana-plugin-core-server.irouter.get.md) | RouteRegistrar<'get', Context> | Register a route handler for GET request. | -| [handleLegacyErrors](./kibana-plugin-core-server.irouter.handlelegacyerrors.md) | RequestHandlerWrapper | Wrap a router handler to catch and converts legacy boom errors to proper custom errors. | -| [patch](./kibana-plugin-core-server.irouter.patch.md) | RouteRegistrar<'patch', Context> | Register a route handler for PATCH request. | -| [post](./kibana-plugin-core-server.irouter.post.md) | RouteRegistrar<'post', Context> | Register a route handler for POST request. | -| [put](./kibana-plugin-core-server.irouter.put.md) | RouteRegistrar<'put', Context> | Register a route handler for PUT request. | -| [routerPath](./kibana-plugin-core-server.irouter.routerpath.md) | string | Resulted path | - diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.patch.md b/docs/development/core/server/kibana-plugin-core-server.irouter.patch.md deleted file mode 100644 index b353079630ecb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.patch.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) > [patch](./kibana-plugin-core-server.irouter.patch.md) - -## IRouter.patch property - -Register a route handler for `PATCH` request. - -Signature: - -```typescript -patch: RouteRegistrar<'patch', Context>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.post.md b/docs/development/core/server/kibana-plugin-core-server.irouter.post.md deleted file mode 100644 index 94c703ad6f339..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.post.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) > [post](./kibana-plugin-core-server.irouter.post.md) - -## IRouter.post property - -Register a route handler for `POST` request. - -Signature: - -```typescript -post: RouteRegistrar<'post', Context>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.put.md b/docs/development/core/server/kibana-plugin-core-server.irouter.put.md deleted file mode 100644 index 702ff3ff61bb6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.put.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) > [put](./kibana-plugin-core-server.irouter.put.md) - -## IRouter.put property - -Register a route handler for `PUT` request. - -Signature: - -```typescript -put: RouteRegistrar<'put', Context>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.irouter.routerpath.md b/docs/development/core/server/kibana-plugin-core-server.irouter.routerpath.md deleted file mode 100644 index c326e33b01f1f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.irouter.routerpath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IRouter](./kibana-plugin-core-server.irouter.md) > [routerPath](./kibana-plugin-core-server.irouter.routerpath.md) - -## IRouter.routerPath property - -Resulted path - -Signature: - -```typescript -routerPath: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.isauthenticated.md b/docs/development/core/server/kibana-plugin-core-server.isauthenticated.md deleted file mode 100644 index 0c2d7fab8b579..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isauthenticated.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IsAuthenticated](./kibana-plugin-core-server.isauthenticated.md) - -## IsAuthenticated type - -Returns authentication status for a request. - -Signature: - -```typescript -export declare type IsAuthenticated = (request: KibanaRequest) => boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md deleted file mode 100644 index 826583a85ed8a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsExporter](./kibana-plugin-core-server.isavedobjectsexporter.md) > [exportByObjects](./kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md) - -## ISavedObjectsExporter.exportByObjects() method - -Generates an export stream for given object references. - -See the [options](./kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md) for more detailed information. - -Signature: - -```typescript -exportByObjects(options: SavedObjectsExportByObjectOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | SavedObjectsExportByObjectOptions | | - -Returns: - -Promise<Readable> - -## Exceptions - -SavedObjectsExportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md deleted file mode 100644 index b1f354e7914f7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsExporter](./kibana-plugin-core-server.isavedobjectsexporter.md) > [exportByTypes](./kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md) - -## ISavedObjectsExporter.exportByTypes() method - -Generates an export stream for given types. - -See the [options](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.md) for more detailed information. - -Signature: - -```typescript -exportByTypes(options: SavedObjectsExportByTypeOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | SavedObjectsExportByTypeOptions | | - -Returns: - -Promise<Readable> - -## Exceptions - -SavedObjectsExportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.md deleted file mode 100644 index 4e9643ef8261d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsexporter.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsExporter](./kibana-plugin-core-server.isavedobjectsexporter.md) - -## ISavedObjectsExporter interface - -Utility class used to export savedObjects. - -Signature: - -```typescript -export interface ISavedObjectsExporter -``` - -## Methods - -| Method | Description | -| --- | --- | -| [exportByObjects(options)](./kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md) | Generates an export stream for given object references.See the [options](./kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md) for more detailed information. | -| [exportByTypes(options)](./kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md) | Generates an export stream for given types.See the [options](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.md) for more detailed information. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.import.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.import.md deleted file mode 100644 index 0622bb511eb8c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.import.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsImporter](./kibana-plugin-core-server.isavedobjectsimporter.md) > [import](./kibana-plugin-core-server.isavedobjectsimporter.import.md) - -## ISavedObjectsImporter.import() method - -Import saved objects from given stream. See the [options](./kibana-plugin-core-server.savedobjectsimportoptions.md) for more detailed information. - -Signature: - -```typescript -import(options: SavedObjectsImportOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | SavedObjectsImportOptions | | - -Returns: - -Promise<SavedObjectsImportResponse> - -## Exceptions - -SavedObjectsImportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.md deleted file mode 100644 index 93e0d5092ebf9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsImporter](./kibana-plugin-core-server.isavedobjectsimporter.md) - -## ISavedObjectsImporter interface - -Utility class used to import savedObjects. - -Signature: - -```typescript -export interface ISavedObjectsImporter -``` - -## Methods - -| Method | Description | -| --- | --- | -| [import(options)](./kibana-plugin-core-server.isavedobjectsimporter.import.md) | Import saved objects from given stream. See the [options](./kibana-plugin-core-server.savedobjectsimportoptions.md) for more detailed information. | -| [resolveImportErrors(options)](./kibana-plugin-core-server.isavedobjectsimporter.resolveimporterrors.md) | Resolve and return saved object import errors. See the [options](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) for more detailed information. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.resolveimporterrors.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.resolveimporterrors.md deleted file mode 100644 index 9d25439e61c81..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsimporter.resolveimporterrors.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsImporter](./kibana-plugin-core-server.isavedobjectsimporter.md) > [resolveImportErrors](./kibana-plugin-core-server.isavedobjectsimporter.resolveimporterrors.md) - -## ISavedObjectsImporter.resolveImportErrors() method - -Resolve and return saved object import errors. See the [options](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) for more detailed information. - -Signature: - -```typescript -resolveImportErrors(options: SavedObjectsResolveImportErrorsOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | SavedObjectsResolveImportErrorsOptions | | - -Returns: - -Promise<SavedObjectsImportResponse> - -## Exceptions - -SavedObjectsImportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.close.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.close.md deleted file mode 100644 index f7cfab446eeca..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.close.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) > [close](./kibana-plugin-core-server.isavedobjectspointintimefinder.close.md) - -## ISavedObjectsPointInTimeFinder.close property - -Closes the Point-In-Time associated with this finder instance. - -Once you have retrieved all of the results you need, it is recommended to call `close()` to clean up the PIT and prevent Elasticsearch from consuming resources unnecessarily. This is only required if you are done iterating and have not yet paged through all of the results: the PIT will automatically be closed for you once you reach the last page of results, or if the underlying call to `find` fails for any reason. - -Signature: - -```typescript -close: () => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.find.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.find.md deleted file mode 100644 index 29d4668becffc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.find.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) > [find](./kibana-plugin-core-server.isavedobjectspointintimefinder.find.md) - -## ISavedObjectsPointInTimeFinder.find property - -An async generator which wraps calls to `savedObjectsClient.find` and iterates over multiple pages of results using `_pit` and `search_after`. This will open a new Point-In-Time (PIT), and continue paging until a set of results is received that's smaller than the designated `perPage` size. - -Signature: - -```typescript -find: () => AsyncGenerator>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.md deleted file mode 100644 index 748ffbdc3c4e8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectspointintimefinder.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) - -## ISavedObjectsPointInTimeFinder interface - - -Signature: - -```typescript -export interface ISavedObjectsPointInTimeFinder -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [close](./kibana-plugin-core-server.isavedobjectspointintimefinder.close.md) | () => Promise<void> | Closes the Point-In-Time associated with this finder instance.Once you have retrieved all of the results you need, it is recommended to call close() to clean up the PIT and prevent Elasticsearch from consuming resources unnecessarily. This is only required if you are done iterating and have not yet paged through all of the results: the PIT will automatically be closed for you once you reach the last page of results, or if the underlying call to find fails for any reason. | -| [find](./kibana-plugin-core-server.isavedobjectspointintimefinder.find.md) | () => AsyncGenerator<SavedObjectsFindResponse<T, A>> | An async generator which wraps calls to savedObjectsClient.find and iterates over multiple pages of results using _pit and search_after. This will open a new Point-In-Time (PIT), and continue paging until a set of results is received that's smaller than the designated perPage size. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsrepository.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjectsrepository.md deleted file mode 100644 index 90cd2d605da8c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjectsrepository.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectsRepository](./kibana-plugin-core-server.isavedobjectsrepository.md) - -## ISavedObjectsRepository type - -See [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) - -Signature: - -```typescript -export declare type ISavedObjectsRepository = Pick; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.isavedobjecttyperegistry.md b/docs/development/core/server/kibana-plugin-core-server.isavedobjecttyperegistry.md deleted file mode 100644 index f9c621885c001..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.isavedobjecttyperegistry.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ISavedObjectTypeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) - -## ISavedObjectTypeRegistry type - -See [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) for documentation. - -Signature: - -```typescript -export declare type ISavedObjectTypeRegistry = Omit; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.ascurrentuser.md b/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.ascurrentuser.md deleted file mode 100644 index ddc6357bb8835..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.ascurrentuser.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IScopedClusterClient](./kibana-plugin-core-server.iscopedclusterclient.md) > [asCurrentUser](./kibana-plugin-core-server.iscopedclusterclient.ascurrentuser.md) - -## IScopedClusterClient.asCurrentUser property - -A [client](./kibana-plugin-core-server.elasticsearchclient.md) to be used to query the elasticsearch cluster on behalf of the user that initiated the request to the Kibana server. - -Signature: - -```typescript -readonly asCurrentUser: ElasticsearchClient; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.asinternaluser.md b/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.asinternaluser.md deleted file mode 100644 index f7f308aa13161..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.asinternaluser.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IScopedClusterClient](./kibana-plugin-core-server.iscopedclusterclient.md) > [asInternalUser](./kibana-plugin-core-server.iscopedclusterclient.asinternaluser.md) - -## IScopedClusterClient.asInternalUser property - -A [client](./kibana-plugin-core-server.elasticsearchclient.md) to be used to query the elasticsearch cluster on behalf of the internal Kibana user. - -Signature: - -```typescript -readonly asInternalUser: ElasticsearchClient; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.md b/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.md deleted file mode 100644 index f0d75f2f08fe4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IScopedClusterClient](./kibana-plugin-core-server.iscopedclusterclient.md) - -## IScopedClusterClient interface - -Serves the same purpose as the normal [cluster client](./kibana-plugin-core-server.iclusterclient.md) but exposes an additional `asCurrentUser` method that doesn't use credentials of the Kibana internal user (as `asInternalUser` does) to request Elasticsearch API, but rather passes HTTP headers extracted from the current user request to the API instead. - -Signature: - -```typescript -export interface IScopedClusterClient -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [asCurrentUser](./kibana-plugin-core-server.iscopedclusterclient.ascurrentuser.md) | ElasticsearchClient | A [client](./kibana-plugin-core-server.elasticsearchclient.md) to be used to query the elasticsearch cluster on behalf of the user that initiated the request to the Kibana server. | -| [asInternalUser](./kibana-plugin-core-server.iscopedclusterclient.asinternaluser.md) | ElasticsearchClient | A [client](./kibana-plugin-core-server.elasticsearchclient.md) to be used to query the elasticsearch cluster on behalf of the internal Kibana user. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.get.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.get.md deleted file mode 100644 index 36252e37d2f5e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.get.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [get](./kibana-plugin-core-server.iuisettingsclient.get.md) - -## IUiSettingsClient.get property - -Retrieves uiSettings values set by the user with fallbacks to default values if not specified. - -Signature: - -```typescript -get: (key: string) => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getall.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getall.md deleted file mode 100644 index d1cc06dd83484..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getall.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [getAll](./kibana-plugin-core-server.iuisettingsclient.getall.md) - -## IUiSettingsClient.getAll property - -Retrieves a set of all uiSettings values set by the user with fallbacks to default values if not specified. - -Signature: - -```typescript -getAll: () => Promise>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getregistered.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getregistered.md deleted file mode 100644 index 71a2bbf88472e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getregistered.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [getRegistered](./kibana-plugin-core-server.iuisettingsclient.getregistered.md) - -## IUiSettingsClient.getRegistered property - -Returns registered uiSettings values [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) - -Signature: - -```typescript -getRegistered: () => Readonly>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getuserprovided.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getuserprovided.md deleted file mode 100644 index 93d5f33709379..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.getuserprovided.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [getUserProvided](./kibana-plugin-core-server.iuisettingsclient.getuserprovided.md) - -## IUiSettingsClient.getUserProvided property - -Retrieves a set of all uiSettings values set by the user. - -Signature: - -```typescript -getUserProvided: () => Promise>>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.isoverridden.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.isoverridden.md deleted file mode 100644 index c9af118895f13..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.isoverridden.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [isOverridden](./kibana-plugin-core-server.iuisettingsclient.isoverridden.md) - -## IUiSettingsClient.isOverridden property - -Shows whether the uiSettings value set by the user. - -Signature: - -```typescript -isOverridden: (key: string) => boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.issensitive.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.issensitive.md deleted file mode 100644 index a6f263e0b0f55..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.issensitive.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [isSensitive](./kibana-plugin-core-server.iuisettingsclient.issensitive.md) - -## IUiSettingsClient.isSensitive property - -Shows whether the uiSetting is a sensitive value. Used by telemetry to not send sensitive values. - -Signature: - -```typescript -isSensitive: (key: string) => boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.md deleted file mode 100644 index ad7819719e14a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) - -## IUiSettingsClient interface - -Server-side client that provides access to the advanced settings stored in elasticsearch. The settings provide control over the behavior of the Kibana application. For example, a user can specify how to display numeric or date fields. Users can adjust the settings via Management UI. - -Signature: - -```typescript -export interface IUiSettingsClient -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [get](./kibana-plugin-core-server.iuisettingsclient.get.md) | <T = any>(key: string) => Promise<T> | Retrieves uiSettings values set by the user with fallbacks to default values if not specified. | -| [getAll](./kibana-plugin-core-server.iuisettingsclient.getall.md) | <T = any>() => Promise<Record<string, T>> | Retrieves a set of all uiSettings values set by the user with fallbacks to default values if not specified. | -| [getRegistered](./kibana-plugin-core-server.iuisettingsclient.getregistered.md) | () => Readonly<Record<string, PublicUiSettingsParams>> | Returns registered uiSettings values [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) | -| [getUserProvided](./kibana-plugin-core-server.iuisettingsclient.getuserprovided.md) | <T = any>() => Promise<Record<string, UserProvidedValues<T>>> | Retrieves a set of all uiSettings values set by the user. | -| [isOverridden](./kibana-plugin-core-server.iuisettingsclient.isoverridden.md) | (key: string) => boolean | Shows whether the uiSettings value set by the user. | -| [isSensitive](./kibana-plugin-core-server.iuisettingsclient.issensitive.md) | (key: string) => boolean | Shows whether the uiSetting is a sensitive value. Used by telemetry to not send sensitive values. | -| [remove](./kibana-plugin-core-server.iuisettingsclient.remove.md) | (key: string) => Promise<void> | Removes uiSettings value by key. | -| [removeMany](./kibana-plugin-core-server.iuisettingsclient.removemany.md) | (keys: string\[\]) => Promise<void> | Removes multiple uiSettings values by keys. | -| [set](./kibana-plugin-core-server.iuisettingsclient.set.md) | (key: string, value: any) => Promise<void> | Writes uiSettings value and marks it as set by the user. | -| [setMany](./kibana-plugin-core-server.iuisettingsclient.setmany.md) | (changes: Record<string, any>) => Promise<void> | Writes multiple uiSettings values and marks them as set by the user. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.remove.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.remove.md deleted file mode 100644 index 3496e30470eab..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.remove.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [remove](./kibana-plugin-core-server.iuisettingsclient.remove.md) - -## IUiSettingsClient.remove property - -Removes uiSettings value by key. - -Signature: - -```typescript -remove: (key: string) => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.removemany.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.removemany.md deleted file mode 100644 index 8b76ea5cdec07..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.removemany.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [removeMany](./kibana-plugin-core-server.iuisettingsclient.removemany.md) - -## IUiSettingsClient.removeMany property - -Removes multiple uiSettings values by keys. - -Signature: - -```typescript -removeMany: (keys: string[]) => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.set.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.set.md deleted file mode 100644 index c5254d1df8040..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.set.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [set](./kibana-plugin-core-server.iuisettingsclient.set.md) - -## IUiSettingsClient.set property - -Writes uiSettings value and marks it as set by the user. - -Signature: - -```typescript -set: (key: string, value: any) => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.setmany.md b/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.setmany.md deleted file mode 100644 index cb03889c7f4bf..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.setmany.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) > [setMany](./kibana-plugin-core-server.iuisettingsclient.setmany.md) - -## IUiSettingsClient.setMany property - -Writes multiple uiSettings values and marks them as set by the user. - -Signature: - -```typescript -setMany: (changes: Record) => Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanaexecutioncontext.md b/docs/development/core/server/kibana-plugin-core-server.kibanaexecutioncontext.md deleted file mode 100644 index 792af8f693869..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanaexecutioncontext.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaExecutionContext](./kibana-plugin-core-server.kibanaexecutioncontext.md) - -## KibanaExecutionContext type - -Represents a meta-information about a Kibana entity initiating a search request. - -Signature: - -```typescript -export declare type KibanaExecutionContext = { - readonly type?: string; - readonly name?: string; - readonly page?: string; - readonly id?: string; - readonly description?: string; - readonly url?: string; - child?: KibanaExecutionContext; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest._constructor_.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest._constructor_.md deleted file mode 100644 index 682d6c87629fc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest._constructor_.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [(constructor)](./kibana-plugin-core-server.kibanarequest._constructor_.md) - -## KibanaRequest.(constructor) - -Constructs a new instance of the `KibanaRequest` class - -Signature: - -```typescript -constructor(request: Request, params: Params, query: Query, body: Body, withoutSecretHeaders: boolean); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| request | Request | | -| params | Params | | -| query | Query | | -| body | Body | | -| withoutSecretHeaders | boolean | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.auth.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.auth.md deleted file mode 100644 index 7049c06dfa06c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.auth.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [auth](./kibana-plugin-core-server.kibanarequest.auth.md) - -## KibanaRequest.auth property - -Signature: - -```typescript -readonly auth: { - isAuthenticated: boolean; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.body.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.body.md deleted file mode 100644 index 968395af9a3f6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.body.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [body](./kibana-plugin-core-server.kibanarequest.body.md) - -## KibanaRequest.body property - -Signature: - -```typescript -readonly body: Body; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.events.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.events.md deleted file mode 100644 index 5662348242384..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.events.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [events](./kibana-plugin-core-server.kibanarequest.events.md) - -## KibanaRequest.events property - -Request events [KibanaRequestEvents](./kibana-plugin-core-server.kibanarequestevents.md) - -Signature: - -```typescript -readonly events: KibanaRequestEvents; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.headers.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.headers.md deleted file mode 100644 index 3dfb9b49e83ff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.headers.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [headers](./kibana-plugin-core-server.kibanarequest.headers.md) - -## KibanaRequest.headers property - -Readonly copy of incoming request headers. - -Signature: - -```typescript -readonly headers: Headers; -``` - -## Remarks - -This property will contain a `filtered` copy of request headers. - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.id.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.id.md deleted file mode 100644 index 8cad5972cc164..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.id.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [id](./kibana-plugin-core-server.kibanarequest.id.md) - -## KibanaRequest.id property - -A identifier to identify this request. - -Signature: - -```typescript -readonly id: string; -``` - -## Remarks - -Depending on the user's configuration, this value may be sourced from the incoming request's `X-Opaque-Id` header which is not guaranteed to be unique per request. - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.issystemrequest.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.issystemrequest.md deleted file mode 100644 index e5ac6e23b2116..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.issystemrequest.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [isSystemRequest](./kibana-plugin-core-server.kibanarequest.issystemrequest.md) - -## KibanaRequest.isSystemRequest property - -Whether or not the request is a "system request" rather than an application-level request. Can be set on the client using the `HttpFetchOptions#asSystemRequest` option. - -Signature: - -```typescript -readonly isSystemRequest: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.md deleted file mode 100644 index f4e2dda2d5499..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.md +++ /dev/null @@ -1,38 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) - -## KibanaRequest class - -Kibana specific abstraction for an incoming request. - -Signature: - -```typescript -export declare class KibanaRequest -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(request, params, query, body, withoutSecretHeaders)](./kibana-plugin-core-server.kibanarequest._constructor_.md) | | Constructs a new instance of the KibanaRequest class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [auth](./kibana-plugin-core-server.kibanarequest.auth.md) | | { isAuthenticated: boolean; } | | -| [body](./kibana-plugin-core-server.kibanarequest.body.md) | | Body | | -| [events](./kibana-plugin-core-server.kibanarequest.events.md) | | KibanaRequestEvents | Request events [KibanaRequestEvents](./kibana-plugin-core-server.kibanarequestevents.md) | -| [headers](./kibana-plugin-core-server.kibanarequest.headers.md) | | Headers | Readonly copy of incoming request headers. | -| [id](./kibana-plugin-core-server.kibanarequest.id.md) | | string | A identifier to identify this request. | -| [isSystemRequest](./kibana-plugin-core-server.kibanarequest.issystemrequest.md) | | boolean | Whether or not the request is a "system request" rather than an application-level request. Can be set on the client using the HttpFetchOptions#asSystemRequest option. | -| [params](./kibana-plugin-core-server.kibanarequest.params.md) | | Params | | -| [query](./kibana-plugin-core-server.kibanarequest.query.md) | | Query | | -| [rewrittenUrl?](./kibana-plugin-core-server.kibanarequest.rewrittenurl.md) | | URL | (Optional) URL rewritten in onPreRouting request interceptor. | -| [route](./kibana-plugin-core-server.kibanarequest.route.md) | | RecursiveReadonly<KibanaRequestRoute<Method>> | matched route details | -| [socket](./kibana-plugin-core-server.kibanarequest.socket.md) | | IKibanaSocket | [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) | -| [url](./kibana-plugin-core-server.kibanarequest.url.md) | | URL | a WHATWG URL standard object. | -| [uuid](./kibana-plugin-core-server.kibanarequest.uuid.md) | | string | A UUID to identify this request. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.params.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.params.md deleted file mode 100644 index ff2e4ac2f11eb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.params.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [params](./kibana-plugin-core-server.kibanarequest.params.md) - -## KibanaRequest.params property - -Signature: - -```typescript -readonly params: Params; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.query.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.query.md deleted file mode 100644 index b111aa3d66137..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.query.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [query](./kibana-plugin-core-server.kibanarequest.query.md) - -## KibanaRequest.query property - -Signature: - -```typescript -readonly query: Query; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.rewrittenurl.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.rewrittenurl.md deleted file mode 100644 index fb547330ee6ea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.rewrittenurl.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [rewrittenUrl](./kibana-plugin-core-server.kibanarequest.rewrittenurl.md) - -## KibanaRequest.rewrittenUrl property - -URL rewritten in onPreRouting request interceptor. - -Signature: - -```typescript -readonly rewrittenUrl?: URL; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.route.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.route.md deleted file mode 100644 index b98844775abcc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.route.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [route](./kibana-plugin-core-server.kibanarequest.route.md) - -## KibanaRequest.route property - -matched route details - -Signature: - -```typescript -readonly route: RecursiveReadonly>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.socket.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.socket.md deleted file mode 100644 index 2e18cc336d222..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.socket.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [socket](./kibana-plugin-core-server.kibanarequest.socket.md) - -## KibanaRequest.socket property - -[IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) - -Signature: - -```typescript -readonly socket: IKibanaSocket; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.url.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.url.md deleted file mode 100644 index b72760e272bb2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.url.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [url](./kibana-plugin-core-server.kibanarequest.url.md) - -## KibanaRequest.url property - -a WHATWG URL standard object. - -Signature: - -```typescript -readonly url: URL; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.uuid.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequest.uuid.md deleted file mode 100644 index 8b980b82d0adb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequest.uuid.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) > [uuid](./kibana-plugin-core-server.kibanarequest.uuid.md) - -## KibanaRequest.uuid property - -A UUID to identify this request. - -Signature: - -```typescript -readonly uuid: string; -``` - -## Remarks - -This value is NOT sourced from the incoming request's `X-Opaque-Id` header. it is always a UUID uniquely identifying the request. - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.aborted_.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.aborted_.md deleted file mode 100644 index ea16a0529f9f1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.aborted_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestEvents](./kibana-plugin-core-server.kibanarequestevents.md) > [aborted$](./kibana-plugin-core-server.kibanarequestevents.aborted_.md) - -## KibanaRequestEvents.aborted$ property - -Observable that emits once if and when the request has been aborted. - -Signature: - -```typescript -aborted$: Observable; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.completed_.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.completed_.md deleted file mode 100644 index c9f8ab11f6b12..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.completed_.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestEvents](./kibana-plugin-core-server.kibanarequestevents.md) > [completed$](./kibana-plugin-core-server.kibanarequestevents.completed_.md) - -## KibanaRequestEvents.completed$ property - -Observable that emits once if and when the request has been completely handled. - -Signature: - -```typescript -completed$: Observable; -``` - -## Remarks - -The request may be considered completed if: - A response has been sent to the client; or - The request was aborted. - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.md deleted file mode 100644 index c61e4aeec7c85..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestevents.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestEvents](./kibana-plugin-core-server.kibanarequestevents.md) - -## KibanaRequestEvents interface - -Request events. - -Signature: - -```typescript -export interface KibanaRequestEvents -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [aborted$](./kibana-plugin-core-server.kibanarequestevents.aborted_.md) | Observable<void> | Observable that emits once if and when the request has been aborted. | -| [completed$](./kibana-plugin-core-server.kibanarequestevents.completed_.md) | Observable<void> | Observable that emits once if and when the request has been completely handled. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.md deleted file mode 100644 index 196c352e21f8a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestRoute](./kibana-plugin-core-server.kibanarequestroute.md) - -## KibanaRequestRoute interface - -Request specific route information exposed to a handler. - -Signature: - -```typescript -export interface KibanaRequestRoute -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [method](./kibana-plugin-core-server.kibanarequestroute.method.md) | Method | | -| [options](./kibana-plugin-core-server.kibanarequestroute.options.md) | KibanaRequestRouteOptions<Method> | | -| [path](./kibana-plugin-core-server.kibanarequestroute.path.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.method.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.method.md deleted file mode 100644 index a1549df34d1b3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.method.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestRoute](./kibana-plugin-core-server.kibanarequestroute.md) > [method](./kibana-plugin-core-server.kibanarequestroute.method.md) - -## KibanaRequestRoute.method property - -Signature: - -```typescript -method: Method; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.options.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.options.md deleted file mode 100644 index 4d2b4253c69a3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.options.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestRoute](./kibana-plugin-core-server.kibanarequestroute.md) > [options](./kibana-plugin-core-server.kibanarequestroute.options.md) - -## KibanaRequestRoute.options property - -Signature: - -```typescript -options: KibanaRequestRouteOptions; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.path.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.path.md deleted file mode 100644 index 32357ba4534a6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestroute.path.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestRoute](./kibana-plugin-core-server.kibanarequestroute.md) > [path](./kibana-plugin-core-server.kibanarequestroute.path.md) - -## KibanaRequestRoute.path property - -Signature: - -```typescript -path: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanarequestrouteoptions.md b/docs/development/core/server/kibana-plugin-core-server.kibanarequestrouteoptions.md deleted file mode 100644 index f3d77d930cd9f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanarequestrouteoptions.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KibanaRequestRouteOptions](./kibana-plugin-core-server.kibanarequestrouteoptions.md) - -## KibanaRequestRouteOptions type - -Route options: If 'GET' or 'OPTIONS' method, body options won't be returned. - -Signature: - -```typescript -export declare type KibanaRequestRouteOptions = Method extends 'get' | 'options' ? Required, 'body'>> : Required>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.kibanaresponsefactory.md b/docs/development/core/server/kibana-plugin-core-server.kibanaresponsefactory.md deleted file mode 100644 index e02f208ae86ac..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.kibanaresponsefactory.md +++ /dev/null @@ -1,130 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [kibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) - -## kibanaResponseFactory variable - -Set of helpers used to create `KibanaResponse` to form HTTP response on an incoming request. Should be returned as a result of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) execution. - -Signature: - -```typescript -kibanaResponseFactory: { - custom: | Buffer | Error | { - message: string | Error; - attributes?: ResponseErrorAttributes | undefined; - } | Stream | undefined>(options: CustomHttpResponseOptions) => KibanaResponse; - badRequest: (options?: ErrorHttpResponseOptions) => KibanaResponse; - unauthorized: (options?: ErrorHttpResponseOptions) => KibanaResponse; - forbidden: (options?: ErrorHttpResponseOptions) => KibanaResponse; - notFound: (options?: ErrorHttpResponseOptions) => KibanaResponse; - conflict: (options?: ErrorHttpResponseOptions) => KibanaResponse; - customError: (options: CustomHttpResponseOptions) => KibanaResponse; - redirected: (options: RedirectResponseOptions) => KibanaResponse | Buffer | Stream>; - ok: (options?: HttpResponseOptions) => KibanaResponse | Buffer | Stream>; - accepted: (options?: HttpResponseOptions) => KibanaResponse | Buffer | Stream>; - noContent: (options?: HttpResponseOptions) => KibanaResponse; -} -``` - -## Example - -1. Successful response. Supported types of response body are: - `undefined`, no content to send. - `string`, send text - `JSON`, send JSON object, HTTP server will throw if given object is not valid (has circular references, for example) - `Stream` send data stream - `Buffer` send binary stream - -```js -return response.ok(); -return response.ok({ body: 'ack' }); -return response.ok({ body: { id: '1' } }); -return response.ok({ body: Buffer.from(...) }); - -const stream = new Stream.PassThrough(); -fs.createReadStream('./file').pipe(stream); -return res.ok({ body: stream }); -``` -HTTP headers are configurable via response factory parameter `options` [HttpResponseOptions](./kibana-plugin-core-server.httpresponseoptions.md). - -```js -return response.ok({ - body: { id: '1' }, - headers: { - 'content-type': 'application/json' - } -}); -``` -2. Redirection response. Redirection URL is configures via 'Location' header. - -```js -return response.redirected({ - body: 'The document has moved', - headers: { - location: '/new-url', - }, -}); -``` -3. Error response. You may pass an error message to the client, where error message can be: - `string` send message text - `Error` send the message text of given Error object. - `{ message: string | Error, attributes: {data: Record, ...} }` - send message text and attach additional error data. - -```js -return response.unauthorized({ - body: 'User has no access to the requested resource.', - headers: { - 'WWW-Authenticate': 'challenge', - } -}) -return response.badRequest(); -return response.badRequest({ body: 'validation error' }); - -try { - // ... -} catch(error){ - return response.badRequest({ body: error }); -} - -return response.badRequest({ - body:{ - message: 'validation error', - attributes: { - requestBody: request.body, - failedFields: validationResult - } - } -}); - -try { - // ... -} catch(error) { - return response.badRequest({ - body: error - }); -} - -``` -4. Custom response. `ResponseFactory` may not cover your use case, so you can use the `custom` function to customize the response. - -```js -return response.custom({ - body: 'ok', - statusCode: 201, - headers: { - location: '/created-url' - } -}) -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.knownheaders.md b/docs/development/core/server/kibana-plugin-core-server.knownheaders.md deleted file mode 100644 index cc7ca472e5777..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.knownheaders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [KnownHeaders](./kibana-plugin-core-server.knownheaders.md) - -## KnownHeaders type - -Set of well-known HTTP headers. - -Signature: - -```typescript -export declare type KnownHeaders = KnownKeys; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.lifecycleresponsefactory.md b/docs/development/core/server/kibana-plugin-core-server.lifecycleresponsefactory.md deleted file mode 100644 index c78b998aef9e9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.lifecycleresponsefactory.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [LifecycleResponseFactory](./kibana-plugin-core-server.lifecycleresponsefactory.md) - -## LifecycleResponseFactory type - -Creates an object containing redirection or error response with error details, HTTP headers, and other data transmitted to the client. - -Signature: - -```typescript -export declare type LifecycleResponseFactory = typeof lifecycleResponseFactory; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.makeusagefromschema.md b/docs/development/core/server/kibana-plugin-core-server.makeusagefromschema.md deleted file mode 100644 index f47d01a2d09e8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.makeusagefromschema.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [MakeUsageFromSchema](./kibana-plugin-core-server.makeusagefromschema.md) - -## MakeUsageFromSchema type - -List of configuration values that will be exposed to usage collection. If parent node or actual config path is set to `true` then the actual value of these configs will be reoprted. If parent node or actual config path is set to `false` then the config will be reported as \[redacted\]. - -Signature: - -```typescript -export declare type MakeUsageFromSchema = { - [Key in keyof T]?: T[Key] extends Maybe ? false : T[Key] extends Maybe ? boolean : T[Key] extends Maybe ? MakeUsageFromSchema | boolean : boolean; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.md b/docs/development/core/server/kibana-plugin-core-server.md deleted file mode 100644 index 77d61ff7f373b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.md +++ /dev/null @@ -1,338 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) - -## kibana-plugin-core-server package - -The Kibana Core APIs for server-side plugins. - -A plugin requires a `kibana.json` file at it's root directory that follows [the manfiest schema](./kibana-plugin-core-server.pluginmanifest.md) to define static plugin information required to load the plugin. - -A plugin's `server/index` file must contain a named import, `plugin`, that implements [PluginInitializer](./kibana-plugin-core-server.plugininitializer.md) which returns an object that implements . - -The plugin integrates with the core system via lifecycle events: `setup`, `start`, and `stop`. In each lifecycle method, the plugin will receive the corresponding core services available (either [CoreSetup](./kibana-plugin-core-server.coresetup.md) or [CoreStart](./kibana-plugin-core-server.corestart.md)) and any interfaces returned by dependency plugins' lifecycle method. Anything returned by the plugin's lifecycle method will be exposed to downstream dependencies when their corresponding lifecycle methods are invoked. - -## Classes - -| Class | Description | -| --- | --- | -| [BasePath](./kibana-plugin-core-server.basepath.md) | Access or manipulate the Kibana base path | -| [CspConfig](./kibana-plugin-core-server.cspconfig.md) | CSP configuration for use in Kibana. | -| [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) | Wrapper of config schema. | -| [EventLoopDelaysMonitor](./kibana-plugin-core-server.eventloopdelaysmonitor.md) | | -| [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) | Kibana specific abstraction for an incoming request. | -| [RouteValidationError](./kibana-plugin-core-server.routevalidationerror.md) | Error to return when the validation is not successful. | -| [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) | | -| [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) | | -| [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) | | -| [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) | | -| [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) | | -| [SavedObjectsSerializer](./kibana-plugin-core-server.savedobjectsserializer.md) | A serializer that can be used to manually convert [raw](./kibana-plugin-core-server.savedobjectsrawdoc.md) or [sanitized](./kibana-plugin-core-server.savedobjectsanitizeddoc.md) documents to the other kind. | -| [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) | | -| [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) | Registry holding information about all the registered [saved object types](./kibana-plugin-core-server.savedobjectstype.md). | - -## Enumerations - -| Enumeration | Description | -| --- | --- | -| [AuthResultType](./kibana-plugin-core-server.authresulttype.md) | | -| [AuthStatus](./kibana-plugin-core-server.authstatus.md) | Status indicating an outcome of the authentication. | - -## Interfaces - -| Interface | Description | -| --- | --- | -| [AppCategory](./kibana-plugin-core-server.appcategory.md) | A category definition for nav links to know where to sort them in the left hand nav | -| [AsyncPlugin](./kibana-plugin-core-server.asyncplugin.md) | A plugin with asynchronous lifecycle methods. | -| [Authenticated](./kibana-plugin-core-server.authenticated.md) | | -| [AuthNotHandled](./kibana-plugin-core-server.authnothandled.md) | | -| [AuthRedirected](./kibana-plugin-core-server.authredirected.md) | | -| [AuthRedirectedParams](./kibana-plugin-core-server.authredirectedparams.md) | Result of auth redirection. | -| [AuthResultParams](./kibana-plugin-core-server.authresultparams.md) | Result of successful authentication. | -| [AuthToolkit](./kibana-plugin-core-server.authtoolkit.md) | A tool set defining an outcome of Auth interceptor for incoming request. | -| [BaseDeprecationDetails](./kibana-plugin-core-server.basedeprecationdetails.md) | Base properties shared by all types of deprecations | -| [Capabilities](./kibana-plugin-core-server.capabilities.md) | The read-only set of capabilities available for the current UI session. Capabilities are simple key-value pairs of (string, boolean), where the string denotes the capability ID, and the boolean is a flag indicating if the capability is enabled or disabled. | -| [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) | APIs to manage the [Capabilities](./kibana-plugin-core-server.capabilities.md) that will be used by the application.Plugins relying on capabilities to toggle some of their features should register them during the setup phase using the registerProvider method.Plugins having the responsibility to restrict capabilities depending on a given context should register their capabilities switcher using the registerSwitcher method.Refers to the methods documentation for complete description and examples. | -| [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md) | APIs to access the application [Capabilities](./kibana-plugin-core-server.capabilities.md). | -| [ConfigDeprecationDetails](./kibana-plugin-core-server.configdeprecationdetails.md) | | -| [ContextSetup](./kibana-plugin-core-server.contextsetup.md) | An object that handles registration of context providers and configuring handlers with context. | -| [CorePreboot](./kibana-plugin-core-server.corepreboot.md) | Context passed to the setup method of preboot plugins. | -| [CoreRequestHandlerContext](./kibana-plugin-core-server.corerequesthandlercontext.md) | The core context provided to route handler.Provides the following clients and services: - [savedObjects.client](./kibana-plugin-core-server.savedobjectsclient.md) - Saved Objects client which uses the credentials of the incoming request - [savedObjects.typeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) - Type registry containing all the registered types. - [elasticsearch.client](./kibana-plugin-core-server.iscopedclusterclient.md) - Elasticsearch data client which uses the credentials of the incoming request - [uiSettings.client](./kibana-plugin-core-server.iuisettingsclient.md) - uiSettings client which uses the credentials of the incoming request | -| [CoreSetup](./kibana-plugin-core-server.coresetup.md) | Context passed to the setup method of standard plugins. | -| [CoreStart](./kibana-plugin-core-server.corestart.md) | Context passed to the plugins start method. | -| [CoreStatus](./kibana-plugin-core-server.corestatus.md) | Status of core services. | -| [CountResponse](./kibana-plugin-core-server.countresponse.md) | | -| [CustomHttpResponseOptions](./kibana-plugin-core-server.customhttpresponseoptions.md) | HTTP response parameters for a response with adjustable status code. | -| [DeleteDocumentResponse](./kibana-plugin-core-server.deletedocumentresponse.md) | | -| [DeprecationsClient](./kibana-plugin-core-server.deprecationsclient.md) | Server-side client that provides access to fetch all Kibana deprecations | -| [DeprecationSettings](./kibana-plugin-core-server.deprecationsettings.md) | UiSettings deprecation field options. | -| [DeprecationsServiceSetup](./kibana-plugin-core-server.deprecationsservicesetup.md) | The deprecations service provides a way for the Kibana platform to communicate deprecated features and configs with its users. These deprecations are only communicated if the deployment is using these features. Allowing for a user tailored experience for upgrading the stack version.The Deprecation service is consumed by the upgrade assistant to assist with the upgrade experience.If a deprecated feature can be resolved without manual user intervention. Using correctiveActions.api allows the Upgrade Assistant to use this api to correct the deprecation upon a user trigger. | -| [ElasticsearchConfigPreboot](./kibana-plugin-core-server.elasticsearchconfigpreboot.md) | A limited set of Elasticsearch configuration entries exposed to the preboot plugins at setup. | -| [ElasticsearchErrorDetails](./kibana-plugin-core-server.elasticsearcherrordetails.md) | | -| [ElasticsearchServicePreboot](./kibana-plugin-core-server.elasticsearchservicepreboot.md) | | -| [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) | | -| [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) | | -| [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) | | -| [ErrorHttpResponseOptions](./kibana-plugin-core-server.errorhttpresponseoptions.md) | HTTP response parameters | -| [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) | | -| [FakeRequest](./kibana-plugin-core-server.fakerequest.md) | Fake request object created manually by Kibana plugins. | -| [FeatureDeprecationDetails](./kibana-plugin-core-server.featuredeprecationdetails.md) | | -| [GetDeprecationsContext](./kibana-plugin-core-server.getdeprecationscontext.md) | | -| [GetResponse](./kibana-plugin-core-server.getresponse.md) | | -| [HttpAuth](./kibana-plugin-core-server.httpauth.md) | | -| [HttpResources](./kibana-plugin-core-server.httpresources.md) | HttpResources service is responsible for serving static & dynamic assets for Kibana application via HTTP. Provides API allowing plug-ins to respond with: - a pre-configured HTML page bootstrapping Kibana client app - custom HTML page - custom JS script file. | -| [HttpResourcesRenderOptions](./kibana-plugin-core-server.httpresourcesrenderoptions.md) | Allows to configure HTTP response parameters | -| [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) | Extended set of [KibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) helpers used to respond with HTML or JS resource. | -| [HttpResponseOptions](./kibana-plugin-core-server.httpresponseoptions.md) | HTTP response parameters | -| [HttpServerInfo](./kibana-plugin-core-server.httpserverinfo.md) | Information about what hostname, port, and protocol the server process is running on. Note that this may not match the URL that end-users access Kibana at. For the public URL, see [BasePath.publicBaseUrl](./kibana-plugin-core-server.basepath.publicbaseurl.md). | -| [HttpServicePreboot](./kibana-plugin-core-server.httpservicepreboot.md) | Kibana HTTP Service provides an abstraction to work with the HTTP stack at the preboot stage. This functionality allows Kibana to serve user requests even before Kibana becomes fully operational. Only Core and preboot plugins can define HTTP routes at this stage. | -| [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) | Kibana HTTP Service provides own abstraction for work with HTTP stack. Plugins don't have direct access to hapi server and its primitives anymore. Moreover, plugins shouldn't rely on the fact that HTTP Service uses one or another library under the hood. This gives the platform flexibility to upgrade or changing our internal HTTP stack without breaking plugins. If the HTTP Service lacks functionality you need, we are happy to discuss and support your needs. | -| [HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) | | -| [I18nServiceSetup](./kibana-plugin-core-server.i18nservicesetup.md) | | -| [IClusterClient](./kibana-plugin-core-server.iclusterclient.md) | Represents an Elasticsearch cluster API client created by the platform. It allows to call API on behalf of the internal Kibana user and the actual user that is derived from the request headers (via asScoped(...)). | -| [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) | An object that handles registration of context providers and configuring handlers with context. | -| [ICspConfig](./kibana-plugin-core-server.icspconfig.md) | CSP configuration for use in Kibana. | -| [ICustomClusterClient](./kibana-plugin-core-server.icustomclusterclient.md) | See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md) | -| [IExecutionContextContainer](./kibana-plugin-core-server.iexecutioncontextcontainer.md) | | -| [IExternalUrlConfig](./kibana-plugin-core-server.iexternalurlconfig.md) | External Url configuration for use in Kibana. | -| [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) | A policy describing whether access to an external destination is allowed. | -| [IKibanaResponse](./kibana-plugin-core-server.ikibanaresponse.md) | A response data object, expected to returned as a result of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) execution | -| [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) | A tiny abstraction for TCP socket. | -| [IntervalHistogram](./kibana-plugin-core-server.intervalhistogram.md) | an IntervalHistogram object that samples and reports the event loop delay over time. The delays will be reported in milliseconds. | -| [IRenderOptions](./kibana-plugin-core-server.irenderoptions.md) | | -| [IRouter](./kibana-plugin-core-server.irouter.md) | Registers route handlers for specified resource path and method. See [RouteConfig](./kibana-plugin-core-server.routeconfig.md) and [RequestHandler](./kibana-plugin-core-server.requesthandler.md) for more information about arguments to route registrations. | -| [ISavedObjectsExporter](./kibana-plugin-core-server.isavedobjectsexporter.md) | Utility class used to export savedObjects. | -| [ISavedObjectsImporter](./kibana-plugin-core-server.isavedobjectsimporter.md) | Utility class used to import savedObjects. | -| [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) | | -| [IScopedClusterClient](./kibana-plugin-core-server.iscopedclusterclient.md) | Serves the same purpose as the normal [cluster client](./kibana-plugin-core-server.iclusterclient.md) but exposes an additional asCurrentUser method that doesn't use credentials of the Kibana internal user (as asInternalUser does) to request Elasticsearch API, but rather passes HTTP headers extracted from the current user request to the API instead. | -| [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) | Server-side client that provides access to the advanced settings stored in elasticsearch. The settings provide control over the behavior of the Kibana application. For example, a user can specify how to display numeric or date fields. Users can adjust the settings via Management UI. | -| [KibanaRequestEvents](./kibana-plugin-core-server.kibanarequestevents.md) | Request events. | -| [KibanaRequestRoute](./kibana-plugin-core-server.kibanarequestroute.md) | Request specific route information exposed to a handler. | -| [MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) | APIs to retrieves metrics gathered and exposed by the core platform. | -| [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) | | -| [OnPostAuthToolkit](./kibana-plugin-core-server.onpostauthtoolkit.md) | A tool set defining an outcome of OnPostAuth interceptor for incoming request. | -| [OnPreAuthToolkit](./kibana-plugin-core-server.onpreauthtoolkit.md) | A tool set defining an outcome of OnPreAuth interceptor for incoming request. | -| [OnPreResponseExtensions](./kibana-plugin-core-server.onpreresponseextensions.md) | Additional data to extend a response. | -| [OnPreResponseInfo](./kibana-plugin-core-server.onpreresponseinfo.md) | Response status code. | -| [OnPreResponseRender](./kibana-plugin-core-server.onpreresponserender.md) | Additional data to extend a response when rendering a new body | -| [OnPreResponseToolkit](./kibana-plugin-core-server.onpreresponsetoolkit.md) | A tool set defining an outcome of OnPreResponse interceptor for incoming request. | -| [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md) | A tool set defining an outcome of OnPreRouting interceptor for incoming request. | -| [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) | Regroups metrics gathered by all the collectors. This contains metrics about the os/runtime, the kibana process and the http server. | -| [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) | OS related metrics | -| [OpsProcessMetrics](./kibana-plugin-core-server.opsprocessmetrics.md) | Process related metrics | -| [OpsServerMetrics](./kibana-plugin-core-server.opsservermetrics.md) | server related metrics | -| [Plugin\_2](./kibana-plugin-core-server.plugin_2.md) | The interface that should be returned by a PluginInitializer for a standard plugin. | -| [PluginConfigDescriptor](./kibana-plugin-core-server.pluginconfigdescriptor.md) | Describes a plugin configuration properties. | -| [PluginInitializerContext](./kibana-plugin-core-server.plugininitializercontext.md) | Context that's available to plugins during initialization stage. | -| [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) | Describes the set of required and optional properties plugin can define in its mandatory JSON manifest file. | -| [PollEsNodesVersionOptions](./kibana-plugin-core-server.pollesnodesversionoptions.md) | | -| [PrebootPlugin](./kibana-plugin-core-server.prebootplugin.md) | The interface that should be returned by a PluginInitializer for a preboot plugin. | -| [PrebootServicePreboot](./kibana-plugin-core-server.prebootservicepreboot.md) | Kibana Preboot Service allows to control the boot flow of Kibana. Preboot plugins can use it to hold the boot until certain condition is met. | -| [RegisterDeprecationsConfig](./kibana-plugin-core-server.registerdeprecationsconfig.md) | | -| [RequestHandlerContext](./kibana-plugin-core-server.requesthandlercontext.md) | Base context passed to a route handler. | -| [RequestHandlerContextBase](./kibana-plugin-core-server.requesthandlercontextbase.md) | \* | -| [ResolveCapabilitiesOptions](./kibana-plugin-core-server.resolvecapabilitiesoptions.md) | Defines a set of additional options for the resolveCapabilities method of [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md). | -| [RouteConfig](./kibana-plugin-core-server.routeconfig.md) | Route specific configuration. | -| [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) | Additional route options. | -| [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md) | Additional body options for a route | -| [RouteValidationResultFactory](./kibana-plugin-core-server.routevalidationresultfactory.md) | Validation result factory to be used in the custom validation function to return the valid data or validation errorsSee [RouteValidationFunction](./kibana-plugin-core-server.routevalidationfunction.md). | -| [RouteValidatorConfig](./kibana-plugin-core-server.routevalidatorconfig.md) | The configuration object to the RouteValidator class. Set params, query and/or body to specify the validation logic to follow for that property. | -| [RouteValidatorOptions](./kibana-plugin-core-server.routevalidatoroptions.md) | Additional options for the RouteValidator class to modify its default behaviour. | -| [SavedObject](./kibana-plugin-core-server.savedobject.md) | | -| [SavedObjectAttributes](./kibana-plugin-core-server.savedobjectattributes.md) | The data for a Saved Object is stored as an object in the attributes property. | -| [SavedObjectExportBaseOptions](./kibana-plugin-core-server.savedobjectexportbaseoptions.md) | | -| [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) | Migration context provided when invoking a [migration handler](./kibana-plugin-core-server.savedobjectmigrationfn.md) | -| [SavedObjectMigrationMap](./kibana-plugin-core-server.savedobjectmigrationmap.md) | A map of [migration functions](./kibana-plugin-core-server.savedobjectmigrationfn.md) to be used for a given type. The map's keys must be valid semver versions, and they cannot exceed the current Kibana version.For a given document, only migrations with a higher version number than that of the document will be applied. Migrations are executed in order, starting from the lowest version and ending with the highest one. | -| [SavedObjectReference](./kibana-plugin-core-server.savedobjectreference.md) | A reference to another saved object. | -| [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) | A returned input object or one of its references, with additional context. | -| [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) | | -| [SavedObjectsBulkUpdateResponse](./kibana-plugin-core-server.savedobjectsbulkupdateresponse.md) | | -| [SavedObjectsCheckConflictsObject](./kibana-plugin-core-server.savedobjectscheckconflictsobject.md) | | -| [SavedObjectsCheckConflictsResponse](./kibana-plugin-core-server.savedobjectscheckconflictsresponse.md) | | -| [SavedObjectsClientProviderOptions](./kibana-plugin-core-server.savedobjectsclientprovideroptions.md) | Options to control the creation of the Saved Objects Client. | -| [SavedObjectsClientWrapperOptions](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.md) | Options passed to each SavedObjectsClientWrapperFactory to aid in creating the wrapper instance. | -| [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) | | -| [SavedObjectsCollectMultiNamespaceReferencesObject](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md) | An object to collect references for. It must be a multi-namespace type (in other words, the object type must be registered with the namespaceType: 'multiple' or namespaceType: 'multiple-isolated' option).Note: if options.purpose is 'updateObjectsSpaces', it must be a shareable type (in other words, the object type must be registered with the namespaceType: 'multiple'). | -| [SavedObjectsCollectMultiNamespaceReferencesOptions](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.md) | Options for collecting references. | -| [SavedObjectsCollectMultiNamespaceReferencesResponse](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.md) | The response when object references are collected. | -| [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) | | -| [SavedObjectsCreatePointInTimeFinderDependencies](./kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.md) | | -| [SavedObjectsDeleteByNamespaceOptions](./kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.md) | | -| [SavedObjectsDeleteOptions](./kibana-plugin-core-server.savedobjectsdeleteoptions.md) | | -| [SavedObjectsExportByObjectOptions](./kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md) | Options for the [export by objects API](./kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md) | -| [SavedObjectsExportByTypeOptions](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.md) | Options for the [export by type API](./kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md) | -| [SavedObjectsExportExcludedObject](./kibana-plugin-core-server.savedobjectsexportexcludedobject.md) | | -| [SavedObjectsExportResultDetails](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) | Structure of the export result details entry | -| [SavedObjectsExportTransformContext](./kibana-plugin-core-server.savedobjectsexporttransformcontext.md) | Context passed down to a [export transform function](./kibana-plugin-core-server.savedobjectsexporttransform.md) | -| [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) | | -| [SavedObjectsFindOptionsReference](./kibana-plugin-core-server.savedobjectsfindoptionsreference.md) | | -| [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) | Return type of the Saved Objects find() method.\*Note\*: this type is different between the Public and Server Saved Objects clients. | -| [SavedObjectsFindResult](./kibana-plugin-core-server.savedobjectsfindresult.md) | | -| [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) | A warning meant to notify that a specific user action is required to finalize the import of some type of object. The actionUrl must be a path relative to the basePath, and not include it. | -| [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md) | Represents a failure to import due to a conflict, which can be resolved in different ways with an overwrite. | -| [SavedObjectsImportConflictError](./kibana-plugin-core-server.savedobjectsimportconflicterror.md) | Represents a failure to import due to a conflict. | -| [SavedObjectsImportFailure](./kibana-plugin-core-server.savedobjectsimportfailure.md) | Represents a failure to import. | -| [SavedObjectsImportHookResult](./kibana-plugin-core-server.savedobjectsimporthookresult.md) | Result from a [import hook](./kibana-plugin-core-server.savedobjectsimporthook.md) | -| [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md) | Represents a failure to import due to missing references. | -| [SavedObjectsImportOptions](./kibana-plugin-core-server.savedobjectsimportoptions.md) | Options to control the import operation. | -| [SavedObjectsImportResponse](./kibana-plugin-core-server.savedobjectsimportresponse.md) | The response describing the result of an import. | -| [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) | Describes a retry operation for importing a saved object. | -| [SavedObjectsImportSimpleWarning](./kibana-plugin-core-server.savedobjectsimportsimplewarning.md) | A simple informative warning that will be displayed to the user. | -| [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) | Represents a successful import. | -| [SavedObjectsImportUnknownError](./kibana-plugin-core-server.savedobjectsimportunknownerror.md) | Represents a failure to import due to an unknown reason. | -| [SavedObjectsImportUnsupportedTypeError](./kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.md) | Represents a failure to import due to having an unsupported saved object type. | -| [SavedObjectsIncrementCounterField](./kibana-plugin-core-server.savedobjectsincrementcounterfield.md) | | -| [SavedObjectsIncrementCounterOptions](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.md) | | -| [SavedObjectsMappingProperties](./kibana-plugin-core-server.savedobjectsmappingproperties.md) | Describe the fields of a [saved object type](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md). | -| [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) | | -| [SavedObjectsMigrationVersion](./kibana-plugin-core-server.savedobjectsmigrationversion.md) | Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | -| [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) | | -| [SavedObjectsOpenPointInTimeResponse](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md) | | -| [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md) | | -| [SavedObjectsRawDoc](./kibana-plugin-core-server.savedobjectsrawdoc.md) | A raw document as represented directly in the saved object index. | -| [SavedObjectsRawDocParseOptions](./kibana-plugin-core-server.savedobjectsrawdocparseoptions.md) | Options that can be specified when using the saved objects serializer to parse a raw document. | -| [SavedObjectsRemoveReferencesToOptions](./kibana-plugin-core-server.savedobjectsremovereferencestooptions.md) | | -| [SavedObjectsRemoveReferencesToResponse](./kibana-plugin-core-server.savedobjectsremovereferencestoresponse.md) | | -| [SavedObjectsRepositoryFactory](./kibana-plugin-core-server.savedobjectsrepositoryfactory.md) | Factory provided when invoking a [client factory provider](./kibana-plugin-core-server.savedobjectsclientfactoryprovider.md) See [SavedObjectsServiceSetup.setClientFactoryProvider](./kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md) | -| [SavedObjectsResolveImportErrorsOptions](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) | Options to control the "resolve import" operation. | -| [SavedObjectsResolveResponse](./kibana-plugin-core-server.savedobjectsresolveresponse.md) | | -| [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) | Saved Objects is Kibana's data persistence mechanism allowing plugins to use Elasticsearch for storing and querying state. The SavedObjectsServiceSetup API exposes methods for registering Saved Object types, creating and registering Saved Object client wrappers and factories. | -| [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) | Saved Objects is Kibana's data persisentence mechanism allowing plugins to use Elasticsearch for storing and querying state. The SavedObjectsServiceStart API provides a scoped Saved Objects client for interacting with Saved Objects. | -| [SavedObjectStatusMeta](./kibana-plugin-core-server.savedobjectstatusmeta.md) | Meta information about the SavedObjectService's status. Available to plugins via [CoreSetup.status](./kibana-plugin-core-server.coresetup.status.md). | -| [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) | | -| [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) | Configuration options for the [type](./kibana-plugin-core-server.savedobjectstype.md)'s management section. | -| [SavedObjectsTypeMappingDefinition](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) | Describe a saved object type mapping. | -| [SavedObjectsUpdateObjectsSpacesObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md) | An object that should have its spaces updated. | -| [SavedObjectsUpdateObjectsSpacesOptions](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.md) | Options for the update operation. | -| [SavedObjectsUpdateObjectsSpacesResponse](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.md) | The response when objects' spaces are updated. | -| [SavedObjectsUpdateObjectsSpacesResponseObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md) | Details about a specific object's update result. | -| [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) | | -| [SavedObjectsUpdateResponse](./kibana-plugin-core-server.savedobjectsupdateresponse.md) | | -| [SavedObjectsValidationMap](./kibana-plugin-core-server.savedobjectsvalidationmap.md) | A map of [validation specs](./kibana-plugin-core-server.savedobjectsvalidationspec.md) to be used for a given type. The map's keys must be valid semver versions.Any time you change the schema of a [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md), you should add a new entry to this map for the Kibana version the change was introduced in. | -| [SearchResponse](./kibana-plugin-core-server.searchresponse.md) | | -| [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) | The current status of a service at a point in time. | -| [SessionCookieValidationResult](./kibana-plugin-core-server.sessioncookievalidationresult.md) | Return type from a function to validate cookie contents. | -| [SessionStorage](./kibana-plugin-core-server.sessionstorage.md) | Provides an interface to store and retrieve data across requests. | -| [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) | Configuration used to create HTTP session storage based on top of cookie mechanism. | -| [SessionStorageFactory](./kibana-plugin-core-server.sessionstoragefactory.md) | SessionStorage factory to bind one to an incoming request | -| [ShardsInfo](./kibana-plugin-core-server.shardsinfo.md) | | -| [ShardsResponse](./kibana-plugin-core-server.shardsresponse.md) | | -| [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) | API for accessing status of Core and this plugin's dependencies as well as for customizing this plugin's status. | -| [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) | UiSettings parameters defined by the plugins. | -| [UiSettingsServiceSetup](./kibana-plugin-core-server.uisettingsservicesetup.md) | | -| [UiSettingsServiceStart](./kibana-plugin-core-server.uisettingsservicestart.md) | | -| [UnauthorizedErrorHandlerNotHandledResult](./kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.md) | | -| [UnauthorizedErrorHandlerOptions](./kibana-plugin-core-server.unauthorizederrorhandleroptions.md) | | -| [UnauthorizedErrorHandlerResultRetryParams](./kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.md) | | -| [UnauthorizedErrorHandlerRetryResult](./kibana-plugin-core-server.unauthorizederrorhandlerretryresult.md) | | -| [UnauthorizedErrorHandlerToolkit](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md) | Toolkit passed to a [UnauthorizedErrorHandler](./kibana-plugin-core-server.unauthorizederrorhandler.md) used to generate responses from the handler | -| [UserProvidedValues](./kibana-plugin-core-server.userprovidedvalues.md) | Describes the values explicitly set by user. | - -## Variables - -| Variable | Description | -| --- | --- | -| [APP\_WRAPPER\_CLASS](./kibana-plugin-core-server.app_wrapper_class.md) | The class name for top level \*and\* nested application wrappers to ensure proper layout | -| [kibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) | Set of helpers used to create KibanaResponse to form HTTP response on an incoming request. Should be returned as a result of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) execution. | -| [mergeSavedObjectMigrationMaps](./kibana-plugin-core-server.mergesavedobjectmigrationmaps.md) | Merges two saved object migration maps.If there is a migration for a given version on only one of the maps, that migration function will be used:mergeSavedObjectMigrationMaps({ '1.2.3': f }, { '4.5.6': g }) -> { '1.2.3': f, '4.5.6': g }If there is a migration for a given version on both maps, the migrations will be composed:mergeSavedObjectMigrationMaps({ '1.2.3': f }, { '1.2.3': g }) -> { '1.2.3': (doc, context) => f(g(doc, context), context) } | -| [pollEsNodesVersion](./kibana-plugin-core-server.pollesnodesversion.md) | | -| [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md) | The current "level" of availability of a service. | -| [validBodyOutput](./kibana-plugin-core-server.validbodyoutput.md) | The set of valid body.output | - -## Type Aliases - -| Type Alias | Description | -| --- | --- | -| [AnalyticsServicePreboot](./kibana-plugin-core-server.analyticsservicepreboot.md) | Exposes the public APIs of the AnalyticsClient during the preboot phase | -| [AnalyticsServiceSetup](./kibana-plugin-core-server.analyticsservicesetup.md) | Exposes the public APIs of the AnalyticsClient during the setup phase. | -| [AnalyticsServiceStart](./kibana-plugin-core-server.analyticsservicestart.md) | Exposes the public APIs of the AnalyticsClient during the start phase | -| [AuthenticationHandler](./kibana-plugin-core-server.authenticationhandler.md) | See [AuthToolkit](./kibana-plugin-core-server.authtoolkit.md). | -| [AuthHeaders](./kibana-plugin-core-server.authheaders.md) | Auth Headers map | -| [AuthResult](./kibana-plugin-core-server.authresult.md) | | -| [CapabilitiesProvider](./kibana-plugin-core-server.capabilitiesprovider.md) | See [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) | -| [CapabilitiesSwitcher](./kibana-plugin-core-server.capabilitiesswitcher.md) | See [CapabilitiesSetup](./kibana-plugin-core-server.capabilitiessetup.md) | -| [CustomRequestHandlerContext](./kibana-plugin-core-server.customrequesthandlercontext.md) | | -| [DeprecationsDetails](./kibana-plugin-core-server.deprecationsdetails.md) | | -| [DestructiveRouteMethod](./kibana-plugin-core-server.destructiveroutemethod.md) | Set of HTTP methods changing the state of the server. | -| [ElasticsearchClient](./kibana-plugin-core-server.elasticsearchclient.md) | Client used to query the elasticsearch cluster. | -| [ElasticsearchClientConfig](./kibana-plugin-core-server.elasticsearchclientconfig.md) | Configuration options to be used to create a [cluster client](./kibana-plugin-core-server.iclusterclient.md) using the [createClient API](./kibana-plugin-core-server.elasticsearchservicestart.createclient.md) | -| [ExecutionContextStart](./kibana-plugin-core-server.executioncontextstart.md) | | -| [ExposedToBrowserDescriptor](./kibana-plugin-core-server.exposedtobrowserdescriptor.md) | Type defining the list of configuration properties that will be exposed on the client-side Object properties can either be fully exposed | -| [GetAuthHeaders](./kibana-plugin-core-server.getauthheaders.md) | Get headers to authenticate a user against Elasticsearch. | -| [GetAuthState](./kibana-plugin-core-server.getauthstate.md) | Gets authentication state for a request. Returned by auth interceptor. | -| [HandlerContextType](./kibana-plugin-core-server.handlercontexttype.md) | Extracts the type of the first argument of a [HandlerFunction](./kibana-plugin-core-server.handlerfunction.md) to represent the type of the context. | -| [HandlerFunction](./kibana-plugin-core-server.handlerfunction.md) | A function that accepts a context object and an optional number of additional arguments. Used for the generic types in [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) | -| [HandlerParameters](./kibana-plugin-core-server.handlerparameters.md) | Extracts the types of the additional arguments of a [HandlerFunction](./kibana-plugin-core-server.handlerfunction.md), excluding the [HandlerContextType](./kibana-plugin-core-server.handlercontexttype.md). | -| [Headers\_2](./kibana-plugin-core-server.headers_2.md) | Http request headers to read. | -| [HttpResourcesRequestHandler](./kibana-plugin-core-server.httpresourcesrequesthandler.md) | Extended version of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) having access to [HttpResourcesServiceToolkit](./kibana-plugin-core-server.httpresourcesservicetoolkit.md) to respond with HTML or JS resources. | -| [HttpResourcesResponseOptions](./kibana-plugin-core-server.httpresourcesresponseoptions.md) | HTTP Resources response parameters | -| [HttpResponsePayload](./kibana-plugin-core-server.httpresponsepayload.md) | Data send to the client as a response payload. | -| [IBasePath](./kibana-plugin-core-server.ibasepath.md) | Access or manipulate the Kibana base path[BasePath](./kibana-plugin-core-server.basepath.md) | -| [IContextProvider](./kibana-plugin-core-server.icontextprovider.md) | A function that returns a context value for a specific key of given context type. | -| [IsAuthenticated](./kibana-plugin-core-server.isauthenticated.md) | Returns authentication status for a request. | -| [ISavedObjectsRepository](./kibana-plugin-core-server.isavedobjectsrepository.md) | See [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) | -| [ISavedObjectTypeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) | See [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) for documentation. | -| [KibanaExecutionContext](./kibana-plugin-core-server.kibanaexecutioncontext.md) | Represents a meta-information about a Kibana entity initiating a search request. | -| [KibanaRequestRouteOptions](./kibana-plugin-core-server.kibanarequestrouteoptions.md) | Route options: If 'GET' or 'OPTIONS' method, body options won't be returned. | -| [KibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) | Creates an object containing request response payload, HTTP headers, error details, and other data transmitted to the client. | -| [KnownHeaders](./kibana-plugin-core-server.knownheaders.md) | Set of well-known HTTP headers. | -| [LifecycleResponseFactory](./kibana-plugin-core-server.lifecycleresponsefactory.md) | Creates an object containing redirection or error response with error details, HTTP headers, and other data transmitted to the client. | -| [MakeUsageFromSchema](./kibana-plugin-core-server.makeusagefromschema.md) | List of configuration values that will be exposed to usage collection. If parent node or actual config path is set to true then the actual value of these configs will be reoprted. If parent node or actual config path is set to false then the config will be reported as \[redacted\]. | -| [MetricsServiceStart](./kibana-plugin-core-server.metricsservicestart.md) | APIs to retrieves metrics gathered and exposed by the core platform. | -| [MutatingOperationRefreshSetting](./kibana-plugin-core-server.mutatingoperationrefreshsetting.md) | Elasticsearch Refresh setting for mutating operation | -| [OnPostAuthHandler](./kibana-plugin-core-server.onpostauthhandler.md) | See [OnPostAuthToolkit](./kibana-plugin-core-server.onpostauthtoolkit.md). | -| [OnPreAuthHandler](./kibana-plugin-core-server.onpreauthhandler.md) | See [OnPreAuthToolkit](./kibana-plugin-core-server.onpreauthtoolkit.md). | -| [OnPreResponseHandler](./kibana-plugin-core-server.onpreresponsehandler.md) | See [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md). | -| [OnPreRoutingHandler](./kibana-plugin-core-server.onpreroutinghandler.md) | See [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md). | -| [PluginConfigSchema](./kibana-plugin-core-server.pluginconfigschema.md) | Dedicated type for plugin configuration schema. | -| [PluginInitializer](./kibana-plugin-core-server.plugininitializer.md) | The plugin export at the root of a plugin's server directory should conform to this interface. | -| [PublicUiSettingsParams](./kibana-plugin-core-server.publicuisettingsparams.md) | A sub-set of [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) exposed to the client-side. | -| [RedirectResponseOptions](./kibana-plugin-core-server.redirectresponseoptions.md) | HTTP response parameters for redirection response | -| [RequestHandler](./kibana-plugin-core-server.requesthandler.md) | A function executed when route path matched requested resource path. Request handler is expected to return a result of one of [KibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) functions. If anything else is returned, or an error is thrown, the HTTP service will automatically log the error and respond 500 - Internal Server Error. | -| [RequestHandlerContextContainer](./kibana-plugin-core-server.requesthandlercontextcontainer.md) | An object that handles registration of http request context providers. | -| [RequestHandlerContextProvider](./kibana-plugin-core-server.requesthandlercontextprovider.md) | Context provider for request handler. Extends request context object with provided functionality or data. | -| [RequestHandlerWrapper](./kibana-plugin-core-server.requesthandlerwrapper.md) | Type-safe wrapper for [RequestHandler](./kibana-plugin-core-server.requesthandler.md) function. | -| [ResponseError](./kibana-plugin-core-server.responseerror.md) | Error message and optional data send to the client in case of error. | -| [ResponseErrorAttributes](./kibana-plugin-core-server.responseerrorattributes.md) | Additional data to provide error details. | -| [ResponseHeaders](./kibana-plugin-core-server.responseheaders.md) | Http response headers to set. | -| [RouteContentType](./kibana-plugin-core-server.routecontenttype.md) | The set of supported parseable Content-Types | -| [RouteMethod](./kibana-plugin-core-server.routemethod.md) | The set of common HTTP methods supported by Kibana routing. | -| [RouteRegistrar](./kibana-plugin-core-server.routeregistrar.md) | Route handler common definition | -| [RouteValidationFunction](./kibana-plugin-core-server.routevalidationfunction.md) | The custom validation function if @kbn/config-schema is not a valid solution for your specific plugin requirements. | -| [RouteValidationSpec](./kibana-plugin-core-server.routevalidationspec.md) | Allowed property validation options: either @kbn/config-schema validations or custom validation functionsSee [RouteValidationFunction](./kibana-plugin-core-server.routevalidationfunction.md) for custom validation. | -| [RouteValidatorFullConfig](./kibana-plugin-core-server.routevalidatorfullconfig.md) | Route validations config and options merged into one object | -| [SafeRouteMethod](./kibana-plugin-core-server.saferoutemethod.md) | Set of HTTP methods not changing the state of the server. | -| [SavedObjectAttribute](./kibana-plugin-core-server.savedobjectattribute.md) | Type definition for a Saved Object attribute value | -| [SavedObjectAttributeSingle](./kibana-plugin-core-server.savedobjectattributesingle.md) | Don't use this type, it's simply a helper type for [SavedObjectAttribute](./kibana-plugin-core-server.savedobjectattribute.md) | -| [SavedObjectMigrationFn](./kibana-plugin-core-server.savedobjectmigrationfn.md) | A migration function for a [saved object type](./kibana-plugin-core-server.savedobjectstype.md) used to migrate it to a given version | -| [SavedObjectSanitizedDoc](./kibana-plugin-core-server.savedobjectsanitizeddoc.md) | Describes Saved Object documents that have passed through the migration framework and are guaranteed to have a references root property. | -| [SavedObjectsClientContract](./kibana-plugin-core-server.savedobjectsclientcontract.md) | Saved Objects is Kibana's data persisentence mechanism allowing plugins to use Elasticsearch for storing plugin state.\#\# SavedObjectsClient errorsSince the SavedObjectsClient has its hands in everything we are a little paranoid about the way we present errors back to to application code. Ideally, all errors will be either:1. Caused by bad implementation (ie. undefined is not a function) and as such unpredictable 2. An error that has been classified and decorated appropriately by the decorators in [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md)Type 1 errors are inevitable, but since all expected/handle-able errors should be Type 2 the isXYZError() helpers exposed at SavedObjectsErrorHelpers should be used to understand and manage error responses from the SavedObjectsClient.Type 2 errors are decorated versions of the source error, so if the elasticsearch client threw an error it will be decorated based on its type. That means that rather than looking for error.body.error.type or doing substring checks on error.body.error.reason, just use the helpers to understand the meaning of the error:\`\`\`js if (SavedObjectsErrorHelpers.isNotFoundError(error)) { // handle 404 }if (SavedObjectsErrorHelpers.isNotAuthorizedError(error)) { // 401 handling should be automatic, but in case you wanted to know }// always rethrow the error unless you handle it throw error; \`\`\`\#\#\# 404s from missing indexFrom the perspective of application code and APIs the SavedObjectsClient is a black box that persists objects. One of the internal details that users have no control over is that we use an elasticsearch index for persistence and that index might be missing.At the time of writing we are in the process of transitioning away from the operating assumption that the SavedObjects index is always available. Part of this transition is handling errors resulting from an index missing. These used to trigger a 500 error in most cases, and in others cause 404s with different error messages.From my (Spencer) perspective, a 404 from the SavedObjectsApi is a 404; The object the request/call was targeting could not be found. This is why \#14141 takes special care to ensure that 404 errors are generic and don't distinguish between index missing or document missing.See [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) See [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) | -| [SavedObjectsClientFactory](./kibana-plugin-core-server.savedobjectsclientfactory.md) | Describes the factory used to create instances of the Saved Objects Client. | -| [SavedObjectsClientFactoryProvider](./kibana-plugin-core-server.savedobjectsclientfactoryprovider.md) | Provider to invoke to retrieve a [SavedObjectsClientFactory](./kibana-plugin-core-server.savedobjectsclientfactory.md). | -| [SavedObjectsClientWrapperFactory](./kibana-plugin-core-server.savedobjectsclientwrapperfactory.md) | Describes the factory used to create instances of Saved Objects Client Wrappers. | -| [SavedObjectsClosePointInTimeOptions](./kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md) | | -| [SavedObjectsCreatePointInTimeFinderOptions](./kibana-plugin-core-server.savedobjectscreatepointintimefinderoptions.md) | | -| [SavedObjectsExportTransform](./kibana-plugin-core-server.savedobjectsexporttransform.md) | Transformation function used to mutate the exported objects of the associated type.A type's export transform function will be executed once per user-initiated export, for all objects of that type. | -| [SavedObjectsFieldMapping](./kibana-plugin-core-server.savedobjectsfieldmapping.md) | Describe a [saved object type mapping](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) field.Please refer to [elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) For the mapping documentation | -| [SavedObjectsImportHook](./kibana-plugin-core-server.savedobjectsimporthook.md) | A hook associated with a specific saved object type, that will be invoked during the import process. The hook will have access to the objects of the registered type.Currently, the only supported feature for import hooks is to return warnings to be displayed in the UI when the import succeeds. The only interactions the hook can have with the import process is via the hook's response. Mutating the objects inside the hook's code will have no effect. | -| [SavedObjectsImportWarning](./kibana-plugin-core-server.savedobjectsimportwarning.md) | Composite type of all the possible types of import warnings.See [SavedObjectsImportSimpleWarning](./kibana-plugin-core-server.savedobjectsimportsimplewarning.md) and [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) for more details. | -| [SavedObjectsNamespaceType](./kibana-plugin-core-server.savedobjectsnamespacetype.md) | The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global. | -| [SavedObjectsValidationSpec](./kibana-plugin-core-server.savedobjectsvalidationspec.md) | Allows for validating properties using @kbn/config-schema validations. | -| [SavedObjectTypeExcludeFromUpgradeFilterHook](./kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md) | If defined, allows a type to run a search query and return a query filter that may match any documents which may be excluded from the next migration upgrade process. Useful for cleaning up large numbers of old documents which are no longer needed and may slow the migration process.If this hook fails, the migration will proceed without these documents having been filtered out, so this should not be used as a guarantee that these documents have been deleted.Experimental and subject to change | -| [SavedObjectUnsanitizedDoc](./kibana-plugin-core-server.savedobjectunsanitizeddoc.md) | Describes Saved Object documents from Kibana < 7.0.0 which don't have a references root property defined. This type should only be used in migrations. | -| [ScopeableRequest](./kibana-plugin-core-server.scopeablerequest.md) | A user credentials container. It accommodates the necessary auth credentials to impersonate the current user.See [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md). | -| [ServiceStatusLevel](./kibana-plugin-core-server.servicestatuslevel.md) | A convenience type that represents the union of each value in [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md). | -| [SharedGlobalConfig](./kibana-plugin-core-server.sharedglobalconfig.md) | | -| [StartServicesAccessor](./kibana-plugin-core-server.startservicesaccessor.md) | Allows plugins to get access to APIs available in start inside async handlers. Promise will not resolve until Core and plugin dependencies have completed start. This should only be used inside handlers registered during setup that will only be executed after start lifecycle. | -| [UiSettingsType](./kibana-plugin-core-server.uisettingstype.md) | UI element type to represent the settings. | -| [UnauthorizedError](./kibana-plugin-core-server.unauthorizederror.md) | | -| [UnauthorizedErrorHandler](./kibana-plugin-core-server.unauthorizederrorhandler.md) | A handler used to handle unauthorized error returned by elasticsearch | -| [UnauthorizedErrorHandlerResult](./kibana-plugin-core-server.unauthorizederrorhandlerresult.md) | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.mergesavedobjectmigrationmaps.md b/docs/development/core/server/kibana-plugin-core-server.mergesavedobjectmigrationmaps.md deleted file mode 100644 index 68cd580b57882..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.mergesavedobjectmigrationmaps.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [mergeSavedObjectMigrationMaps](./kibana-plugin-core-server.mergesavedobjectmigrationmaps.md) - -## mergeSavedObjectMigrationMaps variable - -Merges two saved object migration maps. - -If there is a migration for a given version on only one of the maps, that migration function will be used: - -mergeSavedObjectMigrationMaps({ '1.2.3': f }, { '4.5.6': g }) -> { '1.2.3': f, '4.5.6': g } - -If there is a migration for a given version on both maps, the migrations will be composed: - -mergeSavedObjectMigrationMaps({ '1.2.3': f }, { '1.2.3': g }) -> { '1.2.3': (doc, context) => f(g(doc, context), context) } - -Signature: - -```typescript -mergeSavedObjectMigrationMaps: (map1: SavedObjectMigrationMap, map2: SavedObjectMigrationMap) => SavedObjectMigrationMap -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.collectioninterval.md b/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.collectioninterval.md deleted file mode 100644 index 6f05526b66c83..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.collectioninterval.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) > [collectionInterval](./kibana-plugin-core-server.metricsservicesetup.collectioninterval.md) - -## MetricsServiceSetup.collectionInterval property - -Interval metrics are collected in milliseconds - -Signature: - -```typescript -readonly collectionInterval: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.getopsmetrics_.md b/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.getopsmetrics_.md deleted file mode 100644 index 0db06b231f60e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.getopsmetrics_.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) > [getOpsMetrics$](./kibana-plugin-core-server.metricsservicesetup.getopsmetrics_.md) - -## MetricsServiceSetup.getOpsMetrics$ property - -Retrieve an observable emitting the [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) gathered. The observable will emit an initial value during core's `start` phase, and a new value every fixed interval of time, based on the `opts.interval` configuration property. - -Signature: - -```typescript -getOpsMetrics$: () => Observable; -``` - -## Example - - -```ts -core.metrics.getOpsMetrics$().subscribe(metrics => { - // do something with the metrics -}) -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.md deleted file mode 100644 index d9b05589ab6a7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.metricsservicesetup.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) - -## MetricsServiceSetup interface - -APIs to retrieves metrics gathered and exposed by the core platform. - -Signature: - -```typescript -export interface MetricsServiceSetup -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [collectionInterval](./kibana-plugin-core-server.metricsservicesetup.collectioninterval.md) | number | Interval metrics are collected in milliseconds | -| [getOpsMetrics$](./kibana-plugin-core-server.metricsservicesetup.getopsmetrics_.md) | () => Observable<OpsMetrics> | Retrieve an observable emitting the [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) gathered. The observable will emit an initial value during core's start phase, and a new value every fixed interval of time, based on the opts.interval configuration property. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.metricsservicestart.md b/docs/development/core/server/kibana-plugin-core-server.metricsservicestart.md deleted file mode 100644 index 8b3280d528c18..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.metricsservicestart.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [MetricsServiceStart](./kibana-plugin-core-server.metricsservicestart.md) - -## MetricsServiceStart type - -APIs to retrieves metrics gathered and exposed by the core platform. - -Signature: - -```typescript -export declare type MetricsServiceStart = MetricsServiceSetup; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.mutatingoperationrefreshsetting.md b/docs/development/core/server/kibana-plugin-core-server.mutatingoperationrefreshsetting.md deleted file mode 100644 index 6fb93e39c9805..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.mutatingoperationrefreshsetting.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [MutatingOperationRefreshSetting](./kibana-plugin-core-server.mutatingoperationrefreshsetting.md) - -## MutatingOperationRefreshSetting type - -Elasticsearch Refresh setting for mutating operation - -Signature: - -```typescript -export declare type MutatingOperationRefreshSetting = boolean | 'wait_for'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md deleted file mode 100644 index 8e7298d28801c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [incompatibleNodes](./kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md) - -## NodesVersionCompatibility.incompatibleNodes property - -Signature: - -```typescript -incompatibleNodes: NodeInfo[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md deleted file mode 100644 index 82a4800a3b4b6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [isCompatible](./kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md) - -## NodesVersionCompatibility.isCompatible property - -Signature: - -```typescript -isCompatible: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md deleted file mode 100644 index 347f2d3474b11..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [kibanaVersion](./kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md) - -## NodesVersionCompatibility.kibanaVersion property - -Signature: - -```typescript -kibanaVersion: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md deleted file mode 100644 index a282bf4b7b4b6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) - -## NodesVersionCompatibility interface - -Signature: - -```typescript -export interface NodesVersionCompatibility -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [incompatibleNodes](./kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md) | NodeInfo\[\] | | -| [isCompatible](./kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md) | boolean | | -| [kibanaVersion](./kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md) | string | | -| [message?](./kibana-plugin-core-server.nodesversioncompatibility.message.md) | string | (Optional) | -| [nodesInfoRequestError?](./kibana-plugin-core-server.nodesversioncompatibility.nodesinforequesterror.md) | Error | (Optional) | -| [warningNodes](./kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md) | NodeInfo\[\] | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md deleted file mode 100644 index 415a7825ee2bf..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [message](./kibana-plugin-core-server.nodesversioncompatibility.message.md) - -## NodesVersionCompatibility.message property - -Signature: - -```typescript -message?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.nodesinforequesterror.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.nodesinforequesterror.md deleted file mode 100644 index aa9421afed6e8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.nodesinforequesterror.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [nodesInfoRequestError](./kibana-plugin-core-server.nodesversioncompatibility.nodesinforequesterror.md) - -## NodesVersionCompatibility.nodesInfoRequestError property - -Signature: - -```typescript -nodesInfoRequestError?: Error; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md deleted file mode 100644 index 6c017e9fc800c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [warningNodes](./kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md) - -## NodesVersionCompatibility.warningNodes property - -Signature: - -```typescript -warningNodes: NodeInfo[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpostauthhandler.md b/docs/development/core/server/kibana-plugin-core-server.onpostauthhandler.md deleted file mode 100644 index 2bc48928f57c4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpostauthhandler.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPostAuthHandler](./kibana-plugin-core-server.onpostauthhandler.md) - -## OnPostAuthHandler type - -See [OnPostAuthToolkit](./kibana-plugin-core-server.onpostauthtoolkit.md). - -Signature: - -```typescript -export declare type OnPostAuthHandler = (request: KibanaRequest, response: LifecycleResponseFactory, toolkit: OnPostAuthToolkit) => OnPostAuthResult | KibanaResponse | Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.md b/docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.md deleted file mode 100644 index 069f63fe01b77..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPostAuthToolkit](./kibana-plugin-core-server.onpostauthtoolkit.md) - -## OnPostAuthToolkit interface - -A tool set defining an outcome of OnPostAuth interceptor for incoming request. - -Signature: - -```typescript -export interface OnPostAuthToolkit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [next](./kibana-plugin-core-server.onpostauthtoolkit.next.md) | () => OnPostAuthResult | To pass request to the next handler | - diff --git a/docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.next.md b/docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.next.md deleted file mode 100644 index a633942cb030f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpostauthtoolkit.next.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPostAuthToolkit](./kibana-plugin-core-server.onpostauthtoolkit.md) > [next](./kibana-plugin-core-server.onpostauthtoolkit.next.md) - -## OnPostAuthToolkit.next property - -To pass request to the next handler - -Signature: - -```typescript -next: () => OnPostAuthResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreauthhandler.md b/docs/development/core/server/kibana-plugin-core-server.onpreauthhandler.md deleted file mode 100644 index b2997a29f6826..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreauthhandler.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreAuthHandler](./kibana-plugin-core-server.onpreauthhandler.md) - -## OnPreAuthHandler type - -See [OnPreAuthToolkit](./kibana-plugin-core-server.onpreauthtoolkit.md). - -Signature: - -```typescript -export declare type OnPreAuthHandler = (request: KibanaRequest, response: LifecycleResponseFactory, toolkit: OnPreAuthToolkit) => OnPreAuthResult | KibanaResponse | Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.md b/docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.md deleted file mode 100644 index 44eed5818c610..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreAuthToolkit](./kibana-plugin-core-server.onpreauthtoolkit.md) - -## OnPreAuthToolkit interface - -A tool set defining an outcome of OnPreAuth interceptor for incoming request. - -Signature: - -```typescript -export interface OnPreAuthToolkit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [next](./kibana-plugin-core-server.onpreauthtoolkit.next.md) | () => OnPreAuthResult | To pass request to the next handler | - diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.next.md b/docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.next.md deleted file mode 100644 index 96776b374cb84..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreauthtoolkit.next.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreAuthToolkit](./kibana-plugin-core-server.onpreauthtoolkit.md) > [next](./kibana-plugin-core-server.onpreauthtoolkit.next.md) - -## OnPreAuthToolkit.next property - -To pass request to the next handler - -Signature: - -```typescript -next: () => OnPreAuthResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.headers.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.headers.md deleted file mode 100644 index f05976b029f9d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseExtensions](./kibana-plugin-core-server.onpreresponseextensions.md) > [headers](./kibana-plugin-core-server.onpreresponseextensions.headers.md) - -## OnPreResponseExtensions.headers property - -additional headers to attach to the response - -Signature: - -```typescript -headers?: ResponseHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.md deleted file mode 100644 index 078ccc38a70c1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponseextensions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseExtensions](./kibana-plugin-core-server.onpreresponseextensions.md) - -## OnPreResponseExtensions interface - -Additional data to extend a response. - -Signature: - -```typescript -export interface OnPreResponseExtensions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [headers?](./kibana-plugin-core-server.onpreresponseextensions.headers.md) | ResponseHeaders | (Optional) additional headers to attach to the response | - diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponsehandler.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponsehandler.md deleted file mode 100644 index 10696fb79a2f6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponsehandler.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseHandler](./kibana-plugin-core-server.onpreresponsehandler.md) - -## OnPreResponseHandler type - -See [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md). - -Signature: - -```typescript -export declare type OnPreResponseHandler = (request: KibanaRequest, preResponse: OnPreResponseInfo, toolkit: OnPreResponseToolkit) => OnPreResponseResult | Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.md deleted file mode 100644 index 60f7f39ed30a6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseInfo](./kibana-plugin-core-server.onpreresponseinfo.md) - -## OnPreResponseInfo interface - -Response status code. - -Signature: - -```typescript -export interface OnPreResponseInfo -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [statusCode](./kibana-plugin-core-server.onpreresponseinfo.statuscode.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.statuscode.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.statuscode.md deleted file mode 100644 index fb2ced48e8961..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponseinfo.statuscode.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseInfo](./kibana-plugin-core-server.onpreresponseinfo.md) > [statusCode](./kibana-plugin-core-server.onpreresponseinfo.statuscode.md) - -## OnPreResponseInfo.statusCode property - -Signature: - -```typescript -statusCode: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.body.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.body.md deleted file mode 100644 index ab5b5e7a4f272..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseRender](./kibana-plugin-core-server.onpreresponserender.md) > [body](./kibana-plugin-core-server.onpreresponserender.body.md) - -## OnPreResponseRender.body property - -the body to use in the response - -Signature: - -```typescript -body: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.headers.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.headers.md deleted file mode 100644 index 100d12f63d165..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.headers.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseRender](./kibana-plugin-core-server.onpreresponserender.md) > [headers](./kibana-plugin-core-server.onpreresponserender.headers.md) - -## OnPreResponseRender.headers property - -additional headers to attach to the response - -Signature: - -```typescript -headers?: ResponseHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.md deleted file mode 100644 index a5afa1a709326..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponserender.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseRender](./kibana-plugin-core-server.onpreresponserender.md) - -## OnPreResponseRender interface - -Additional data to extend a response when rendering a new body - -Signature: - -```typescript -export interface OnPreResponseRender -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body](./kibana-plugin-core-server.onpreresponserender.body.md) | string | the body to use in the response | -| [headers?](./kibana-plugin-core-server.onpreresponserender.headers.md) | ResponseHeaders | (Optional) additional headers to attach to the response | - diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.md deleted file mode 100644 index 197b7b692e734..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseToolkit](./kibana-plugin-core-server.onpreresponsetoolkit.md) - -## OnPreResponseToolkit interface - -A tool set defining an outcome of OnPreResponse interceptor for incoming request. - -Signature: - -```typescript -export interface OnPreResponseToolkit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [next](./kibana-plugin-core-server.onpreresponsetoolkit.next.md) | (responseExtensions?: OnPreResponseExtensions) => OnPreResponseResult | To pass request to the next handler | -| [render](./kibana-plugin-core-server.onpreresponsetoolkit.render.md) | (responseRender: OnPreResponseRender) => OnPreResponseResult | To override the response with a different body | - diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.next.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.next.md deleted file mode 100644 index 236c3f9bb7419..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.next.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseToolkit](./kibana-plugin-core-server.onpreresponsetoolkit.md) > [next](./kibana-plugin-core-server.onpreresponsetoolkit.next.md) - -## OnPreResponseToolkit.next property - -To pass request to the next handler - -Signature: - -```typescript -next: (responseExtensions?: OnPreResponseExtensions) => OnPreResponseResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.render.md b/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.render.md deleted file mode 100644 index 7dced7fe8deee..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreresponsetoolkit.render.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreResponseToolkit](./kibana-plugin-core-server.onpreresponsetoolkit.md) > [render](./kibana-plugin-core-server.onpreresponsetoolkit.render.md) - -## OnPreResponseToolkit.render property - -To override the response with a different body - -Signature: - -```typescript -render: (responseRender: OnPreResponseRender) => OnPreResponseResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreroutinghandler.md b/docs/development/core/server/kibana-plugin-core-server.onpreroutinghandler.md deleted file mode 100644 index 46016bcd5476a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreroutinghandler.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreRoutingHandler](./kibana-plugin-core-server.onpreroutinghandler.md) - -## OnPreRoutingHandler type - -See [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md). - -Signature: - -```typescript -export declare type OnPreRoutingHandler = (request: KibanaRequest, response: LifecycleResponseFactory, toolkit: OnPreRoutingToolkit) => OnPreRoutingResult | KibanaResponse | Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.md b/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.md deleted file mode 100644 index e3bdeb3c451c4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md) - -## OnPreRoutingToolkit interface - -A tool set defining an outcome of OnPreRouting interceptor for incoming request. - -Signature: - -```typescript -export interface OnPreRoutingToolkit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [next](./kibana-plugin-core-server.onpreroutingtoolkit.next.md) | () => OnPreRoutingResult | To pass request to the next handler | -| [rewriteUrl](./kibana-plugin-core-server.onpreroutingtoolkit.rewriteurl.md) | (url: string) => OnPreRoutingResult | Rewrite requested resources url before is was authenticated and routed to a handler | - diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.next.md b/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.next.md deleted file mode 100644 index 7fb0b2ce67ba5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.next.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md) > [next](./kibana-plugin-core-server.onpreroutingtoolkit.next.md) - -## OnPreRoutingToolkit.next property - -To pass request to the next handler - -Signature: - -```typescript -next: () => OnPreRoutingResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.rewriteurl.md b/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.rewriteurl.md deleted file mode 100644 index 346a12711c723..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.onpreroutingtoolkit.rewriteurl.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OnPreRoutingToolkit](./kibana-plugin-core-server.onpreroutingtoolkit.md) > [rewriteUrl](./kibana-plugin-core-server.onpreroutingtoolkit.rewriteurl.md) - -## OnPreRoutingToolkit.rewriteUrl property - -Rewrite requested resources url before is was authenticated and routed to a handler - -Signature: - -```typescript -rewriteUrl: (url: string) => OnPreRoutingResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.collected_at.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.collected_at.md deleted file mode 100644 index 25125569b7b38..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.collected_at.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) > [collected\_at](./kibana-plugin-core-server.opsmetrics.collected_at.md) - -## OpsMetrics.collected\_at property - -Time metrics were recorded at. - -Signature: - -```typescript -collected_at: Date; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.concurrent_connections.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.concurrent_connections.md deleted file mode 100644 index 18d1dc7d13ece..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.concurrent_connections.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) > [concurrent\_connections](./kibana-plugin-core-server.opsmetrics.concurrent_connections.md) - -## OpsMetrics.concurrent\_connections property - -number of current concurrent connections to the server - -Signature: - -```typescript -concurrent_connections: OpsServerMetrics['concurrent_connections']; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.md deleted file mode 100644 index dcecfd35a8d2d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) - -## OpsMetrics interface - -Regroups metrics gathered by all the collectors. This contains metrics about the os/runtime, the kibana process and the http server. - -Signature: - -```typescript -export interface OpsMetrics -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [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. | -| [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.os.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.os.md deleted file mode 100644 index a893c847f48be..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.os.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) > [os](./kibana-plugin-core-server.opsmetrics.os.md) - -## OpsMetrics.os property - -OS related metrics - -Signature: - -```typescript -os: OpsOsMetrics; -``` 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 deleted file mode 100644 index fa91e8b295b6e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.process.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) > [process](./kibana-plugin-core-server.opsmetrics.process.md) - -## OpsMetrics.process property - -> Warning: This API is now obsolete. -> -> use the processes field instead. 8.8.0 -> - -Process related metrics. - -Signature: - -```typescript -process: OpsProcessMetrics; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.processes.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.processes.md deleted file mode 100644 index cf1f0a7c54475..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.processes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) > [processes](./kibana-plugin-core-server.opsmetrics.processes.md) - -## OpsMetrics.processes property - -Process related metrics. Reports an array of objects for each kibana pid. - -Signature: - -```typescript -processes: OpsProcessMetrics[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.requests.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.requests.md deleted file mode 100644 index 36d0f445fa8b9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.requests.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) > [requests](./kibana-plugin-core-server.opsmetrics.requests.md) - -## OpsMetrics.requests property - -server requests stats - -Signature: - -```typescript -requests: OpsServerMetrics['requests']; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.response_times.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.response_times.md deleted file mode 100644 index 6eeef7f607615..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.response_times.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsMetrics](./kibana-plugin-core-server.opsmetrics.md) > [response\_times](./kibana-plugin-core-server.opsmetrics.response_times.md) - -## OpsMetrics.response\_times property - -server response time stats - -Signature: - -```typescript -response_times: OpsServerMetrics['response_times']; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpu.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpu.md deleted file mode 100644 index 095c45266a251..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpu.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [cpu](./kibana-plugin-core-server.opsosmetrics.cpu.md) - -## OpsOsMetrics.cpu property - -cpu cgroup metrics, undefined when not running in a cgroup - -Signature: - -```typescript -cpu?: { - control_group: string; - cfs_period_micros: number; - cfs_quota_micros: number; - stat: { - number_of_elapsed_periods: number; - number_of_times_throttled: number; - time_throttled_nanos: number; - }; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpuacct.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpuacct.md deleted file mode 100644 index 140646a0d1a35..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.cpuacct.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [cpuacct](./kibana-plugin-core-server.opsosmetrics.cpuacct.md) - -## OpsOsMetrics.cpuacct property - -cpu accounting metrics, undefined when not running in a cgroup - -Signature: - -```typescript -cpuacct?: { - control_group: string; - usage_nanos: number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distro.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distro.md deleted file mode 100644 index ef0f46cc220c4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distro.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [distro](./kibana-plugin-core-server.opsosmetrics.distro.md) - -## OpsOsMetrics.distro property - -The os distrib. Only present for linux platforms - -Signature: - -```typescript -distro?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distrorelease.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distrorelease.md deleted file mode 100644 index 88bf59888a55e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.distrorelease.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [distroRelease](./kibana-plugin-core-server.opsosmetrics.distrorelease.md) - -## OpsOsMetrics.distroRelease property - -The os distrib release, prefixed by the os distrib. Only present for linux platforms - -Signature: - -```typescript -distroRelease?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.load.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.load.md deleted file mode 100644 index 060086cc26def..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.load.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [load](./kibana-plugin-core-server.opsosmetrics.load.md) - -## OpsOsMetrics.load property - -cpu load metrics - -Signature: - -```typescript -load: { - '1m': number; - '5m': number; - '15m': number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.md deleted file mode 100644 index 08f205d48dd09..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) - -## OpsOsMetrics interface - -OS related metrics - -Signature: - -```typescript -export interface OpsOsMetrics -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [cpu?](./kibana-plugin-core-server.opsosmetrics.cpu.md) | { control\_group: string; cfs\_period\_micros: number; cfs\_quota\_micros: number; stat: { number\_of\_elapsed\_periods: number; number\_of\_times\_throttled: number; time\_throttled\_nanos: number; }; } | (Optional) cpu cgroup metrics, undefined when not running in a cgroup | -| [cpuacct?](./kibana-plugin-core-server.opsosmetrics.cpuacct.md) | { control\_group: string; usage\_nanos: number; } | (Optional) cpu accounting metrics, undefined when not running in a cgroup | -| [distro?](./kibana-plugin-core-server.opsosmetrics.distro.md) | string | (Optional) The os distrib. Only present for linux platforms | -| [distroRelease?](./kibana-plugin-core-server.opsosmetrics.distrorelease.md) | string | (Optional) The os distrib release, prefixed by the os distrib. Only present for linux platforms | -| [load](./kibana-plugin-core-server.opsosmetrics.load.md) | { '1m': number; '5m': number; '15m': number; } | cpu load metrics | -| [memory](./kibana-plugin-core-server.opsosmetrics.memory.md) | { total\_in\_bytes: number; free\_in\_bytes: number; used\_in\_bytes: number; } | system memory usage metrics | -| [platform](./kibana-plugin-core-server.opsosmetrics.platform.md) | NodeJS.Platform | The os platform | -| [platformRelease](./kibana-plugin-core-server.opsosmetrics.platformrelease.md) | string | The os platform release, prefixed by the platform name | -| [uptime\_in\_millis](./kibana-plugin-core-server.opsosmetrics.uptime_in_millis.md) | number | the OS uptime | - diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.memory.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.memory.md deleted file mode 100644 index 10ff674cbda87..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.memory.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [memory](./kibana-plugin-core-server.opsosmetrics.memory.md) - -## OpsOsMetrics.memory property - -system memory usage metrics - -Signature: - -```typescript -memory: { - total_in_bytes: number; - free_in_bytes: number; - used_in_bytes: number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platform.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platform.md deleted file mode 100644 index 0f4bbf81e2514..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platform.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [platform](./kibana-plugin-core-server.opsosmetrics.platform.md) - -## OpsOsMetrics.platform property - -The os platform - -Signature: - -```typescript -platform: NodeJS.Platform; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platformrelease.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platformrelease.md deleted file mode 100644 index b82898ddda632..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.platformrelease.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [platformRelease](./kibana-plugin-core-server.opsosmetrics.platformrelease.md) - -## OpsOsMetrics.platformRelease property - -The os platform release, prefixed by the platform name - -Signature: - -```typescript -platformRelease: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.uptime_in_millis.md b/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.uptime_in_millis.md deleted file mode 100644 index fcae35f02cb80..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsosmetrics.uptime_in_millis.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsOsMetrics](./kibana-plugin-core-server.opsosmetrics.md) > [uptime\_in\_millis](./kibana-plugin-core-server.opsosmetrics.uptime_in_millis.md) - -## OpsOsMetrics.uptime\_in\_millis property - -the OS uptime - -Signature: - -```typescript -uptime_in_millis: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay.md b/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay.md deleted file mode 100644 index d626b9cf8f98c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsProcessMetrics](./kibana-plugin-core-server.opsprocessmetrics.md) > [event\_loop\_delay](./kibana-plugin-core-server.opsprocessmetrics.event_loop_delay.md) - -## OpsProcessMetrics.event\_loop\_delay property - -mean event loop delay since last collection - -Signature: - -```typescript -event_loop_delay: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay_histogram.md b/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay_histogram.md deleted file mode 100644 index 1d870b19f2d1f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.event_loop_delay_histogram.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsProcessMetrics](./kibana-plugin-core-server.opsprocessmetrics.md) > [event\_loop\_delay\_histogram](./kibana-plugin-core-server.opsprocessmetrics.event_loop_delay_histogram.md) - -## OpsProcessMetrics.event\_loop\_delay\_histogram property - -node event loop delay histogram since last collection - -Signature: - -```typescript -event_loop_delay_histogram: IntervalHistogram; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.md b/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.md deleted file mode 100644 index 43a4333d7bd2c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsProcessMetrics](./kibana-plugin-core-server.opsprocessmetrics.md) - -## OpsProcessMetrics interface - -Process related metrics - -Signature: - -```typescript -export interface OpsProcessMetrics -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [event\_loop\_delay\_histogram](./kibana-plugin-core-server.opsprocessmetrics.event_loop_delay_histogram.md) | IntervalHistogram | node event loop delay histogram since last collection | -| [event\_loop\_delay](./kibana-plugin-core-server.opsprocessmetrics.event_loop_delay.md) | number | mean event loop delay since last collection | -| [memory](./kibana-plugin-core-server.opsprocessmetrics.memory.md) | { heap: { total\_in\_bytes: number; used\_in\_bytes: number; size\_limit: number; }; resident\_set\_size\_in\_bytes: number; } | process memory usage | -| [pid](./kibana-plugin-core-server.opsprocessmetrics.pid.md) | number | pid of the kibana process | -| [uptime\_in\_millis](./kibana-plugin-core-server.opsprocessmetrics.uptime_in_millis.md) | number | uptime of the kibana process | - diff --git a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.memory.md b/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.memory.md deleted file mode 100644 index 3bb4aee9f27d1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.memory.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsProcessMetrics](./kibana-plugin-core-server.opsprocessmetrics.md) > [memory](./kibana-plugin-core-server.opsprocessmetrics.memory.md) - -## OpsProcessMetrics.memory property - -process memory usage - -Signature: - -```typescript -memory: { - heap: { - total_in_bytes: number; - used_in_bytes: number; - size_limit: number; - }; - resident_set_size_in_bytes: number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.pid.md b/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.pid.md deleted file mode 100644 index a324d758d08cf..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.pid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsProcessMetrics](./kibana-plugin-core-server.opsprocessmetrics.md) > [pid](./kibana-plugin-core-server.opsprocessmetrics.pid.md) - -## OpsProcessMetrics.pid property - -pid of the kibana process - -Signature: - -```typescript -pid: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.uptime_in_millis.md b/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.uptime_in_millis.md deleted file mode 100644 index 9879ce44bce1e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsprocessmetrics.uptime_in_millis.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsProcessMetrics](./kibana-plugin-core-server.opsprocessmetrics.md) > [uptime\_in\_millis](./kibana-plugin-core-server.opsprocessmetrics.uptime_in_millis.md) - -## OpsProcessMetrics.uptime\_in\_millis property - -uptime of the kibana process - -Signature: - -```typescript -uptime_in_millis: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.concurrent_connections.md b/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.concurrent_connections.md deleted file mode 100644 index 30fdee9b958e4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.concurrent_connections.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsServerMetrics](./kibana-plugin-core-server.opsservermetrics.md) > [concurrent\_connections](./kibana-plugin-core-server.opsservermetrics.concurrent_connections.md) - -## OpsServerMetrics.concurrent\_connections property - -number of current concurrent connections to the server - -Signature: - -```typescript -concurrent_connections: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.md b/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.md deleted file mode 100644 index ddabbd124627b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsServerMetrics](./kibana-plugin-core-server.opsservermetrics.md) - -## OpsServerMetrics interface - -server related metrics - -Signature: - -```typescript -export interface OpsServerMetrics -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [concurrent\_connections](./kibana-plugin-core-server.opsservermetrics.concurrent_connections.md) | number | number of current concurrent connections to the server | -| [requests](./kibana-plugin-core-server.opsservermetrics.requests.md) | { disconnects: number; total: number; statusCodes: Record<number, number>; } | server requests stats | -| [response\_times](./kibana-plugin-core-server.opsservermetrics.response_times.md) | { avg\_in\_millis: number; max\_in\_millis: number; } | server response time stats | - diff --git a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.requests.md b/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.requests.md deleted file mode 100644 index 7439b1017e72c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.requests.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsServerMetrics](./kibana-plugin-core-server.opsservermetrics.md) > [requests](./kibana-plugin-core-server.opsservermetrics.requests.md) - -## OpsServerMetrics.requests property - -server requests stats - -Signature: - -```typescript -requests: { - disconnects: number; - total: number; - statusCodes: Record; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.response_times.md b/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.response_times.md deleted file mode 100644 index be66b0b1c1c79..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.opsservermetrics.response_times.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [OpsServerMetrics](./kibana-plugin-core-server.opsservermetrics.md) > [response\_times](./kibana-plugin-core-server.opsservermetrics.response_times.md) - -## OpsServerMetrics.response\_times property - -server response time stats - -Signature: - -```typescript -response_times: { - avg_in_millis: number; - max_in_millis: number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.plugin_2.md b/docs/development/core/server/kibana-plugin-core-server.plugin_2.md deleted file mode 100644 index 79dbbb56c86fd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugin_2.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Plugin\_2](./kibana-plugin-core-server.plugin_2.md) - -## Plugin\_2 interface - -The interface that should be returned by a `PluginInitializer` for a `standard` plugin. - -Signature: - -```typescript -export interface Plugin -``` - -## Methods - -| Method | Description | -| --- | --- | -| [setup(core, plugins)](./kibana-plugin-core-server.plugin_2.setup.md) | | -| [start(core, plugins)](./kibana-plugin-core-server.plugin_2.start.md) | | -| [stop()?](./kibana-plugin-core-server.plugin_2.stop.md) | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.plugin_2.setup.md b/docs/development/core/server/kibana-plugin-core-server.plugin_2.setup.md deleted file mode 100644 index cedce40b58000..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugin_2.setup.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Plugin\_2](./kibana-plugin-core-server.plugin_2.md) > [setup](./kibana-plugin-core-server.plugin_2.setup.md) - -## Plugin\_2.setup() method - -Signature: - -```typescript -setup(core: CoreSetup, plugins: TPluginsSetup): TSetup; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| core | CoreSetup | | -| plugins | TPluginsSetup | | - -Returns: - -TSetup - diff --git a/docs/development/core/server/kibana-plugin-core-server.plugin_2.start.md b/docs/development/core/server/kibana-plugin-core-server.plugin_2.start.md deleted file mode 100644 index 08eb5431a2cf2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugin_2.start.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Plugin\_2](./kibana-plugin-core-server.plugin_2.md) > [start](./kibana-plugin-core-server.plugin_2.start.md) - -## Plugin\_2.start() method - -Signature: - -```typescript -start(core: CoreStart, plugins: TPluginsStart): TStart; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| core | CoreStart | | -| plugins | TPluginsStart | | - -Returns: - -TStart - diff --git a/docs/development/core/server/kibana-plugin-core-server.plugin_2.stop.md b/docs/development/core/server/kibana-plugin-core-server.plugin_2.stop.md deleted file mode 100644 index 5b62a5e82b2ed..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugin_2.stop.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [Plugin\_2](./kibana-plugin-core-server.plugin_2.md) > [stop](./kibana-plugin-core-server.plugin_2.stop.md) - -## Plugin\_2.stop() method - -Signature: - -```typescript -stop?(): void; -``` -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.deprecations.md b/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.deprecations.md deleted file mode 100644 index d06b3cb9fa64a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.deprecations.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginConfigDescriptor](./kibana-plugin-core-server.pluginconfigdescriptor.md) > [deprecations](./kibana-plugin-core-server.pluginconfigdescriptor.deprecations.md) - -## PluginConfigDescriptor.deprecations property - -Provider for the to apply to the plugin configuration. - -Signature: - -```typescript -deprecations?: ConfigDeprecationProvider; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetobrowser.md b/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetobrowser.md deleted file mode 100644 index 212a0d1c9a26b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetobrowser.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginConfigDescriptor](./kibana-plugin-core-server.pluginconfigdescriptor.md) > [exposeToBrowser](./kibana-plugin-core-server.pluginconfigdescriptor.exposetobrowser.md) - -## PluginConfigDescriptor.exposeToBrowser property - -List of configuration properties that will be available on the client-side plugin. - -Signature: - -```typescript -exposeToBrowser?: ExposedToBrowserDescriptor; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetousage.md b/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetousage.md deleted file mode 100644 index 8c50c2e339426..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.exposetousage.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginConfigDescriptor](./kibana-plugin-core-server.pluginconfigdescriptor.md) > [exposeToUsage](./kibana-plugin-core-server.pluginconfigdescriptor.exposetousage.md) - -## PluginConfigDescriptor.exposeToUsage property - -Expose non-default configs to usage collection to be sent via telemetry. set a config to `true` to report the actual changed config value. set a config to `false` to report the changed config value as \[redacted\]. - -All changed configs except booleans and numbers will be reported as \[redacted\] unless otherwise specified. - -[MakeUsageFromSchema](./kibana-plugin-core-server.makeusagefromschema.md) - -Signature: - -```typescript -exposeToUsage?: MakeUsageFromSchema; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.md b/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.md deleted file mode 100644 index f5d18c9f40f4d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.md +++ /dev/null @@ -1,50 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginConfigDescriptor](./kibana-plugin-core-server.pluginconfigdescriptor.md) - -## PluginConfigDescriptor interface - -Describes a plugin configuration properties. - -Signature: - -```typescript -export interface PluginConfigDescriptor -``` - -## Example - - -```typescript -// my_plugin/server/index.ts -import { schema, TypeOf } from '@kbn/config-schema'; -import { PluginConfigDescriptor } from 'kibana/server'; - -const configSchema = schema.object({ - secret: schema.string({ defaultValue: 'Only on server' }), - uiProp: schema.string({ defaultValue: 'Accessible from client' }), -}); - -type ConfigType = TypeOf; - -export const config: PluginConfigDescriptor = { - exposeToBrowser: { - uiProp: true, - }, - schema: configSchema, - deprecations: ({ rename, unused }) => [ - rename('securityKey', 'secret'), - unused('deprecatedProperty'), - ], -}; -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [deprecations?](./kibana-plugin-core-server.pluginconfigdescriptor.deprecations.md) | ConfigDeprecationProvider | (Optional) Provider for the to apply to the plugin configuration. | -| [exposeToBrowser?](./kibana-plugin-core-server.pluginconfigdescriptor.exposetobrowser.md) | ExposedToBrowserDescriptor<T> | (Optional) List of configuration properties that will be available on the client-side plugin. | -| [exposeToUsage?](./kibana-plugin-core-server.pluginconfigdescriptor.exposetousage.md) | MakeUsageFromSchema<T> | (Optional) Expose non-default configs to usage collection to be sent via telemetry. set a config to true to report the actual changed config value. set a config to false to report the changed config value as \[redacted\].All changed configs except booleans and numbers will be reported as \[redacted\] unless otherwise specified.[MakeUsageFromSchema](./kibana-plugin-core-server.makeusagefromschema.md) | -| [schema](./kibana-plugin-core-server.pluginconfigdescriptor.schema.md) | PluginConfigSchema<T> | Schema to use to validate the plugin configuration.[PluginConfigSchema](./kibana-plugin-core-server.pluginconfigschema.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.schema.md b/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.schema.md deleted file mode 100644 index 700b311d941a8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.schema.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginConfigDescriptor](./kibana-plugin-core-server.pluginconfigdescriptor.md) > [schema](./kibana-plugin-core-server.pluginconfigdescriptor.schema.md) - -## PluginConfigDescriptor.schema property - -Schema to use to validate the plugin configuration. - -[PluginConfigSchema](./kibana-plugin-core-server.pluginconfigschema.md) - -Signature: - -```typescript -schema: PluginConfigSchema; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginconfigschema.md b/docs/development/core/server/kibana-plugin-core-server.pluginconfigschema.md deleted file mode 100644 index 6f4c60975b48c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginconfigschema.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginConfigSchema](./kibana-plugin-core-server.pluginconfigschema.md) - -## PluginConfigSchema type - -Dedicated type for plugin configuration schema. - -Signature: - -```typescript -export declare type PluginConfigSchema = Type; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.plugininitializer.md b/docs/development/core/server/kibana-plugin-core-server.plugininitializer.md deleted file mode 100644 index 9b4d1b022db2a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugininitializer.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginInitializer](./kibana-plugin-core-server.plugininitializer.md) - -## PluginInitializer type - -The `plugin` export at the root of a plugin's `server` directory should conform to this interface. - -Signature: - -```typescript -export declare type PluginInitializer = (core: PluginInitializerContext) => Plugin | PrebootPlugin | AsyncPlugin; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.config.md b/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.config.md deleted file mode 100644 index 3b5754eb4fa39..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.config.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginInitializerContext](./kibana-plugin-core-server.plugininitializercontext.md) > [config](./kibana-plugin-core-server.plugininitializercontext.config.md) - -## PluginInitializerContext.config property - -Accessors for the plugin's configuration - -Signature: - -```typescript -config: { - legacy: { - globalConfig$: Observable; - get: () => SharedGlobalConfig; - }; - create: () => Observable; - get: () => T; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.env.md b/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.env.md deleted file mode 100644 index 534f532850587..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.env.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginInitializerContext](./kibana-plugin-core-server.plugininitializercontext.md) > [env](./kibana-plugin-core-server.plugininitializercontext.env.md) - -## PluginInitializerContext.env property - -Signature: - -```typescript -env: { - mode: EnvironmentMode; - packageInfo: Readonly; - instanceUuid: string; - configs: readonly string[]; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.logger.md b/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.logger.md deleted file mode 100644 index 74bf5b0c1384c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.logger.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginInitializerContext](./kibana-plugin-core-server.plugininitializercontext.md) > [logger](./kibana-plugin-core-server.plugininitializercontext.logger.md) - -## PluginInitializerContext.logger property - - instance already bound to the plugin's logging context - -Signature: - -```typescript -logger: LoggerFactory; -``` - -## Example - - -```typescript -// plugins/my-plugin/server/plugin.ts -// "id: myPlugin" in `plugins/my-plugin/kibana.yaml` - -export class MyPlugin implements Plugin { - constructor(private readonly initContext: PluginInitializerContext) { - this.logger = initContext.logger.get(); - // `logger` context: `plugins.myPlugin` - this.mySubLogger = initContext.logger.get('sub'); // or this.logger.get('sub'); - // `mySubLogger` context: `plugins.myPlugin.sub` - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.md b/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.md deleted file mode 100644 index e2d115578d7c1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginInitializerContext](./kibana-plugin-core-server.plugininitializercontext.md) - -## PluginInitializerContext interface - -Context that's available to plugins during initialization stage. - -Signature: - -```typescript -export interface PluginInitializerContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [config](./kibana-plugin-core-server.plugininitializercontext.config.md) | { legacy: { globalConfig$: Observable<SharedGlobalConfig>; get: () => SharedGlobalConfig; }; create: <T = ConfigSchema>() => Observable<T>; get: <T = ConfigSchema>() => T; } | Accessors for the plugin's configuration | -| [env](./kibana-plugin-core-server.plugininitializercontext.env.md) | { mode: EnvironmentMode; packageInfo: Readonly<PackageInfo>; instanceUuid: string; configs: readonly string\[\]; } | | -| [logger](./kibana-plugin-core-server.plugininitializercontext.logger.md) | LoggerFactory | instance already bound to the plugin's logging context | -| [opaqueId](./kibana-plugin-core-server.plugininitializercontext.opaqueid.md) | PluginOpaqueId | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.opaqueid.md b/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.opaqueid.md deleted file mode 100644 index 6e2ef10114687..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.opaqueid.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginInitializerContext](./kibana-plugin-core-server.plugininitializercontext.md) > [opaqueId](./kibana-plugin-core-server.plugininitializercontext.opaqueid.md) - -## PluginInitializerContext.opaqueId property - -Signature: - -```typescript -opaqueId: PluginOpaqueId; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.configpath.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.configpath.md deleted file mode 100644 index 8aa603242df8e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.configpath.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [configPath](./kibana-plugin-core-server.pluginmanifest.configpath.md) - -## PluginManifest.configPath property - -Root used by the plugin, defaults to "id" in snake\_case format. - -Signature: - -```typescript -readonly configPath: ConfigPath; -``` - -## Example - -id: myPlugin configPath: my\_plugin - diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.description.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.description.md deleted file mode 100644 index b6bba3b5e356c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.description.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [description](./kibana-plugin-core-server.pluginmanifest.description.md) - -## PluginManifest.description property - -TODO: make required once all plugins specify this. A brief description of what this plugin does and any capabilities it provides. - -Signature: - -```typescript -readonly description?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.enabledonanonymouspages.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.enabledonanonymouspages.md deleted file mode 100644 index 359e84c67cac2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.enabledonanonymouspages.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [enabledOnAnonymousPages](./kibana-plugin-core-server.pluginmanifest.enabledonanonymouspages.md) - -## PluginManifest.enabledOnAnonymousPages property - -Specifies whether this plugin - and its required dependencies - will be enabled for anonymous pages (login page, status page when configured, etc.) Default is false. - -Signature: - -```typescript -readonly enabledOnAnonymousPages?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.extrapublicdirs.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.extrapublicdirs.md deleted file mode 100644 index fc1b3a800720d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.extrapublicdirs.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [extraPublicDirs](./kibana-plugin-core-server.pluginmanifest.extrapublicdirs.md) - -## PluginManifest.extraPublicDirs property - -> Warning: This API is now obsolete. -> -> To be deleted when https://github.com/elastic/kibana/issues/101948 is done. -> - -Specifies directory names that can be imported by other ui-plugins built using the same instance of the @kbn/optimizer. A temporary measure we plan to replace with better mechanisms for sharing static code between plugins - -Signature: - -```typescript -readonly extraPublicDirs?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.id.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.id.md deleted file mode 100644 index 7a846f99c0bbb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [id](./kibana-plugin-core-server.pluginmanifest.id.md) - -## PluginManifest.id property - -Identifier of the plugin. Must be a string in camelCase. Part of a plugin public contract. Other plugins leverage it to access plugin API, navigate to the plugin, etc. - -Signature: - -```typescript -readonly id: PluginName; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.kibanaversion.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.kibanaversion.md deleted file mode 100644 index 822e280172138..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.kibanaversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [kibanaVersion](./kibana-plugin-core-server.pluginmanifest.kibanaversion.md) - -## PluginManifest.kibanaVersion property - -The version of Kibana the plugin is compatible with, defaults to "version". - -Signature: - -```typescript -readonly kibanaVersion: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md deleted file mode 100644 index eb3ba06c311c9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md +++ /dev/null @@ -1,38 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) - -## PluginManifest interface - -Describes the set of required and optional properties plugin can define in its mandatory JSON manifest file. - -Signature: - -```typescript -export interface PluginManifest -``` - -## Remarks - -Should never be used in code outside of Core but is exported for documentation purposes. - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [configPath](./kibana-plugin-core-server.pluginmanifest.configpath.md) | ConfigPath | Root used by the plugin, defaults to "id" in snake\_case format. | -| [description?](./kibana-plugin-core-server.pluginmanifest.description.md) | string | (Optional) TODO: make required once all plugins specify this. A brief description of what this plugin does and any capabilities it provides. | -| [enabledOnAnonymousPages?](./kibana-plugin-core-server.pluginmanifest.enabledonanonymouspages.md) | boolean | (Optional) Specifies whether this plugin - and its required dependencies - will be enabled for anonymous pages (login page, status page when configured, etc.) Default is false. | -| [extraPublicDirs?](./kibana-plugin-core-server.pluginmanifest.extrapublicdirs.md) | string\[\] | (Optional) Specifies directory names that can be imported by other ui-plugins built using the same instance of the @kbn/optimizer. A temporary measure we plan to replace with better mechanisms for sharing static code between plugins | -| [id](./kibana-plugin-core-server.pluginmanifest.id.md) | PluginName | Identifier of the plugin. Must be a string in camelCase. Part of a plugin public contract. Other plugins leverage it to access plugin API, navigate to the plugin, etc. | -| [kibanaVersion](./kibana-plugin-core-server.pluginmanifest.kibanaversion.md) | string | The version of Kibana the plugin is compatible with, defaults to "version". | -| [optionalPlugins](./kibana-plugin-core-server.pluginmanifest.optionalplugins.md) | readonly PluginName\[\] | An optional list of the other plugins that if installed and enabled \*\*may be\*\* leveraged by this plugin for some additional functionality but otherwise are not required for this plugin to work properly. | -| [owner](./kibana-plugin-core-server.pluginmanifest.owner.md) | { readonly name: string; readonly githubTeam?: string; } | | -| [requiredBundles](./kibana-plugin-core-server.pluginmanifest.requiredbundles.md) | readonly string\[\] | List of plugin ids that this plugin's UI code imports modules from that are not in requiredPlugins. | -| [requiredPlugins](./kibana-plugin-core-server.pluginmanifest.requiredplugins.md) | readonly PluginName\[\] | An optional list of the other plugins that \*\*must be\*\* installed and enabled for this plugin to function properly. | -| [server](./kibana-plugin-core-server.pluginmanifest.server.md) | boolean | Specifies whether plugin includes some server-side specific functionality. | -| [serviceFolders?](./kibana-plugin-core-server.pluginmanifest.servicefolders.md) | readonly string\[\] | (Optional) Only used for the automatically generated API documentation. Specifying service folders will cause your plugin API reference to be broken up into sub sections. | -| [type](./kibana-plugin-core-server.pluginmanifest.type.md) | PluginType | Type of the plugin, defaults to standard. | -| [ui](./kibana-plugin-core-server.pluginmanifest.ui.md) | boolean | Specifies whether plugin includes some client/browser specific functionality that should be included into client bundle via public/ui_plugin.js file. | -| [version](./kibana-plugin-core-server.pluginmanifest.version.md) | string | Version of the plugin. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.optionalplugins.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.optionalplugins.md deleted file mode 100644 index 5b75b559dfb7e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.optionalplugins.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [optionalPlugins](./kibana-plugin-core-server.pluginmanifest.optionalplugins.md) - -## PluginManifest.optionalPlugins property - -An optional list of the other plugins that if installed and enabled \*\*may be\*\* leveraged by this plugin for some additional functionality but otherwise are not required for this plugin to work properly. - -Signature: - -```typescript -readonly optionalPlugins: readonly PluginName[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.owner.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.owner.md deleted file mode 100644 index 06b97a0313de5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.owner.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [owner](./kibana-plugin-core-server.pluginmanifest.owner.md) - -## PluginManifest.owner property - -Signature: - -```typescript -readonly owner: { - readonly name: string; - readonly githubTeam?: string; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredbundles.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredbundles.md deleted file mode 100644 index 98505d07101fe..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredbundles.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [requiredBundles](./kibana-plugin-core-server.pluginmanifest.requiredbundles.md) - -## PluginManifest.requiredBundles property - -List of plugin ids that this plugin's UI code imports modules from that are not in `requiredPlugins`. - -Signature: - -```typescript -readonly requiredBundles: readonly string[]; -``` - -## Remarks - -The plugins listed here will be loaded in the browser, even if the plugin is disabled. Required by `@kbn/optimizer` to support cross-plugin imports. "core" and plugins already listed in `requiredPlugins` do not need to be duplicated here. - diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredplugins.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredplugins.md deleted file mode 100644 index 6cab4b537261b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.requiredplugins.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [requiredPlugins](./kibana-plugin-core-server.pluginmanifest.requiredplugins.md) - -## PluginManifest.requiredPlugins property - -An optional list of the other plugins that \*\*must be\*\* installed and enabled for this plugin to function properly. - -Signature: - -```typescript -readonly requiredPlugins: readonly PluginName[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.server.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.server.md deleted file mode 100644 index 823871bdb1435..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.server.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [server](./kibana-plugin-core-server.pluginmanifest.server.md) - -## PluginManifest.server property - -Specifies whether plugin includes some server-side specific functionality. - -Signature: - -```typescript -readonly server: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.servicefolders.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.servicefolders.md deleted file mode 100644 index 8ee33bdfa0f3f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.servicefolders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [serviceFolders](./kibana-plugin-core-server.pluginmanifest.servicefolders.md) - -## PluginManifest.serviceFolders property - -Only used for the automatically generated API documentation. Specifying service folders will cause your plugin API reference to be broken up into sub sections. - -Signature: - -```typescript -readonly serviceFolders?: readonly string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.type.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.type.md deleted file mode 100644 index 6e82132919f6d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [type](./kibana-plugin-core-server.pluginmanifest.type.md) - -## PluginManifest.type property - -Type of the plugin, defaults to `standard`. - -Signature: - -```typescript -readonly type: PluginType; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.ui.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.ui.md deleted file mode 100644 index c3fa5009b94f8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.ui.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [ui](./kibana-plugin-core-server.pluginmanifest.ui.md) - -## PluginManifest.ui property - -Specifies whether plugin includes some client/browser specific functionality that should be included into client bundle via `public/ui_plugin.js` file. - -Signature: - -```typescript -readonly ui: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.version.md b/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.version.md deleted file mode 100644 index 1cd6051a59a10..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.version.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) > [version](./kibana-plugin-core-server.pluginmanifest.version.md) - -## PluginManifest.version property - -Version of the plugin. - -Signature: - -```typescript -readonly version: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversion.md b/docs/development/core/server/kibana-plugin-core-server.pollesnodesversion.md deleted file mode 100644 index 78094c5556f31..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversion.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [pollEsNodesVersion](./kibana-plugin-core-server.pollesnodesversion.md) - -## pollEsNodesVersion variable - - -Signature: - -```typescript -pollEsNodesVersion: ({ internalClient, log, kibanaVersion, ignoreVersionMismatch, esVersionCheckInterval: healthCheckInterval, }: PollEsNodesVersionOptions) => Observable -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.esversioncheckinterval.md b/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.esversioncheckinterval.md deleted file mode 100644 index 74ad0abb0ed4f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.esversioncheckinterval.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PollEsNodesVersionOptions](./kibana-plugin-core-server.pollesnodesversionoptions.md) > [esVersionCheckInterval](./kibana-plugin-core-server.pollesnodesversionoptions.esversioncheckinterval.md) - -## PollEsNodesVersionOptions.esVersionCheckInterval property - -Signature: - -```typescript -esVersionCheckInterval: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.ignoreversionmismatch.md b/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.ignoreversionmismatch.md deleted file mode 100644 index 5ec1c7e527814..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.ignoreversionmismatch.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PollEsNodesVersionOptions](./kibana-plugin-core-server.pollesnodesversionoptions.md) > [ignoreVersionMismatch](./kibana-plugin-core-server.pollesnodesversionoptions.ignoreversionmismatch.md) - -## PollEsNodesVersionOptions.ignoreVersionMismatch property - -Signature: - -```typescript -ignoreVersionMismatch: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.internalclient.md b/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.internalclient.md deleted file mode 100644 index 50880bc510dfc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.internalclient.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PollEsNodesVersionOptions](./kibana-plugin-core-server.pollesnodesversionoptions.md) > [internalClient](./kibana-plugin-core-server.pollesnodesversionoptions.internalclient.md) - -## PollEsNodesVersionOptions.internalClient property - -Signature: - -```typescript -internalClient: ElasticsearchClient; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.kibanaversion.md b/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.kibanaversion.md deleted file mode 100644 index 4a4d25ec606d4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.kibanaversion.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PollEsNodesVersionOptions](./kibana-plugin-core-server.pollesnodesversionoptions.md) > [kibanaVersion](./kibana-plugin-core-server.pollesnodesversionoptions.kibanaversion.md) - -## PollEsNodesVersionOptions.kibanaVersion property - -Signature: - -```typescript -kibanaVersion: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.log.md b/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.log.md deleted file mode 100644 index 180b6ee91953b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.log.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PollEsNodesVersionOptions](./kibana-plugin-core-server.pollesnodesversionoptions.md) > [log](./kibana-plugin-core-server.pollesnodesversionoptions.log.md) - -## PollEsNodesVersionOptions.log property - -Signature: - -```typescript -log: Logger; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.md b/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.md deleted file mode 100644 index 130898889c66a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.pollesnodesversionoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PollEsNodesVersionOptions](./kibana-plugin-core-server.pollesnodesversionoptions.md) - -## PollEsNodesVersionOptions interface - - -Signature: - -```typescript -export interface PollEsNodesVersionOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [esVersionCheckInterval](./kibana-plugin-core-server.pollesnodesversionoptions.esversioncheckinterval.md) | number | | -| [ignoreVersionMismatch](./kibana-plugin-core-server.pollesnodesversionoptions.ignoreversionmismatch.md) | boolean | | -| [internalClient](./kibana-plugin-core-server.pollesnodesversionoptions.internalclient.md) | ElasticsearchClient | | -| [kibanaVersion](./kibana-plugin-core-server.pollesnodesversionoptions.kibanaversion.md) | string | | -| [log](./kibana-plugin-core-server.pollesnodesversionoptions.log.md) | Logger | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.prebootplugin.md b/docs/development/core/server/kibana-plugin-core-server.prebootplugin.md deleted file mode 100644 index 8bbb042965dde..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.prebootplugin.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PrebootPlugin](./kibana-plugin-core-server.prebootplugin.md) - -## PrebootPlugin interface - -The interface that should be returned by a `PluginInitializer` for a `preboot` plugin. - -Signature: - -```typescript -export interface PrebootPlugin -``` - -## Methods - -| Method | Description | -| --- | --- | -| [setup(core, plugins)](./kibana-plugin-core-server.prebootplugin.setup.md) | | -| [stop()?](./kibana-plugin-core-server.prebootplugin.stop.md) | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.prebootplugin.setup.md b/docs/development/core/server/kibana-plugin-core-server.prebootplugin.setup.md deleted file mode 100644 index f55819eeaca57..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.prebootplugin.setup.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PrebootPlugin](./kibana-plugin-core-server.prebootplugin.md) > [setup](./kibana-plugin-core-server.prebootplugin.setup.md) - -## PrebootPlugin.setup() method - -Signature: - -```typescript -setup(core: CorePreboot, plugins: TPluginsSetup): TSetup; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| core | CorePreboot | | -| plugins | TPluginsSetup | | - -Returns: - -TSetup - diff --git a/docs/development/core/server/kibana-plugin-core-server.prebootplugin.stop.md b/docs/development/core/server/kibana-plugin-core-server.prebootplugin.stop.md deleted file mode 100644 index c93dcb7709a11..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.prebootplugin.stop.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PrebootPlugin](./kibana-plugin-core-server.prebootplugin.md) > [stop](./kibana-plugin-core-server.prebootplugin.stop.md) - -## PrebootPlugin.stop() method - -Signature: - -```typescript -stop?(): void; -``` -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.holdsetupuntilresolved.md b/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.holdsetupuntilresolved.md deleted file mode 100644 index 7f158b46d1f06..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.holdsetupuntilresolved.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PrebootServicePreboot](./kibana-plugin-core-server.prebootservicepreboot.md) > [holdSetupUntilResolved](./kibana-plugin-core-server.prebootservicepreboot.holdsetupuntilresolved.md) - -## PrebootServicePreboot.holdSetupUntilResolved property - -Registers a `Promise` as a precondition before Kibana can proceed to `setup`. This method can be invoked multiple times and from multiple `preboot` plugins. Kibana will proceed to `setup` only when all registered `Promises` instances are resolved, or it will shut down if any of them is rejected. - -Signature: - -```typescript -readonly holdSetupUntilResolved: (reason: string, promise: Promise<{ - shouldReloadConfig: boolean; - } | undefined>) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.issetuponhold.md b/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.issetuponhold.md deleted file mode 100644 index 1ba079da03208..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.issetuponhold.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PrebootServicePreboot](./kibana-plugin-core-server.prebootservicepreboot.md) > [isSetupOnHold](./kibana-plugin-core-server.prebootservicepreboot.issetuponhold.md) - -## PrebootServicePreboot.isSetupOnHold property - -Indicates whether Kibana is currently on hold and cannot proceed to `setup` yet. - -Signature: - -```typescript -readonly isSetupOnHold: () => boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.md b/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.md deleted file mode 100644 index c9c7c15ac3275..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.prebootservicepreboot.md +++ /dev/null @@ -1,43 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PrebootServicePreboot](./kibana-plugin-core-server.prebootservicepreboot.md) - -## PrebootServicePreboot interface - -Kibana Preboot Service allows to control the boot flow of Kibana. Preboot plugins can use it to hold the boot until certain condition is met. - -Signature: - -```typescript -export interface PrebootServicePreboot -``` - -## Example - -A plugin can supply a `Promise` to a `holdSetupUntilResolved` method to signal Kibana to initialize and start `standard` plugins only after this `Promise` is resolved. If `Promise` is rejected, Kibana will shut down. - -```ts -core.preboot.holdSetupUntilResolved('Just waiting for 5 seconds', - new Promise((resolve) => { - setTimeout(resolve, 5000); - }) -); -``` -If the supplied `Promise` resolves to an object with the `shouldReloadConfig` property set to `true`, Kibana will also reload its configuration from disk. - -```ts -let completeSetup: (result: { shouldReloadConfig: boolean }) => void; -core.preboot.holdSetupUntilResolved('Just waiting for 5 seconds before reloading configuration', - new Promise<{ shouldReloadConfig: boolean }>((resolve) => { - setTimeout(() => resolve({ shouldReloadConfig: true }), 5000); - }) -); -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [holdSetupUntilResolved](./kibana-plugin-core-server.prebootservicepreboot.holdsetupuntilresolved.md) | (reason: string, promise: Promise<{ shouldReloadConfig: boolean; } \| undefined>) => void | Registers a Promise as a precondition before Kibana can proceed to setup. This method can be invoked multiple times and from multiple preboot plugins. Kibana will proceed to setup only when all registered Promises instances are resolved, or it will shut down if any of them is rejected. | -| [isSetupOnHold](./kibana-plugin-core-server.prebootservicepreboot.issetuponhold.md) | () => boolean | Indicates whether Kibana is currently on hold and cannot proceed to setup yet. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.publicuisettingsparams.md b/docs/development/core/server/kibana-plugin-core-server.publicuisettingsparams.md deleted file mode 100644 index 4ccc91fbe1f74..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.publicuisettingsparams.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [PublicUiSettingsParams](./kibana-plugin-core-server.publicuisettingsparams.md) - -## PublicUiSettingsParams type - -A sub-set of [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) exposed to the client-side. - -Signature: - -```typescript -export declare type PublicUiSettingsParams = Omit; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.redirectresponseoptions.md b/docs/development/core/server/kibana-plugin-core-server.redirectresponseoptions.md deleted file mode 100644 index cd5c326c1b9ed..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.redirectresponseoptions.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RedirectResponseOptions](./kibana-plugin-core-server.redirectresponseoptions.md) - -## RedirectResponseOptions type - -HTTP response parameters for redirection response - -Signature: - -```typescript -export declare type RedirectResponseOptions = HttpResponseOptions & { - headers: { - location: string; - }; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.getdeprecations.md b/docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.getdeprecations.md deleted file mode 100644 index cf008725ff15b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.getdeprecations.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RegisterDeprecationsConfig](./kibana-plugin-core-server.registerdeprecationsconfig.md) > [getDeprecations](./kibana-plugin-core-server.registerdeprecationsconfig.getdeprecations.md) - -## RegisterDeprecationsConfig.getDeprecations property - -Signature: - -```typescript -getDeprecations: (context: GetDeprecationsContext) => MaybePromise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.md b/docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.md deleted file mode 100644 index b7787a1406319..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.registerdeprecationsconfig.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RegisterDeprecationsConfig](./kibana-plugin-core-server.registerdeprecationsconfig.md) - -## RegisterDeprecationsConfig interface - - -Signature: - -```typescript -export interface RegisterDeprecationsConfig -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [getDeprecations](./kibana-plugin-core-server.registerdeprecationsconfig.getdeprecations.md) | (context: GetDeprecationsContext) => MaybePromise<DeprecationsDetails\[\]> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandler.md b/docs/development/core/server/kibana-plugin-core-server.requesthandler.md deleted file mode 100644 index 0ba0f72d7ab2f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandler.md +++ /dev/null @@ -1,41 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandler](./kibana-plugin-core-server.requesthandler.md) - -## RequestHandler type - -A function executed when route path matched requested resource path. Request handler is expected to return a result of one of [KibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) functions. If anything else is returned, or an error is thrown, the HTTP service will automatically log the error and respond `500 - Internal Server Error`. - -Signature: - -```typescript -export declare type RequestHandler

= (context: Context, request: KibanaRequest, response: ResponseFactory) => IKibanaResponse | Promise>; -``` - -## Example - - -```ts -const router = httpSetup.createRouter(); -// creates a route handler for GET request on 'my-app/path/{id}' path -router.get( - { - path: 'path/{id}', - // defines a validation schema for a named segment of the route path - validate: { - params: schema.object({ - id: schema.string(), - }), - }, - }, - // function to execute to create a responses - async (context, request, response) => { - const data = await context.findObject(request.params.id); - // creates a command to respond with 'not found' error - if (!data) return response.notFound(); - // creates a command to send found data to the client - return response.ok(data); - } -); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md deleted file mode 100644 index 8d0b715fdef7b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandlerContext](./kibana-plugin-core-server.requesthandlercontext.md) > [core](./kibana-plugin-core-server.requesthandlercontext.core.md) - -## RequestHandlerContext.core property - -Signature: - -```typescript -core: Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md deleted file mode 100644 index 214f8a6f6ba5c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandlerContext](./kibana-plugin-core-server.requesthandlercontext.md) - -## RequestHandlerContext interface - -Base context passed to a route handler. - -Signature: - -```typescript -export interface RequestHandlerContext extends RequestHandlerContextBase -``` -Extends: RequestHandlerContextBase - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [core](./kibana-plugin-core-server.requesthandlercontext.core.md) | Promise<CoreRequestHandlerContext> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.md deleted file mode 100644 index 33a123eefae63..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandlerContextBase](./kibana-plugin-core-server.requesthandlercontextbase.md) - -## RequestHandlerContextBase interface - -\* - -Signature: - -```typescript -export interface RequestHandlerContextBase -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [resolve](./kibana-plugin-core-server.requesthandlercontextbase.resolve.md) | <T extends keyof Omit<this, 'resolve'>>(parts: T\[\]) => Promise<AwaitedProperties<Pick<this, T>>> | Await all the specified context parts and return them. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.resolve.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.resolve.md deleted file mode 100644 index 74192c0e1aee8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextbase.resolve.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandlerContextBase](./kibana-plugin-core-server.requesthandlercontextbase.md) > [resolve](./kibana-plugin-core-server.requesthandlercontextbase.resolve.md) - -## RequestHandlerContextBase.resolve property - -Await all the specified context parts and return them. - -Signature: - -```typescript -resolve: >(parts: T[]) => Promise>>; -``` - -## Example - - -```ts -const resolved = await context.resolve(['core', 'pluginA']); -const esClient = resolved.core.elasticsearch.client; -const pluginAService = resolved.pluginA.someService; -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextcontainer.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextcontainer.md deleted file mode 100644 index 09e7ff261b795..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextcontainer.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandlerContextContainer](./kibana-plugin-core-server.requesthandlercontextcontainer.md) - -## RequestHandlerContextContainer type - -An object that handles registration of http request context providers. - -Signature: - -```typescript -export declare type RequestHandlerContextContainer = IContextContainer; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextprovider.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextprovider.md deleted file mode 100644 index d94facd849eff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontextprovider.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandlerContextProvider](./kibana-plugin-core-server.requesthandlercontextprovider.md) - -## RequestHandlerContextProvider type - -Context provider for request handler. Extends request context object with provided functionality or data. - -Signature: - -```typescript -export declare type RequestHandlerContextProvider = IContextProvider; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlerwrapper.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlerwrapper.md deleted file mode 100644 index 6ae585b4eeb04..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.requesthandlerwrapper.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RequestHandlerWrapper](./kibana-plugin-core-server.requesthandlerwrapper.md) - -## RequestHandlerWrapper type - -Type-safe wrapper for [RequestHandler](./kibana-plugin-core-server.requesthandler.md) function. - -Signature: - -```typescript -export declare type RequestHandlerWrapper = (handler: RequestHandler) => RequestHandler; -``` - -## Example - - -```typescript -export const wrapper: RequestHandlerWrapper = handler => { - return async (context, request, response) => { - // do some logic - ... - }; -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.md b/docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.md deleted file mode 100644 index e23d07d7683de..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ResolveCapabilitiesOptions](./kibana-plugin-core-server.resolvecapabilitiesoptions.md) - -## ResolveCapabilitiesOptions interface - -Defines a set of additional options for the `resolveCapabilities` method of [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md). - -Signature: - -```typescript -export interface ResolveCapabilitiesOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [useDefaultCapabilities](./kibana-plugin-core-server.resolvecapabilitiesoptions.usedefaultcapabilities.md) | boolean | Indicates if capability switchers are supposed to return a default set of capabilities. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.usedefaultcapabilities.md b/docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.usedefaultcapabilities.md deleted file mode 100644 index 792893a3fc096..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.resolvecapabilitiesoptions.usedefaultcapabilities.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ResolveCapabilitiesOptions](./kibana-plugin-core-server.resolvecapabilitiesoptions.md) > [useDefaultCapabilities](./kibana-plugin-core-server.resolvecapabilitiesoptions.usedefaultcapabilities.md) - -## ResolveCapabilitiesOptions.useDefaultCapabilities property - -Indicates if capability switchers are supposed to return a default set of capabilities. - -Signature: - -```typescript -useDefaultCapabilities: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.responseerror.md b/docs/development/core/server/kibana-plugin-core-server.responseerror.md deleted file mode 100644 index 2d37fa841f273..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.responseerror.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ResponseError](./kibana-plugin-core-server.responseerror.md) - -## ResponseError type - -Error message and optional data send to the client in case of error. - -Signature: - -```typescript -export declare type ResponseError = string | Error | { - message: string | Error; - attributes?: ResponseErrorAttributes; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.responseerrorattributes.md b/docs/development/core/server/kibana-plugin-core-server.responseerrorattributes.md deleted file mode 100644 index cc85b05f7154e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.responseerrorattributes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ResponseErrorAttributes](./kibana-plugin-core-server.responseerrorattributes.md) - -## ResponseErrorAttributes type - -Additional data to provide error details. - -Signature: - -```typescript -export declare type ResponseErrorAttributes = Record; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.responseheaders.md b/docs/development/core/server/kibana-plugin-core-server.responseheaders.md deleted file mode 100644 index fb7d6a10c6b6c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.responseheaders.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ResponseHeaders](./kibana-plugin-core-server.responseheaders.md) - -## ResponseHeaders type - -Http response headers to set. - -Signature: - -```typescript -export declare type ResponseHeaders = Record | Record; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfig.md b/docs/development/core/server/kibana-plugin-core-server.routeconfig.md deleted file mode 100644 index 6297e2745cd31..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfig.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfig](./kibana-plugin-core-server.routeconfig.md) - -## RouteConfig interface - -Route specific configuration. - -Signature: - -```typescript -export interface RouteConfig -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [options?](./kibana-plugin-core-server.routeconfig.options.md) | RouteConfigOptions<Method> | (Optional) Additional route options [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md). | -| [path](./kibana-plugin-core-server.routeconfig.path.md) | string | The endpoint \_within\_ the router path to register the route. | -| [validate](./kibana-plugin-core-server.routeconfig.validate.md) | RouteValidatorFullConfig<P, Q, B> \| false | A schema created with @kbn/config-schema that every request will be validated against. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfig.options.md b/docs/development/core/server/kibana-plugin-core-server.routeconfig.options.md deleted file mode 100644 index 668e293e71827..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfig.options.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfig](./kibana-plugin-core-server.routeconfig.md) > [options](./kibana-plugin-core-server.routeconfig.options.md) - -## RouteConfig.options property - -Additional route options [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md). - -Signature: - -```typescript -options?: RouteConfigOptions; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfig.path.md b/docs/development/core/server/kibana-plugin-core-server.routeconfig.path.md deleted file mode 100644 index 6d173322442a1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfig.path.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfig](./kibana-plugin-core-server.routeconfig.md) > [path](./kibana-plugin-core-server.routeconfig.path.md) - -## RouteConfig.path property - -The endpoint \_within\_ the router path to register the route. - -Signature: - -```typescript -path: string; -``` - -## Remarks - -E.g. if the router is registered at `/elasticsearch` and the route path is `/search`, the full path for the route is `/elasticsearch/search`. Supports: - named path segments `path/{name}`. - optional path segments `path/{position?}`. - multi-segments `path/{coordinates*2}`. Segments are accessible within a handler function as `params` property of [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md) object. To have read access to `params` you \*must\* specify validation schema with [RouteConfig.validate](./kibana-plugin-core-server.routeconfig.validate.md). - diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfig.validate.md b/docs/development/core/server/kibana-plugin-core-server.routeconfig.validate.md deleted file mode 100644 index 1f9cc216cad35..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfig.validate.md +++ /dev/null @@ -1,61 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfig](./kibana-plugin-core-server.routeconfig.md) > [validate](./kibana-plugin-core-server.routeconfig.validate.md) - -## RouteConfig.validate property - -A schema created with `@kbn/config-schema` that every request will be validated against. - -Signature: - -```typescript -validate: RouteValidatorFullConfig | false; -``` - -## Remarks - -You \*must\* specify a validation schema to be able to read: - url path segments - request query - request body To opt out of validating the request, specify `validate: false`. In this case request params, query, and body will be \*\*empty\*\* objects and have no access to raw values. In some cases you may want to use another validation library. To do this, you need to instruct the `@kbn/config-schema` library to output \*\*non-validated values\*\* with setting schema as `schema.object({}, { unknowns: 'allow' })`; - -## Example - - -```ts - import { schema } from '@kbn/config-schema'; - router.get({ - path: 'path/{id}', - validate: { - params: schema.object({ - id: schema.string(), - }), - query: schema.object({...}), - body: schema.object({...}), - }, -}, -(context, req, res,) { - req.params; // type Readonly<{id: string}> - console.log(req.params.id); // value -}); - -router.get({ - path: 'path/{id}', - validate: false, // handler has no access to params, query, body values. -}, -(context, req, res,) { - req.params; // type Readonly<{}>; - console.log(req.params.id); // undefined -}); - -router.get({ - path: 'path/{id}', - validate: { - // handler has access to raw non-validated params in runtime - params: schema.object({}, { unknowns: 'allow' }) - }, -}, -(context, req, res,) { - req.params; // type Readonly<{}>; - console.log(req.params.id); // value - myValidationLibrary.validate({ params: req.params }); -}); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.authrequired.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.authrequired.md deleted file mode 100644 index 28f712316bc36..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.authrequired.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) > [authRequired](./kibana-plugin-core-server.routeconfigoptions.authrequired.md) - -## RouteConfigOptions.authRequired property - -Defines authentication mode for a route: - true. A user has to have valid credentials to access a resource - false. A user can access a resource without any credentials. - 'optional'. A user can access a resource, and will be authenticated if provided credentials are valid. Can be useful when we grant access to a resource but want to identify a user if possible. - -Defaults to `true` if an auth mechanism is registered. - -Signature: - -```typescript -authRequired?: boolean | 'optional'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.body.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.body.md deleted file mode 100644 index a243eb1d91d5b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) > [body](./kibana-plugin-core-server.routeconfigoptions.body.md) - -## RouteConfigOptions.body property - -Additional body options [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md). - -Signature: - -```typescript -body?: Method extends 'get' | 'options' ? undefined : RouteConfigOptionsBody; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.md deleted file mode 100644 index 2dcd8ee5420ab..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) - -## RouteConfigOptions interface - -Additional route options. - -Signature: - -```typescript -export interface RouteConfigOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [authRequired?](./kibana-plugin-core-server.routeconfigoptions.authrequired.md) | boolean \| 'optional' | (Optional) Defines authentication mode for a route: - true. A user has to have valid credentials to access a resource - false. A user can access a resource without any credentials. - 'optional'. A user can access a resource, and will be authenticated if provided credentials are valid. Can be useful when we grant access to a resource but want to identify a user if possible.Defaults to true if an auth mechanism is registered. | -| [body?](./kibana-plugin-core-server.routeconfigoptions.body.md) | Method extends 'get' \| 'options' ? undefined : RouteConfigOptionsBody | (Optional) Additional body options [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md). | -| [tags?](./kibana-plugin-core-server.routeconfigoptions.tags.md) | readonly string\[\] | (Optional) Additional metadata tag strings to attach to the route. | -| [timeout?](./kibana-plugin-core-server.routeconfigoptions.timeout.md) | { payload?: Method extends 'get' \| 'options' ? undefined : number; idleSocket?: number; } | (Optional) Defines per-route timeouts. | -| [xsrfRequired?](./kibana-plugin-core-server.routeconfigoptions.xsrfrequired.md) | Method extends 'get' ? never : boolean | (Optional) Defines xsrf protection requirements for a route: - true. Requires an incoming POST/PUT/DELETE request to contain kbn-xsrf header. - false. Disables xsrf protection.Set to true by default | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.tags.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.tags.md deleted file mode 100644 index f279a414d021f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.tags.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) > [tags](./kibana-plugin-core-server.routeconfigoptions.tags.md) - -## RouteConfigOptions.tags property - -Additional metadata tag strings to attach to the route. - -Signature: - -```typescript -tags?: readonly string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.timeout.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.timeout.md deleted file mode 100644 index f602a8913964f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.timeout.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) > [timeout](./kibana-plugin-core-server.routeconfigoptions.timeout.md) - -## RouteConfigOptions.timeout property - -Defines per-route timeouts. - -Signature: - -```typescript -timeout?: { - payload?: Method extends 'get' | 'options' ? undefined : number; - idleSocket?: number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.xsrfrequired.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.xsrfrequired.md deleted file mode 100644 index 1b6a43332e87f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptions.xsrfrequired.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) > [xsrfRequired](./kibana-plugin-core-server.routeconfigoptions.xsrfrequired.md) - -## RouteConfigOptions.xsrfRequired property - -Defines xsrf protection requirements for a route: - true. Requires an incoming POST/PUT/DELETE request to contain `kbn-xsrf` header. - false. Disables xsrf protection. - -Set to true by default - -Signature: - -```typescript -xsrfRequired?: Method extends 'get' ? never : boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.accepts.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.accepts.md deleted file mode 100644 index 1e98e33cec00f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.accepts.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md) > [accepts](./kibana-plugin-core-server.routeconfigoptionsbody.accepts.md) - -## RouteConfigOptionsBody.accepts property - -A string or an array of strings with the allowed mime types for the endpoint. Use this settings to limit the set of allowed mime types. Note that allowing additional mime types not listed above will not enable them to be parsed, and if parse is true, the request will result in an error response. - -Default value: allows parsing of the following mime types: \* application/json \* application/\*+json \* application/octet-stream \* application/x-www-form-urlencoded \* multipart/form-data \* text/\* - -Signature: - -```typescript -accepts?: RouteContentType | RouteContentType[] | string | string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.maxbytes.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.maxbytes.md deleted file mode 100644 index 4d2641255adb4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.maxbytes.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md) > [maxBytes](./kibana-plugin-core-server.routeconfigoptionsbody.maxbytes.md) - -## RouteConfigOptionsBody.maxBytes property - -Limits the size of incoming payloads to the specified byte count. Allowing very large payloads may cause the server to run out of memory. - -Default value: The one set in the kibana.yml config file under the parameter `server.maxPayload`. - -Signature: - -```typescript -maxBytes?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.md deleted file mode 100644 index fdae03f7cd7c9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md) - -## RouteConfigOptionsBody interface - -Additional body options for a route - -Signature: - -```typescript -export interface RouteConfigOptionsBody -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [accepts?](./kibana-plugin-core-server.routeconfigoptionsbody.accepts.md) | RouteContentType \| RouteContentType\[\] \| string \| string\[\] | (Optional) A string or an array of strings with the allowed mime types for the endpoint. Use this settings to limit the set of allowed mime types. Note that allowing additional mime types not listed above will not enable them to be parsed, and if parse is true, the request will result in an error response.Default value: allows parsing of the following mime types: \* application/json \* application/\*+json \* application/octet-stream \* application/x-www-form-urlencoded \* multipart/form-data \* text/\* | -| [maxBytes?](./kibana-plugin-core-server.routeconfigoptionsbody.maxbytes.md) | number | (Optional) Limits the size of incoming payloads to the specified byte count. Allowing very large payloads may cause the server to run out of memory.Default value: The one set in the kibana.yml config file under the parameter server.maxPayload. | -| [output?](./kibana-plugin-core-server.routeconfigoptionsbody.output.md) | typeof validBodyOutput\[number\] | (Optional) The processed payload format. The value must be one of: \* 'data' - the incoming payload is read fully into memory. If parse is true, the payload is parsed (JSON, form-decoded, multipart) based on the 'Content-Type' header. If parse is false, a raw Buffer is returned. \* 'stream' - the incoming payload is made available via a Stream.Readable interface. If the payload is 'multipart/form-data' and parse is true, field values are presented as text while files are provided as streams. File streams from a 'multipart/form-data' upload will also have a hapi property containing the filename and headers properties. Note that payload streams for multipart payloads are a synthetic interface created on top of the entire multipart content loaded into memory. To avoid loading large multipart payloads into memory, set parse to false and handle the multipart payload in the handler using a streaming parser (e.g. pez).Default value: 'data', unless no validation.body is provided in the route definition. In that case the default is 'stream' to alleviate memory pressure. | -| [parse?](./kibana-plugin-core-server.routeconfigoptionsbody.parse.md) | boolean \| 'gunzip' | (Optional) Determines if the incoming payload is processed or presented raw. Available values: \* true - if the request 'Content-Type' matches the allowed mime types set by allow (for the whole payload as well as parts), the payload is converted into an object when possible. If the format is unknown, a Bad Request (400) error response is sent. Any known content encoding is decoded. \* false - the raw payload is returned unmodified. \* 'gunzip' - the raw payload is returned unmodified after any known content encoding is decoded.Default value: true, unless no validation.body is provided in the route definition. In that case the default is false to alleviate memory pressure. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.output.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.output.md deleted file mode 100644 index a7d712a39e808..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.output.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md) > [output](./kibana-plugin-core-server.routeconfigoptionsbody.output.md) - -## RouteConfigOptionsBody.output property - -The processed payload format. The value must be one of: \* 'data' - the incoming payload is read fully into memory. If parse is true, the payload is parsed (JSON, form-decoded, multipart) based on the 'Content-Type' header. If parse is false, a raw Buffer is returned. \* 'stream' - the incoming payload is made available via a Stream.Readable interface. If the payload is 'multipart/form-data' and parse is true, field values are presented as text while files are provided as streams. File streams from a 'multipart/form-data' upload will also have a hapi property containing the filename and headers properties. Note that payload streams for multipart payloads are a synthetic interface created on top of the entire multipart content loaded into memory. To avoid loading large multipart payloads into memory, set parse to false and handle the multipart payload in the handler using a streaming parser (e.g. pez). - -Default value: 'data', unless no validation.body is provided in the route definition. In that case the default is 'stream' to alleviate memory pressure. - -Signature: - -```typescript -output?: typeof validBodyOutput[number]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.parse.md b/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.parse.md deleted file mode 100644 index 80c8d470598e6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeconfigoptionsbody.parse.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md) > [parse](./kibana-plugin-core-server.routeconfigoptionsbody.parse.md) - -## RouteConfigOptionsBody.parse property - -Determines if the incoming payload is processed or presented raw. Available values: \* true - if the request 'Content-Type' matches the allowed mime types set by allow (for the whole payload as well as parts), the payload is converted into an object when possible. If the format is unknown, a Bad Request (400) error response is sent. Any known content encoding is decoded. \* false - the raw payload is returned unmodified. \* 'gunzip' - the raw payload is returned unmodified after any known content encoding is decoded. - -Default value: true, unless no validation.body is provided in the route definition. In that case the default is false to alleviate memory pressure. - -Signature: - -```typescript -parse?: boolean | 'gunzip'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routecontenttype.md b/docs/development/core/server/kibana-plugin-core-server.routecontenttype.md deleted file mode 100644 index 8d8b041f3c722..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routecontenttype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteContentType](./kibana-plugin-core-server.routecontenttype.md) - -## RouteContentType type - -The set of supported parseable Content-Types - -Signature: - -```typescript -export declare type RouteContentType = 'application/json' | 'application/*+json' | 'application/octet-stream' | 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/*'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routemethod.md b/docs/development/core/server/kibana-plugin-core-server.routemethod.md deleted file mode 100644 index 297ed5ce25cee..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routemethod.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteMethod](./kibana-plugin-core-server.routemethod.md) - -## RouteMethod type - -The set of common HTTP methods supported by Kibana routing. - -Signature: - -```typescript -export declare type RouteMethod = SafeRouteMethod | DestructiveRouteMethod; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routeregistrar.md b/docs/development/core/server/kibana-plugin-core-server.routeregistrar.md deleted file mode 100644 index 3ddb350a38b6f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routeregistrar.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteRegistrar](./kibana-plugin-core-server.routeregistrar.md) - -## RouteRegistrar type - -Route handler common definition - -Signature: - -```typescript -export declare type RouteRegistrar = (route: RouteConfig, handler: RequestHandler) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidationerror._constructor_.md b/docs/development/core/server/kibana-plugin-core-server.routevalidationerror._constructor_.md deleted file mode 100644 index ad1a4bae0dab1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidationerror._constructor_.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidationError](./kibana-plugin-core-server.routevalidationerror.md) > [(constructor)](./kibana-plugin-core-server.routevalidationerror._constructor_.md) - -## RouteValidationError.(constructor) - -Constructs a new instance of the `RouteValidationError` class - -Signature: - -```typescript -constructor(error: Error | string, path?: string[]); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| string | | -| path | string\[\] | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidationerror.md b/docs/development/core/server/kibana-plugin-core-server.routevalidationerror.md deleted file mode 100644 index 60a47236b4be5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidationerror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidationError](./kibana-plugin-core-server.routevalidationerror.md) - -## RouteValidationError class - -Error to return when the validation is not successful. - -Signature: - -```typescript -export declare class RouteValidationError extends SchemaTypeError -``` -Extends: SchemaTypeError - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(error, path)](./kibana-plugin-core-server.routevalidationerror._constructor_.md) | | Constructs a new instance of the RouteValidationError class | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidationfunction.md b/docs/development/core/server/kibana-plugin-core-server.routevalidationfunction.md deleted file mode 100644 index e3fd33552f7df..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidationfunction.md +++ /dev/null @@ -1,41 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidationFunction](./kibana-plugin-core-server.routevalidationfunction.md) - -## RouteValidationFunction type - -The custom validation function if @kbn/config-schema is not a valid solution for your specific plugin requirements. - -Signature: - -```typescript -export declare type RouteValidationFunction = (data: any, validationResult: RouteValidationResultFactory) => { - value: T; - error?: never; -} | { - value?: never; - error: RouteValidationError; -}; -``` - -## Example - -The validation should look something like: - -```typescript -interface MyExpectedBody { - bar: string; - baz: number; -} - -const myBodyValidation: RouteValidationFunction = (data, validationResult) => { - const { ok, badRequest } = validationResult; - const { bar, baz } = data || {}; - if (typeof bar === 'string' && typeof baz === 'number') { - return ok({ bar, baz }); - } else { - return badRequest('Wrong payload', ['body']); - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.badrequest.md b/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.badrequest.md deleted file mode 100644 index d02ce47a84d50..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.badrequest.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidationResultFactory](./kibana-plugin-core-server.routevalidationresultfactory.md) > [badRequest](./kibana-plugin-core-server.routevalidationresultfactory.badrequest.md) - -## RouteValidationResultFactory.badRequest property - -Signature: - -```typescript -badRequest: (error: Error | string, path?: string[]) => { - error: RouteValidationError; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.md b/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.md deleted file mode 100644 index 69e8b5e73136e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidationResultFactory](./kibana-plugin-core-server.routevalidationresultfactory.md) - -## RouteValidationResultFactory interface - -Validation result factory to be used in the custom validation function to return the valid data or validation errors - -See [RouteValidationFunction](./kibana-plugin-core-server.routevalidationfunction.md). - -Signature: - -```typescript -export interface RouteValidationResultFactory -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [badRequest](./kibana-plugin-core-server.routevalidationresultfactory.badrequest.md) | (error: Error \| string, path?: string\[\]) => { error: RouteValidationError; } | | -| [ok](./kibana-plugin-core-server.routevalidationresultfactory.ok.md) | <T>(value: T) => { value: T; } | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.ok.md b/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.ok.md deleted file mode 100644 index 42e7a055cd021..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidationresultfactory.ok.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidationResultFactory](./kibana-plugin-core-server.routevalidationresultfactory.md) > [ok](./kibana-plugin-core-server.routevalidationresultfactory.ok.md) - -## RouteValidationResultFactory.ok property - -Signature: - -```typescript -ok: (value: T) => { - value: T; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidationspec.md b/docs/development/core/server/kibana-plugin-core-server.routevalidationspec.md deleted file mode 100644 index 193e047efcfe0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidationspec.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidationSpec](./kibana-plugin-core-server.routevalidationspec.md) - -## RouteValidationSpec type - -Allowed property validation options: either @kbn/config-schema validations or custom validation functions - -See [RouteValidationFunction](./kibana-plugin-core-server.routevalidationfunction.md) for custom validation. - -Signature: - -```typescript -export declare type RouteValidationSpec = ObjectType | Type | RouteValidationFunction; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.body.md b/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.body.md deleted file mode 100644 index 922a475b432fa..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.body.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidatorConfig](./kibana-plugin-core-server.routevalidatorconfig.md) > [body](./kibana-plugin-core-server.routevalidatorconfig.body.md) - -## RouteValidatorConfig.body property - -Validation logic for the body payload - -Signature: - -```typescript -body?: RouteValidationSpec; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.md b/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.md deleted file mode 100644 index 848bf6aa4b15e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidatorConfig](./kibana-plugin-core-server.routevalidatorconfig.md) - -## RouteValidatorConfig interface - -The configuration object to the RouteValidator class. Set `params`, `query` and/or `body` to specify the validation logic to follow for that property. - -Signature: - -```typescript -export interface RouteValidatorConfig -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [body?](./kibana-plugin-core-server.routevalidatorconfig.body.md) | RouteValidationSpec<B> | (Optional) Validation logic for the body payload | -| [params?](./kibana-plugin-core-server.routevalidatorconfig.params.md) | RouteValidationSpec<P> | (Optional) Validation logic for the URL params | -| [query?](./kibana-plugin-core-server.routevalidatorconfig.query.md) | RouteValidationSpec<Q> | (Optional) Validation logic for the Query params | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.params.md b/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.params.md deleted file mode 100644 index 1281d4ab78f6f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.params.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidatorConfig](./kibana-plugin-core-server.routevalidatorconfig.md) > [params](./kibana-plugin-core-server.routevalidatorconfig.params.md) - -## RouteValidatorConfig.params property - -Validation logic for the URL params - -Signature: - -```typescript -params?: RouteValidationSpec

; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.query.md b/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.query.md deleted file mode 100644 index 9bda00954c02f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidatorconfig.query.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidatorConfig](./kibana-plugin-core-server.routevalidatorconfig.md) > [query](./kibana-plugin-core-server.routevalidatorconfig.query.md) - -## RouteValidatorConfig.query property - -Validation logic for the Query params - -Signature: - -```typescript -query?: RouteValidationSpec; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidatorfullconfig.md b/docs/development/core/server/kibana-plugin-core-server.routevalidatorfullconfig.md deleted file mode 100644 index 4ed91aee6b8a6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidatorfullconfig.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidatorFullConfig](./kibana-plugin-core-server.routevalidatorfullconfig.md) - -## RouteValidatorFullConfig type - -Route validations config and options merged into one object - -Signature: - -```typescript -export declare type RouteValidatorFullConfig = RouteValidatorConfig & RouteValidatorOptions; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.md b/docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.md deleted file mode 100644 index f054ca388762a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidatorOptions](./kibana-plugin-core-server.routevalidatoroptions.md) - -## RouteValidatorOptions interface - -Additional options for the RouteValidator class to modify its default behaviour. - -Signature: - -```typescript -export interface RouteValidatorOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [unsafe?](./kibana-plugin-core-server.routevalidatoroptions.unsafe.md) | { params?: boolean; query?: boolean; body?: boolean; } | (Optional) Set the unsafe config to avoid running some additional internal \*safe\* validations on top of your custom validation | - diff --git a/docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.unsafe.md b/docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.unsafe.md deleted file mode 100644 index ca66ccbb55a36..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.routevalidatoroptions.unsafe.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [RouteValidatorOptions](./kibana-plugin-core-server.routevalidatoroptions.md) > [unsafe](./kibana-plugin-core-server.routevalidatoroptions.unsafe.md) - -## RouteValidatorOptions.unsafe property - -Set the `unsafe` config to avoid running some additional internal \*safe\* validations on top of your custom validation - -Signature: - -```typescript -unsafe?: { - params?: boolean; - query?: boolean; - body?: boolean; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.saferoutemethod.md b/docs/development/core/server/kibana-plugin-core-server.saferoutemethod.md deleted file mode 100644 index 93a8d8de358be..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.saferoutemethod.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SafeRouteMethod](./kibana-plugin-core-server.saferoutemethod.md) - -## SafeRouteMethod type - -Set of HTTP methods not changing the state of the server. - -Signature: - -```typescript -export declare type SafeRouteMethod = 'get' | 'options'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.attributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.attributes.md deleted file mode 100644 index 3bc0900bb4005..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.attributes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [attributes](./kibana-plugin-core-server.savedobject.attributes.md) - -## SavedObject.attributes property - -The data for a Saved Object is stored as an object in the `attributes` property. - -Signature: - -```typescript -attributes: T; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.coremigrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.coremigrationversion.md deleted file mode 100644 index b4d1f3c769451..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.coremigrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [coreMigrationVersion](./kibana-plugin-core-server.savedobject.coremigrationversion.md) - -## SavedObject.coreMigrationVersion property - -A semver value that is used when upgrading objects between Kibana versions. - -Signature: - -```typescript -coreMigrationVersion?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.error.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.error.md deleted file mode 100644 index ef42053e38626..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [error](./kibana-plugin-core-server.savedobject.error.md) - -## SavedObject.error property - -Signature: - -```typescript -error?: SavedObjectError; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.id.md deleted file mode 100644 index 86adacdc4c41a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [id](./kibana-plugin-core-server.savedobject.id.md) - -## SavedObject.id property - -The ID of this Saved Object, guaranteed to be unique for all objects of the same `type` - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.md deleted file mode 100644 index cffb47659dc23..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) - -## SavedObject interface - -Signature: - -```typescript -export interface SavedObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes](./kibana-plugin-core-server.savedobject.attributes.md) | T | The data for a Saved Object is stored as an object in the attributes property. | -| [coreMigrationVersion?](./kibana-plugin-core-server.savedobject.coremigrationversion.md) | string | (Optional) A semver value that is used when upgrading objects between Kibana versions. | -| [error?](./kibana-plugin-core-server.savedobject.error.md) | SavedObjectError | (Optional) | -| [id](./kibana-plugin-core-server.savedobject.id.md) | string | The ID of this Saved Object, guaranteed to be unique for all objects of the same type | -| [migrationVersion?](./kibana-plugin-core-server.savedobject.migrationversion.md) | SavedObjectsMigrationVersion | (Optional) Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | -| [namespaces?](./kibana-plugin-core-server.savedobject.namespaces.md) | string\[\] | (Optional) Space(s) that this saved object exists in. This attribute is not used for "global" saved object types which are registered with namespaceType: 'agnostic'. | -| [originId?](./kibana-plugin-core-server.savedobject.originid.md) | string | (Optional) The ID of the saved object this originated from. This is set if this object's id was regenerated; that can happen during migration from a legacy single-namespace type, or during import. It is only set during migration or create operations. This is used during import to ensure that ID regeneration is deterministic, so saved objects will be overwritten if they are imported multiple times into a given space. | -| [references](./kibana-plugin-core-server.savedobject.references.md) | SavedObjectReference\[\] | A reference to another saved object. | -| [type](./kibana-plugin-core-server.savedobject.type.md) | string | The type of Saved Object. Each plugin can define it's own custom Saved Object types. | -| [updated\_at?](./kibana-plugin-core-server.savedobject.updated_at.md) | string | (Optional) Timestamp of the last time this document had been updated. | -| [version?](./kibana-plugin-core-server.savedobject.version.md) | string | (Optional) An opaque version number which changes on each successful write operation. Can be used for implementing optimistic concurrency control. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.migrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.migrationversion.md deleted file mode 100644 index 3b3eaa6e5da06..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.migrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [migrationVersion](./kibana-plugin-core-server.savedobject.migrationversion.md) - -## SavedObject.migrationVersion property - -Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. - -Signature: - -```typescript -migrationVersion?: SavedObjectsMigrationVersion; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.namespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.namespaces.md deleted file mode 100644 index 3c2909486219b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.namespaces.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [namespaces](./kibana-plugin-core-server.savedobject.namespaces.md) - -## SavedObject.namespaces property - -Space(s) that this saved object exists in. This attribute is not used for "global" saved object types which are registered with `namespaceType: 'agnostic'`. - -Signature: - -```typescript -namespaces?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.originid.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.originid.md deleted file mode 100644 index 95bcad7ce8b1b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.originid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [originId](./kibana-plugin-core-server.savedobject.originid.md) - -## SavedObject.originId property - -The ID of the saved object this originated from. This is set if this object's `id` was regenerated; that can happen during migration from a legacy single-namespace type, or during import. It is only set during migration or create operations. This is used during import to ensure that ID regeneration is deterministic, so saved objects will be overwritten if they are imported multiple times into a given space. - -Signature: - -```typescript -originId?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.references.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.references.md deleted file mode 100644 index f8290bd40d217..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.references.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [references](./kibana-plugin-core-server.savedobject.references.md) - -## SavedObject.references property - -A reference to another saved object. - -Signature: - -```typescript -references: SavedObjectReference[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.type.md deleted file mode 100644 index 6c667b0b9c3a0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [type](./kibana-plugin-core-server.savedobject.type.md) - -## SavedObject.type property - -The type of Saved Object. Each plugin can define it's own custom Saved Object types. - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.updated_at.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.updated_at.md deleted file mode 100644 index a9585761ca808..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.updated_at.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [updated\_at](./kibana-plugin-core-server.savedobject.updated_at.md) - -## SavedObject.updated\_at property - -Timestamp of the last time this document had been updated. - -Signature: - -```typescript -updated_at?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobject.version.md b/docs/development/core/server/kibana-plugin-core-server.savedobject.version.md deleted file mode 100644 index ef8fd3be86beb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobject.version.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObject](./kibana-plugin-core-server.savedobject.md) > [version](./kibana-plugin-core-server.savedobject.version.md) - -## SavedObject.version property - -An opaque version number which changes on each successful write operation. Can be used for implementing optimistic concurrency control. - -Signature: - -```typescript -version?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectattribute.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectattribute.md deleted file mode 100644 index 1a1e3f62d34f9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectattribute.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectAttribute](./kibana-plugin-core-server.savedobjectattribute.md) - -## SavedObjectAttribute type - -Type definition for a Saved Object attribute value - -Signature: - -```typescript -export declare type SavedObjectAttribute = SavedObjectAttributeSingle | SavedObjectAttributeSingle[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectattributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectattributes.md deleted file mode 100644 index 2b8b212cd78d6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectattributes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectAttributes](./kibana-plugin-core-server.savedobjectattributes.md) - -## SavedObjectAttributes interface - -The data for a Saved Object is stored as an object in the `attributes` property. - -Signature: - -```typescript -export interface SavedObjectAttributes -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectattributesingle.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectattributesingle.md deleted file mode 100644 index 7c84fa5414074..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectattributesingle.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectAttributeSingle](./kibana-plugin-core-server.savedobjectattributesingle.md) - -## SavedObjectAttributeSingle type - -Don't use this type, it's simply a helper type for [SavedObjectAttribute](./kibana-plugin-core-server.savedobjectattribute.md) - -Signature: - -```typescript -export declare type SavedObjectAttributeSingle = string | number | boolean | null | undefined | SavedObjectAttributes; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.excludeexportdetails.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.excludeexportdetails.md deleted file mode 100644 index 0972d82987f51..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.excludeexportdetails.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectExportBaseOptions](./kibana-plugin-core-server.savedobjectexportbaseoptions.md) > [excludeExportDetails](./kibana-plugin-core-server.savedobjectexportbaseoptions.excludeexportdetails.md) - -## SavedObjectExportBaseOptions.excludeExportDetails property - -flag to not append [export details](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) to the end of the export stream. - -Signature: - -```typescript -excludeExportDetails?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includenamespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includenamespaces.md deleted file mode 100644 index 8ac532c601efc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includenamespaces.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectExportBaseOptions](./kibana-plugin-core-server.savedobjectexportbaseoptions.md) > [includeNamespaces](./kibana-plugin-core-server.savedobjectexportbaseoptions.includenamespaces.md) - -## SavedObjectExportBaseOptions.includeNamespaces property - -Flag to also include namespace information in the export stream. By default, namespace information is not included in exported objects. This is only intended to be used internally during copy-to-space operations, and it is not exposed as an option for the external HTTP route for exports. - -Signature: - -```typescript -includeNamespaces?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includereferencesdeep.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includereferencesdeep.md deleted file mode 100644 index 6a7c86c1af860..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.includereferencesdeep.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectExportBaseOptions](./kibana-plugin-core-server.savedobjectexportbaseoptions.md) > [includeReferencesDeep](./kibana-plugin-core-server.savedobjectexportbaseoptions.includereferencesdeep.md) - -## SavedObjectExportBaseOptions.includeReferencesDeep property - -flag to also include all related saved objects in the export stream. - -Signature: - -```typescript -includeReferencesDeep?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.md deleted file mode 100644 index d2749cb85cd3a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectExportBaseOptions](./kibana-plugin-core-server.savedobjectexportbaseoptions.md) - -## SavedObjectExportBaseOptions interface - - -Signature: - -```typescript -export interface SavedObjectExportBaseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [excludeExportDetails?](./kibana-plugin-core-server.savedobjectexportbaseoptions.excludeexportdetails.md) | boolean | (Optional) flag to not append [export details](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) to the end of the export stream. | -| [includeNamespaces?](./kibana-plugin-core-server.savedobjectexportbaseoptions.includenamespaces.md) | boolean | (Optional) Flag to also include namespace information in the export stream. By default, namespace information is not included in exported objects. This is only intended to be used internally during copy-to-space operations, and it is not exposed as an option for the external HTTP route for exports. | -| [includeReferencesDeep?](./kibana-plugin-core-server.savedobjectexportbaseoptions.includereferencesdeep.md) | boolean | (Optional) flag to also include all related saved objects in the export stream. | -| [namespace?](./kibana-plugin-core-server.savedobjectexportbaseoptions.namespace.md) | string | (Optional) optional namespace to override the namespace used by the savedObjectsClient. | -| [request](./kibana-plugin-core-server.savedobjectexportbaseoptions.request.md) | KibanaRequest | The http request initiating the export. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.namespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.namespace.md deleted file mode 100644 index 9a8dad24ac18e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.namespace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectExportBaseOptions](./kibana-plugin-core-server.savedobjectexportbaseoptions.md) > [namespace](./kibana-plugin-core-server.savedobjectexportbaseoptions.namespace.md) - -## SavedObjectExportBaseOptions.namespace property - -optional namespace to override the namespace used by the savedObjectsClient. - -Signature: - -```typescript -namespace?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.request.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.request.md deleted file mode 100644 index d425f9b88e818..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectexportbaseoptions.request.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectExportBaseOptions](./kibana-plugin-core-server.savedobjectexportbaseoptions.md) > [request](./kibana-plugin-core-server.savedobjectexportbaseoptions.request.md) - -## SavedObjectExportBaseOptions.request property - -The http request initiating the export. - -Signature: - -```typescript -request: KibanaRequest; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md deleted file mode 100644 index 9fe43a2f3f477..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) > [convertToMultiNamespaceTypeVersion](./kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md) - -## SavedObjectMigrationContext.convertToMultiNamespaceTypeVersion property - -The version in which this object type is being converted to a multi-namespace type - -Signature: - -```typescript -readonly convertToMultiNamespaceTypeVersion?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.issinglenamespacetype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.issinglenamespacetype.md deleted file mode 100644 index 528be67f029c6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.issinglenamespacetype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) > [isSingleNamespaceType](./kibana-plugin-core-server.savedobjectmigrationcontext.issinglenamespacetype.md) - -## SavedObjectMigrationContext.isSingleNamespaceType property - -Whether this is a single-namespace type or not - -Signature: - -```typescript -readonly isSingleNamespaceType: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.log.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.log.md deleted file mode 100644 index 20a0e99275a39..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.log.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) > [log](./kibana-plugin-core-server.savedobjectmigrationcontext.log.md) - -## SavedObjectMigrationContext.log property - -logger instance to be used by the migration handler - -Signature: - -```typescript -readonly log: SavedObjectsMigrationLogger; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md deleted file mode 100644 index 3a265cc8e1d42..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) - -## SavedObjectMigrationContext interface - -Migration context provided when invoking a [migration handler](./kibana-plugin-core-server.savedobjectmigrationfn.md) - -Signature: - -```typescript -export interface SavedObjectMigrationContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [convertToMultiNamespaceTypeVersion?](./kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md) | string | (Optional) The version in which this object type is being converted to a multi-namespace type | -| [isSingleNamespaceType](./kibana-plugin-core-server.savedobjectmigrationcontext.issinglenamespacetype.md) | boolean | Whether this is a single-namespace type or not | -| [log](./kibana-plugin-core-server.savedobjectmigrationcontext.log.md) | SavedObjectsMigrationLogger | logger instance to be used by the migration handler | -| [migrationVersion](./kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md) | string | The migration version that this migration function is defined for | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md deleted file mode 100644 index a1c2717e6e4a0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) > [migrationVersion](./kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md) - -## SavedObjectMigrationContext.migrationVersion property - -The migration version that this migration function is defined for - -Signature: - -```typescript -readonly migrationVersion: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationfn.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationfn.md deleted file mode 100644 index 1c96c63a3d4fe..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationfn.md +++ /dev/null @@ -1,43 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationFn](./kibana-plugin-core-server.savedobjectmigrationfn.md) - -## SavedObjectMigrationFn type - -A migration function for a [saved object type](./kibana-plugin-core-server.savedobjectstype.md) used to migrate it to a given version - -Signature: - -```typescript -export declare type SavedObjectMigrationFn = (doc: SavedObjectUnsanitizedDoc, context: SavedObjectMigrationContext) => SavedObjectUnsanitizedDoc; -``` - -## Example - - -```typescript -interface TypeV1Attributes { - someKey: string; - obsoleteProperty: number; -} - -interface TypeV2Attributes { - someKey: string; - newProperty: string; -} - -const migrateToV2: SavedObjectMigrationFn = (doc, { log }) => { - const { obsoleteProperty, ...otherAttributes } = doc.attributes; - // instead of mutating `doc` we make a shallow copy so that we can use separate types for the input - // and output attributes. We don't need to make a deep copy, we just need to ensure that obsolete - // attributes are not present on the returned doc. - return { - ...doc, - attributes: { - ...otherAttributes, - newProperty: migrate(obsoleteProperty), - }, - }; -}; -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationmap.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationmap.md deleted file mode 100644 index 64575d34bfb10..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationmap.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationMap](./kibana-plugin-core-server.savedobjectmigrationmap.md) - -## SavedObjectMigrationMap interface - -A map of [migration functions](./kibana-plugin-core-server.savedobjectmigrationfn.md) to be used for a given type. The map's keys must be valid semver versions, and they cannot exceed the current Kibana version. - -For a given document, only migrations with a higher version number than that of the document will be applied. Migrations are executed in order, starting from the lowest version and ending with the highest one. - -Signature: - -```typescript -export interface SavedObjectMigrationMap -``` - -## Example - - -```typescript -const migrationsMap: SavedObjectMigrationMap = { - '1.0.0': migrateToV1, - '2.1.0': migrateToV21 -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.id.md deleted file mode 100644 index f5f1de451165b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReference](./kibana-plugin-core-server.savedobjectreference.md) > [id](./kibana-plugin-core-server.savedobjectreference.id.md) - -## SavedObjectReference.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.md deleted file mode 100644 index bf21b13acfcfc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReference](./kibana-plugin-core-server.savedobjectreference.md) - -## SavedObjectReference interface - -A reference to another saved object. - -Signature: - -```typescript -export interface SavedObjectReference -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectreference.id.md) | string | | -| [name](./kibana-plugin-core-server.savedobjectreference.name.md) | string | | -| [type](./kibana-plugin-core-server.savedobjectreference.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.name.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.name.md deleted file mode 100644 index 782e8060a31f1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReference](./kibana-plugin-core-server.savedobjectreference.md) > [name](./kibana-plugin-core-server.savedobjectreference.name.md) - -## SavedObjectReference.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.type.md deleted file mode 100644 index 045a540904279..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreference.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReference](./kibana-plugin-core-server.savedobjectreference.md) > [type](./kibana-plugin-core-server.savedobjectreference.type.md) - -## SavedObjectReference.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.id.md deleted file mode 100644 index 7ef1a2fb1bd41..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [id](./kibana-plugin-core-server.savedobjectreferencewithcontext.id.md) - -## SavedObjectReferenceWithContext.id property - -The ID of the referenced object - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.inboundreferences.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.inboundreferences.md deleted file mode 100644 index 058c27032d065..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.inboundreferences.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [inboundReferences](./kibana-plugin-core-server.savedobjectreferencewithcontext.inboundreferences.md) - -## SavedObjectReferenceWithContext.inboundReferences property - -References to this object; note that this does not contain \_all inbound references everywhere for this object\_, it only contains inbound references for the scope of this operation - -Signature: - -```typescript -inboundReferences: Array<{ - type: string; - id: string; - name: string; - }>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.ismissing.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.ismissing.md deleted file mode 100644 index d46d5a6bf2a0a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.ismissing.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [isMissing](./kibana-plugin-core-server.savedobjectreferencewithcontext.ismissing.md) - -## SavedObjectReferenceWithContext.isMissing property - -Whether or not this object or reference is missing - -Signature: - -```typescript -isMissing?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.md deleted file mode 100644 index 79dd7a40019ec..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) - -## SavedObjectReferenceWithContext interface - -A returned input object or one of its references, with additional context. - -Signature: - -```typescript -export interface SavedObjectReferenceWithContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectreferencewithcontext.id.md) | string | The ID of the referenced object | -| [inboundReferences](./kibana-plugin-core-server.savedobjectreferencewithcontext.inboundreferences.md) | Array<{ type: string; id: string; name: string; }> | References to this object; note that this does not contain \_all inbound references everywhere for this object\_, it only contains inbound references for the scope of this operation | -| [isMissing?](./kibana-plugin-core-server.savedobjectreferencewithcontext.ismissing.md) | boolean | (Optional) Whether or not this object or reference is missing | -| [originId?](./kibana-plugin-core-server.savedobjectreferencewithcontext.originid.md) | string | (Optional) The origin ID of the referenced object (if it has one) | -| [spaces](./kibana-plugin-core-server.savedobjectreferencewithcontext.spaces.md) | string\[\] | The space(s) that the referenced object exists in | -| [spacesWithMatchingAliases?](./kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingaliases.md) | string\[\] | (Optional) The space(s) that legacy URL aliases matching this type/id exist in | -| [spacesWithMatchingOrigins?](./kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingorigins.md) | string\[\] | (Optional) The space(s) that objects matching this origin exist in (including this one) | -| [type](./kibana-plugin-core-server.savedobjectreferencewithcontext.type.md) | string | The type of the referenced object | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.originid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.originid.md deleted file mode 100644 index 47cac3f423647..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.originid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [originId](./kibana-plugin-core-server.savedobjectreferencewithcontext.originid.md) - -## SavedObjectReferenceWithContext.originId property - -The origin ID of the referenced object (if it has one) - -Signature: - -```typescript -originId?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaces.md deleted file mode 100644 index 2c2114103b29a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaces.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [spaces](./kibana-plugin-core-server.savedobjectreferencewithcontext.spaces.md) - -## SavedObjectReferenceWithContext.spaces property - -The space(s) that the referenced object exists in - -Signature: - -```typescript -spaces: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingaliases.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingaliases.md deleted file mode 100644 index 07f4158a84950..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingaliases.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [spacesWithMatchingAliases](./kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingaliases.md) - -## SavedObjectReferenceWithContext.spacesWithMatchingAliases property - -The space(s) that legacy URL aliases matching this type/id exist in - -Signature: - -```typescript -spacesWithMatchingAliases?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingorigins.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingorigins.md deleted file mode 100644 index 3fedce753c034..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingorigins.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [spacesWithMatchingOrigins](./kibana-plugin-core-server.savedobjectreferencewithcontext.spaceswithmatchingorigins.md) - -## SavedObjectReferenceWithContext.spacesWithMatchingOrigins property - -The space(s) that objects matching this origin exist in (including this one) - -Signature: - -```typescript -spacesWithMatchingOrigins?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.type.md deleted file mode 100644 index 118d9744e4276..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectreferencewithcontext.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectReferenceWithContext](./kibana-plugin-core-server.savedobjectreferencewithcontext.md) > [type](./kibana-plugin-core-server.savedobjectreferencewithcontext.type.md) - -## SavedObjectReferenceWithContext.type property - -The type of the referenced object - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsanitizeddoc.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsanitizeddoc.md deleted file mode 100644 index 3f4090619edbf..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsanitizeddoc.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectSanitizedDoc](./kibana-plugin-core-server.savedobjectsanitizeddoc.md) - -## SavedObjectSanitizedDoc type - -Describes Saved Object documents that have passed through the migration framework and are guaranteed to have a `references` root property. - -Signature: - -```typescript -export declare type SavedObjectSanitizedDoc = SavedObjectDoc & Referencable; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.md deleted file mode 100644 index 6686ad7ca8bad..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBaseOptions](./kibana-plugin-core-server.savedobjectsbaseoptions.md) - -## SavedObjectsBaseOptions interface - - -Signature: - -```typescript -export interface SavedObjectsBaseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [namespace?](./kibana-plugin-core-server.savedobjectsbaseoptions.namespace.md) | string | (Optional) Specify the namespace for this operation | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.namespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.namespace.md deleted file mode 100644 index 7468327233d4e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbaseoptions.namespace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBaseOptions](./kibana-plugin-core-server.savedobjectsbaseoptions.md) > [namespace](./kibana-plugin-core-server.savedobjectsbaseoptions.namespace.md) - -## SavedObjectsBaseOptions.namespace property - -Specify the namespace for this operation - -Signature: - -```typescript -namespace?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.attributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.attributes.md deleted file mode 100644 index c74a058ca441b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [attributes](./kibana-plugin-core-server.savedobjectsbulkcreateobject.attributes.md) - -## SavedObjectsBulkCreateObject.attributes property - -Signature: - -```typescript -attributes: T; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.coremigrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.coremigrationversion.md deleted file mode 100644 index fb1f485cdf202..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.coremigrationversion.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [coreMigrationVersion](./kibana-plugin-core-server.savedobjectsbulkcreateobject.coremigrationversion.md) - -## SavedObjectsBulkCreateObject.coreMigrationVersion property - -A semver value that is used when upgrading objects between Kibana versions. If undefined, this will be automatically set to the current Kibana version when the object is created. If this is set to a non-semver value, or it is set to a semver value greater than the current Kibana version, it will result in an error. - -Signature: - -```typescript -coreMigrationVersion?: string; -``` - -## Remarks - -Do not attempt to set this manually. It should only be used if you retrieved an existing object that had the `coreMigrationVersion` field set and you want to create it again. - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.id.md deleted file mode 100644 index 13f64c70d39fc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [id](./kibana-plugin-core-server.savedobjectsbulkcreateobject.id.md) - -## SavedObjectsBulkCreateObject.id property - -Signature: - -```typescript -id?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.initialnamespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.initialnamespaces.md deleted file mode 100644 index 4d094ecde7a96..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.initialnamespaces.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [initialNamespaces](./kibana-plugin-core-server.savedobjectsbulkcreateobject.initialnamespaces.md) - -## SavedObjectsBulkCreateObject.initialNamespaces property - -Optional initial namespaces for the object to be created in. If this is defined, it will supersede the namespace ID that is in [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md). - -\* For shareable object types (registered with `namespaceType: 'multiple'`): this option can be used to specify one or more spaces, including the "All spaces" identifier (`'*'`). \* For isolated object types (registered with `namespaceType: 'single'` or `namespaceType: 'multiple-isolated'`): this option can only be used to specify a single space, and the "All spaces" identifier (`'*'`) is not allowed. \* For global object types (registered with `namespaceType: 'agnostic'`): this option cannot be used. - -Signature: - -```typescript -initialNamespaces?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.md deleted file mode 100644 index 441df5d50c612..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) - -## SavedObjectsBulkCreateObject interface - - -Signature: - -```typescript -export interface SavedObjectsBulkCreateObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes](./kibana-plugin-core-server.savedobjectsbulkcreateobject.attributes.md) | T | | -| [coreMigrationVersion?](./kibana-plugin-core-server.savedobjectsbulkcreateobject.coremigrationversion.md) | string | (Optional) A semver value that is used when upgrading objects between Kibana versions. If undefined, this will be automatically set to the current Kibana version when the object is created. If this is set to a non-semver value, or it is set to a semver value greater than the current Kibana version, it will result in an error. | -| [id?](./kibana-plugin-core-server.savedobjectsbulkcreateobject.id.md) | string | (Optional) | -| [initialNamespaces?](./kibana-plugin-core-server.savedobjectsbulkcreateobject.initialnamespaces.md) | string\[\] | (Optional) Optional initial namespaces for the object to be created in. If this is defined, it will supersede the namespace ID that is in [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md).\* For shareable object types (registered with namespaceType: 'multiple'): this option can be used to specify one or more spaces, including the "All spaces" identifier ('*'). \* For isolated object types (registered with namespaceType: 'single' or namespaceType: 'multiple-isolated'): this option can only be used to specify a single space, and the "All spaces" identifier ('*') is not allowed. \* For global object types (registered with namespaceType: 'agnostic'): this option cannot be used. | -| [migrationVersion?](./kibana-plugin-core-server.savedobjectsbulkcreateobject.migrationversion.md) | SavedObjectsMigrationVersion | (Optional) Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | -| [originId?](./kibana-plugin-core-server.savedobjectsbulkcreateobject.originid.md) | string | (Optional) Optional ID of the original saved object, if this object's id was regenerated | -| [references?](./kibana-plugin-core-server.savedobjectsbulkcreateobject.references.md) | SavedObjectReference\[\] | (Optional) | -| [type](./kibana-plugin-core-server.savedobjectsbulkcreateobject.type.md) | string | | -| [version?](./kibana-plugin-core-server.savedobjectsbulkcreateobject.version.md) | string | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.migrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.migrationversion.md deleted file mode 100644 index a2d8de7c5caaa..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.migrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [migrationVersion](./kibana-plugin-core-server.savedobjectsbulkcreateobject.migrationversion.md) - -## SavedObjectsBulkCreateObject.migrationVersion property - -Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. - -Signature: - -```typescript -migrationVersion?: SavedObjectsMigrationVersion; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.originid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.originid.md deleted file mode 100644 index c182a47891f62..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.originid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [originId](./kibana-plugin-core-server.savedobjectsbulkcreateobject.originid.md) - -## SavedObjectsBulkCreateObject.originId property - -Optional ID of the original saved object, if this object's `id` was regenerated - -Signature: - -```typescript -originId?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.references.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.references.md deleted file mode 100644 index d5aed38d7c1e0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.references.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [references](./kibana-plugin-core-server.savedobjectsbulkcreateobject.references.md) - -## SavedObjectsBulkCreateObject.references property - -Signature: - -```typescript -references?: SavedObjectReference[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.type.md deleted file mode 100644 index 0d9973ec78b4a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [type](./kibana-plugin-core-server.savedobjectsbulkcreateobject.type.md) - -## SavedObjectsBulkCreateObject.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.version.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.version.md deleted file mode 100644 index ca2a38693d036..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkcreateobject.version.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) > [version](./kibana-plugin-core-server.savedobjectsbulkcreateobject.version.md) - -## SavedObjectsBulkCreateObject.version property - -Signature: - -```typescript -version?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.fields.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.fields.md deleted file mode 100644 index d20f79101e13d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.fields.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkGetObject](./kibana-plugin-core-server.savedobjectsbulkgetobject.md) > [fields](./kibana-plugin-core-server.savedobjectsbulkgetobject.fields.md) - -## SavedObjectsBulkGetObject.fields property - -SavedObject fields to include in the response - -Signature: - -```typescript -fields?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.id.md deleted file mode 100644 index c9d6b0527bd56..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkGetObject](./kibana-plugin-core-server.savedobjectsbulkgetobject.md) > [id](./kibana-plugin-core-server.savedobjectsbulkgetobject.id.md) - -## SavedObjectsBulkGetObject.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.md deleted file mode 100644 index 0eb5b507a1f03..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkGetObject](./kibana-plugin-core-server.savedobjectsbulkgetobject.md) - -## SavedObjectsBulkGetObject interface - - -Signature: - -```typescript -export interface SavedObjectsBulkGetObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [fields?](./kibana-plugin-core-server.savedobjectsbulkgetobject.fields.md) | string\[\] | (Optional) SavedObject fields to include in the response | -| [id](./kibana-plugin-core-server.savedobjectsbulkgetobject.id.md) | string | | -| [namespaces?](./kibana-plugin-core-server.savedobjectsbulkgetobject.namespaces.md) | string\[\] | (Optional) Optional namespace(s) for the object to be retrieved in. If this is defined, it will supersede the namespace ID that is in the top-level options.\* For shareable object types (registered with namespaceType: 'multiple'): this option can be used to specify one or more spaces, including the "All spaces" identifier ('*'). \* For isolated object types (registered with namespaceType: 'single' or namespaceType: 'multiple-isolated'): this option can only be used to specify a single space, and the "All spaces" identifier ('*') is not allowed. \* For global object types (registered with namespaceType: 'agnostic'): this option cannot be used. | -| [type](./kibana-plugin-core-server.savedobjectsbulkgetobject.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.namespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.namespaces.md deleted file mode 100644 index 5add0ad1bdf95..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.namespaces.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkGetObject](./kibana-plugin-core-server.savedobjectsbulkgetobject.md) > [namespaces](./kibana-plugin-core-server.savedobjectsbulkgetobject.namespaces.md) - -## SavedObjectsBulkGetObject.namespaces property - -Optional namespace(s) for the object to be retrieved in. If this is defined, it will supersede the namespace ID that is in the top-level options. - -\* For shareable object types (registered with `namespaceType: 'multiple'`): this option can be used to specify one or more spaces, including the "All spaces" identifier (`'*'`). \* For isolated object types (registered with `namespaceType: 'single'` or `namespaceType: 'multiple-isolated'`): this option can only be used to specify a single space, and the "All spaces" identifier (`'*'`) is not allowed. \* For global object types (registered with `namespaceType: 'agnostic'`): this option cannot be used. - -Signature: - -```typescript -namespaces?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.type.md deleted file mode 100644 index 9b78423da9d0b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkgetobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkGetObject](./kibana-plugin-core-server.savedobjectsbulkgetobject.md) > [type](./kibana-plugin-core-server.savedobjectsbulkgetobject.type.md) - -## SavedObjectsBulkGetObject.type property - -Signature: - -```typescript -type: string; -``` 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 deleted file mode 100644 index 135848191cff7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[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 deleted file mode 100644 index a81e18cf3593a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[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 deleted file mode 100644 index 790edde7fe079..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[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 deleted file mode 100644 index e280877d77cd6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[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 deleted file mode 100644 index 4d11b146fd848..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.resolved_objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[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.savedobjectsbulkresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresponse.md deleted file mode 100644 index e47350e4bf888..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresponse.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkResponse](./kibana-plugin-core-server.savedobjectsbulkresponse.md) - -## SavedObjectsBulkResponse interface - - -Signature: - -```typescript -export interface SavedObjectsBulkResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [saved\_objects](./kibana-plugin-core-server.savedobjectsbulkresponse.saved_objects.md) | Array<SavedObject<T>> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresponse.saved_objects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresponse.saved_objects.md deleted file mode 100644 index 3b21276ec2a66..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresponse.saved_objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkResponse](./kibana-plugin-core-server.savedobjectsbulkresponse.md) > [saved\_objects](./kibana-plugin-core-server.savedobjectsbulkresponse.saved_objects.md) - -## SavedObjectsBulkResponse.saved\_objects property - -Signature: - -```typescript -saved_objects: Array>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.attributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.attributes.md deleted file mode 100644 index 7b8d41c4345af..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.attributes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-server.savedobjectsbulkupdateobject.md) > [attributes](./kibana-plugin-core-server.savedobjectsbulkupdateobject.attributes.md) - -## SavedObjectsBulkUpdateObject.attributes property - -The data for a Saved Object is stored as an object in the `attributes` property. - -Signature: - -```typescript -attributes: Partial; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.id.md deleted file mode 100644 index 41aa239bbd502..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-server.savedobjectsbulkupdateobject.md) > [id](./kibana-plugin-core-server.savedobjectsbulkupdateobject.id.md) - -## SavedObjectsBulkUpdateObject.id property - -The ID of this Saved Object, guaranteed to be unique for all objects of the same `type` - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.md deleted file mode 100644 index fa20d5d13d8f2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-server.savedobjectsbulkupdateobject.md) - -## SavedObjectsBulkUpdateObject interface - - -Signature: - -```typescript -export interface SavedObjectsBulkUpdateObject extends Pick, 'version' | 'references'> -``` -Extends: Pick<SavedObjectsUpdateOptions<T>, 'version' \| 'references'> - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes](./kibana-plugin-core-server.savedobjectsbulkupdateobject.attributes.md) | Partial<T> | The data for a Saved Object is stored as an object in the attributes property. | -| [id](./kibana-plugin-core-server.savedobjectsbulkupdateobject.id.md) | string | The ID of this Saved Object, guaranteed to be unique for all objects of the same type | -| [namespace?](./kibana-plugin-core-server.savedobjectsbulkupdateobject.namespace.md) | string | (Optional) Optional namespace string to use when searching for this object. If this is defined, it will supersede the namespace ID that is in [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-server.savedobjectsbulkupdateoptions.md).Note: the default namespace's string representation is 'default', and its ID representation is undefined. | -| [type](./kibana-plugin-core-server.savedobjectsbulkupdateobject.type.md) | string | The type of this Saved Object. Each plugin can define it's own custom Saved Object types. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.namespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.namespace.md deleted file mode 100644 index 544efcd3be909..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.namespace.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-server.savedobjectsbulkupdateobject.md) > [namespace](./kibana-plugin-core-server.savedobjectsbulkupdateobject.namespace.md) - -## SavedObjectsBulkUpdateObject.namespace property - -Optional namespace string to use when searching for this object. If this is defined, it will supersede the namespace ID that is in [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-server.savedobjectsbulkupdateoptions.md). - -Note: the default namespace's string representation is `'default'`, and its ID representation is `undefined`. - -Signature: - -```typescript -namespace?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.type.md deleted file mode 100644 index f13adddc05a09..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateobject.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateObject](./kibana-plugin-core-server.savedobjectsbulkupdateobject.md) > [type](./kibana-plugin-core-server.savedobjectsbulkupdateobject.type.md) - -## SavedObjectsBulkUpdateObject.type property - -The type of this Saved Object. Each plugin can define it's own custom Saved Object types. - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.md deleted file mode 100644 index 97285b326dbae..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-server.savedobjectsbulkupdateoptions.md) - -## SavedObjectsBulkUpdateOptions interface - - -Signature: - -```typescript -export interface SavedObjectsBulkUpdateOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [refresh?](./kibana-plugin-core-server.savedobjectsbulkupdateoptions.refresh.md) | MutatingOperationRefreshSetting | (Optional) The Elasticsearch Refresh setting for this operation | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.refresh.md deleted file mode 100644 index 9c1b2145dd0da..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateoptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-server.savedobjectsbulkupdateoptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsbulkupdateoptions.refresh.md) - -## SavedObjectsBulkUpdateOptions.refresh property - -The Elasticsearch Refresh setting for this operation - -Signature: - -```typescript -refresh?: MutatingOperationRefreshSetting; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.md deleted file mode 100644 index e1a1af2da25cc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateResponse](./kibana-plugin-core-server.savedobjectsbulkupdateresponse.md) - -## SavedObjectsBulkUpdateResponse interface - - -Signature: - -```typescript -export interface SavedObjectsBulkUpdateResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [saved\_objects](./kibana-plugin-core-server.savedobjectsbulkupdateresponse.saved_objects.md) | Array<SavedObjectsUpdateResponse<T>> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.saved_objects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.saved_objects.md deleted file mode 100644 index e7cbad9678ca7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkupdateresponse.saved_objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkUpdateResponse](./kibana-plugin-core-server.savedobjectsbulkupdateresponse.md) > [saved\_objects](./kibana-plugin-core-server.savedobjectsbulkupdateresponse.saved_objects.md) - -## SavedObjectsBulkUpdateResponse.saved\_objects property - -Signature: - -```typescript -saved_objects: Array>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.id.md deleted file mode 100644 index 2b7cd5cc486a8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCheckConflictsObject](./kibana-plugin-core-server.savedobjectscheckconflictsobject.md) > [id](./kibana-plugin-core-server.savedobjectscheckconflictsobject.id.md) - -## SavedObjectsCheckConflictsObject.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.md deleted file mode 100644 index af7d9ff74db25..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCheckConflictsObject](./kibana-plugin-core-server.savedobjectscheckconflictsobject.md) - -## SavedObjectsCheckConflictsObject interface - - -Signature: - -```typescript -export interface SavedObjectsCheckConflictsObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectscheckconflictsobject.id.md) | string | | -| [type](./kibana-plugin-core-server.savedobjectscheckconflictsobject.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.type.md deleted file mode 100644 index 82f89536e4189..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCheckConflictsObject](./kibana-plugin-core-server.savedobjectscheckconflictsobject.md) > [type](./kibana-plugin-core-server.savedobjectscheckconflictsobject.type.md) - -## SavedObjectsCheckConflictsObject.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.errors.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.errors.md deleted file mode 100644 index 80bd61d8906e3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.errors.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCheckConflictsResponse](./kibana-plugin-core-server.savedobjectscheckconflictsresponse.md) > [errors](./kibana-plugin-core-server.savedobjectscheckconflictsresponse.errors.md) - -## SavedObjectsCheckConflictsResponse.errors property - -Signature: - -```typescript -errors: Array<{ - id: string; - type: string; - error: SavedObjectError; - }>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.md deleted file mode 100644 index 68bbdbe67c273..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscheckconflictsresponse.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCheckConflictsResponse](./kibana-plugin-core-server.savedobjectscheckconflictsresponse.md) - -## SavedObjectsCheckConflictsResponse interface - - -Signature: - -```typescript -export interface SavedObjectsCheckConflictsResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [errors](./kibana-plugin-core-server.savedobjectscheckconflictsresponse.errors.md) | Array<{ id: string; type: string; error: SavedObjectError; }> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkcreate.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkcreate.md deleted file mode 100644 index a88d82ef49e7d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkcreate.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [bulkCreate](./kibana-plugin-core-server.savedobjectsclient.bulkcreate.md) - -## SavedObjectsClient.bulkCreate() method - -Persists multiple documents batched together as a single request - -Signature: - -```typescript -bulkCreate(objects: Array>, options?: SavedObjectsCreateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | Array<SavedObjectsBulkCreateObject<T>> | | -| options | SavedObjectsCreateOptions | | - -Returns: - -Promise<SavedObjectsBulkResponse<T>> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkget.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkget.md deleted file mode 100644 index 077cb08843acc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkget.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [bulkGet](./kibana-plugin-core-server.savedobjectsclient.bulkget.md) - -## SavedObjectsClient.bulkGet() method - -Returns an array of objects by id - -Signature: - -```typescript -bulkGet(objects?: SavedObjectsBulkGetObject[], options?: SavedObjectsBaseOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsBulkGetObject\[\] | an array of ids, or an array of objects containing id, type and optionally fields | -| options | SavedObjectsBaseOptions | | - -Returns: - -Promise<SavedObjectsBulkResponse<T>> - -## Example - -bulkGet(\[ { id: 'one', type: 'config' }, { id: 'foo', type: 'index-pattern' } \]) - 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 deleted file mode 100644 index 3cf6e4d8d76a5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkresolve.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[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<SavedObjectsBulkResolveResponse<T>> - -## 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.bulkupdate.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkupdate.md deleted file mode 100644 index 6c4034357a4ea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkupdate.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [bulkUpdate](./kibana-plugin-core-server.savedobjectsclient.bulkupdate.md) - -## SavedObjectsClient.bulkUpdate() method - -Bulk Updates multiple SavedObject at once - -Signature: - -```typescript -bulkUpdate(objects: Array>, options?: SavedObjectsBulkUpdateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | Array<SavedObjectsBulkUpdateObject<T>> | | -| options | SavedObjectsBulkUpdateOptions | | - -Returns: - -Promise<SavedObjectsBulkUpdateResponse<T>> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.checkconflicts.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.checkconflicts.md deleted file mode 100644 index 69d52ee098a30..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.checkconflicts.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [checkConflicts](./kibana-plugin-core-server.savedobjectsclient.checkconflicts.md) - -## SavedObjectsClient.checkConflicts() method - -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. - -Signature: - -```typescript -checkConflicts(objects?: SavedObjectsCheckConflictsObject[], options?: SavedObjectsBaseOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsCheckConflictsObject\[\] | | -| options | SavedObjectsBaseOptions | | - -Returns: - -Promise<SavedObjectsCheckConflictsResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.closepointintime.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.closepointintime.md deleted file mode 100644 index beb5ea847bf45..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.closepointintime.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [closePointInTime](./kibana-plugin-core-server.savedobjectsclient.closepointintime.md) - -## SavedObjectsClient.closePointInTime() method - -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. - -Signature: - -```typescript -closePointInTime(id: string, options?: SavedObjectsClosePointInTimeOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string | | -| options | SavedObjectsClosePointInTimeOptions | | - -Returns: - -Promise<SavedObjectsClosePointInTimeResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.collectmultinamespacereferences.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.collectmultinamespacereferences.md deleted file mode 100644 index 64ccd4187597c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.collectmultinamespacereferences.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [collectMultiNamespaceReferences](./kibana-plugin-core-server.savedobjectsclient.collectmultinamespacereferences.md) - -## SavedObjectsClient.collectMultiNamespaceReferences() method - -Gets all references and transitive references of the listed objects. Ignores any object that is not a multi-namespace type. - -Signature: - -```typescript -collectMultiNamespaceReferences(objects: SavedObjectsCollectMultiNamespaceReferencesObject[], options?: SavedObjectsCollectMultiNamespaceReferencesOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsCollectMultiNamespaceReferencesObject\[\] | | -| options | SavedObjectsCollectMultiNamespaceReferencesOptions | | - -Returns: - -Promise<SavedObjectsCollectMultiNamespaceReferencesResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.create.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.create.md deleted file mode 100644 index 9f9b72984bbb6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.create.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [create](./kibana-plugin-core-server.savedobjectsclient.create.md) - -## SavedObjectsClient.create() method - -Persists a SavedObject - -Signature: - -```typescript -create(type: string, attributes: T, options?: SavedObjectsCreateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| attributes | T | | -| options | SavedObjectsCreateOptions | | - -Returns: - -Promise<SavedObject<T>> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.createpointintimefinder.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.createpointintimefinder.md deleted file mode 100644 index eab4312b1daa4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.createpointintimefinder.md +++ /dev/null @@ -1,52 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [createPointInTimeFinder](./kibana-plugin-core-server.savedobjectsclient.createpointintimefinder.md) - -## SavedObjectsClient.createPointInTimeFinder() method - -Returns a [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) to help page through large sets of saved objects. We strongly recommend using this API for any `find` queries that might return more than 1000 saved objects, however this API is only intended for use in server-side "batch" processing of objects where you are collecting all objects in memory or streaming them back to the client. - -Do NOT use this API in a route handler to facilitate paging through saved objects on the client-side unless you are streaming all of the results back to the client at once. Because the returned generator is stateful, you cannot rely on subsequent http requests retrieving new pages from the same Kibana server in multi-instance deployments. - -The generator wraps calls to [SavedObjectsClient.find()](./kibana-plugin-core-server.savedobjectsclient.find.md) and iterates over multiple pages of results using `_pit` and `search_after`. This will open a new Point-In-Time (PIT), and continue paging until a set of results is received that's smaller than the designated `perPage`. - -Once you have retrieved all of the results you need, it is recommended to call `close()` to clean up the PIT and prevent Elasticsearch from consuming resources unnecessarily. This is only required if you are done iterating and have not yet paged through all of the results: the PIT will automatically be closed for you once you reach the last page of results, or if the underlying call to `find` fails for any reason. - -Signature: - -```typescript -createPointInTimeFinder(findOptions: SavedObjectsCreatePointInTimeFinderOptions, dependencies?: SavedObjectsCreatePointInTimeFinderDependencies): ISavedObjectsPointInTimeFinder; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| findOptions | SavedObjectsCreatePointInTimeFinderOptions | | -| dependencies | SavedObjectsCreatePointInTimeFinderDependencies | | - -Returns: - -ISavedObjectsPointInTimeFinder<T, A> - -## Example - - -```ts -const findOptions: SavedObjectsCreatePointInTimeFinderOptions = { - type: 'visualization', - search: 'foo*', - perPage: 100, -}; - -const finder = savedObjectsClient.createPointInTimeFinder(findOptions); - -const responses: SavedObjectFindResponse[] = []; -for await (const response of finder.find()) { - responses.push(...response); - if (doneSearching) { - await finder.close(); - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.delete.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.delete.md deleted file mode 100644 index 64ed7778d3bec..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.delete.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [delete](./kibana-plugin-core-server.savedobjectsclient.delete.md) - -## SavedObjectsClient.delete() method - -Deletes a SavedObject - -Signature: - -```typescript -delete(type: string, id: string, options?: SavedObjectsDeleteOptions): Promise<{}>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| options | SavedObjectsDeleteOptions | | - -Returns: - -Promise<{}> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.errors.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.errors.md deleted file mode 100644 index 79219f48d0501..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.errors.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [errors](./kibana-plugin-core-server.savedobjectsclient.errors.md) - -## SavedObjectsClient.errors property - -Signature: - -```typescript -static errors: typeof SavedObjectsErrorHelpers; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.find.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.find.md deleted file mode 100644 index dc48f7481dc01..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.find.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [find](./kibana-plugin-core-server.savedobjectsclient.find.md) - -## SavedObjectsClient.find() method - -Find all SavedObjects matching the search query - -Signature: - -```typescript -find(options: SavedObjectsFindOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | SavedObjectsFindOptions | | - -Returns: - -Promise<SavedObjectsFindResponse<T, A>> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.get.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.get.md deleted file mode 100644 index 00b6dd28bb7aa..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.get.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [get](./kibana-plugin-core-server.savedobjectsclient.get.md) - -## SavedObjectsClient.get() method - -Retrieves a single object - -Signature: - -```typescript -get(type: string, id: string, options?: SavedObjectsBaseOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | The type of SavedObject to retrieve | -| id | string | The ID of the SavedObject to retrieve | -| options | SavedObjectsBaseOptions | | - -Returns: - -Promise<SavedObject<T>> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md deleted file mode 100644 index c77bcfac2f0e7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md +++ /dev/null @@ -1,45 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) - -## SavedObjectsClient class - -Signature: - -```typescript -export declare class SavedObjectsClient -``` - -## Remarks - -The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `SavedObjectsClient` class. - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [errors](./kibana-plugin-core-server.savedobjectsclient.errors.md) | | typeof SavedObjectsErrorHelpers | | -| [errors](./kibana-plugin-core-server.savedobjectsclient.errors.md) | static | typeof SavedObjectsErrorHelpers | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [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. | -| [collectMultiNamespaceReferences(objects, options)](./kibana-plugin-core-server.savedobjectsclient.collectmultinamespacereferences.md) | | Gets all references and transitive references of the listed objects. Ignores any object that is not a multi-namespace type. | -| [create(type, attributes, options)](./kibana-plugin-core-server.savedobjectsclient.create.md) | | Persists a SavedObject | -| [createPointInTimeFinder(findOptions, dependencies)](./kibana-plugin-core-server.savedobjectsclient.createpointintimefinder.md) | | Returns a [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) to help page through large sets of saved objects. We strongly recommend using this API for any find queries that might return more than 1000 saved objects, however this API is only intended for use in server-side "batch" processing of objects where you are collecting all objects in memory or streaming them back to the client.Do NOT use this API in a route handler to facilitate paging through saved objects on the client-side unless you are streaming all of the results back to the client at once. Because the returned generator is stateful, you cannot rely on subsequent http requests retrieving new pages from the same Kibana server in multi-instance deployments.The generator wraps calls to [SavedObjectsClient.find()](./kibana-plugin-core-server.savedobjectsclient.find.md) and iterates over multiple pages of results using _pit and search_after. This will open a new Point-In-Time (PIT), and continue paging until a set of results is received that's smaller than the designated perPage.Once you have retrieved all of the results you need, it is recommended to call close() to clean up the PIT and prevent Elasticsearch from consuming resources unnecessarily. This is only required if you are done iterating and have not yet paged through all of the results: the PIT will automatically be closed for you once you reach the last page of results, or if the underlying call to find fails for any reason. | -| [delete(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.delete.md) | | Deletes a SavedObject | -| [find(options)](./kibana-plugin-core-server.savedobjectsclient.find.md) | | Find all SavedObjects matching the search query | -| [get(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.get.md) | | Retrieves a single object | -| [openPointInTimeForType(type, options)](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md) | | Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned id can then be passed to [SavedObjectsClient.find()](./kibana-plugin-core-server.savedobjectsclient.find.md) to search against that PIT.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. | -| [removeReferencesTo(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.removereferencesto.md) | | Updates all objects containing a reference to the given {type, id} tuple to remove the said reference. | -| [resolve(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.resolve.md) | | Resolves a single object, using any legacy URL alias if it exists | -| [update(type, id, attributes, options)](./kibana-plugin-core-server.savedobjectsclient.update.md) | | Updates an SavedObject | -| [updateObjectsSpaces(objects, spacesToAdd, spacesToRemove, options)](./kibana-plugin-core-server.savedobjectsclient.updateobjectsspaces.md) | | Updates one or more objects to add and/or remove them from specified spaces. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md deleted file mode 100644 index c449fc7b1c3f6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [openPointInTimeForType](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md) - -## SavedObjectsClient.openPointInTimeForType() method - -Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned `id` can then be passed to [SavedObjectsClient.find()](./kibana-plugin-core-server.savedobjectsclient.find.md) to search against that PIT. - -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. - -Signature: - -```typescript -openPointInTimeForType(type: string | string[], options?: SavedObjectsOpenPointInTimeOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string \| string\[\] | | -| options | SavedObjectsOpenPointInTimeOptions | | - -Returns: - -Promise<SavedObjectsOpenPointInTimeResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.removereferencesto.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.removereferencesto.md deleted file mode 100644 index 560c210b0105b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.removereferencesto.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [removeReferencesTo](./kibana-plugin-core-server.savedobjectsclient.removereferencesto.md) - -## SavedObjectsClient.removeReferencesTo() method - -Updates all objects containing a reference to the given {type, id} tuple to remove the said reference. - -Signature: - -```typescript -removeReferencesTo(type: string, id: string, options?: SavedObjectsRemoveReferencesToOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| options | SavedObjectsRemoveReferencesToOptions | | - -Returns: - -Promise<SavedObjectsRemoveReferencesToResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.resolve.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.resolve.md deleted file mode 100644 index 31eabe46d6cb3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.resolve.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [resolve](./kibana-plugin-core-server.savedobjectsclient.resolve.md) - -## SavedObjectsClient.resolve() method - -Resolves a single object, using any legacy URL alias if it exists - -Signature: - -```typescript -resolve(type: string, id: string, options?: SavedObjectsBaseOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | The type of SavedObject to retrieve | -| id | string | The ID of the SavedObject to retrieve | -| options | SavedObjectsBaseOptions | | - -Returns: - -Promise<SavedObjectsResolveResponse<T>> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.update.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.update.md deleted file mode 100644 index 20a67387813ff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.update.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [update](./kibana-plugin-core-server.savedobjectsclient.update.md) - -## SavedObjectsClient.update() method - -Updates an SavedObject - -Signature: - -```typescript -update(type: string, id: string, attributes: Partial, options?: SavedObjectsUpdateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| attributes | Partial<T> | | -| options | SavedObjectsUpdateOptions<T> | | - -Returns: - -Promise<SavedObjectsUpdateResponse<T>> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.updateobjectsspaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.updateobjectsspaces.md deleted file mode 100644 index 09012607fd932..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.updateobjectsspaces.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [updateObjectsSpaces](./kibana-plugin-core-server.savedobjectsclient.updateobjectsspaces.md) - -## SavedObjectsClient.updateObjectsSpaces() method - -Updates one or more objects to add and/or remove them from specified spaces. - -Signature: - -```typescript -updateObjectsSpaces(objects: SavedObjectsUpdateObjectsSpacesObject[], spacesToAdd: string[], spacesToRemove: string[], options?: SavedObjectsUpdateObjectsSpacesOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsUpdateObjectsSpacesObject\[\] | | -| spacesToAdd | string\[\] | | -| spacesToRemove | string\[\] | | -| options | SavedObjectsUpdateObjectsSpacesOptions | | - -Returns: - -Promise<import("./lib").SavedObjectsUpdateObjectsSpacesResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientcontract.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientcontract.md deleted file mode 100644 index f4e7895a3f3eb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientcontract.md +++ /dev/null @@ -1,39 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientContract](./kibana-plugin-core-server.savedobjectsclientcontract.md) - -## SavedObjectsClientContract type - -Saved Objects is Kibana's data persisentence mechanism allowing plugins to use Elasticsearch for storing plugin state. - -\#\# SavedObjectsClient errors - -Since the SavedObjectsClient has its hands in everything we are a little paranoid about the way we present errors back to to application code. Ideally, all errors will be either: - -1. Caused by bad implementation (ie. undefined is not a function) and as such unpredictable 2. An error that has been classified and decorated appropriately by the decorators in [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) - -Type 1 errors are inevitable, but since all expected/handle-able errors should be Type 2 the `isXYZError()` helpers exposed at `SavedObjectsErrorHelpers` should be used to understand and manage error responses from the `SavedObjectsClient`. - -Type 2 errors are decorated versions of the source error, so if the elasticsearch client threw an error it will be decorated based on its type. That means that rather than looking for `error.body.error.type` or doing substring checks on `error.body.error.reason`, just use the helpers to understand the meaning of the error: - -\`\`\`js if (SavedObjectsErrorHelpers.isNotFoundError(error)) { // handle 404 } - -if (SavedObjectsErrorHelpers.isNotAuthorizedError(error)) { // 401 handling should be automatic, but in case you wanted to know } - -// always rethrow the error unless you handle it throw error; \`\`\` - -\#\#\# 404s from missing index - -From the perspective of application code and APIs the SavedObjectsClient is a black box that persists objects. One of the internal details that users have no control over is that we use an elasticsearch index for persistence and that index might be missing. - -At the time of writing we are in the process of transitioning away from the operating assumption that the SavedObjects index is always available. Part of this transition is handling errors resulting from an index missing. These used to trigger a 500 error in most cases, and in others cause 404s with different error messages. - -From my (Spencer) perspective, a 404 from the SavedObjectsApi is a 404; The object the request/call was targeting could not be found. This is why \#14141 takes special care to ensure that 404 errors are generic and don't distinguish between index missing or document missing. - -See [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) See [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) - -Signature: - -```typescript -export declare type SavedObjectsClientContract = Pick; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactory.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactory.md deleted file mode 100644 index 724c1ebbeadf4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactory.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientFactory](./kibana-plugin-core-server.savedobjectsclientfactory.md) - -## SavedObjectsClientFactory type - -Describes the factory used to create instances of the Saved Objects Client. - -Signature: - -```typescript -export declare type SavedObjectsClientFactory = ({ request, includedHiddenTypes, }: { - request: KibanaRequest; - includedHiddenTypes?: string[]; -}) => SavedObjectsClientContract; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactoryprovider.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactoryprovider.md deleted file mode 100644 index 0b7afda66408f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientfactoryprovider.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientFactoryProvider](./kibana-plugin-core-server.savedobjectsclientfactoryprovider.md) - -## SavedObjectsClientFactoryProvider type - -Provider to invoke to retrieve a [SavedObjectsClientFactory](./kibana-plugin-core-server.savedobjectsclientfactory.md). - -Signature: - -```typescript -export declare type SavedObjectsClientFactoryProvider = (repositoryFactory: SavedObjectsRepositoryFactory) => SavedObjectsClientFactory; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.excludedwrappers.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.excludedwrappers.md deleted file mode 100644 index 1fc74de6699fb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.excludedwrappers.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientProviderOptions](./kibana-plugin-core-server.savedobjectsclientprovideroptions.md) > [excludedWrappers](./kibana-plugin-core-server.savedobjectsclientprovideroptions.excludedwrappers.md) - -## SavedObjectsClientProviderOptions.excludedWrappers property - -Signature: - -```typescript -excludedWrappers?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.includedhiddentypes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.includedhiddentypes.md deleted file mode 100644 index a9483e34b38ce..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.includedhiddentypes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientProviderOptions](./kibana-plugin-core-server.savedobjectsclientprovideroptions.md) > [includedHiddenTypes](./kibana-plugin-core-server.savedobjectsclientprovideroptions.includedhiddentypes.md) - -## SavedObjectsClientProviderOptions.includedHiddenTypes property - -Signature: - -```typescript -includedHiddenTypes?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.md deleted file mode 100644 index a02f54214163b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientprovideroptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientProviderOptions](./kibana-plugin-core-server.savedobjectsclientprovideroptions.md) - -## SavedObjectsClientProviderOptions interface - -Options to control the creation of the Saved Objects Client. - -Signature: - -```typescript -export interface SavedObjectsClientProviderOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [excludedWrappers?](./kibana-plugin-core-server.savedobjectsclientprovideroptions.excludedwrappers.md) | string\[\] | (Optional) | -| [includedHiddenTypes?](./kibana-plugin-core-server.savedobjectsclientprovideroptions.includedhiddentypes.md) | string\[\] | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperfactory.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperfactory.md deleted file mode 100644 index 722804fd7faa3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperfactory.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientWrapperFactory](./kibana-plugin-core-server.savedobjectsclientwrapperfactory.md) - -## SavedObjectsClientWrapperFactory type - -Describes the factory used to create instances of Saved Objects Client Wrappers. - -Signature: - -```typescript -export declare type SavedObjectsClientWrapperFactory = (options: SavedObjectsClientWrapperOptions) => SavedObjectsClientContract; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.client.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.client.md deleted file mode 100644 index 1c40647cc8793..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.client.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientWrapperOptions](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.md) > [client](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.client.md) - -## SavedObjectsClientWrapperOptions.client property - -Signature: - -```typescript -client: SavedObjectsClientContract; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.md deleted file mode 100644 index 16d104e4a8dff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientWrapperOptions](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.md) - -## SavedObjectsClientWrapperOptions interface - -Options passed to each SavedObjectsClientWrapperFactory to aid in creating the wrapper instance. - -Signature: - -```typescript -export interface SavedObjectsClientWrapperOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [client](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.client.md) | SavedObjectsClientContract | | -| [request](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.request.md) | KibanaRequest | | -| [typeRegistry](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.typeregistry.md) | ISavedObjectTypeRegistry | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.request.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.request.md deleted file mode 100644 index a76936b44aa73..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.request.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientWrapperOptions](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.md) > [request](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.request.md) - -## SavedObjectsClientWrapperOptions.request property - -Signature: - -```typescript -request: KibanaRequest; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.typeregistry.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.typeregistry.md deleted file mode 100644 index 17d23869f6d93..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclientwrapperoptions.typeregistry.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClientWrapperOptions](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.md) > [typeRegistry](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.typeregistry.md) - -## SavedObjectsClientWrapperOptions.typeRegistry property - -Signature: - -```typescript -typeRegistry: ISavedObjectTypeRegistry; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md deleted file mode 100644 index 27432a8805b06..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeOptions](./kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md) - -## SavedObjectsClosePointInTimeOptions type - - -Signature: - -```typescript -export declare type SavedObjectsClosePointInTimeOptions = SavedObjectsBaseOptions; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md deleted file mode 100644 index 27010232bd46b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) - -## SavedObjectsClosePointInTimeResponse interface - - -Signature: - -```typescript -export interface SavedObjectsClosePointInTimeResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [num\_freed](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md) | number | The number of search contexts that have been successfully closed. | -| [succeeded](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md) | boolean | If true, all search contexts associated with the PIT id are successfully closed. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md deleted file mode 100644 index b64932fcee8f6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) > [num\_freed](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md) - -## SavedObjectsClosePointInTimeResponse.num\_freed property - -The number of search contexts that have been successfully closed. - -Signature: - -```typescript -num_freed: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md deleted file mode 100644 index 225a549a4cf59..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) > [succeeded](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md) - -## SavedObjectsClosePointInTimeResponse.succeeded property - -If true, all search contexts associated with the PIT id are successfully closed. - -Signature: - -```typescript -succeeded: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.id.md deleted file mode 100644 index 21522a0f32d6d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCollectMultiNamespaceReferencesObject](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md) > [id](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.id.md) - -## SavedObjectsCollectMultiNamespaceReferencesObject.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md deleted file mode 100644 index 5f419a63e8c70..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCollectMultiNamespaceReferencesObject](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md) - -## SavedObjectsCollectMultiNamespaceReferencesObject interface - -An object to collect references for. It must be a multi-namespace type (in other words, the object type must be registered with the `namespaceType: 'multiple'` or `namespaceType: 'multiple-isolated'` option). - -Note: if options.purpose is 'updateObjectsSpaces', it must be a shareable type (in other words, the object type must be registered with the `namespaceType: 'multiple'`). - -Signature: - -```typescript -export interface SavedObjectsCollectMultiNamespaceReferencesObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.id.md) | string | | -| [type](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.type.md deleted file mode 100644 index c376a9e4258c8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCollectMultiNamespaceReferencesObject](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.md) > [type](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesobject.type.md) - -## SavedObjectsCollectMultiNamespaceReferencesObject.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.md deleted file mode 100644 index 57298e40a88ba..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCollectMultiNamespaceReferencesOptions](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.md) - -## SavedObjectsCollectMultiNamespaceReferencesOptions interface - -Options for collecting references. - -Signature: - -```typescript -export interface SavedObjectsCollectMultiNamespaceReferencesOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [purpose?](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.purpose.md) | 'collectMultiNamespaceReferences' \| 'updateObjectsSpaces' | (Optional) Optional purpose used to determine filtering and authorization checks; default is 'collectMultiNamespaceReferences' | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.purpose.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.purpose.md deleted file mode 100644 index a36301a6451bc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.purpose.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCollectMultiNamespaceReferencesOptions](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.md) > [purpose](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesoptions.purpose.md) - -## SavedObjectsCollectMultiNamespaceReferencesOptions.purpose property - -Optional purpose used to determine filtering and authorization checks; default is 'collectMultiNamespaceReferences' - -Signature: - -```typescript -purpose?: 'collectMultiNamespaceReferences' | 'updateObjectsSpaces'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.md deleted file mode 100644 index 514e9271aa17e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCollectMultiNamespaceReferencesResponse](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.md) - -## SavedObjectsCollectMultiNamespaceReferencesResponse interface - -The response when object references are collected. - -Signature: - -```typescript -export interface SavedObjectsCollectMultiNamespaceReferencesResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [objects](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.objects.md) | SavedObjectReferenceWithContext\[\] | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.objects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.objects.md deleted file mode 100644 index 4b5707d7228a5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCollectMultiNamespaceReferencesResponse](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.md) > [objects](./kibana-plugin-core-server.savedobjectscollectmultinamespacereferencesresponse.objects.md) - -## SavedObjectsCollectMultiNamespaceReferencesResponse.objects property - -Signature: - -```typescript -objects: SavedObjectReferenceWithContext[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.coremigrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.coremigrationversion.md deleted file mode 100644 index e2a4064ec4f33..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.coremigrationversion.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [coreMigrationVersion](./kibana-plugin-core-server.savedobjectscreateoptions.coremigrationversion.md) - -## SavedObjectsCreateOptions.coreMigrationVersion property - -A semver value that is used when upgrading objects between Kibana versions. If undefined, this will be automatically set to the current Kibana version when the object is created. If this is set to a non-semver value, or it is set to a semver value greater than the current Kibana version, it will result in an error. - -Signature: - -```typescript -coreMigrationVersion?: string; -``` - -## Remarks - -Do not attempt to set this manually. It should only be used if you retrieved an existing object that had the `coreMigrationVersion` field set and you want to create it again. - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.id.md deleted file mode 100644 index 85529b54bf2cd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [id](./kibana-plugin-core-server.savedobjectscreateoptions.id.md) - -## SavedObjectsCreateOptions.id property - -(not recommended) Specify an id for the document - -Signature: - -```typescript -id?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.initialnamespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.initialnamespaces.md deleted file mode 100644 index 43489b8d2e8a2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.initialnamespaces.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [initialNamespaces](./kibana-plugin-core-server.savedobjectscreateoptions.initialnamespaces.md) - -## SavedObjectsCreateOptions.initialNamespaces property - -Optional initial namespaces for the object to be created in. If this is defined, it will supersede the namespace ID that is in [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md). - -\* For shareable object types (registered with `namespaceType: 'multiple'`): this option can be used to specify one or more spaces, including the "All spaces" identifier (`'*'`). \* For isolated object types (registered with `namespaceType: 'single'` or `namespaceType: 'multiple-isolated'`): this option can only be used to specify a single space, and the "All spaces" identifier (`'*'`) is not allowed. \* For global object types (registered with `namespaceType: 'agnostic'`): this option cannot be used. - -Signature: - -```typescript -initialNamespaces?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.md deleted file mode 100644 index 646a0f6fcf548..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) - -## SavedObjectsCreateOptions interface - - -Signature: - -```typescript -export interface SavedObjectsCreateOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [coreMigrationVersion?](./kibana-plugin-core-server.savedobjectscreateoptions.coremigrationversion.md) | string | (Optional) A semver value that is used when upgrading objects between Kibana versions. If undefined, this will be automatically set to the current Kibana version when the object is created. If this is set to a non-semver value, or it is set to a semver value greater than the current Kibana version, it will result in an error. | -| [id?](./kibana-plugin-core-server.savedobjectscreateoptions.id.md) | string | (Optional) (not recommended) Specify an id for the document | -| [initialNamespaces?](./kibana-plugin-core-server.savedobjectscreateoptions.initialnamespaces.md) | string\[\] | (Optional) Optional initial namespaces for the object to be created in. If this is defined, it will supersede the namespace ID that is in [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md).\* For shareable object types (registered with namespaceType: 'multiple'): this option can be used to specify one or more spaces, including the "All spaces" identifier ('*'). \* For isolated object types (registered with namespaceType: 'single' or namespaceType: 'multiple-isolated'): this option can only be used to specify a single space, and the "All spaces" identifier ('*') is not allowed. \* For global object types (registered with namespaceType: 'agnostic'): this option cannot be used. | -| [migrationVersion?](./kibana-plugin-core-server.savedobjectscreateoptions.migrationversion.md) | SavedObjectsMigrationVersion | (Optional) Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. | -| [originId?](./kibana-plugin-core-server.savedobjectscreateoptions.originid.md) | string | (Optional) Optional ID of the original saved object, if this object's id was regenerated | -| [overwrite?](./kibana-plugin-core-server.savedobjectscreateoptions.overwrite.md) | boolean | (Optional) Overwrite existing documents (defaults to false) | -| [references?](./kibana-plugin-core-server.savedobjectscreateoptions.references.md) | SavedObjectReference\[\] | (Optional) | -| [refresh?](./kibana-plugin-core-server.savedobjectscreateoptions.refresh.md) | MutatingOperationRefreshSetting | (Optional) The Elasticsearch Refresh setting for this operation | -| [version?](./kibana-plugin-core-server.savedobjectscreateoptions.version.md) | string | (Optional) An opaque version number which changes on each successful write operation. Can be used in conjunction with overwrite for implementing optimistic concurrency control. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.migrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.migrationversion.md deleted file mode 100644 index 6bc66128623b3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.migrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [migrationVersion](./kibana-plugin-core-server.savedobjectscreateoptions.migrationversion.md) - -## SavedObjectsCreateOptions.migrationVersion property - -Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. - -Signature: - -```typescript -migrationVersion?: SavedObjectsMigrationVersion; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.originid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.originid.md deleted file mode 100644 index 14333079f7440..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.originid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [originId](./kibana-plugin-core-server.savedobjectscreateoptions.originid.md) - -## SavedObjectsCreateOptions.originId property - -Optional ID of the original saved object, if this object's `id` was regenerated - -Signature: - -```typescript -originId?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.overwrite.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.overwrite.md deleted file mode 100644 index 3925cd4ebb2c6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [overwrite](./kibana-plugin-core-server.savedobjectscreateoptions.overwrite.md) - -## SavedObjectsCreateOptions.overwrite property - -Overwrite existing documents (defaults to false) - -Signature: - -```typescript -overwrite?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.references.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.references.md deleted file mode 100644 index bbc1c3524694f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.references.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [references](./kibana-plugin-core-server.savedobjectscreateoptions.references.md) - -## SavedObjectsCreateOptions.references property - -Signature: - -```typescript -references?: SavedObjectReference[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.refresh.md deleted file mode 100644 index 69f158a69b504..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [refresh](./kibana-plugin-core-server.savedobjectscreateoptions.refresh.md) - -## SavedObjectsCreateOptions.refresh property - -The Elasticsearch Refresh setting for this operation - -Signature: - -```typescript -refresh?: MutatingOperationRefreshSetting; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.version.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.version.md deleted file mode 100644 index 51da57064abb9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreateoptions.version.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) > [version](./kibana-plugin-core-server.savedobjectscreateoptions.version.md) - -## SavedObjectsCreateOptions.version property - -An opaque version number which changes on each successful write operation. Can be used in conjunction with `overwrite` for implementing optimistic concurrency control. - -Signature: - -```typescript -version?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.client.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.client.md deleted file mode 100644 index 95ab9e225c049..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.client.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreatePointInTimeFinderDependencies](./kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.md) > [client](./kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.client.md) - -## SavedObjectsCreatePointInTimeFinderDependencies.client property - -Signature: - -```typescript -client: Pick; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.md deleted file mode 100644 index f647a9c1367b3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreatePointInTimeFinderDependencies](./kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.md) - -## SavedObjectsCreatePointInTimeFinderDependencies interface - - -Signature: - -```typescript -export interface SavedObjectsCreatePointInTimeFinderDependencies -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [client](./kibana-plugin-core-server.savedobjectscreatepointintimefinderdependencies.client.md) | Pick<SavedObjectsClientContract, 'find' \| 'openPointInTimeForType' \| 'closePointInTime'> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderoptions.md deleted file mode 100644 index 928c6f72bcbf5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectscreatepointintimefinderoptions.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsCreatePointInTimeFinderOptions](./kibana-plugin-core-server.savedobjectscreatepointintimefinderoptions.md) - -## SavedObjectsCreatePointInTimeFinderOptions type - - -Signature: - -```typescript -export declare type SavedObjectsCreatePointInTimeFinderOptions = Omit; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.md deleted file mode 100644 index 49b6c36cf3ed2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsDeleteByNamespaceOptions](./kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.md) - -## SavedObjectsDeleteByNamespaceOptions interface - - -Signature: - -```typescript -export interface SavedObjectsDeleteByNamespaceOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [refresh?](./kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.refresh.md) | boolean | (Optional) The Elasticsearch supports only boolean flag for this operation | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.refresh.md deleted file mode 100644 index 52b562e8e22b7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsDeleteByNamespaceOptions](./kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsdeletebynamespaceoptions.refresh.md) - -## SavedObjectsDeleteByNamespaceOptions.refresh property - -The Elasticsearch supports only boolean flag for this operation - -Signature: - -```typescript -refresh?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.force.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.force.md deleted file mode 100644 index f869d1f863a9f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.force.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsDeleteOptions](./kibana-plugin-core-server.savedobjectsdeleteoptions.md) > [force](./kibana-plugin-core-server.savedobjectsdeleteoptions.force.md) - -## SavedObjectsDeleteOptions.force property - -Force deletion of an object that exists in multiple namespaces - -Signature: - -```typescript -force?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.md deleted file mode 100644 index e1bc1fcec3f2d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsDeleteOptions](./kibana-plugin-core-server.savedobjectsdeleteoptions.md) - -## SavedObjectsDeleteOptions interface - - -Signature: - -```typescript -export interface SavedObjectsDeleteOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [force?](./kibana-plugin-core-server.savedobjectsdeleteoptions.force.md) | boolean | (Optional) Force deletion of an object that exists in multiple namespaces | -| [refresh?](./kibana-plugin-core-server.savedobjectsdeleteoptions.refresh.md) | MutatingOperationRefreshSetting | (Optional) The Elasticsearch Refresh setting for this operation | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.refresh.md deleted file mode 100644 index 3a31b90dd9b7b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsdeleteoptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsDeleteOptions](./kibana-plugin-core-server.savedobjectsdeleteoptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsdeleteoptions.refresh.md) - -## SavedObjectsDeleteOptions.refresh property - -The Elasticsearch Refresh setting for this operation - -Signature: - -```typescript -refresh?: MutatingOperationRefreshSetting; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md deleted file mode 100644 index f101aa98d8bd3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createBadRequestError](./kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md) - -## SavedObjectsErrorHelpers.createBadRequestError() method - -Signature: - -```typescript -static createBadRequestError(reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md deleted file mode 100644 index 426de67ded2dc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createConflictError](./kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md) - -## SavedObjectsErrorHelpers.createConflictError() method - -Signature: - -```typescript -static createConflictError(type: string, id: string, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md deleted file mode 100644 index 6ac403b442367..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createGenericNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md) - -## SavedObjectsErrorHelpers.createGenericNotFoundError() method - -Signature: - -```typescript -static createGenericNotFoundError(type?: string | null, id?: string | null): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string \| null | | -| id | string \| null | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfoundesunavailableerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfoundesunavailableerror.md deleted file mode 100644 index 4892c0e41ab01..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfoundesunavailableerror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createGenericNotFoundEsUnavailableError](./kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfoundesunavailableerror.md) - -## SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError() method - -Signature: - -```typescript -static createGenericNotFoundEsUnavailableError(type?: string | null, id?: string | null): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string \| null | | -| id | string \| null | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md deleted file mode 100644 index 4f9fa9d4484bd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md) - -## SavedObjectsErrorHelpers.createIndexAliasNotFoundError() method - -Signature: - -```typescript -static createIndexAliasNotFoundError(alias: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| alias | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md deleted file mode 100644 index 59e2a65694008..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createInvalidVersionError](./kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md) - -## SavedObjectsErrorHelpers.createInvalidVersionError() method - -Signature: - -```typescript -static createInvalidVersionError(versionInput?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| versionInput | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md deleted file mode 100644 index 3d4903c3482ed..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createTooManyRequestsError](./kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md) - -## SavedObjectsErrorHelpers.createTooManyRequestsError() method - -Signature: - -```typescript -static createTooManyRequestsError(type: string, id: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md deleted file mode 100644 index 4ca95c1565db6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createUnsupportedTypeError](./kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md) - -## SavedObjectsErrorHelpers.createUnsupportedTypeError() method - -Signature: - -```typescript -static createUnsupportedTypeError(type: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratebadrequesterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratebadrequesterror.md deleted file mode 100644 index 043950407519f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratebadrequesterror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateBadRequestError](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratebadrequesterror.md) - -## SavedObjectsErrorHelpers.decorateBadRequestError() method - -Signature: - -```typescript -static decorateBadRequestError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateconflicterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateconflicterror.md deleted file mode 100644 index dfb981a0a656e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateconflicterror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateConflictError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateconflicterror.md) - -## SavedObjectsErrorHelpers.decorateConflictError() method - -Signature: - -```typescript -static decorateConflictError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateescannotexecutescripterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateescannotexecutescripterror.md deleted file mode 100644 index 18b019f1b5364..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateescannotexecutescripterror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateEsCannotExecuteScriptError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateescannotexecutescripterror.md) - -## SavedObjectsErrorHelpers.decorateEsCannotExecuteScriptError() method - -Signature: - -```typescript -static decorateEsCannotExecuteScriptError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md deleted file mode 100644 index 9d272b1e78454..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateEsUnavailableError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md) - -## SavedObjectsErrorHelpers.decorateEsUnavailableError() method - -Signature: - -```typescript -static decorateEsUnavailableError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md deleted file mode 100644 index 11b53ec219334..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateForbiddenError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md) - -## SavedObjectsErrorHelpers.decorateForbiddenError() method - -Signature: - -```typescript -static decorateForbiddenError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md deleted file mode 100644 index 595789611b5c3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateGeneralError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md) - -## SavedObjectsErrorHelpers.decorateGeneralError() method - -Signature: - -```typescript -static decorateGeneralError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md deleted file mode 100644 index a2e74ca7769e0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md) - -## SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError() method - -Signature: - -```typescript -static decorateIndexAliasNotFoundError(error: Error, alias: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| alias | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md deleted file mode 100644 index d50d5d9ebf45f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateNotAuthorizedError](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md) - -## SavedObjectsErrorHelpers.decorateNotAuthorizedError() method - -Signature: - -```typescript -static decorateNotAuthorizedError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md deleted file mode 100644 index 487d64f83ca30..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateRequestEntityTooLargeError](./kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md) - -## SavedObjectsErrorHelpers.decorateRequestEntityTooLargeError() method - -Signature: - -```typescript -static decorateRequestEntityTooLargeError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md deleted file mode 100644 index b85cf196c3cdb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateTooManyRequestsError](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md) - -## SavedObjectsErrorHelpers.decorateTooManyRequestsError() method - -Signature: - -```typescript -static decorateTooManyRequestsError(error: Error, reason?: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| reason | string | | - -Returns: - -DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isbadrequesterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isbadrequesterror.md deleted file mode 100644 index 5dd6a50b61e55..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isbadrequesterror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isBadRequestError](./kibana-plugin-core-server.savedobjectserrorhelpers.isbadrequesterror.md) - -## SavedObjectsErrorHelpers.isBadRequestError() method - -Signature: - -```typescript -static isBadRequestError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isconflicterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isconflicterror.md deleted file mode 100644 index 9762462af9ef3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isconflicterror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isConflictError](./kibana-plugin-core-server.savedobjectserrorhelpers.isconflicterror.md) - -## SavedObjectsErrorHelpers.isConflictError() method - -Signature: - -```typescript -static isConflictError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md deleted file mode 100644 index e007dd30f2bb0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isEsCannotExecuteScriptError](./kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md) - -## SavedObjectsErrorHelpers.isEsCannotExecuteScriptError() method - -Signature: - -```typescript -static isEsCannotExecuteScriptError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md deleted file mode 100644 index a6fb911f5e0eb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isEsUnavailableError](./kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md) - -## SavedObjectsErrorHelpers.isEsUnavailableError() method - -Signature: - -```typescript -static isEsUnavailableError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md deleted file mode 100644 index e45ef7a7ed3f3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isForbiddenError](./kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md) - -## SavedObjectsErrorHelpers.isForbiddenError() method - -Signature: - -```typescript -static isForbiddenError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md deleted file mode 100644 index cbec5d3b36a80..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isGeneralError](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md) - -## SavedObjectsErrorHelpers.isGeneralError() method - -Signature: - -```typescript -static isGeneralError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md deleted file mode 100644 index 8ad480147adf6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isInvalidVersionError](./kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md) - -## SavedObjectsErrorHelpers.isInvalidVersionError() method - -Signature: - -```typescript -static isInvalidVersionError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md deleted file mode 100644 index 5e85718bde511..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isNotAuthorizedError](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md) - -## SavedObjectsErrorHelpers.isNotAuthorizedError() method - -Signature: - -```typescript -static isNotAuthorizedError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md deleted file mode 100644 index 05e848322ae9f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md) - -## SavedObjectsErrorHelpers.isNotFoundError() method - -Signature: - -```typescript -static isNotFoundError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isrequestentitytoolargeerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isrequestentitytoolargeerror.md deleted file mode 100644 index d6674f0a588e9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isrequestentitytoolargeerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isRequestEntityTooLargeError](./kibana-plugin-core-server.savedobjectserrorhelpers.isrequestentitytoolargeerror.md) - -## SavedObjectsErrorHelpers.isRequestEntityTooLargeError() method - -Signature: - -```typescript -static isRequestEntityTooLargeError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.issavedobjectsclienterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.issavedobjectsclienterror.md deleted file mode 100644 index 0505c3a450a32..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.issavedobjectsclienterror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isSavedObjectsClientError](./kibana-plugin-core-server.savedobjectserrorhelpers.issavedobjectsclienterror.md) - -## SavedObjectsErrorHelpers.isSavedObjectsClientError() method - -Signature: - -```typescript -static isSavedObjectsClientError(error: any): error is DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | any | | - -Returns: - -error is DecoratedError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.istoomanyrequestserror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.istoomanyrequestserror.md deleted file mode 100644 index 3f9c360710ae3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.istoomanyrequestserror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isTooManyRequestsError](./kibana-plugin-core-server.savedobjectserrorhelpers.istoomanyrequestserror.md) - -## SavedObjectsErrorHelpers.isTooManyRequestsError() method - -Signature: - -```typescript -static isTooManyRequestsError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error \| DecoratedError | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md deleted file mode 100644 index 67056c8a3cb50..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md +++ /dev/null @@ -1,48 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) - -## SavedObjectsErrorHelpers class - - -Signature: - -```typescript -export declare class SavedObjectsErrorHelpers -``` - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [createBadRequestError(reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md) | static | | -| [createConflictError(type, id, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md) | static | | -| [createGenericNotFoundError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md) | static | | -| [createGenericNotFoundEsUnavailableError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfoundesunavailableerror.md) | static | | -| [createIndexAliasNotFoundError(alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md) | static | | -| [createInvalidVersionError(versionInput)](./kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md) | static | | -| [createTooManyRequestsError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md) | static | | -| [createUnsupportedTypeError(type)](./kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md) | static | | -| [decorateBadRequestError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratebadrequesterror.md) | static | | -| [decorateConflictError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateconflicterror.md) | static | | -| [decorateEsCannotExecuteScriptError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateescannotexecutescripterror.md) | static | | -| [decorateEsUnavailableError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md) | static | | -| [decorateForbiddenError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md) | static | | -| [decorateGeneralError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md) | static | | -| [decorateIndexAliasNotFoundError(error, alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md) | static | | -| [decorateNotAuthorizedError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md) | static | | -| [decorateRequestEntityTooLargeError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md) | static | | -| [decorateTooManyRequestsError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md) | static | | -| [isBadRequestError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isbadrequesterror.md) | static | | -| [isConflictError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isconflicterror.md) | static | | -| [isEsCannotExecuteScriptError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md) | static | | -| [isEsUnavailableError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md) | static | | -| [isForbiddenError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md) | static | | -| [isGeneralError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md) | static | | -| [isInvalidVersionError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md) | static | | -| [isNotAuthorizedError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md) | static | | -| [isNotFoundError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md) | static | | -| [isRequestEntityTooLargeError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isrequestentitytoolargeerror.md) | static | | -| [isSavedObjectsClientError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.issavedobjectsclienterror.md) | static | | -| [isTooManyRequestsError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.istoomanyrequestserror.md) | static | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md deleted file mode 100644 index 4d3154bb2f7ea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportByObjectOptions](./kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md) - -## SavedObjectsExportByObjectOptions interface - -Options for the [export by objects API](./kibana-plugin-core-server.isavedobjectsexporter.exportbyobjects.md) - -Signature: - -```typescript -export interface SavedObjectsExportByObjectOptions extends SavedObjectExportBaseOptions -``` -Extends: SavedObjectExportBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [objects](./kibana-plugin-core-server.savedobjectsexportbyobjectoptions.objects.md) | Array<{ id: string; type: string; }> | optional array of objects to export. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.objects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.objects.md deleted file mode 100644 index a821ffee153be..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbyobjectoptions.objects.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportByObjectOptions](./kibana-plugin-core-server.savedobjectsexportbyobjectoptions.md) > [objects](./kibana-plugin-core-server.savedobjectsexportbyobjectoptions.objects.md) - -## SavedObjectsExportByObjectOptions.objects property - -optional array of objects to export. - -Signature: - -```typescript -objects: Array<{ - id: string; - type: string; - }>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.hasreference.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.hasreference.md deleted file mode 100644 index a58818e27328a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.hasreference.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportByTypeOptions](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.md) > [hasReference](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.hasreference.md) - -## SavedObjectsExportByTypeOptions.hasReference property - -optional array of references to search object for. - -Signature: - -```typescript -hasReference?: SavedObjectsFindOptionsReference[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.md deleted file mode 100644 index 694e9c0cb14d8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportByTypeOptions](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.md) - -## SavedObjectsExportByTypeOptions interface - -Options for the [export by type API](./kibana-plugin-core-server.isavedobjectsexporter.exportbytypes.md) - -Signature: - -```typescript -export interface SavedObjectsExportByTypeOptions extends SavedObjectExportBaseOptions -``` -Extends: SavedObjectExportBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [hasReference?](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.hasreference.md) | SavedObjectsFindOptionsReference\[\] | (Optional) optional array of references to search object for. | -| [search?](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.search.md) | string | (Optional) optional query string to filter exported objects. | -| [types](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.types.md) | string\[\] | array of saved object types. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.search.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.search.md deleted file mode 100644 index ce8c2c87ddaf7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.search.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportByTypeOptions](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.md) > [search](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.search.md) - -## SavedObjectsExportByTypeOptions.search property - -optional query string to filter exported objects. - -Signature: - -```typescript -search?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.types.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.types.md deleted file mode 100644 index eed71d7f39d23..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportbytypeoptions.types.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportByTypeOptions](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.md) > [types](./kibana-plugin-core-server.savedobjectsexportbytypeoptions.types.md) - -## SavedObjectsExportByTypeOptions.types property - -array of saved object types. - -Signature: - -```typescript -types: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror._constructor_.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror._constructor_.md deleted file mode 100644 index ee25dbf8c22e7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror._constructor_.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) > [(constructor)](./kibana-plugin-core-server.savedobjectsexporterror._constructor_.md) - -## SavedObjectsExportError.(constructor) - -Constructs a new instance of the `SavedObjectsExportError` class - -Signature: - -```typescript -constructor(type: string, message: string, attributes?: Record | undefined); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| message | string | | -| attributes | Record<string, any> \| undefined | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.attributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.attributes.md deleted file mode 100644 index 9061399eab1f0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) > [attributes](./kibana-plugin-core-server.savedobjectsexporterror.attributes.md) - -## SavedObjectsExportError.attributes property - -Signature: - -```typescript -readonly attributes?: Record | undefined; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.exportsizeexceeded.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.exportsizeexceeded.md deleted file mode 100644 index b69c46383aae4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.exportsizeexceeded.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) > [exportSizeExceeded](./kibana-plugin-core-server.savedobjectsexporterror.exportsizeexceeded.md) - -## SavedObjectsExportError.exportSizeExceeded() method - -Signature: - -```typescript -static exportSizeExceeded(limit: number): SavedObjectsExportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| limit | number | | - -Returns: - -SavedObjectsExportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.invalidtransformerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.invalidtransformerror.md deleted file mode 100644 index a6f0190f27fb6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.invalidtransformerror.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) > [invalidTransformError](./kibana-plugin-core-server.savedobjectsexporterror.invalidtransformerror.md) - -## SavedObjectsExportError.invalidTransformError() method - -Error returned when a [export transform](./kibana-plugin-core-server.savedobjectsexporttransform.md) performed an invalid operation during the transform, such as removing objects from the export, or changing an object's type or id. - -Signature: - -```typescript -static invalidTransformError(objectKeys: string[]): SavedObjectsExportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objectKeys | string\[\] | | - -Returns: - -SavedObjectsExportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.md deleted file mode 100644 index 4c70b8395d8a6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.md +++ /dev/null @@ -1,36 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) - -## SavedObjectsExportError class - - -Signature: - -```typescript -export declare class SavedObjectsExportError extends Error -``` -Extends: Error - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(type, message, attributes)](./kibana-plugin-core-server.savedobjectsexporterror._constructor_.md) | | Constructs a new instance of the SavedObjectsExportError class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [attributes?](./kibana-plugin-core-server.savedobjectsexporterror.attributes.md) | | Record<string, any> \| undefined | (Optional) | -| [type](./kibana-plugin-core-server.savedobjectsexporterror.type.md) | | string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [exportSizeExceeded(limit)](./kibana-plugin-core-server.savedobjectsexporterror.exportsizeexceeded.md) | static | | -| [invalidTransformError(objectKeys)](./kibana-plugin-core-server.savedobjectsexporterror.invalidtransformerror.md) | static | Error returned when a [export transform](./kibana-plugin-core-server.savedobjectsexporttransform.md) performed an invalid operation during the transform, such as removing objects from the export, or changing an object's type or id. | -| [objectFetchError(objects)](./kibana-plugin-core-server.savedobjectsexporterror.objectfetcherror.md) | static | | -| [objectTransformError(objects, cause)](./kibana-plugin-core-server.savedobjectsexporterror.objecttransformerror.md) | static | Error returned when a [export transform](./kibana-plugin-core-server.savedobjectsexporttransform.md) threw an error | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objectfetcherror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objectfetcherror.md deleted file mode 100644 index 172b9e0f3ef18..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objectfetcherror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) > [objectFetchError](./kibana-plugin-core-server.savedobjectsexporterror.objectfetcherror.md) - -## SavedObjectsExportError.objectFetchError() method - -Signature: - -```typescript -static objectFetchError(objects: SavedObject[]): SavedObjectsExportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObject\[\] | | - -Returns: - -SavedObjectsExportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objecttransformerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objecttransformerror.md deleted file mode 100644 index 46d415068e9e5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.objecttransformerror.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) > [objectTransformError](./kibana-plugin-core-server.savedobjectsexporterror.objecttransformerror.md) - -## SavedObjectsExportError.objectTransformError() method - -Error returned when a [export transform](./kibana-plugin-core-server.savedobjectsexporttransform.md) threw an error - -Signature: - -```typescript -static objectTransformError(objects: SavedObject[], cause: Error): SavedObjectsExportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObject\[\] | | -| cause | Error | | - -Returns: - -SavedObjectsExportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.type.md deleted file mode 100644 index 0c1cda48246ad..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporterror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportError](./kibana-plugin-core-server.savedobjectsexporterror.md) > [type](./kibana-plugin-core-server.savedobjectsexporterror.type.md) - -## SavedObjectsExportError.type property - -Signature: - -```typescript -readonly type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.id.md deleted file mode 100644 index f7b96e71c8e53..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportExcludedObject](./kibana-plugin-core-server.savedobjectsexportexcludedobject.md) > [id](./kibana-plugin-core-server.savedobjectsexportexcludedobject.id.md) - -## SavedObjectsExportExcludedObject.id property - -id of the excluded object - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.md deleted file mode 100644 index 053e9b8bec463..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportExcludedObject](./kibana-plugin-core-server.savedobjectsexportexcludedobject.md) - -## SavedObjectsExportExcludedObject interface - - -Signature: - -```typescript -export interface SavedObjectsExportExcludedObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectsexportexcludedobject.id.md) | string | id of the excluded object | -| [reason?](./kibana-plugin-core-server.savedobjectsexportexcludedobject.reason.md) | string | (Optional) optional cause of the exclusion | -| [type](./kibana-plugin-core-server.savedobjectsexportexcludedobject.type.md) | string | type of the excluded object | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.reason.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.reason.md deleted file mode 100644 index 0adb1ba35e696..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.reason.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportExcludedObject](./kibana-plugin-core-server.savedobjectsexportexcludedobject.md) > [reason](./kibana-plugin-core-server.savedobjectsexportexcludedobject.reason.md) - -## SavedObjectsExportExcludedObject.reason property - -optional cause of the exclusion - -Signature: - -```typescript -reason?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.type.md deleted file mode 100644 index be28ac2d0ffb6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportexcludedobject.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportExcludedObject](./kibana-plugin-core-server.savedobjectsexportexcludedobject.md) > [type](./kibana-plugin-core-server.savedobjectsexportexcludedobject.type.md) - -## SavedObjectsExportExcludedObject.type property - -type of the excluded object - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjects.md deleted file mode 100644 index 90432bf6d6705..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjects.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportResultDetails](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) > [excludedObjects](./kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjects.md) - -## SavedObjectsExportResultDetails.excludedObjects property - -excluded objects details - -Signature: - -```typescript -excludedObjects: SavedObjectsExportExcludedObject[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjectscount.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjectscount.md deleted file mode 100644 index 05846e28b9cab..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjectscount.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportResultDetails](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) > [excludedObjectsCount](./kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjectscount.md) - -## SavedObjectsExportResultDetails.excludedObjectsCount property - -number of objects that were excluded from the export - -Signature: - -```typescript -excludedObjectsCount: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.exportedcount.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.exportedcount.md deleted file mode 100644 index 4ff59fcc2bce4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.exportedcount.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportResultDetails](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) > [exportedCount](./kibana-plugin-core-server.savedobjectsexportresultdetails.exportedcount.md) - -## SavedObjectsExportResultDetails.exportedCount property - -number of successfully exported objects - -Signature: - -```typescript -exportedCount: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.md deleted file mode 100644 index 872147dc81456..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportResultDetails](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) - -## SavedObjectsExportResultDetails interface - -Structure of the export result details entry - -Signature: - -```typescript -export interface SavedObjectsExportResultDetails -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [excludedObjects](./kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjects.md) | SavedObjectsExportExcludedObject\[\] | excluded objects details | -| [excludedObjectsCount](./kibana-plugin-core-server.savedobjectsexportresultdetails.excludedobjectscount.md) | number | number of objects that were excluded from the export | -| [exportedCount](./kibana-plugin-core-server.savedobjectsexportresultdetails.exportedcount.md) | number | number of successfully exported objects | -| [missingRefCount](./kibana-plugin-core-server.savedobjectsexportresultdetails.missingrefcount.md) | number | number of missing references | -| [missingReferences](./kibana-plugin-core-server.savedobjectsexportresultdetails.missingreferences.md) | Array<{ id: string; type: string; }> | missing references details | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingrefcount.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingrefcount.md deleted file mode 100644 index dfab4699ede7c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingrefcount.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportResultDetails](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) > [missingRefCount](./kibana-plugin-core-server.savedobjectsexportresultdetails.missingrefcount.md) - -## SavedObjectsExportResultDetails.missingRefCount property - -number of missing references - -Signature: - -```typescript -missingRefCount: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingreferences.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingreferences.md deleted file mode 100644 index a5b51c38a4cab..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexportresultdetails.missingreferences.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportResultDetails](./kibana-plugin-core-server.savedobjectsexportresultdetails.md) > [missingReferences](./kibana-plugin-core-server.savedobjectsexportresultdetails.missingreferences.md) - -## SavedObjectsExportResultDetails.missingReferences property - -missing references details - -Signature: - -```typescript -missingReferences: Array<{ - id: string; - type: string; - }>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransform.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransform.md deleted file mode 100644 index 2f83d5188e891..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransform.md +++ /dev/null @@ -1,84 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportTransform](./kibana-plugin-core-server.savedobjectsexporttransform.md) - -## SavedObjectsExportTransform type - -Transformation function used to mutate the exported objects of the associated type. - -A type's export transform function will be executed once per user-initiated export, for all objects of that type. - -Signature: - -```typescript -export declare type SavedObjectsExportTransform = (context: SavedObjectsExportTransformContext, objects: Array>) => SavedObject[] | Promise; -``` - -## Remarks - -Trying to change an object's id or type during the transform will result in a runtime error during the export process. - -## Example 1 - -Registering a transform function changing the object's attributes during the export - -```ts -// src/plugins/my_plugin/server/plugin.ts -import { myType } from './saved_objects'; - -export class Plugin() { - setup: (core: CoreSetup) => { - core.savedObjects.registerType({ - ...myType, - management: { - ...myType.management, - onExport: (ctx, objects) => { - return objects.map((obj) => ({ - ...obj, - attributes: { - ...obj.attributes, - enabled: false, - } - }) - } - }, - }); - } -} -``` - -## Example 2 - -Registering a transform function adding additional objects to the export - -```ts -// src/plugins/my_plugin/server/plugin.ts -import { myType } from './saved_objects'; - -export class Plugin() { - setup: (core: CoreSetup) => { - const savedObjectStartContractPromise = getStartServices().then( - ([{ savedObjects: savedObjectsStart }]) => savedObjectsStart - ); - - core.savedObjects.registerType({ - ...myType, - management: { - ...myType.management, - onExport: async (ctx, objects) => { - const { getScopedClient } = await savedObjectStartContractPromise; - const client = getScopedClient(ctx.request); - - const depResponse = await client.find({ - type: 'my-nested-object', - hasReference: objs.map(({ id, type }) => ({ id, type })), - }); - - return [...objs, ...depResponse.saved_objects]; - } - }, - }); - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.md deleted file mode 100644 index c277308c6fc3b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportTransformContext](./kibana-plugin-core-server.savedobjectsexporttransformcontext.md) - -## SavedObjectsExportTransformContext interface - -Context passed down to a [export transform function](./kibana-plugin-core-server.savedobjectsexporttransform.md) - -Signature: - -```typescript -export interface SavedObjectsExportTransformContext -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [request](./kibana-plugin-core-server.savedobjectsexporttransformcontext.request.md) | KibanaRequest | The request that initiated the export request. Can be used to create scoped services or client inside the [transformation](./kibana-plugin-core-server.savedobjectsexporttransform.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.request.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.request.md deleted file mode 100644 index fe04698899c7c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporttransformcontext.request.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsExportTransformContext](./kibana-plugin-core-server.savedobjectsexporttransformcontext.md) > [request](./kibana-plugin-core-server.savedobjectsexporttransformcontext.request.md) - -## SavedObjectsExportTransformContext.request property - -The request that initiated the export request. Can be used to create scoped services or client inside the [transformation](./kibana-plugin-core-server.savedobjectsexporttransform.md) - -Signature: - -```typescript -request: KibanaRequest; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfieldmapping.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfieldmapping.md deleted file mode 100644 index cf5b5d7e6e339..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfieldmapping.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFieldMapping](./kibana-plugin-core-server.savedobjectsfieldmapping.md) - -## SavedObjectsFieldMapping type - -Describe a [saved object type mapping](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) field. - -Please refer to [elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) For the mapping documentation - -Signature: - -```typescript -export declare type SavedObjectsFieldMapping = estypes.MappingProperty & { - dynamic?: false | 'strict'; - properties?: Record; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.defaultsearchoperator.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.defaultsearchoperator.md deleted file mode 100644 index b716ed43948e4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.defaultsearchoperator.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [defaultSearchOperator](./kibana-plugin-core-server.savedobjectsfindoptions.defaultsearchoperator.md) - -## SavedObjectsFindOptions.defaultSearchOperator property - -The search operator to use with the provided filter. Defaults to `OR` - -Signature: - -```typescript -defaultSearchOperator?: 'AND' | 'OR'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.fields.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.fields.md deleted file mode 100644 index bb7d0a8ff861c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.fields.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [fields](./kibana-plugin-core-server.savedobjectsfindoptions.fields.md) - -## SavedObjectsFindOptions.fields property - -An array of fields to include in the results - -Signature: - -```typescript -fields?: string[]; -``` - -## Example - -SavedObjects.find({type: 'dashboard', fields: \['attributes.name', 'attributes.location'\]}) - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.filter.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.filter.md deleted file mode 100644 index c98a4fe5e8796..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.filter.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [filter](./kibana-plugin-core-server.savedobjectsfindoptions.filter.md) - -## SavedObjectsFindOptions.filter property - -Signature: - -```typescript -filter?: string | KueryNode; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreference.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreference.md deleted file mode 100644 index dea3d55950789..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreference.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [hasReference](./kibana-plugin-core-server.savedobjectsfindoptions.hasreference.md) - -## SavedObjectsFindOptions.hasReference property - -Search for documents having a reference to the specified objects. Use `hasReferenceOperator` to specify the operator to use when searching for multiple references. - -Signature: - -```typescript -hasReference?: SavedObjectsFindOptionsReference | SavedObjectsFindOptionsReference[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreferenceoperator.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreferenceoperator.md deleted file mode 100644 index 2c06f76d5c736..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.hasreferenceoperator.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [hasReferenceOperator](./kibana-plugin-core-server.savedobjectsfindoptions.hasreferenceoperator.md) - -## SavedObjectsFindOptions.hasReferenceOperator property - -The operator to use when searching by multiple references using the `hasReference` option. Defaults to `OR` - -Signature: - -```typescript -hasReferenceOperator?: 'AND' | 'OR'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md deleted file mode 100644 index 9e87eff2f1232..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md +++ /dev/null @@ -1,36 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) - -## SavedObjectsFindOptions interface - - -Signature: - -```typescript -export interface SavedObjectsFindOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [defaultSearchOperator?](./kibana-plugin-core-server.savedobjectsfindoptions.defaultsearchoperator.md) | 'AND' \| 'OR' | (Optional) The search operator to use with the provided filter. Defaults to OR | -| [fields?](./kibana-plugin-core-server.savedobjectsfindoptions.fields.md) | string\[\] | (Optional) An array of fields to include in the results | -| [filter?](./kibana-plugin-core-server.savedobjectsfindoptions.filter.md) | string \| KueryNode | (Optional) | -| [hasReference?](./kibana-plugin-core-server.savedobjectsfindoptions.hasreference.md) | SavedObjectsFindOptionsReference \| SavedObjectsFindOptionsReference\[\] | (Optional) Search for documents having a reference to the specified objects. Use hasReferenceOperator to specify the operator to use when searching for multiple references. | -| [hasReferenceOperator?](./kibana-plugin-core-server.savedobjectsfindoptions.hasreferenceoperator.md) | 'AND' \| 'OR' | (Optional) The operator to use when searching by multiple references using the hasReference option. Defaults to OR | -| [namespaces?](./kibana-plugin-core-server.savedobjectsfindoptions.namespaces.md) | string\[\] | (Optional) | -| [page?](./kibana-plugin-core-server.savedobjectsfindoptions.page.md) | number | (Optional) | -| [perPage?](./kibana-plugin-core-server.savedobjectsfindoptions.perpage.md) | number | (Optional) | -| [pit?](./kibana-plugin-core-server.savedobjectsfindoptions.pit.md) | SavedObjectsPitParams | (Optional) Search against a specific Point In Time (PIT) that you've opened with [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md). | -| [preference?](./kibana-plugin-core-server.savedobjectsfindoptions.preference.md) | string | (Optional) An optional ES preference value to be used for the query \* | -| [rootSearchFields?](./kibana-plugin-core-server.savedobjectsfindoptions.rootsearchfields.md) | string\[\] | (Optional) The fields to perform the parsed query against. Unlike the searchFields argument, these are expected to be root fields and will not be modified. If used in conjunction with searchFields, both are concatenated together. | -| [search?](./kibana-plugin-core-server.savedobjectsfindoptions.search.md) | string | (Optional) Search documents using the Elasticsearch Simple Query String syntax. See Elasticsearch Simple Query String query argument for more information | -| [searchAfter?](./kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md) | estypes.Id\[\] | (Optional) Use the sort values from the previous page to retrieve the next page of results. | -| [searchFields?](./kibana-plugin-core-server.savedobjectsfindoptions.searchfields.md) | string\[\] | (Optional) The fields to perform the parsed query against. See Elasticsearch Simple Query String fields argument for more information | -| [sortField?](./kibana-plugin-core-server.savedobjectsfindoptions.sortfield.md) | string | (Optional) | -| [sortOrder?](./kibana-plugin-core-server.savedobjectsfindoptions.sortorder.md) | estypes.SortOrder | (Optional) | -| [type](./kibana-plugin-core-server.savedobjectsfindoptions.type.md) | string \| string\[\] | | -| [typeToNamespacesMap?](./kibana-plugin-core-server.savedobjectsfindoptions.typetonamespacesmap.md) | Map<string, string\[\] \| undefined> | (Optional) This map defines each type to search for, and the namespace(s) to search for the type in; this is only intended to be used by a saved object client wrapper. If this is defined, it supersedes the type and namespaces fields when building the Elasticsearch query. Any types that are not included in this map will be excluded entirely. If a type is included but its value is undefined, the operation will search for that type in the Default namespace. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.namespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.namespaces.md deleted file mode 100644 index cae707baa58c0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.namespaces.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [namespaces](./kibana-plugin-core-server.savedobjectsfindoptions.namespaces.md) - -## SavedObjectsFindOptions.namespaces property - -Signature: - -```typescript -namespaces?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.page.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.page.md deleted file mode 100644 index 5a2f05af843b9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.page.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [page](./kibana-plugin-core-server.savedobjectsfindoptions.page.md) - -## SavedObjectsFindOptions.page property - -Signature: - -```typescript -page?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.perpage.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.perpage.md deleted file mode 100644 index 39191ae00c8f9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.perpage.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [perPage](./kibana-plugin-core-server.savedobjectsfindoptions.perpage.md) - -## SavedObjectsFindOptions.perPage property - -Signature: - -```typescript -perPage?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.pit.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.pit.md deleted file mode 100644 index fac333227088c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.pit.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [pit](./kibana-plugin-core-server.savedobjectsfindoptions.pit.md) - -## SavedObjectsFindOptions.pit property - -Search against a specific Point In Time (PIT) that you've opened with [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md). - -Signature: - -```typescript -pit?: SavedObjectsPitParams; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.preference.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.preference.md deleted file mode 100644 index c9e1c168e7a1b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.preference.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [preference](./kibana-plugin-core-server.savedobjectsfindoptions.preference.md) - -## SavedObjectsFindOptions.preference property - -An optional ES preference value to be used for the query \* - -Signature: - -```typescript -preference?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.rootsearchfields.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.rootsearchfields.md deleted file mode 100644 index 204342c45f64e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.rootsearchfields.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [rootSearchFields](./kibana-plugin-core-server.savedobjectsfindoptions.rootsearchfields.md) - -## SavedObjectsFindOptions.rootSearchFields property - -The fields to perform the parsed query against. Unlike the `searchFields` argument, these are expected to be root fields and will not be modified. If used in conjunction with `searchFields`, both are concatenated together. - -Signature: - -```typescript -rootSearchFields?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.search.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.search.md deleted file mode 100644 index fdf7cc1fb94c9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.search.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [search](./kibana-plugin-core-server.savedobjectsfindoptions.search.md) - -## SavedObjectsFindOptions.search property - -Search documents using the Elasticsearch Simple Query String syntax. See Elasticsearch Simple Query String `query` argument for more information - -Signature: - -```typescript -search?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md deleted file mode 100644 index 9afd602259a78..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [searchAfter](./kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md) - -## SavedObjectsFindOptions.searchAfter property - -Use the sort values from the previous page to retrieve the next page of results. - -Signature: - -```typescript -searchAfter?: estypes.Id[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchfields.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchfields.md deleted file mode 100644 index ba1152c05eb37..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchfields.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [searchFields](./kibana-plugin-core-server.savedobjectsfindoptions.searchfields.md) - -## SavedObjectsFindOptions.searchFields property - -The fields to perform the parsed query against. See Elasticsearch Simple Query String `fields` argument for more information - -Signature: - -```typescript -searchFields?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortfield.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortfield.md deleted file mode 100644 index 1dffe996d5726..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortfield.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [sortField](./kibana-plugin-core-server.savedobjectsfindoptions.sortfield.md) - -## SavedObjectsFindOptions.sortField property - -Signature: - -```typescript -sortField?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortorder.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortorder.md deleted file mode 100644 index e1c657e3a5171..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.sortorder.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [sortOrder](./kibana-plugin-core-server.savedobjectsfindoptions.sortorder.md) - -## SavedObjectsFindOptions.sortOrder property - -Signature: - -```typescript -sortOrder?: estypes.SortOrder; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.type.md deleted file mode 100644 index b1503984fdd44..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [type](./kibana-plugin-core-server.savedobjectsfindoptions.type.md) - -## SavedObjectsFindOptions.type property - -Signature: - -```typescript -type: string | string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.typetonamespacesmap.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.typetonamespacesmap.md deleted file mode 100644 index 8bec759f05580..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.typetonamespacesmap.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [typeToNamespacesMap](./kibana-plugin-core-server.savedobjectsfindoptions.typetonamespacesmap.md) - -## SavedObjectsFindOptions.typeToNamespacesMap property - -This map defines each type to search for, and the namespace(s) to search for the type in; this is only intended to be used by a saved object client wrapper. If this is defined, it supersedes the `type` and `namespaces` fields when building the Elasticsearch query. Any types that are not included in this map will be excluded entirely. If a type is included but its value is undefined, the operation will search for that type in the Default namespace. - -Signature: - -```typescript -typeToNamespacesMap?: Map; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.id.md deleted file mode 100644 index 6d5b76d685680..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptionsReference](./kibana-plugin-core-server.savedobjectsfindoptionsreference.md) > [id](./kibana-plugin-core-server.savedobjectsfindoptionsreference.id.md) - -## SavedObjectsFindOptionsReference.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.md deleted file mode 100644 index 21eb9f06cc11d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptionsReference](./kibana-plugin-core-server.savedobjectsfindoptionsreference.md) - -## SavedObjectsFindOptionsReference interface - - -Signature: - -```typescript -export interface SavedObjectsFindOptionsReference -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectsfindoptionsreference.id.md) | string | | -| [type](./kibana-plugin-core-server.savedobjectsfindoptionsreference.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.type.md deleted file mode 100644 index 0d7db3d72a457..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptionsreference.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptionsReference](./kibana-plugin-core-server.savedobjectsfindoptionsreference.md) > [type](./kibana-plugin-core-server.savedobjectsfindoptionsreference.type.md) - -## SavedObjectsFindOptionsReference.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.aggregations.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.aggregations.md deleted file mode 100644 index 17a899f4c8280..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.aggregations.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) > [aggregations](./kibana-plugin-core-server.savedobjectsfindresponse.aggregations.md) - -## SavedObjectsFindResponse.aggregations property - -Signature: - -```typescript -aggregations?: A; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md deleted file mode 100644 index 4afb825fd0f44..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) - -## SavedObjectsFindResponse interface - -Return type of the Saved Objects `find()` method. - -\*Note\*: this type is different between the Public and Server Saved Objects clients. - -Signature: - -```typescript -export interface SavedObjectsFindResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [aggregations?](./kibana-plugin-core-server.savedobjectsfindresponse.aggregations.md) | A | (Optional) | -| [page](./kibana-plugin-core-server.savedobjectsfindresponse.page.md) | number | | -| [per\_page](./kibana-plugin-core-server.savedobjectsfindresponse.per_page.md) | number | | -| [pit\_id?](./kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md) | string | (Optional) | -| [saved\_objects](./kibana-plugin-core-server.savedobjectsfindresponse.saved_objects.md) | Array<SavedObjectsFindResult<T>> | | -| [total](./kibana-plugin-core-server.savedobjectsfindresponse.total.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.page.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.page.md deleted file mode 100644 index 82e18ac4f3f8f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.page.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) > [page](./kibana-plugin-core-server.savedobjectsfindresponse.page.md) - -## SavedObjectsFindResponse.page property - -Signature: - -```typescript -page: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.per_page.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.per_page.md deleted file mode 100644 index 551aea487fe4a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.per_page.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) > [per\_page](./kibana-plugin-core-server.savedobjectsfindresponse.per_page.md) - -## SavedObjectsFindResponse.per\_page property - -Signature: - -```typescript -per_page: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md deleted file mode 100644 index dc4f9b509d606..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) > [pit\_id](./kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md) - -## SavedObjectsFindResponse.pit\_id property - -Signature: - -```typescript -pit_id?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.saved_objects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.saved_objects.md deleted file mode 100644 index 7a91367f6ef0b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.saved_objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) > [saved\_objects](./kibana-plugin-core-server.savedobjectsfindresponse.saved_objects.md) - -## SavedObjectsFindResponse.saved\_objects property - -Signature: - -```typescript -saved_objects: Array>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.total.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.total.md deleted file mode 100644 index 3a6b4309f2e7a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.total.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) > [total](./kibana-plugin-core-server.savedobjectsfindresponse.total.md) - -## SavedObjectsFindResponse.total property - -Signature: - -```typescript -total: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md deleted file mode 100644 index f2ba01697da17..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResult](./kibana-plugin-core-server.savedobjectsfindresult.md) - -## SavedObjectsFindResult interface - - -Signature: - -```typescript -export interface SavedObjectsFindResult extends SavedObject -``` -Extends: SavedObject<T> - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [score](./kibana-plugin-core-server.savedobjectsfindresult.score.md) | number | The Elasticsearch _score of this result. | -| [sort?](./kibana-plugin-core-server.savedobjectsfindresult.sort.md) | string\[\] | (Optional) The Elasticsearch sort value of this result. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.score.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.score.md deleted file mode 100644 index c6646df6ee470..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.score.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResult](./kibana-plugin-core-server.savedobjectsfindresult.md) > [score](./kibana-plugin-core-server.savedobjectsfindresult.score.md) - -## SavedObjectsFindResult.score property - -The Elasticsearch `_score` of this result. - -Signature: - -```typescript -score: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.sort.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.sort.md deleted file mode 100644 index 5df1b3291b072..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.sort.md +++ /dev/null @@ -1,40 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResult](./kibana-plugin-core-server.savedobjectsfindresult.md) > [sort](./kibana-plugin-core-server.savedobjectsfindresult.sort.md) - -## SavedObjectsFindResult.sort property - -The Elasticsearch `sort` value of this result. - -Signature: - -```typescript -sort?: string[]; -``` - -## Remarks - -This can be passed directly to the `searchAfter` param in the [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) in order to page through large numbers of hits. It is recommended you use this alongside a Point In Time (PIT) that was opened with [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md). - -## Example - - -```ts -const { id } = await savedObjectsClient.openPointInTimeForType('visualization'); -const page1 = await savedObjectsClient.find({ - type: 'visualization', - sortField: 'updated_at', - sortOrder: 'asc', - pit: { id }, -}); -const lastHit = page1.saved_objects[page1.saved_objects.length - 1]; -const page2 = await savedObjectsClient.find({ - type: 'visualization', - sortField: 'updated_at', - sortOrder: 'asc', - pit: { id: page1.pit_id }, - searchAfter: lastHit.sort, -}); -await savedObjectsClient.closePointInTime(page2.pit_id); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.actionpath.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.actionpath.md deleted file mode 100644 index f52fd9057d9d0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.actionpath.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) > [actionPath](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.actionpath.md) - -## SavedObjectsImportActionRequiredWarning.actionPath property - -The path (without the basePath) that the user should be redirect to address this warning. - -Signature: - -```typescript -actionPath: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.buttonlabel.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.buttonlabel.md deleted file mode 100644 index 7fb5d53c487af..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.buttonlabel.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) > [buttonLabel](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.buttonlabel.md) - -## SavedObjectsImportActionRequiredWarning.buttonLabel property - -An optional label to use for the link button. If unspecified, a default label will be used. - -Signature: - -```typescript -buttonLabel?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md deleted file mode 100644 index c4ec5fdd2f8e6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) - -## SavedObjectsImportActionRequiredWarning interface - -A warning meant to notify that a specific user action is required to finalize the import of some type of object. - - The `actionUrl` must be a path relative to the basePath, and not include it. - -Signature: - -```typescript -export interface SavedObjectsImportActionRequiredWarning -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [actionPath](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.actionpath.md) | string | The path (without the basePath) that the user should be redirect to address this warning. | -| [buttonLabel?](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.buttonlabel.md) | string | (Optional) An optional label to use for the link button. If unspecified, a default label will be used. | -| [message](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.message.md) | string | The translated message to display to the user. | -| [type](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.type.md) | 'action\_required' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.message.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.message.md deleted file mode 100644 index 1ab9afd4bad99..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.message.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) > [message](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.message.md) - -## SavedObjectsImportActionRequiredWarning.message property - -The translated message to display to the user. - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.type.md deleted file mode 100644 index d8f22ef17d8f0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) > [type](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.type.md) - -## SavedObjectsImportActionRequiredWarning.type property - -Signature: - -```typescript -type: 'action_required'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.destinations.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.destinations.md deleted file mode 100644 index 445979dd740d3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.destinations.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md) > [destinations](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.destinations.md) - -## SavedObjectsImportAmbiguousConflictError.destinations property - -Signature: - -```typescript -destinations: Array<{ - id: string; - title?: string; - updatedAt?: string; - }>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md deleted file mode 100644 index 7d275fa199c5b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md) - -## SavedObjectsImportAmbiguousConflictError interface - -Represents a failure to import due to a conflict, which can be resolved in different ways with an overwrite. - -Signature: - -```typescript -export interface SavedObjectsImportAmbiguousConflictError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [destinations](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.destinations.md) | Array<{ id: string; title?: string; updatedAt?: string; }> | | -| [type](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.type.md) | 'ambiguous\_conflict' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.type.md deleted file mode 100644 index ca98682873033..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportAmbiguousConflictError](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.md) > [type](./kibana-plugin-core-server.savedobjectsimportambiguousconflicterror.type.md) - -## SavedObjectsImportAmbiguousConflictError.type property - -Signature: - -```typescript -type: 'ambiguous_conflict'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.destinationid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.destinationid.md deleted file mode 100644 index 858f171223472..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.destinationid.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportConflictError](./kibana-plugin-core-server.savedobjectsimportconflicterror.md) > [destinationId](./kibana-plugin-core-server.savedobjectsimportconflicterror.destinationid.md) - -## SavedObjectsImportConflictError.destinationId property - -Signature: - -```typescript -destinationId?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.md deleted file mode 100644 index 9456e042035fe..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportConflictError](./kibana-plugin-core-server.savedobjectsimportconflicterror.md) - -## SavedObjectsImportConflictError interface - -Represents a failure to import due to a conflict. - -Signature: - -```typescript -export interface SavedObjectsImportConflictError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [destinationId?](./kibana-plugin-core-server.savedobjectsimportconflicterror.destinationid.md) | string | (Optional) | -| [type](./kibana-plugin-core-server.savedobjectsimportconflicterror.type.md) | 'conflict' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.type.md deleted file mode 100644 index 15ceed56fb22f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportconflicterror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportConflictError](./kibana-plugin-core-server.savedobjectsimportconflicterror.md) > [type](./kibana-plugin-core-server.savedobjectsimportconflicterror.type.md) - -## SavedObjectsImportConflictError.type property - -Signature: - -```typescript -type: 'conflict'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.attributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.attributes.md deleted file mode 100644 index 6d09d4cb88120..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) > [attributes](./kibana-plugin-core-server.savedobjectsimporterror.attributes.md) - -## SavedObjectsImportError.attributes property - -Signature: - -```typescript -readonly attributes?: Record | undefined; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.importsizeexceeded.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.importsizeexceeded.md deleted file mode 100644 index 421557445670e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.importsizeexceeded.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) > [importSizeExceeded](./kibana-plugin-core-server.savedobjectsimporterror.importsizeexceeded.md) - -## SavedObjectsImportError.importSizeExceeded() method - -Signature: - -```typescript -static importSizeExceeded(limit: number): SavedObjectsImportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| limit | number | | - -Returns: - -SavedObjectsImportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.md deleted file mode 100644 index 2e4fd1a01eb04..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) - -## SavedObjectsImportError class - - -Signature: - -```typescript -export declare class SavedObjectsImportError extends Error -``` -Extends: Error - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [attributes?](./kibana-plugin-core-server.savedobjectsimporterror.attributes.md) | | Record<string, any> \| undefined | (Optional) | -| [type](./kibana-plugin-core-server.savedobjectsimporterror.type.md) | | string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [importSizeExceeded(limit)](./kibana-plugin-core-server.savedobjectsimporterror.importsizeexceeded.md) | static | | -| [nonUniqueImportObjects(nonUniqueEntries)](./kibana-plugin-core-server.savedobjectsimporterror.nonuniqueimportobjects.md) | static | | -| [nonUniqueRetryDestinations(nonUniqueRetryDestinations)](./kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretrydestinations.md) | static | | -| [nonUniqueRetryObjects(nonUniqueRetryObjects)](./kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretryobjects.md) | static | | -| [referencesFetchError(objects)](./kibana-plugin-core-server.savedobjectsimporterror.referencesfetcherror.md) | static | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueimportobjects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueimportobjects.md deleted file mode 100644 index 29533db10302c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueimportobjects.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) > [nonUniqueImportObjects](./kibana-plugin-core-server.savedobjectsimporterror.nonuniqueimportobjects.md) - -## SavedObjectsImportError.nonUniqueImportObjects() method - -Signature: - -```typescript -static nonUniqueImportObjects(nonUniqueEntries: string[]): SavedObjectsImportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| nonUniqueEntries | string\[\] | | - -Returns: - -SavedObjectsImportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretrydestinations.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretrydestinations.md deleted file mode 100644 index 4fd23c3f6d62d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretrydestinations.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) > [nonUniqueRetryDestinations](./kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretrydestinations.md) - -## SavedObjectsImportError.nonUniqueRetryDestinations() method - -Signature: - -```typescript -static nonUniqueRetryDestinations(nonUniqueRetryDestinations: string[]): SavedObjectsImportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| nonUniqueRetryDestinations | string\[\] | | - -Returns: - -SavedObjectsImportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretryobjects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretryobjects.md deleted file mode 100644 index bf8a2c2c01760..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretryobjects.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) > [nonUniqueRetryObjects](./kibana-plugin-core-server.savedobjectsimporterror.nonuniqueretryobjects.md) - -## SavedObjectsImportError.nonUniqueRetryObjects() method - -Signature: - -```typescript -static nonUniqueRetryObjects(nonUniqueRetryObjects: string[]): SavedObjectsImportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| nonUniqueRetryObjects | string\[\] | | - -Returns: - -SavedObjectsImportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.referencesfetcherror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.referencesfetcherror.md deleted file mode 100644 index 4202f164900b3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.referencesfetcherror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) > [referencesFetchError](./kibana-plugin-core-server.savedobjectsimporterror.referencesfetcherror.md) - -## SavedObjectsImportError.referencesFetchError() method - -Signature: - -```typescript -static referencesFetchError(objects: SavedObject[]): SavedObjectsImportError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObject\[\] | | - -Returns: - -SavedObjectsImportError - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.type.md deleted file mode 100644 index db655f8cfa129..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporterror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportError](./kibana-plugin-core-server.savedobjectsimporterror.md) > [type](./kibana-plugin-core-server.savedobjectsimporterror.type.md) - -## SavedObjectsImportError.type property - -Signature: - -```typescript -readonly type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.error.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.error.md deleted file mode 100644 index 40c9fa1fefa91..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportFailure](./kibana-plugin-core-server.savedobjectsimportfailure.md) > [error](./kibana-plugin-core-server.savedobjectsimportfailure.error.md) - -## SavedObjectsImportFailure.error property - -Signature: - -```typescript -error: SavedObjectsImportConflictError | SavedObjectsImportAmbiguousConflictError | SavedObjectsImportUnsupportedTypeError | SavedObjectsImportMissingReferencesError | SavedObjectsImportUnknownError; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.id.md deleted file mode 100644 index a58183b84e401..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportFailure](./kibana-plugin-core-server.savedobjectsimportfailure.md) > [id](./kibana-plugin-core-server.savedobjectsimportfailure.id.md) - -## SavedObjectsImportFailure.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.md deleted file mode 100644 index 4bdc3d99028ab..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportFailure](./kibana-plugin-core-server.savedobjectsimportfailure.md) - -## SavedObjectsImportFailure interface - -Represents a failure to import. - -Signature: - -```typescript -export interface SavedObjectsImportFailure -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error](./kibana-plugin-core-server.savedobjectsimportfailure.error.md) | SavedObjectsImportConflictError \| SavedObjectsImportAmbiguousConflictError \| SavedObjectsImportUnsupportedTypeError \| SavedObjectsImportMissingReferencesError \| SavedObjectsImportUnknownError | | -| [id](./kibana-plugin-core-server.savedobjectsimportfailure.id.md) | string | | -| [meta](./kibana-plugin-core-server.savedobjectsimportfailure.meta.md) | { title?: string; icon?: string; } | | -| [overwrite?](./kibana-plugin-core-server.savedobjectsimportfailure.overwrite.md) | boolean | (Optional) If overwrite is specified, an attempt was made to overwrite an existing object. | -| [type](./kibana-plugin-core-server.savedobjectsimportfailure.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.meta.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.meta.md deleted file mode 100644 index c345ebe28b945..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.meta.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportFailure](./kibana-plugin-core-server.savedobjectsimportfailure.md) > [meta](./kibana-plugin-core-server.savedobjectsimportfailure.meta.md) - -## SavedObjectsImportFailure.meta property - -Signature: - -```typescript -meta: { - title?: string; - icon?: string; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.overwrite.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.overwrite.md deleted file mode 100644 index 0bd3f1c1d72e8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportFailure](./kibana-plugin-core-server.savedobjectsimportfailure.md) > [overwrite](./kibana-plugin-core-server.savedobjectsimportfailure.overwrite.md) - -## SavedObjectsImportFailure.overwrite property - -If `overwrite` is specified, an attempt was made to overwrite an existing object. - -Signature: - -```typescript -overwrite?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.type.md deleted file mode 100644 index ff1529eb8db7a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportfailure.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportFailure](./kibana-plugin-core-server.savedobjectsimportfailure.md) > [type](./kibana-plugin-core-server.savedobjectsimportfailure.type.md) - -## SavedObjectsImportFailure.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthook.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthook.md deleted file mode 100644 index 8d50ef94577de..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthook.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportHook](./kibana-plugin-core-server.savedobjectsimporthook.md) - -## SavedObjectsImportHook type - -A hook associated with a specific saved object type, that will be invoked during the import process. The hook will have access to the objects of the registered type. - -Currently, the only supported feature for import hooks is to return warnings to be displayed in the UI when the import succeeds. - - The only interactions the hook can have with the import process is via the hook's response. Mutating the objects inside the hook's code will have no effect. - -Signature: - -```typescript -export declare type SavedObjectsImportHook = (objects: Array>) => SavedObjectsImportHookResult | Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.md deleted file mode 100644 index eb16aa2fb0285..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportHookResult](./kibana-plugin-core-server.savedobjectsimporthookresult.md) - -## SavedObjectsImportHookResult interface - -Result from a [import hook](./kibana-plugin-core-server.savedobjectsimporthook.md) - -Signature: - -```typescript -export interface SavedObjectsImportHookResult -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [warnings?](./kibana-plugin-core-server.savedobjectsimporthookresult.warnings.md) | SavedObjectsImportWarning\[\] | (Optional) An optional list of warnings to display in the UI when the import succeeds. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.warnings.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.warnings.md deleted file mode 100644 index 682b384f8d363..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimporthookresult.warnings.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportHookResult](./kibana-plugin-core-server.savedobjectsimporthookresult.md) > [warnings](./kibana-plugin-core-server.savedobjectsimporthookresult.warnings.md) - -## SavedObjectsImportHookResult.warnings property - -An optional list of warnings to display in the UI when the import succeeds. - -Signature: - -```typescript -warnings?: SavedObjectsImportWarning[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md deleted file mode 100644 index 25d2a88e87e8b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md) - -## SavedObjectsImportMissingReferencesError interface - -Represents a failure to import due to missing references. - -Signature: - -```typescript -export interface SavedObjectsImportMissingReferencesError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [references](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.references.md) | Array<{ type: string; id: string; }> | | -| [type](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.type.md) | 'missing\_references' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.references.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.references.md deleted file mode 100644 index f8255e8c75f92..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.references.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md) > [references](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.references.md) - -## SavedObjectsImportMissingReferencesError.references property - -Signature: - -```typescript -references: Array<{ - type: string; - id: string; - }>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.type.md deleted file mode 100644 index 4499f82ed92ff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportMissingReferencesError](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.md) > [type](./kibana-plugin-core-server.savedobjectsimportmissingreferenceserror.type.md) - -## SavedObjectsImportMissingReferencesError.type property - -Signature: - -```typescript -type: 'missing_references'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.createnewcopies.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.createnewcopies.md deleted file mode 100644 index 23c6fe0051746..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.createnewcopies.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportOptions](./kibana-plugin-core-server.savedobjectsimportoptions.md) > [createNewCopies](./kibana-plugin-core-server.savedobjectsimportoptions.createnewcopies.md) - -## SavedObjectsImportOptions.createNewCopies property - -If true, will create new copies of import objects, each with a random `id` and undefined `originId`. - -Signature: - -```typescript -createNewCopies: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.md deleted file mode 100644 index 775f3a4c9acb3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportOptions](./kibana-plugin-core-server.savedobjectsimportoptions.md) - -## SavedObjectsImportOptions interface - -Options to control the import operation. - -Signature: - -```typescript -export interface SavedObjectsImportOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createNewCopies](./kibana-plugin-core-server.savedobjectsimportoptions.createnewcopies.md) | boolean | If true, will create new copies of import objects, each with a random id and undefined originId. | -| [namespace?](./kibana-plugin-core-server.savedobjectsimportoptions.namespace.md) | string | (Optional) if specified, will import in given namespace, else will import as global object | -| [overwrite](./kibana-plugin-core-server.savedobjectsimportoptions.overwrite.md) | boolean | If true, will override existing object if present. Note: this has no effect when used with the createNewCopies option. | -| [readStream](./kibana-plugin-core-server.savedobjectsimportoptions.readstream.md) | Readable | The stream of [saved objects](./kibana-plugin-core-server.savedobject.md) to import | -| [refresh?](./kibana-plugin-core-server.savedobjectsimportoptions.refresh.md) | boolean \| 'wait\_for' | (Optional) Refresh setting, defaults to wait_for | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.namespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.namespace.md deleted file mode 100644 index 188ff03092e0c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.namespace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportOptions](./kibana-plugin-core-server.savedobjectsimportoptions.md) > [namespace](./kibana-plugin-core-server.savedobjectsimportoptions.namespace.md) - -## SavedObjectsImportOptions.namespace property - -if specified, will import in given namespace, else will import as global object - -Signature: - -```typescript -namespace?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.overwrite.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.overwrite.md deleted file mode 100644 index 1e9192c47679d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportOptions](./kibana-plugin-core-server.savedobjectsimportoptions.md) > [overwrite](./kibana-plugin-core-server.savedobjectsimportoptions.overwrite.md) - -## SavedObjectsImportOptions.overwrite property - -If true, will override existing object if present. Note: this has no effect when used with the `createNewCopies` option. - -Signature: - -```typescript -overwrite: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.readstream.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.readstream.md deleted file mode 100644 index bf68ee47d21fb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.readstream.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportOptions](./kibana-plugin-core-server.savedobjectsimportoptions.md) > [readStream](./kibana-plugin-core-server.savedobjectsimportoptions.readstream.md) - -## SavedObjectsImportOptions.readStream property - -The stream of [saved objects](./kibana-plugin-core-server.savedobject.md) to import - -Signature: - -```typescript -readStream: Readable; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.refresh.md deleted file mode 100644 index cc7e36354647a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportoptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportOptions](./kibana-plugin-core-server.savedobjectsimportoptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsimportoptions.refresh.md) - -## SavedObjectsImportOptions.refresh property - -Refresh setting, defaults to `wait_for` - -Signature: - -```typescript -refresh?: boolean | 'wait_for'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.errors.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.errors.md deleted file mode 100644 index dc6f782fc937f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.errors.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportResponse](./kibana-plugin-core-server.savedobjectsimportresponse.md) > [errors](./kibana-plugin-core-server.savedobjectsimportresponse.errors.md) - -## SavedObjectsImportResponse.errors property - -Signature: - -```typescript -errors?: SavedObjectsImportFailure[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.md deleted file mode 100644 index e39b4b02bb55d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportResponse](./kibana-plugin-core-server.savedobjectsimportresponse.md) - -## SavedObjectsImportResponse interface - -The response describing the result of an import. - -Signature: - -```typescript -export interface SavedObjectsImportResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [errors?](./kibana-plugin-core-server.savedobjectsimportresponse.errors.md) | SavedObjectsImportFailure\[\] | (Optional) | -| [success](./kibana-plugin-core-server.savedobjectsimportresponse.success.md) | boolean | | -| [successCount](./kibana-plugin-core-server.savedobjectsimportresponse.successcount.md) | number | | -| [successResults?](./kibana-plugin-core-server.savedobjectsimportresponse.successresults.md) | SavedObjectsImportSuccess\[\] | (Optional) | -| [warnings](./kibana-plugin-core-server.savedobjectsimportresponse.warnings.md) | SavedObjectsImportWarning\[\] | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.success.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.success.md deleted file mode 100644 index fc4f98cd2556e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.success.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportResponse](./kibana-plugin-core-server.savedobjectsimportresponse.md) > [success](./kibana-plugin-core-server.savedobjectsimportresponse.success.md) - -## SavedObjectsImportResponse.success property - -Signature: - -```typescript -success: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successcount.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successcount.md deleted file mode 100644 index 3186437a10482..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successcount.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportResponse](./kibana-plugin-core-server.savedobjectsimportresponse.md) > [successCount](./kibana-plugin-core-server.savedobjectsimportresponse.successcount.md) - -## SavedObjectsImportResponse.successCount property - -Signature: - -```typescript -successCount: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successresults.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successresults.md deleted file mode 100644 index 63951d3a0b25f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.successresults.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportResponse](./kibana-plugin-core-server.savedobjectsimportresponse.md) > [successResults](./kibana-plugin-core-server.savedobjectsimportresponse.successresults.md) - -## SavedObjectsImportResponse.successResults property - -Signature: - -```typescript -successResults?: SavedObjectsImportSuccess[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.warnings.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.warnings.md deleted file mode 100644 index 88cccf7f527e7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportresponse.warnings.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportResponse](./kibana-plugin-core-server.savedobjectsimportresponse.md) > [warnings](./kibana-plugin-core-server.savedobjectsimportresponse.warnings.md) - -## SavedObjectsImportResponse.warnings property - -Signature: - -```typescript -warnings: SavedObjectsImportWarning[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.createnewcopy.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.createnewcopy.md deleted file mode 100644 index e9cc92c55ded1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.createnewcopy.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) > [createNewCopy](./kibana-plugin-core-server.savedobjectsimportretry.createnewcopy.md) - -## SavedObjectsImportRetry.createNewCopy property - -If `createNewCopy` is specified, the new object has a new (undefined) origin ID. This is only needed for the case where `createNewCopies` mode is disabled and ambiguous source conflicts are detected. - -Signature: - -```typescript -createNewCopy?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.destinationid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.destinationid.md deleted file mode 100644 index 9a3ccf4442db7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.destinationid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) > [destinationId](./kibana-plugin-core-server.savedobjectsimportretry.destinationid.md) - -## SavedObjectsImportRetry.destinationId property - -The object ID that will be created or overwritten. If not specified, the `id` field will be used. - -Signature: - -```typescript -destinationId?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.id.md deleted file mode 100644 index d42b1e3ad7581..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) > [id](./kibana-plugin-core-server.savedobjectsimportretry.id.md) - -## SavedObjectsImportRetry.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.ignoremissingreferences.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.ignoremissingreferences.md deleted file mode 100644 index a23bec3c5341f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.ignoremissingreferences.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) > [ignoreMissingReferences](./kibana-plugin-core-server.savedobjectsimportretry.ignoremissingreferences.md) - -## SavedObjectsImportRetry.ignoreMissingReferences property - -If `ignoreMissingReferences` is specified, reference validation will be skipped for this object. - -Signature: - -```typescript -ignoreMissingReferences?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.md deleted file mode 100644 index b79ec63ed86c0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) - -## SavedObjectsImportRetry interface - -Describes a retry operation for importing a saved object. - -Signature: - -```typescript -export interface SavedObjectsImportRetry -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createNewCopy?](./kibana-plugin-core-server.savedobjectsimportretry.createnewcopy.md) | boolean | (Optional) If createNewCopy is specified, the new object has a new (undefined) origin ID. This is only needed for the case where createNewCopies mode is disabled and ambiguous source conflicts are detected. | -| [destinationId?](./kibana-plugin-core-server.savedobjectsimportretry.destinationid.md) | string | (Optional) The object ID that will be created or overwritten. If not specified, the id field will be used. | -| [id](./kibana-plugin-core-server.savedobjectsimportretry.id.md) | string | | -| [ignoreMissingReferences?](./kibana-plugin-core-server.savedobjectsimportretry.ignoremissingreferences.md) | boolean | (Optional) If ignoreMissingReferences is specified, reference validation will be skipped for this object. | -| [overwrite](./kibana-plugin-core-server.savedobjectsimportretry.overwrite.md) | boolean | | -| [replaceReferences](./kibana-plugin-core-server.savedobjectsimportretry.replacereferences.md) | Array<{ type: string; from: string; to: string; }> | | -| [type](./kibana-plugin-core-server.savedobjectsimportretry.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.overwrite.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.overwrite.md deleted file mode 100644 index f4358ab986563..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.overwrite.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) > [overwrite](./kibana-plugin-core-server.savedobjectsimportretry.overwrite.md) - -## SavedObjectsImportRetry.overwrite property - -Signature: - -```typescript -overwrite: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.replacereferences.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.replacereferences.md deleted file mode 100644 index b25940d9ab2ff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.replacereferences.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) > [replaceReferences](./kibana-plugin-core-server.savedobjectsimportretry.replacereferences.md) - -## SavedObjectsImportRetry.replaceReferences property - -Signature: - -```typescript -replaceReferences: Array<{ - type: string; - from: string; - to: string; - }>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.type.md deleted file mode 100644 index 2e434c4a57e9b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportretry.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportRetry](./kibana-plugin-core-server.savedobjectsimportretry.md) > [type](./kibana-plugin-core-server.savedobjectsimportretry.type.md) - -## SavedObjectsImportRetry.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.md deleted file mode 100644 index 7dc4285400478..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSimpleWarning](./kibana-plugin-core-server.savedobjectsimportsimplewarning.md) - -## SavedObjectsImportSimpleWarning interface - -A simple informative warning that will be displayed to the user. - -Signature: - -```typescript -export interface SavedObjectsImportSimpleWarning -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [message](./kibana-plugin-core-server.savedobjectsimportsimplewarning.message.md) | string | The translated message to display to the user | -| [type](./kibana-plugin-core-server.savedobjectsimportsimplewarning.type.md) | 'simple' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.message.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.message.md deleted file mode 100644 index 1e3ac7ec11365..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.message.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSimpleWarning](./kibana-plugin-core-server.savedobjectsimportsimplewarning.md) > [message](./kibana-plugin-core-server.savedobjectsimportsimplewarning.message.md) - -## SavedObjectsImportSimpleWarning.message property - -The translated message to display to the user - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.type.md deleted file mode 100644 index 660b1b39d6c39..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsimplewarning.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSimpleWarning](./kibana-plugin-core-server.savedobjectsimportsimplewarning.md) > [type](./kibana-plugin-core-server.savedobjectsimportsimplewarning.type.md) - -## SavedObjectsImportSimpleWarning.type property - -Signature: - -```typescript -type: 'simple'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.createnewcopy.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.createnewcopy.md deleted file mode 100644 index 3473a4f4577e2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.createnewcopy.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) > [createNewCopy](./kibana-plugin-core-server.savedobjectsimportsuccess.createnewcopy.md) - -## SavedObjectsImportSuccess.createNewCopy property - -> Warning: This API is now obsolete. -> -> Can be removed when https://github.com/elastic/kibana/issues/91615 is done. If `createNewCopy` is specified, the new object has a new (undefined) origin ID. This is only needed for the case where `createNewCopies` mode is disabled and ambiguous source conflicts are detected. When `createNewCopies` mode is permanently enabled, this field will be redundant and can be removed. -> - -Signature: - -```typescript -createNewCopy?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.destinationid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.destinationid.md deleted file mode 100644 index c5acc51c3ec99..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.destinationid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) > [destinationId](./kibana-plugin-core-server.savedobjectsimportsuccess.destinationid.md) - -## SavedObjectsImportSuccess.destinationId property - -If `destinationId` is specified, the new object has a new ID that is different from the import ID. - -Signature: - -```typescript -destinationId?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.id.md deleted file mode 100644 index 5b95f7f64bfac..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) > [id](./kibana-plugin-core-server.savedobjectsimportsuccess.id.md) - -## SavedObjectsImportSuccess.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.md deleted file mode 100644 index 74242ba6d75be..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) - -## SavedObjectsImportSuccess interface - -Represents a successful import. - -Signature: - -```typescript -export interface SavedObjectsImportSuccess -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createNewCopy?](./kibana-plugin-core-server.savedobjectsimportsuccess.createnewcopy.md) | boolean | (Optional) | -| [destinationId?](./kibana-plugin-core-server.savedobjectsimportsuccess.destinationid.md) | string | (Optional) If destinationId is specified, the new object has a new ID that is different from the import ID. | -| [id](./kibana-plugin-core-server.savedobjectsimportsuccess.id.md) | string | | -| [meta](./kibana-plugin-core-server.savedobjectsimportsuccess.meta.md) | { title?: string; icon?: string; } | | -| [overwrite?](./kibana-plugin-core-server.savedobjectsimportsuccess.overwrite.md) | boolean | (Optional) If overwrite is specified, this object overwrote an existing one (or will do so, in the case of a pending resolution). | -| [type](./kibana-plugin-core-server.savedobjectsimportsuccess.type.md) | string | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.meta.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.meta.md deleted file mode 100644 index de6057b4729ec..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.meta.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) > [meta](./kibana-plugin-core-server.savedobjectsimportsuccess.meta.md) - -## SavedObjectsImportSuccess.meta property - -Signature: - -```typescript -meta: { - title?: string; - icon?: string; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.overwrite.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.overwrite.md deleted file mode 100644 index 80cb659ef2cd2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.overwrite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) > [overwrite](./kibana-plugin-core-server.savedobjectsimportsuccess.overwrite.md) - -## SavedObjectsImportSuccess.overwrite property - -If `overwrite` is specified, this object overwrote an existing one (or will do so, in the case of a pending resolution). - -Signature: - -```typescript -overwrite?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.type.md deleted file mode 100644 index e6aa894cd0af9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportsuccess.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportSuccess](./kibana-plugin-core-server.savedobjectsimportsuccess.md) > [type](./kibana-plugin-core-server.savedobjectsimportsuccess.type.md) - -## SavedObjectsImportSuccess.type property - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.md deleted file mode 100644 index 158afd45752fc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-server.savedobjectsimportunknownerror.md) - -## SavedObjectsImportUnknownError interface - -Represents a failure to import due to an unknown reason. - -Signature: - -```typescript -export interface SavedObjectsImportUnknownError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [message](./kibana-plugin-core-server.savedobjectsimportunknownerror.message.md) | string | | -| [statusCode](./kibana-plugin-core-server.savedobjectsimportunknownerror.statuscode.md) | number | | -| [type](./kibana-plugin-core-server.savedobjectsimportunknownerror.type.md) | 'unknown' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.message.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.message.md deleted file mode 100644 index b5fb8b9db0e10..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.message.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-server.savedobjectsimportunknownerror.md) > [message](./kibana-plugin-core-server.savedobjectsimportunknownerror.message.md) - -## SavedObjectsImportUnknownError.message property - -Signature: - -```typescript -message: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.statuscode.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.statuscode.md deleted file mode 100644 index 0fa38614e8735..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.statuscode.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-server.savedobjectsimportunknownerror.md) > [statusCode](./kibana-plugin-core-server.savedobjectsimportunknownerror.statuscode.md) - -## SavedObjectsImportUnknownError.statusCode property - -Signature: - -```typescript -statusCode: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.type.md deleted file mode 100644 index c22a1dec73789..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunknownerror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportUnknownError](./kibana-plugin-core-server.savedobjectsimportunknownerror.md) > [type](./kibana-plugin-core-server.savedobjectsimportunknownerror.type.md) - -## SavedObjectsImportUnknownError.type property - -Signature: - -```typescript -type: 'unknown'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.md deleted file mode 100644 index 48aff60c69d13..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportUnsupportedTypeError](./kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.md) - -## SavedObjectsImportUnsupportedTypeError interface - -Represents a failure to import due to having an unsupported saved object type. - -Signature: - -```typescript -export interface SavedObjectsImportUnsupportedTypeError -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.type.md) | 'unsupported\_type' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.type.md deleted file mode 100644 index a985d4d8793bb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportUnsupportedTypeError](./kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.md) > [type](./kibana-plugin-core-server.savedobjectsimportunsupportedtypeerror.type.md) - -## SavedObjectsImportUnsupportedTypeError.type property - -Signature: - -```typescript -type: 'unsupported_type'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportwarning.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportwarning.md deleted file mode 100644 index 257751f16601d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsimportwarning.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsImportWarning](./kibana-plugin-core-server.savedobjectsimportwarning.md) - -## SavedObjectsImportWarning type - -Composite type of all the possible types of import warnings. - -See [SavedObjectsImportSimpleWarning](./kibana-plugin-core-server.savedobjectsimportsimplewarning.md) and [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) for more details. - -Signature: - -```typescript -export declare type SavedObjectsImportWarning = SavedObjectsImportSimpleWarning | SavedObjectsImportActionRequiredWarning; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.fieldname.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.fieldname.md deleted file mode 100644 index 44c3ab18fea61..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.fieldname.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterField](./kibana-plugin-core-server.savedobjectsincrementcounterfield.md) > [fieldName](./kibana-plugin-core-server.savedobjectsincrementcounterfield.fieldname.md) - -## SavedObjectsIncrementCounterField.fieldName property - -The field name to increment the counter by. - -Signature: - -```typescript -fieldName: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.incrementby.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.incrementby.md deleted file mode 100644 index dc6f8b114c1c5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.incrementby.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterField](./kibana-plugin-core-server.savedobjectsincrementcounterfield.md) > [incrementBy](./kibana-plugin-core-server.savedobjectsincrementcounterfield.incrementby.md) - -## SavedObjectsIncrementCounterField.incrementBy property - -The number to increment the field by (defaults to 1). - -Signature: - -```typescript -incrementBy?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.md deleted file mode 100644 index a45d48523f461..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounterfield.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterField](./kibana-plugin-core-server.savedobjectsincrementcounterfield.md) - -## SavedObjectsIncrementCounterField interface - - -Signature: - -```typescript -export interface SavedObjectsIncrementCounterField -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [fieldName](./kibana-plugin-core-server.savedobjectsincrementcounterfield.fieldname.md) | string | The field name to increment the counter by. | -| [incrementBy?](./kibana-plugin-core-server.savedobjectsincrementcounterfield.incrementby.md) | number | (Optional) The number to increment the field by (defaults to 1). | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.initialize.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.initialize.md deleted file mode 100644 index 61091306d0dbc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.initialize.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterOptions](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.md) > [initialize](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.initialize.md) - -## SavedObjectsIncrementCounterOptions.initialize property - -(default=false) If true, sets all the counter fields to 0 if they don't already exist. Existing fields will be left as-is and won't be incremented. - -Signature: - -```typescript -initialize?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.md deleted file mode 100644 index 8740ffb1be185..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterOptions](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.md) - -## SavedObjectsIncrementCounterOptions interface - - -Signature: - -```typescript -export interface SavedObjectsIncrementCounterOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [initialize?](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.initialize.md) | boolean | (Optional) (default=false) If true, sets all the counter fields to 0 if they don't already exist. Existing fields will be left as-is and won't be incremented. | -| [migrationVersion?](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.migrationversion.md) | SavedObjectsMigrationVersion | (Optional) [SavedObjectsMigrationVersion](./kibana-plugin-core-server.savedobjectsmigrationversion.md) | -| [refresh?](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.refresh.md) | MutatingOperationRefreshSetting | (Optional) (default='wait\_for') The Elasticsearch refresh setting for this operation. See [MutatingOperationRefreshSetting](./kibana-plugin-core-server.mutatingoperationrefreshsetting.md) | -| [upsertAttributes?](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.upsertattributes.md) | Attributes | (Optional) Attributes to use when upserting the document if it doesn't exist. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.migrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.migrationversion.md deleted file mode 100644 index aff80138d61cf..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.migrationversion.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterOptions](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.md) > [migrationVersion](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.migrationversion.md) - -## SavedObjectsIncrementCounterOptions.migrationVersion property - -[SavedObjectsMigrationVersion](./kibana-plugin-core-server.savedobjectsmigrationversion.md) - -Signature: - -```typescript -migrationVersion?: SavedObjectsMigrationVersion; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.refresh.md deleted file mode 100644 index 4f217cc223d46..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterOptions](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.refresh.md) - -## SavedObjectsIncrementCounterOptions.refresh property - -(default='wait\_for') The Elasticsearch refresh setting for this operation. See [MutatingOperationRefreshSetting](./kibana-plugin-core-server.mutatingoperationrefreshsetting.md) - -Signature: - -```typescript -refresh?: MutatingOperationRefreshSetting; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.upsertattributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.upsertattributes.md deleted file mode 100644 index d5657dd65771f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsincrementcounteroptions.upsertattributes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsIncrementCounterOptions](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.md) > [upsertAttributes](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.upsertattributes.md) - -## SavedObjectsIncrementCounterOptions.upsertAttributes property - -Attributes to use when upserting the document if it doesn't exist. - -Signature: - -```typescript -upsertAttributes?: Attributes; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmappingproperties.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmappingproperties.md deleted file mode 100644 index ade286c8951d4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmappingproperties.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMappingProperties](./kibana-plugin-core-server.savedobjectsmappingproperties.md) - -## SavedObjectsMappingProperties interface - -Describe the fields of a [saved object type](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md). - -Signature: - -```typescript -export interface SavedObjectsMappingProperties -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.debug.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.debug.md deleted file mode 100644 index 3c69d11880763..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.debug.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) > [debug](./kibana-plugin-core-server.savedobjectsmigrationlogger.debug.md) - -## SavedObjectsMigrationLogger.debug property - -Signature: - -```typescript -debug: (msg: string) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.error.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.error.md deleted file mode 100644 index 16fbc8f4eaea3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) > [error](./kibana-plugin-core-server.savedobjectsmigrationlogger.error.md) - -## SavedObjectsMigrationLogger.error property - -Signature: - -```typescript -error: (msg: string, meta: Meta) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.info.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.info.md deleted file mode 100644 index 0dcb6b8889d4c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.info.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) > [info](./kibana-plugin-core-server.savedobjectsmigrationlogger.info.md) - -## SavedObjectsMigrationLogger.info property - -Signature: - -```typescript -info: (msg: string) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.md deleted file mode 100644 index 80f332c395159..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) - -## SavedObjectsMigrationLogger interface - - -Signature: - -```typescript -export interface SavedObjectsMigrationLogger -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [debug](./kibana-plugin-core-server.savedobjectsmigrationlogger.debug.md) | (msg: string) => void | | -| [error](./kibana-plugin-core-server.savedobjectsmigrationlogger.error.md) | <Meta extends LogMeta = LogMeta>(msg: string, meta: Meta) => void | | -| [info](./kibana-plugin-core-server.savedobjectsmigrationlogger.info.md) | (msg: string) => void | | -| [warn](./kibana-plugin-core-server.savedobjectsmigrationlogger.warn.md) | (msg: string) => void | | -| [warning](./kibana-plugin-core-server.savedobjectsmigrationlogger.warning.md) | (msg: string) => void | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warn.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warn.md deleted file mode 100644 index 34886e82d6d3d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warn.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) > [warn](./kibana-plugin-core-server.savedobjectsmigrationlogger.warn.md) - -## SavedObjectsMigrationLogger.warn property - -Signature: - -```typescript -warn: (msg: string) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warning.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warning.md deleted file mode 100644 index 5c37ce5aabcce..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationlogger.warning.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) > [warning](./kibana-plugin-core-server.savedobjectsmigrationlogger.warning.md) - -## SavedObjectsMigrationLogger.warning property - -> Warning: This API is now obsolete. -> -> Use `warn` instead. 8.8.0 -> - -Signature: - -```typescript -warning: (msg: string) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationversion.md deleted file mode 100644 index 2241e71e4f8a6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsmigrationversion.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsMigrationVersion](./kibana-plugin-core-server.savedobjectsmigrationversion.md) - -## SavedObjectsMigrationVersion interface - -Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. - -Signature: - -```typescript -export interface SavedObjectsMigrationVersion -``` - -## Example - -migrationVersion: { dashboard: '7.1.1', space: '6.6.6', } - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md deleted file mode 100644 index 01a712aa89aa9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsNamespaceType](./kibana-plugin-core-server.savedobjectsnamespacetype.md) - -## SavedObjectsNamespaceType type - -The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global. - -Signature: - -```typescript -export declare type SavedObjectsNamespaceType = 'single' | 'multiple' | 'multiple-isolated' | 'agnostic'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md deleted file mode 100644 index 57752318cb96a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) > [keepAlive](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md) - -## SavedObjectsOpenPointInTimeOptions.keepAlive property - -Optionally specify how long ES should keep the PIT alive until the next request. Defaults to `5m`. - -Signature: - -```typescript -keepAlive?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md deleted file mode 100644 index 331fb6cbe0a6e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) - -## SavedObjectsOpenPointInTimeOptions interface - - -Signature: - -```typescript -export interface SavedObjectsOpenPointInTimeOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [keepAlive?](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md) | string | (Optional) Optionally specify how long ES should keep the PIT alive until the next request. Defaults to 5m. | -| [namespaces?](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.namespaces.md) | string\[\] | (Optional) An optional list of namespaces to be used when opening the PIT.When the spaces plugin is enabled: - this will default to the user's current space (as determined by the URL) - if specified, the user's current space will be ignored - ['*'] will search across all available spaces | -| [preference?](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md) | string | (Optional) An optional ES preference value to be used for the query. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.namespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.namespaces.md deleted file mode 100644 index 06fb7519d52c2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.namespaces.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) > [namespaces](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.namespaces.md) - -## SavedObjectsOpenPointInTimeOptions.namespaces property - -An optional list of namespaces to be used when opening the PIT. - -When the spaces plugin is enabled: - this will default to the user's current space (as determined by the URL) - if specified, the user's current space will be ignored - `['*']` will search across all available spaces - -Signature: - -```typescript -namespaces?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md deleted file mode 100644 index 7a9f3a49e8663..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) > [preference](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md) - -## SavedObjectsOpenPointInTimeOptions.preference property - -An optional ES preference value to be used for the query. - -Signature: - -```typescript -preference?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md deleted file mode 100644 index 66387e5b3b89f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeResponse](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md) > [id](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md) - -## SavedObjectsOpenPointInTimeResponse.id property - -PIT ID returned from ES. - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md deleted file mode 100644 index e3804d63a1e6c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeResponse](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md) - -## SavedObjectsOpenPointInTimeResponse interface - - -Signature: - -```typescript -export interface SavedObjectsOpenPointInTimeResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md) | string | PIT ID returned from ES. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.id.md deleted file mode 100644 index cb4d4a65727d7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md) > [id](./kibana-plugin-core-server.savedobjectspitparams.id.md) - -## SavedObjectsPitParams.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.keepalive.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.keepalive.md deleted file mode 100644 index 1011a908f210a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.keepalive.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md) > [keepAlive](./kibana-plugin-core-server.savedobjectspitparams.keepalive.md) - -## SavedObjectsPitParams.keepAlive property - -Signature: - -```typescript -keepAlive?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.md deleted file mode 100644 index 3109a6bd88f7e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md) - -## SavedObjectsPitParams interface - - -Signature: - -```typescript -export interface SavedObjectsPitParams -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectspitparams.id.md) | string | | -| [keepAlive?](./kibana-plugin-core-server.savedobjectspitparams.keepalive.md) | string | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._id.md deleted file mode 100644 index 498069d4af471..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRawDoc](./kibana-plugin-core-server.savedobjectsrawdoc.md) > [\_id](./kibana-plugin-core-server.savedobjectsrawdoc._id.md) - -## SavedObjectsRawDoc.\_id property - -Signature: - -```typescript -_id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._primary_term.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._primary_term.md deleted file mode 100644 index 6dc2eeb8a0c4c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._primary_term.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRawDoc](./kibana-plugin-core-server.savedobjectsrawdoc.md) > [\_primary\_term](./kibana-plugin-core-server.savedobjectsrawdoc._primary_term.md) - -## SavedObjectsRawDoc.\_primary\_term property - -Signature: - -```typescript -_primary_term?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._seq_no.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._seq_no.md deleted file mode 100644 index 8b7016df7492b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._seq_no.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRawDoc](./kibana-plugin-core-server.savedobjectsrawdoc.md) > [\_seq\_no](./kibana-plugin-core-server.savedobjectsrawdoc._seq_no.md) - -## SavedObjectsRawDoc.\_seq\_no property - -Signature: - -```typescript -_seq_no?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._source.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._source.md deleted file mode 100644 index 44faad2c8f990..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc._source.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRawDoc](./kibana-plugin-core-server.savedobjectsrawdoc.md) > [\_source](./kibana-plugin-core-server.savedobjectsrawdoc._source.md) - -## SavedObjectsRawDoc.\_source property - -Signature: - -```typescript -_source: SavedObjectsRawDocSource; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc.md deleted file mode 100644 index 8bce7fac941af..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdoc.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRawDoc](./kibana-plugin-core-server.savedobjectsrawdoc.md) - -## SavedObjectsRawDoc interface - -A raw document as represented directly in the saved object index. - -Signature: - -```typescript -export interface SavedObjectsRawDoc -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [\_id](./kibana-plugin-core-server.savedobjectsrawdoc._id.md) | string | | -| [\_primary\_term?](./kibana-plugin-core-server.savedobjectsrawdoc._primary_term.md) | number | (Optional) | -| [\_seq\_no?](./kibana-plugin-core-server.savedobjectsrawdoc._seq_no.md) | number | (Optional) | -| [\_source](./kibana-plugin-core-server.savedobjectsrawdoc._source.md) | SavedObjectsRawDocSource | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.md deleted file mode 100644 index dc2166258d0c0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRawDocParseOptions](./kibana-plugin-core-server.savedobjectsrawdocparseoptions.md) - -## SavedObjectsRawDocParseOptions interface - -Options that can be specified when using the saved objects serializer to parse a raw document. - -Signature: - -```typescript -export interface SavedObjectsRawDocParseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [namespaceTreatment?](./kibana-plugin-core-server.savedobjectsrawdocparseoptions.namespacetreatment.md) | 'strict' \| 'lax' | (Optional) Optional setting to allow for lax handling of the raw document ID and namespace field. This is needed when a previously single-namespace object type is converted to a multi-namespace object type, and it is only intended to be used during upgrade migrations.If not specified, the default treatment is strict. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.namespacetreatment.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.namespacetreatment.md deleted file mode 100644 index c315d78aaf417..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrawdocparseoptions.namespacetreatment.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRawDocParseOptions](./kibana-plugin-core-server.savedobjectsrawdocparseoptions.md) > [namespaceTreatment](./kibana-plugin-core-server.savedobjectsrawdocparseoptions.namespacetreatment.md) - -## SavedObjectsRawDocParseOptions.namespaceTreatment property - -Optional setting to allow for lax handling of the raw document ID and namespace field. This is needed when a previously single-namespace object type is converted to a multi-namespace object type, and it is only intended to be used during upgrade migrations. - -If not specified, the default treatment is `strict`. - -Signature: - -```typescript -namespaceTreatment?: 'strict' | 'lax'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.md deleted file mode 100644 index c10f74297305d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRemoveReferencesToOptions](./kibana-plugin-core-server.savedobjectsremovereferencestooptions.md) - -## SavedObjectsRemoveReferencesToOptions interface - - -Signature: - -```typescript -export interface SavedObjectsRemoveReferencesToOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [refresh?](./kibana-plugin-core-server.savedobjectsremovereferencestooptions.refresh.md) | boolean | (Optional) The Elasticsearch Refresh setting for this operation. Defaults to true | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.refresh.md deleted file mode 100644 index 71e924a8af5e1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestooptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRemoveReferencesToOptions](./kibana-plugin-core-server.savedobjectsremovereferencestooptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsremovereferencestooptions.refresh.md) - -## SavedObjectsRemoveReferencesToOptions.refresh property - -The Elasticsearch Refresh setting for this operation. Defaults to `true` - -Signature: - -```typescript -refresh?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.md deleted file mode 100644 index cd10a9f916b03..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRemoveReferencesToResponse](./kibana-plugin-core-server.savedobjectsremovereferencestoresponse.md) - -## SavedObjectsRemoveReferencesToResponse interface - - -Signature: - -```typescript -export interface SavedObjectsRemoveReferencesToResponse extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [updated](./kibana-plugin-core-server.savedobjectsremovereferencestoresponse.updated.md) | number | The number of objects that have been updated by this operation | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.updated.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.updated.md deleted file mode 100644 index 67c3721ccdc68..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsremovereferencestoresponse.updated.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRemoveReferencesToResponse](./kibana-plugin-core-server.savedobjectsremovereferencestoresponse.md) > [updated](./kibana-plugin-core-server.savedobjectsremovereferencestoresponse.updated.md) - -## SavedObjectsRemoveReferencesToResponse.updated property - -The number of objects that have been updated by this operation - -Signature: - -```typescript -updated: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkcreate.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkcreate.md deleted file mode 100644 index e71a9d266a3db..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkcreate.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [bulkCreate](./kibana-plugin-core-server.savedobjectsrepository.bulkcreate.md) - -## SavedObjectsRepository.bulkCreate() method - -Creates multiple documents at once - -Signature: - -```typescript -bulkCreate(objects: Array>, options?: SavedObjectsCreateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | Array<SavedObjectsBulkCreateObject<T>> | \[{ type, id, attributes, references, migrationVersion }\] | -| options | SavedObjectsCreateOptions | {boolean} \[options.overwrite=false\] - overwrites existing documents {string} \[options.namespace\] | - -Returns: - -Promise<SavedObjectsBulkResponse<T>> - -{promise} - {saved\_objects: \[\[{ id, type, version, references, attributes, error: { message } }\]} - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkget.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkget.md deleted file mode 100644 index ab265132d606f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkget.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [bulkGet](./kibana-plugin-core-server.savedobjectsrepository.bulkget.md) - -## SavedObjectsRepository.bulkGet() method - -Returns an array of objects by id - -Signature: - -```typescript -bulkGet(objects?: SavedObjectsBulkGetObject[], options?: SavedObjectsBaseOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsBulkGetObject\[\] | an array of objects containing id, type and optionally fields | -| options | SavedObjectsBaseOptions | {string} \[options.namespace\] | - -Returns: - -Promise<SavedObjectsBulkResponse<T>> - -{promise} - { saved\_objects: \[{ id, type, version, attributes }\] } - -## Example - -bulkGet(\[ { id: 'one', type: 'config' }, { id: 'foo', type: 'index-pattern' } \]) - 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 deleted file mode 100644 index a67521753892d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkresolve.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[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\[\] | an array of objects containing id, type | -| options | SavedObjectsBaseOptions | {string} \[options.namespace\] | - -Returns: - -Promise<SavedObjectsBulkResolveResponse<T>> - -{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.bulkupdate.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkupdate.md deleted file mode 100644 index c4244a8e34e3c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkupdate.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [bulkUpdate](./kibana-plugin-core-server.savedobjectsrepository.bulkupdate.md) - -## SavedObjectsRepository.bulkUpdate() method - -Updates multiple objects in bulk - -Signature: - -```typescript -bulkUpdate(objects: Array>, options?: SavedObjectsBulkUpdateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | Array<SavedObjectsBulkUpdateObject<T>> | \[{ type, id, attributes, options: { version, namespace } references }\] {string} options.version - ensures version matches that of persisted object {string} \[options.namespace\] | -| options | SavedObjectsBulkUpdateOptions | | - -Returns: - -Promise<SavedObjectsBulkUpdateResponse<T>> - -{promise} - {saved\_objects: \[\[{ id, type, version, references, attributes, error: { message } }\]} - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.checkconflicts.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.checkconflicts.md deleted file mode 100644 index 48adf6a2dba4a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.checkconflicts.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [checkConflicts](./kibana-plugin-core-server.savedobjectsrepository.checkconflicts.md) - -## SavedObjectsRepository.checkConflicts() method - -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. - -Signature: - -```typescript -checkConflicts(objects?: SavedObjectsCheckConflictsObject[], options?: SavedObjectsBaseOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsCheckConflictsObject\[\] | | -| options | SavedObjectsBaseOptions | | - -Returns: - -Promise<SavedObjectsCheckConflictsResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.closepointintime.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.closepointintime.md deleted file mode 100644 index e25cd9dfcaae7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.closepointintime.md +++ /dev/null @@ -1,59 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [closePointInTime](./kibana-plugin-core-server.savedobjectsrepository.closepointintime.md) - -## SavedObjectsRepository.closePointInTime() method - -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. - -Signature: - -```typescript -closePointInTime(id: string, options?: SavedObjectsClosePointInTimeOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string | | -| options | SavedObjectsClosePointInTimeOptions | [SavedObjectsClosePointInTimeOptions](./kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md) | - -Returns: - -Promise<SavedObjectsClosePointInTimeResponse> - -{promise} - [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) - -## Remarks - -While the `keepAlive` that is provided will cause a PIT to automatically close, it is highly recommended to explicitly close a PIT when you are done with it in order to avoid consuming unneeded resources in Elasticsearch. - -## Example - - -```ts -const repository = coreStart.savedObjects.createInternalRepository(); - -const { id } = await repository.openPointInTimeForType( - type: 'index-pattern', - { keepAlive: '2m' }, -); - -const response = await repository.find({ - type: 'index-pattern', - search: 'foo*', - sortField: 'name', - sortOrder: 'desc', - pit: { - id: 'abc123', - keepAlive: '2m', - }, - searchAfter: [1234, 'abcd'], -}); - -await repository.closePointInTime(response.pit_id); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.collectmultinamespacereferences.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.collectmultinamespacereferences.md deleted file mode 100644 index b22b3bd8c0b53..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.collectmultinamespacereferences.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [collectMultiNamespaceReferences](./kibana-plugin-core-server.savedobjectsrepository.collectmultinamespacereferences.md) - -## SavedObjectsRepository.collectMultiNamespaceReferences() method - -Gets all references and transitive references of the given objects. Ignores any object and/or reference that is not a multi-namespace type. - -Signature: - -```typescript -collectMultiNamespaceReferences(objects: SavedObjectsCollectMultiNamespaceReferencesObject[], options?: SavedObjectsCollectMultiNamespaceReferencesOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsCollectMultiNamespaceReferencesObject\[\] | The objects to get the references for. | -| options | SavedObjectsCollectMultiNamespaceReferencesOptions | | - -Returns: - -Promise<import("./collect\_multi\_namespace\_references").SavedObjectsCollectMultiNamespaceReferencesResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.create.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.create.md deleted file mode 100644 index 0c5412e2cd2df..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.create.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [create](./kibana-plugin-core-server.savedobjectsrepository.create.md) - -## SavedObjectsRepository.create() method - -Persists an object - -Signature: - -```typescript -create(type: string, attributes: T, options?: SavedObjectsCreateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| attributes | T | | -| options | SavedObjectsCreateOptions | {string} \[options.id\] - force id on creation, not recommended {boolean} \[options.overwrite=false\] {object} \[options.migrationVersion=undefined\] {string} \[options.namespace\] {array} \[options.references=\[\]\] - \[{ name, type, id }\] | - -Returns: - -Promise<SavedObject<T>> - -{promise} - { id, type, version, attributes } - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.createpointintimefinder.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.createpointintimefinder.md deleted file mode 100644 index 4cbf51b85f26d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.createpointintimefinder.md +++ /dev/null @@ -1,52 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [createPointInTimeFinder](./kibana-plugin-core-server.savedobjectsrepository.createpointintimefinder.md) - -## SavedObjectsRepository.createPointInTimeFinder() method - -Returns a [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) to help page through large sets of saved objects. We strongly recommend using this API for any `find` queries that might return more than 1000 saved objects, however this API is only intended for use in server-side "batch" processing of objects where you are collecting all objects in memory or streaming them back to the client. - -Do NOT use this API in a route handler to facilitate paging through saved objects on the client-side unless you are streaming all of the results back to the client at once. Because the returned generator is stateful, you cannot rely on subsequent http requests retrieving new pages from the same Kibana server in multi-instance deployments. - -This generator wraps calls to [SavedObjectsRepository.find()](./kibana-plugin-core-server.savedobjectsrepository.find.md) and iterates over multiple pages of results using `_pit` and `search_after`. This will open a new Point-In-Time (PIT), and continue paging until a set of results is received that's smaller than the designated `perPage`. - -Once you have retrieved all of the results you need, it is recommended to call `close()` to clean up the PIT and prevent Elasticsearch from consuming resources unnecessarily. This is only required if you are done iterating and have not yet paged through all of the results: the PIT will automatically be closed for you once you reach the last page of results, or if the underlying call to `find` fails for any reason. - -Signature: - -```typescript -createPointInTimeFinder(findOptions: SavedObjectsCreatePointInTimeFinderOptions, dependencies?: SavedObjectsCreatePointInTimeFinderDependencies): ISavedObjectsPointInTimeFinder; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| findOptions | SavedObjectsCreatePointInTimeFinderOptions | | -| dependencies | SavedObjectsCreatePointInTimeFinderDependencies | | - -Returns: - -ISavedObjectsPointInTimeFinder<T, A> - -## Example - - -```ts -const findOptions: SavedObjectsCreatePointInTimeFinderOptions = { - type: 'visualization', - search: 'foo*', - perPage: 100, -}; - -const finder = savedObjectsClient.createPointInTimeFinder(findOptions); - -const responses: SavedObjectFindResponse[] = []; -for await (const response of finder.find()) { - responses.push(...response); - if (doneSearching) { - await finder.close(); - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.delete.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.delete.md deleted file mode 100644 index 2caa59210b9d3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.delete.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [delete](./kibana-plugin-core-server.savedobjectsrepository.delete.md) - -## SavedObjectsRepository.delete() method - -Deletes an object - -Signature: - -```typescript -delete(type: string, id: string, options?: SavedObjectsDeleteOptions): Promise<{}>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| options | SavedObjectsDeleteOptions | {string} \[options.namespace\] | - -Returns: - -Promise<{}> - -{promise} - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md deleted file mode 100644 index 2e9048bcbe188..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [deleteByNamespace](./kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md) - -## SavedObjectsRepository.deleteByNamespace() method - -Deletes all objects from the provided namespace. - -Signature: - -```typescript -deleteByNamespace(namespace: string, options?: SavedObjectsDeleteByNamespaceOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| namespace | string | | -| options | SavedObjectsDeleteByNamespaceOptions | | - -Returns: - -Promise<any> - -{promise} - { took, timed\_out, total, deleted, batches, version\_conflicts, noops, retries, failures } - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.find.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.find.md deleted file mode 100644 index 58c14917aa2c9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.find.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [find](./kibana-plugin-core-server.savedobjectsrepository.find.md) - -## SavedObjectsRepository.find() method - -Signature: - -```typescript -find(options: SavedObjectsFindOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | SavedObjectsFindOptions | {(string\|Array)} \[options.type\] {string} \[options.search\] {string} \[options.defaultSearchOperator\] {Array} \[options.searchFields\] - see Elasticsearch Simple Query String Query field argument for more information {integer} \[options.page=1\] {integer} \[options.perPage=20\] {Array} \[options.searchAfter\] {string} \[options.sortField\] {string} \[options.sortOrder\] {Array} \[options.fields\] {string} \[options.namespace\] {object} \[options.hasReference\] - { type, id } {string} \[options.pit\] {string} \[options.preference\] | - -Returns: - -Promise<SavedObjectsFindResponse<T, A>> - -{promise} - { saved\_objects: \[{ id, type, version, attributes }\], total, per\_page, page } - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.get.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.get.md deleted file mode 100644 index 9f2b1b924857b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.get.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [get](./kibana-plugin-core-server.savedobjectsrepository.get.md) - -## SavedObjectsRepository.get() method - -Gets a single object - -Signature: - -```typescript -get(type: string, id: string, options?: SavedObjectsBaseOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| options | SavedObjectsBaseOptions | {string} \[options.namespace\] | - -Returns: - -Promise<SavedObject<T>> - -{promise} - { id, type, version, attributes } - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md deleted file mode 100644 index 0a51ec9429fe9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md +++ /dev/null @@ -1,69 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [incrementCounter](./kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md) - -## SavedObjectsRepository.incrementCounter() method - -Increments all the specified counter fields (by one by default). Creates the document if one doesn't exist for the given id. - -Signature: - -```typescript -incrementCounter(type: string, id: string, counterFields: Array, options?: SavedObjectsIncrementCounterOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | The type of saved object whose fields should be incremented | -| id | string | The id of the document whose fields should be incremented | -| counterFields | Array<string \| SavedObjectsIncrementCounterField> | An array of field names to increment or an array of [SavedObjectsIncrementCounterField](./kibana-plugin-core-server.savedobjectsincrementcounterfield.md) | -| options | SavedObjectsIncrementCounterOptions<T> | [SavedObjectsIncrementCounterOptions](./kibana-plugin-core-server.savedobjectsincrementcounteroptions.md) | - -Returns: - -Promise<SavedObject<T>> - -The saved object after the specified fields were incremented - -## Remarks - -When supplying a field name like `stats.api.counter` the field name will be used as-is to create a document like: `{attributes: {'stats.api.counter': 1}}` It will not create a nested structure like: `{attributes: {stats: {api: {counter: 1}}}}` - -When using incrementCounter for collecting usage data, you need to ensure that usage collection happens on a best-effort basis and doesn't negatively affect your plugin or users. See https://github.com/elastic/kibana/blob/main/src/plugins/usage\_collection/README.mdx\#tracking-interactions-with-incrementcounter) - -## Example - - -```ts -const repository = coreStart.savedObjects.createInternalRepository(); - -// Initialize all fields to 0 -repository - .incrementCounter('dashboard_counter_type', 'counter_id', [ - 'stats.apiCalls', - 'stats.sampleDataInstalled', - ], {initialize: true}); - -// Increment the apiCalls field counter -repository - .incrementCounter('dashboard_counter_type', 'counter_id', [ - 'stats.apiCalls', - ]) - -// Increment the apiCalls field counter by 4 -repository - .incrementCounter('dashboard_counter_type', 'counter_id', [ - { fieldName: 'stats.apiCalls' incrementBy: 4 }, - ]) - -// Initialize the document with arbitrary fields if not present -repository.incrementCounter<{ appId: string }>( - 'dashboard_counter_type', - 'counter_id', - [ 'stats.apiCalls'], - { upsertAttributes: { appId: 'myId' } } -) -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md deleted file mode 100644 index b1d65f5f6d3c3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md +++ /dev/null @@ -1,37 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) - -## SavedObjectsRepository class - - -Signature: - -```typescript -export declare class SavedObjectsRepository -``` - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [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. | -| [collectMultiNamespaceReferences(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.collectmultinamespacereferences.md) | | Gets all references and transitive references of the given objects. Ignores any object and/or reference that is not a multi-namespace type. | -| [create(type, attributes, options)](./kibana-plugin-core-server.savedobjectsrepository.create.md) | | Persists an object | -| [createPointInTimeFinder(findOptions, dependencies)](./kibana-plugin-core-server.savedobjectsrepository.createpointintimefinder.md) | | Returns a [ISavedObjectsPointInTimeFinder](./kibana-plugin-core-server.isavedobjectspointintimefinder.md) to help page through large sets of saved objects. We strongly recommend using this API for any find queries that might return more than 1000 saved objects, however this API is only intended for use in server-side "batch" processing of objects where you are collecting all objects in memory or streaming them back to the client.Do NOT use this API in a route handler to facilitate paging through saved objects on the client-side unless you are streaming all of the results back to the client at once. Because the returned generator is stateful, you cannot rely on subsequent http requests retrieving new pages from the same Kibana server in multi-instance deployments.This generator wraps calls to [SavedObjectsRepository.find()](./kibana-plugin-core-server.savedobjectsrepository.find.md) and iterates over multiple pages of results using _pit and search_after. This will open a new Point-In-Time (PIT), and continue paging until a set of results is received that's smaller than the designated perPage.Once you have retrieved all of the results you need, it is recommended to call close() to clean up the PIT and prevent Elasticsearch from consuming resources unnecessarily. This is only required if you are done iterating and have not yet paged through all of the results: the PIT will automatically be closed for you once you reach the last page of results, or if the underlying call to find fails for any reason. | -| [delete(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.delete.md) | | Deletes an object | -| [deleteByNamespace(namespace, options)](./kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md) | | Deletes all objects from the provided namespace. | -| [find(options)](./kibana-plugin-core-server.savedobjectsrepository.find.md) | | | -| [get(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.get.md) | | Gets a single object | -| [incrementCounter(type, id, counterFields, options)](./kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md) | | Increments all the specified counter fields (by one by default). Creates the document if one doesn't exist for the given id. | -| [openPointInTimeForType(type, { keepAlive, preference })](./kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md) | | Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned id can then be passed to SavedObjects.find to search against that PIT.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. | -| [removeReferencesTo(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.removereferencesto.md) | | Updates all objects containing a reference to the given {type, id} tuple to remove the said reference. | -| [resolve(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.resolve.md) | | Resolves a single object, using any legacy URL alias if it exists | -| [update(type, id, attributes, options)](./kibana-plugin-core-server.savedobjectsrepository.update.md) | | Updates an object | -| [updateObjectsSpaces(objects, spacesToAdd, spacesToRemove, options)](./kibana-plugin-core-server.savedobjectsrepository.updateobjectsspaces.md) | | Updates one or more objects to add and/or remove them from specified spaces. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md deleted file mode 100644 index e0eb4bc603a2d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md +++ /dev/null @@ -1,54 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [openPointInTimeForType](./kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md) - -## SavedObjectsRepository.openPointInTimeForType() method - -Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned `id` can then be passed to `SavedObjects.find` to search against that PIT. - -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. - -Signature: - -```typescript -openPointInTimeForType(type: string | string[], { keepAlive, preference }?: SavedObjectsOpenPointInTimeOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string \| string\[\] | | -| { keepAlive, preference } | SavedObjectsOpenPointInTimeOptions | | - -Returns: - -Promise<SavedObjectsOpenPointInTimeResponse> - -{promise} - { id: string } - -## Example - - -```ts -const { id } = await savedObjectsClient.openPointInTimeForType( - type: 'visualization', - { keepAlive: '5m' }, -); -const page1 = await savedObjectsClient.find({ - type: 'visualization', - sortField: 'updated_at', - sortOrder: 'asc', - pit: { id, keepAlive: '2m' }, -}); -const lastHit = page1.saved_objects[page1.saved_objects.length - 1]; -const page2 = await savedObjectsClient.find({ - type: 'visualization', - sortField: 'updated_at', - sortOrder: 'asc', - pit: { id: page1.pit_id }, - searchAfter: lastHit.sort, -}); -await savedObjectsClient.closePointInTime(page2.pit_id); -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.removereferencesto.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.removereferencesto.md deleted file mode 100644 index 6691bf69e58dc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.removereferencesto.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [removeReferencesTo](./kibana-plugin-core-server.savedobjectsrepository.removereferencesto.md) - -## SavedObjectsRepository.removeReferencesTo() method - -Updates all objects containing a reference to the given {type, id} tuple to remove the said reference. - -Signature: - -```typescript -removeReferencesTo(type: string, id: string, options?: SavedObjectsRemoveReferencesToOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| options | SavedObjectsRemoveReferencesToOptions | | - -Returns: - -Promise<SavedObjectsRemoveReferencesToResponse> - -## Remarks - -Will throw a conflict error if the `update_by_query` operation returns any failure. In that case some references might have been removed, and some were not. It is the caller's responsibility to handle and fix this situation if it was to happen. - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.resolve.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.resolve.md deleted file mode 100644 index bf558eca975fd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.resolve.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [resolve](./kibana-plugin-core-server.savedobjectsrepository.resolve.md) - -## SavedObjectsRepository.resolve() method - -Resolves a single object, using any legacy URL alias if it exists - -Signature: - -```typescript -resolve(type: string, id: string, options?: SavedObjectsBaseOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| options | SavedObjectsBaseOptions | {string} \[options.namespace\] | - -Returns: - -Promise<SavedObjectsResolveResponse<T>> - -{promise} - { saved\_object, outcome } - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.update.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.update.md deleted file mode 100644 index 681ba9eb3f014..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.update.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [update](./kibana-plugin-core-server.savedobjectsrepository.update.md) - -## SavedObjectsRepository.update() method - -Updates an object - -Signature: - -```typescript -update(type: string, id: string, attributes: Partial, options?: SavedObjectsUpdateOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | -| id | string | | -| attributes | Partial<T> | | -| options | SavedObjectsUpdateOptions<T> | {string} options.version - ensures version matches that of persisted object {string} \[options.namespace\] {array} \[options.references\] - \[{ name, type, id }\] | - -Returns: - -Promise<SavedObjectsUpdateResponse<T>> - -{promise} - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.updateobjectsspaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.updateobjectsspaces.md deleted file mode 100644 index c226e8d2d2b1d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.updateobjectsspaces.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [updateObjectsSpaces](./kibana-plugin-core-server.savedobjectsrepository.updateobjectsspaces.md) - -## SavedObjectsRepository.updateObjectsSpaces() method - -Updates one or more objects to add and/or remove them from specified spaces. - -Signature: - -```typescript -updateObjectsSpaces(objects: SavedObjectsUpdateObjectsSpacesObject[], spacesToAdd: string[], spacesToRemove: string[], options?: SavedObjectsUpdateObjectsSpacesOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| objects | SavedObjectsUpdateObjectsSpacesObject\[\] | | -| spacesToAdd | string\[\] | | -| spacesToRemove | string\[\] | | -| options | SavedObjectsUpdateObjectsSpacesOptions | | - -Returns: - -Promise<import("./update\_objects\_spaces").SavedObjectsUpdateObjectsSpacesResponse> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createinternalrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createinternalrepository.md deleted file mode 100644 index e39ce020b930c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createinternalrepository.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepositoryFactory](./kibana-plugin-core-server.savedobjectsrepositoryfactory.md) > [createInternalRepository](./kibana-plugin-core-server.savedobjectsrepositoryfactory.createinternalrepository.md) - -## SavedObjectsRepositoryFactory.createInternalRepository property - -Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the internal Kibana user for authenticating with Elasticsearch. - -Signature: - -```typescript -createInternalRepository: (includedHiddenTypes?: string[]) => ISavedObjectsRepository; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createscopedrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createscopedrepository.md deleted file mode 100644 index 9cd0df9094277..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.createscopedrepository.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepositoryFactory](./kibana-plugin-core-server.savedobjectsrepositoryfactory.md) > [createScopedRepository](./kibana-plugin-core-server.savedobjectsrepositoryfactory.createscopedrepository.md) - -## SavedObjectsRepositoryFactory.createScopedRepository property - -Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the credentials from the passed in request to authenticate with Elasticsearch. - -Signature: - -```typescript -createScopedRepository: (req: KibanaRequest, includedHiddenTypes?: string[]) => ISavedObjectsRepository; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.md deleted file mode 100644 index 72aa79ed4df29..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepositoryfactory.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepositoryFactory](./kibana-plugin-core-server.savedobjectsrepositoryfactory.md) - -## SavedObjectsRepositoryFactory interface - -Factory provided when invoking a [client factory provider](./kibana-plugin-core-server.savedobjectsclientfactoryprovider.md) See [SavedObjectsServiceSetup.setClientFactoryProvider](./kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md) - -Signature: - -```typescript -export interface SavedObjectsRepositoryFactory -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createInternalRepository](./kibana-plugin-core-server.savedobjectsrepositoryfactory.createinternalrepository.md) | (includedHiddenTypes?: string\[\]) => ISavedObjectsRepository | Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the internal Kibana user for authenticating with Elasticsearch. | -| [createScopedRepository](./kibana-plugin-core-server.savedobjectsrepositoryfactory.createscopedrepository.md) | (req: KibanaRequest, includedHiddenTypes?: string\[\]) => ISavedObjectsRepository | Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the credentials from the passed in request to authenticate with Elasticsearch. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.createnewcopies.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.createnewcopies.md deleted file mode 100644 index 82831eae37d7b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.createnewcopies.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveImportErrorsOptions](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) > [createNewCopies](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.createnewcopies.md) - -## SavedObjectsResolveImportErrorsOptions.createNewCopies property - -If true, will create new copies of import objects, each with a random `id` and undefined `originId`. - -Signature: - -```typescript -createNewCopies: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md deleted file mode 100644 index 7a005db4334ba..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveImportErrorsOptions](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) - -## SavedObjectsResolveImportErrorsOptions interface - -Options to control the "resolve import" operation. - -Signature: - -```typescript -export interface SavedObjectsResolveImportErrorsOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createNewCopies](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.createnewcopies.md) | boolean | If true, will create new copies of import objects, each with a random id and undefined originId. | -| [namespace?](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.namespace.md) | string | (Optional) if specified, will import in given namespace | -| [readStream](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.readstream.md) | Readable | The stream of [saved objects](./kibana-plugin-core-server.savedobject.md) to resolve errors from | -| [retries](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.retries.md) | SavedObjectsImportRetry\[\] | saved object import references to retry | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.namespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.namespace.md deleted file mode 100644 index 0ab9e02f9dfe5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.namespace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveImportErrorsOptions](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) > [namespace](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.namespace.md) - -## SavedObjectsResolveImportErrorsOptions.namespace property - -if specified, will import in given namespace - -Signature: - -```typescript -namespace?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.readstream.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.readstream.md deleted file mode 100644 index 8f5aa9bad3747..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.readstream.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveImportErrorsOptions](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) > [readStream](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.readstream.md) - -## SavedObjectsResolveImportErrorsOptions.readStream property - -The stream of [saved objects](./kibana-plugin-core-server.savedobject.md) to resolve errors from - -Signature: - -```typescript -readStream: Readable; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.retries.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.retries.md deleted file mode 100644 index 78b8cfdb72e3a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.retries.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveImportErrorsOptions](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) > [retries](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.retries.md) - -## SavedObjectsResolveImportErrorsOptions.retries property - -saved object import references to retry - -Signature: - -```typescript -retries: SavedObjectsImportRetry[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_purpose.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_purpose.md deleted file mode 100644 index afad46f9a84cd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_purpose.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-server.savedobjectsresolveresponse.md) > [alias\_purpose](./kibana-plugin-core-server.savedobjectsresolveresponse.alias_purpose.md) - -## SavedObjectsResolveResponse.alias\_purpose property - -The reason this alias was created. - -Currently this is used to determine whether or not a toast should be shown when a user is redirected from a legacy URL; if the alias was created because of saved object conversion, then we will display a toast telling the user that the object has a new URL. - -\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is `'aliasMatch'` or `'conflict'`). - -Signature: - -```typescript -alias_purpose?: 'savedObjectConversion' | 'savedObjectImport'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_target_id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_target_id.md deleted file mode 100644 index 52419918c0831..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.alias_target_id.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-server.savedobjectsresolveresponse.md) > [alias\_target\_id](./kibana-plugin-core-server.savedobjectsresolveresponse.alias_target_id.md) - -## SavedObjectsResolveResponse.alias\_target\_id property - -The ID of the object that the legacy URL alias points to. - -\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is `'aliasMatch'` or `'conflict'`). - -Signature: - -```typescript -alias_target_id?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md deleted file mode 100644 index 0228c624f69d0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-server.savedobjectsresolveresponse.md) - -## SavedObjectsResolveResponse interface - - -Signature: - -```typescript -export interface SavedObjectsResolveResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [alias\_purpose?](./kibana-plugin-core-server.savedobjectsresolveresponse.alias_purpose.md) | 'savedObjectConversion' \| 'savedObjectImport' | (Optional) The reason this alias was created.Currently this is used to determine whether or not a toast should be shown when a user is redirected from a legacy URL; if the alias was created because of saved object conversion, then we will display a toast telling the user that the object has a new URL.\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is 'aliasMatch' or 'conflict'). | -| [alias\_target\_id?](./kibana-plugin-core-server.savedobjectsresolveresponse.alias_target_id.md) | string | (Optional) The ID of the object that the legacy URL alias points to.\*\*Note:\*\* this field is \*only\* included when an alias was found (in other words, when the outcome is 'aliasMatch' or 'conflict'). | -| [outcome](./kibana-plugin-core-server.savedobjectsresolveresponse.outcome.md) | 'exactMatch' \| 'aliasMatch' \| 'conflict' | The outcome for a successful resolve call is one of the following values:\* 'exactMatch' -- One document exactly matched the given ID. \* '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. | -| [saved\_object](./kibana-plugin-core-server.savedobjectsresolveresponse.saved_object.md) | SavedObject<T> | The saved object that was found. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.outcome.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.outcome.md deleted file mode 100644 index eadd85b175375..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.outcome.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-server.savedobjectsresolveresponse.md) > [outcome](./kibana-plugin-core-server.savedobjectsresolveresponse.outcome.md) - -## SavedObjectsResolveResponse.outcome property - -The outcome for a successful `resolve` call is one of the following values: - -\* `'exactMatch'` -- One document exactly matched the given ID. \* `'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. - -Signature: - -```typescript -outcome: 'exactMatch' | 'aliasMatch' | 'conflict'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.saved_object.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.saved_object.md deleted file mode 100644 index c7748a2f97025..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.saved_object.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-server.savedobjectsresolveresponse.md) > [saved\_object](./kibana-plugin-core-server.savedobjectsresolveresponse.saved_object.md) - -## SavedObjectsResolveResponse.saved\_object property - -The saved object that was found. - -Signature: - -```typescript -saved_object: SavedObject; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawid.md deleted file mode 100644 index 6172a05d5c8fa..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawid.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsSerializer](./kibana-plugin-core-server.savedobjectsserializer.md) > [generateRawId](./kibana-plugin-core-server.savedobjectsserializer.generaterawid.md) - -## SavedObjectsSerializer.generateRawId() method - -Given a saved object type and id, generates the compound id that is stored in the raw document. - -Signature: - -```typescript -generateRawId(namespace: string | undefined, type: string, id: string): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| namespace | string \| undefined | The namespace of the saved object | -| type | string | The saved object type | -| id | string | The id of the saved object | - -Returns: - -string - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawlegacyurlaliasid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawlegacyurlaliasid.md deleted file mode 100644 index 0f7c3dc22faf1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.generaterawlegacyurlaliasid.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsSerializer](./kibana-plugin-core-server.savedobjectsserializer.md) > [generateRawLegacyUrlAliasId](./kibana-plugin-core-server.savedobjectsserializer.generaterawlegacyurlaliasid.md) - -## SavedObjectsSerializer.generateRawLegacyUrlAliasId() method - -Given a saved object type and id, generates the compound id that is stored in the raw document for its legacy URL alias. - -Signature: - -```typescript -generateRawLegacyUrlAliasId(namespace: string | undefined, type: string, id: string): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| namespace | string \| undefined | The namespace of the saved object | -| type | string | The saved object type | -| id | string | The id of the saved object | - -Returns: - -string - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.israwsavedobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.israwsavedobject.md deleted file mode 100644 index 00963e353aa20..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.israwsavedobject.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsSerializer](./kibana-plugin-core-server.savedobjectsserializer.md) > [isRawSavedObject](./kibana-plugin-core-server.savedobjectsserializer.israwsavedobject.md) - -## SavedObjectsSerializer.isRawSavedObject() method - -Determines whether or not the raw document can be converted to a saved object. - -Signature: - -```typescript -isRawSavedObject(doc: SavedObjectsRawDoc, options?: SavedObjectsRawDocParseOptions): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| doc | SavedObjectsRawDoc | The raw ES document to be tested | -| options | SavedObjectsRawDocParseOptions | Options for parsing the raw document. | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.md deleted file mode 100644 index c7fa5fc85c613..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsSerializer](./kibana-plugin-core-server.savedobjectsserializer.md) - -## SavedObjectsSerializer class - -A serializer that can be used to manually convert [raw](./kibana-plugin-core-server.savedobjectsrawdoc.md) or [sanitized](./kibana-plugin-core-server.savedobjectsanitizeddoc.md) documents to the other kind. - -Signature: - -```typescript -export declare class SavedObjectsSerializer -``` - -## Remarks - -Serializer instances should only be created and accessed by calling [SavedObjectsServiceStart.createSerializer](./kibana-plugin-core-server.savedobjectsservicestart.createserializer.md) - -The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `SavedObjectsSerializer` class. - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [generateRawId(namespace, type, id)](./kibana-plugin-core-server.savedobjectsserializer.generaterawid.md) | | Given a saved object type and id, generates the compound id that is stored in the raw document. | -| [generateRawLegacyUrlAliasId(namespace, type, id)](./kibana-plugin-core-server.savedobjectsserializer.generaterawlegacyurlaliasid.md) | | Given a saved object type and id, generates the compound id that is stored in the raw document for its legacy URL alias. | -| [isRawSavedObject(doc, options)](./kibana-plugin-core-server.savedobjectsserializer.israwsavedobject.md) | | Determines whether or not the raw document can be converted to a saved object. | -| [rawToSavedObject(doc, options)](./kibana-plugin-core-server.savedobjectsserializer.rawtosavedobject.md) | | Converts a document from the format that is stored in elasticsearch to the saved object client format. | -| [savedObjectToRaw(savedObj)](./kibana-plugin-core-server.savedobjectsserializer.savedobjecttoraw.md) | | Converts a document from the saved object client format to the format that is stored in elasticsearch. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.rawtosavedobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.rawtosavedobject.md deleted file mode 100644 index 9ac0ae0feee09..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.rawtosavedobject.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsSerializer](./kibana-plugin-core-server.savedobjectsserializer.md) > [rawToSavedObject](./kibana-plugin-core-server.savedobjectsserializer.rawtosavedobject.md) - -## SavedObjectsSerializer.rawToSavedObject() method - -Converts a document from the format that is stored in elasticsearch to the saved object client format. - -Signature: - -```typescript -rawToSavedObject(doc: SavedObjectsRawDoc, options?: SavedObjectsRawDocParseOptions): SavedObjectSanitizedDoc; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| doc | SavedObjectsRawDoc | The raw ES document to be converted to saved object format. | -| options | SavedObjectsRawDocParseOptions | Options for parsing the raw document. | - -Returns: - -SavedObjectSanitizedDoc<T> - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.savedobjecttoraw.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.savedobjecttoraw.md deleted file mode 100644 index 560011fc09638..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsserializer.savedobjecttoraw.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsSerializer](./kibana-plugin-core-server.savedobjectsserializer.md) > [savedObjectToRaw](./kibana-plugin-core-server.savedobjectsserializer.savedobjecttoraw.md) - -## SavedObjectsSerializer.savedObjectToRaw() method - -Converts a document from the saved object client format to the format that is stored in elasticsearch. - -Signature: - -```typescript -savedObjectToRaw(savedObj: SavedObjectSanitizedDoc): SavedObjectsRawDoc; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| savedObj | SavedObjectSanitizedDoc | The saved object to be converted to raw ES format. | - -Returns: - -SavedObjectsRawDoc - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.addclientwrapper.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.addclientwrapper.md deleted file mode 100644 index 1c2a15a8b322e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.addclientwrapper.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) > [addClientWrapper](./kibana-plugin-core-server.savedobjectsservicesetup.addclientwrapper.md) - -## SavedObjectsServiceSetup.addClientWrapper property - -Add a [client wrapper factory](./kibana-plugin-core-server.savedobjectsclientwrapperfactory.md) with the given priority. - -Signature: - -```typescript -addClientWrapper: (priority: number, id: string, factory: SavedObjectsClientWrapperFactory) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.getkibanaindex.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.getkibanaindex.md deleted file mode 100644 index 9319ae987ad44..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.getkibanaindex.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) > [getKibanaIndex](./kibana-plugin-core-server.savedobjectsservicesetup.getkibanaindex.md) - -## SavedObjectsServiceSetup.getKibanaIndex property - -Returns the default index used for saved objects. - -Signature: - -```typescript -getKibanaIndex: () => string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md deleted file mode 100644 index d9f7b888338fc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md +++ /dev/null @@ -1,56 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) - -## SavedObjectsServiceSetup interface - -Saved Objects is Kibana's data persistence mechanism allowing plugins to use Elasticsearch for storing and querying state. The SavedObjectsServiceSetup API exposes methods for registering Saved Object types, creating and registering Saved Object client wrappers and factories. - -Signature: - -```typescript -export interface SavedObjectsServiceSetup -``` - -## Remarks - -When plugins access the Saved Objects client, a new client is created using the factory provided to `setClientFactory` and wrapped by all wrappers registered through `addClientWrapper`. - -## Example 1 - - -```ts -import { SavedObjectsClient, CoreSetup } from 'src/core/server'; - -export class Plugin() { - setup: (core: CoreSetup) => { - core.savedObjects.setClientFactory(({ request: KibanaRequest }) => { - return new SavedObjectsClient(core.savedObjects.scopedRepository(request)); - }) - } -} -``` - -## Example 2 - - -```ts -import { SavedObjectsClient, CoreSetup } from 'src/core/server'; -import { mySoType } from './saved_objects' - -export class Plugin() { - setup: (core: CoreSetup) => { - core.savedObjects.registerType(mySoType); - } -} -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [addClientWrapper](./kibana-plugin-core-server.savedobjectsservicesetup.addclientwrapper.md) | (priority: number, id: string, factory: SavedObjectsClientWrapperFactory) => void | Add a [client wrapper factory](./kibana-plugin-core-server.savedobjectsclientwrapperfactory.md) with the given priority. | -| [getKibanaIndex](./kibana-plugin-core-server.savedobjectsservicesetup.getkibanaindex.md) | () => string | Returns the default index used for saved objects. | -| [registerType](./kibana-plugin-core-server.savedobjectsservicesetup.registertype.md) | <Attributes extends SavedObjectAttributes = any>(type: SavedObjectsType<Attributes>) => void | Register a [savedObjects type](./kibana-plugin-core-server.savedobjectstype.md) definition.See the [mappings format](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) and [migration format](./kibana-plugin-core-server.savedobjectmigrationmap.md) for more details about these. | -| [setClientFactoryProvider](./kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md) | (clientFactoryProvider: SavedObjectsClientFactoryProvider) => void | Set the default [factory provider](./kibana-plugin-core-server.savedobjectsclientfactoryprovider.md) for creating Saved Objects clients. Only one provider can be set, subsequent calls to this method will fail. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md deleted file mode 100644 index afe3098ef1813..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md +++ /dev/null @@ -1,60 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) > [registerType](./kibana-plugin-core-server.savedobjectsservicesetup.registertype.md) - -## SavedObjectsServiceSetup.registerType property - -Register a [savedObjects type](./kibana-plugin-core-server.savedobjectstype.md) definition. - -See the [mappings format](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) and [migration format](./kibana-plugin-core-server.savedobjectmigrationmap.md) for more details about these. - -Signature: - -```typescript -registerType: (type: SavedObjectsType) => void; -``` - -## Example - - -```ts -// src/plugins/my_plugin/server/saved_objects/my_type.ts -import { SavedObjectsType } from 'src/core/server'; -import * as migrations from './migrations'; -import * as schemas from './schemas'; - -export const myType: SavedObjectsType = { - name: 'MyType', - hidden: false, - namespaceType: 'multiple', - mappings: { - properties: { - textField: { - type: 'text', - }, - boolField: { - type: 'boolean', - }, - }, - }, - migrations: { - '2.0.0': migrations.migrateToV2, - '2.1.0': migrations.migrateToV2_1 - }, - schemas: { - '2.0.0': schemas.v2, - '2.1.0': schemas.v2_1, - }, -}; - -// src/plugins/my_plugin/server/plugin.ts -import { SavedObjectsClient, CoreSetup } from 'src/core/server'; -import { myType } from './saved_objects'; - -export class Plugin() { - setup: (core: CoreSetup) => { - core.savedObjects.registerType(myType); - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md deleted file mode 100644 index e098245e369f1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) > [setClientFactoryProvider](./kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md) - -## SavedObjectsServiceSetup.setClientFactoryProvider property - -Set the default [factory provider](./kibana-plugin-core-server.savedobjectsclientfactoryprovider.md) for creating Saved Objects clients. Only one provider can be set, subsequent calls to this method will fail. - -Signature: - -```typescript -setClientFactoryProvider: (clientFactoryProvider: SavedObjectsClientFactoryProvider) => void; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createexporter.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createexporter.md deleted file mode 100644 index 273d80983f15d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createexporter.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) > [createExporter](./kibana-plugin-core-server.savedobjectsservicestart.createexporter.md) - -## SavedObjectsServiceStart.createExporter property - -Creates an [exporter](./kibana-plugin-core-server.isavedobjectsexporter.md) bound to given client. - -Signature: - -```typescript -createExporter: (client: SavedObjectsClientContract) => ISavedObjectsExporter; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createimporter.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createimporter.md deleted file mode 100644 index f2617c5c6c12a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createimporter.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) > [createImporter](./kibana-plugin-core-server.savedobjectsservicestart.createimporter.md) - -## SavedObjectsServiceStart.createImporter property - -Creates an [importer](./kibana-plugin-core-server.isavedobjectsimporter.md) bound to given client. - -Signature: - -```typescript -createImporter: (client: SavedObjectsClientContract) => ISavedObjectsImporter; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md deleted file mode 100644 index d03e9ca223c53..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) > [createInternalRepository](./kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md) - -## SavedObjectsServiceStart.createInternalRepository property - -Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the internal Kibana user for authenticating with Elasticsearch. - -Signature: - -```typescript -createInternalRepository: (includedHiddenTypes?: string[]) => ISavedObjectsRepository; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createscopedrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createscopedrepository.md deleted file mode 100644 index 762f77b98e74d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createscopedrepository.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) > [createScopedRepository](./kibana-plugin-core-server.savedobjectsservicestart.createscopedrepository.md) - -## SavedObjectsServiceStart.createScopedRepository property - -Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the credentials from the passed in request to authenticate with Elasticsearch. - -Signature: - -```typescript -createScopedRepository: (req: KibanaRequest, includedHiddenTypes?: string[]) => ISavedObjectsRepository; -``` - -## Remarks - -Prefer using `getScopedClient`. This should only be used when using methods not exposed on [SavedObjectsClientContract](./kibana-plugin-core-server.savedobjectsclientcontract.md) - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createserializer.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createserializer.md deleted file mode 100644 index 434d6a0270ca3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createserializer.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) > [createSerializer](./kibana-plugin-core-server.savedobjectsservicestart.createserializer.md) - -## SavedObjectsServiceStart.createSerializer property - -Creates a [serializer](./kibana-plugin-core-server.savedobjectsserializer.md) that is aware of all registered types. - -Signature: - -```typescript -createSerializer: () => SavedObjectsSerializer; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.getscopedclient.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.getscopedclient.md deleted file mode 100644 index e4d3129ece549..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.getscopedclient.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) > [getScopedClient](./kibana-plugin-core-server.savedobjectsservicestart.getscopedclient.md) - -## SavedObjectsServiceStart.getScopedClient property - -Creates a [Saved Objects client](./kibana-plugin-core-server.savedobjectsclientcontract.md) that uses the credentials from the passed in request to authenticate with Elasticsearch. If other plugins have registered Saved Objects client wrappers, these will be applied to extend the functionality of the client. - -A client that is already scoped to the incoming request is also exposed from the route handler context see [RequestHandlerContext](./kibana-plugin-core-server.requesthandlercontext.md). - -Signature: - -```typescript -getScopedClient: (req: KibanaRequest, options?: SavedObjectsClientProviderOptions) => SavedObjectsClientContract; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.gettyperegistry.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.gettyperegistry.md deleted file mode 100644 index aac2f89b545d1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.gettyperegistry.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) > [getTypeRegistry](./kibana-plugin-core-server.savedobjectsservicestart.gettyperegistry.md) - -## SavedObjectsServiceStart.getTypeRegistry property - -Returns the [registry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) containing all registered [saved object types](./kibana-plugin-core-server.savedobjectstype.md) - -Signature: - -```typescript -getTypeRegistry: () => ISavedObjectTypeRegistry; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.md deleted file mode 100644 index ae7480ab1e65b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) - -## SavedObjectsServiceStart interface - -Saved Objects is Kibana's data persisentence mechanism allowing plugins to use Elasticsearch for storing and querying state. The SavedObjectsServiceStart API provides a scoped Saved Objects client for interacting with Saved Objects. - -Signature: - -```typescript -export interface SavedObjectsServiceStart -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [createExporter](./kibana-plugin-core-server.savedobjectsservicestart.createexporter.md) | (client: SavedObjectsClientContract) => ISavedObjectsExporter | Creates an [exporter](./kibana-plugin-core-server.isavedobjectsexporter.md) bound to given client. | -| [createImporter](./kibana-plugin-core-server.savedobjectsservicestart.createimporter.md) | (client: SavedObjectsClientContract) => ISavedObjectsImporter | Creates an [importer](./kibana-plugin-core-server.isavedobjectsimporter.md) bound to given client. | -| [createInternalRepository](./kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md) | (includedHiddenTypes?: string\[\]) => ISavedObjectsRepository | Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the internal Kibana user for authenticating with Elasticsearch. | -| [createScopedRepository](./kibana-plugin-core-server.savedobjectsservicestart.createscopedrepository.md) | (req: KibanaRequest, includedHiddenTypes?: string\[\]) => ISavedObjectsRepository | Creates a [Saved Objects repository](./kibana-plugin-core-server.isavedobjectsrepository.md) that uses the credentials from the passed in request to authenticate with Elasticsearch. | -| [createSerializer](./kibana-plugin-core-server.savedobjectsservicestart.createserializer.md) | () => SavedObjectsSerializer | Creates a [serializer](./kibana-plugin-core-server.savedobjectsserializer.md) that is aware of all registered types. | -| [getScopedClient](./kibana-plugin-core-server.savedobjectsservicestart.getscopedclient.md) | (req: KibanaRequest, options?: SavedObjectsClientProviderOptions) => SavedObjectsClientContract | Creates a [Saved Objects client](./kibana-plugin-core-server.savedobjectsclientcontract.md) that uses the credentials from the passed in request to authenticate with Elasticsearch. If other plugins have registered Saved Objects client wrappers, these will be applied to extend the functionality of the client.A client that is already scoped to the incoming request is also exposed from the route handler context see [RequestHandlerContext](./kibana-plugin-core-server.requesthandlercontext.md). | -| [getTypeRegistry](./kibana-plugin-core-server.savedobjectsservicestart.gettyperegistry.md) | () => ISavedObjectTypeRegistry | Returns the [registry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) containing all registered [saved object types](./kibana-plugin-core-server.savedobjectstype.md) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md deleted file mode 100644 index 890ed36535b3f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectStatusMeta](./kibana-plugin-core-server.savedobjectstatusmeta.md) - -## SavedObjectStatusMeta interface - -Meta information about the SavedObjectService's status. Available to plugins via [CoreSetup.status](./kibana-plugin-core-server.coresetup.status.md). - -Signature: - -```typescript -export interface SavedObjectStatusMeta -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [migratedIndices](./kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md) | { \[status: string\]: number; skipped: number; migrated: number; } | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md deleted file mode 100644 index 6a29623b2f122..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectStatusMeta](./kibana-plugin-core-server.savedobjectstatusmeta.md) > [migratedIndices](./kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md) - -## SavedObjectStatusMeta.migratedIndices property - -Signature: - -```typescript -migratedIndices: { - [status: string]: number; - skipped: number; - migrated: number; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttoaliasscript.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttoaliasscript.md deleted file mode 100644 index 296f7ba3044f6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttoaliasscript.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [convertToAliasScript](./kibana-plugin-core-server.savedobjectstype.converttoaliasscript.md) - -## SavedObjectsType.convertToAliasScript property - -If defined, will be used to convert the type to an alias. - -Signature: - -```typescript -convertToAliasScript?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md deleted file mode 100644 index a3fac34153633..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md +++ /dev/null @@ -1,51 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [convertToMultiNamespaceTypeVersion](./kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md) - -## SavedObjectsType.convertToMultiNamespaceTypeVersion property - -If defined, objects of this type will be converted to a 'multiple' or 'multiple-isolated' namespace type when migrating to this version. - -Requirements: - -1. This string value must be a valid semver version 2. This type must have previously specified [\`namespaceType: 'single'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) 3. This type must also specify [\`namespaceType: 'multiple'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) \*or\* [\`namespaceType: 'multiple-isolated'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) - -Example of a single-namespace type in 7.12: - -```ts -{ - name: 'foo', - hidden: false, - namespaceType: 'single', - mappings: {...} -} -``` -Example after converting to a multi-namespace (isolated) type in 8.0: - -```ts -{ - name: 'foo', - hidden: false, - namespaceType: 'multiple-isolated', - mappings: {...}, - convertToMultiNamespaceTypeVersion: '8.0.0' -} -``` -Example after converting to a multi-namespace (shareable) type in 8.1: - -```ts -{ - name: 'foo', - hidden: false, - namespaceType: 'multiple', - mappings: {...}, - convertToMultiNamespaceTypeVersion: '8.0.0' -} -``` -Note: migration function(s) can be optionally specified for any of these versions and will not interfere with the conversion process. - -Signature: - -```typescript -convertToMultiNamespaceTypeVersion?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.excludeonupgrade.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.excludeonupgrade.md deleted file mode 100644 index f5446b37dc29c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.excludeonupgrade.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [excludeOnUpgrade](./kibana-plugin-core-server.savedobjectstype.excludeonupgrade.md) - -## SavedObjectsType.excludeOnUpgrade property - -If defined, allows a type to exclude unneeded documents from the migration process and effectively be deleted. See [SavedObjectTypeExcludeFromUpgradeFilterHook](./kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md) for more details. - -Signature: - -```typescript -excludeOnUpgrade?: SavedObjectTypeExcludeFromUpgradeFilterHook; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.hidden.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.hidden.md deleted file mode 100644 index d13b9177394d4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.hidden.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [hidden](./kibana-plugin-core-server.savedobjectstype.hidden.md) - -## SavedObjectsType.hidden property - -Is the type hidden by default. If true, repositories will not have access to this type unless explicitly declared as an `extraType` when creating the repository. - -See [createInternalRepository](./kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md). - -Signature: - -```typescript -hidden: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.indexpattern.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.indexpattern.md deleted file mode 100644 index 8db74b9bfdec4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.indexpattern.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [indexPattern](./kibana-plugin-core-server.savedobjectstype.indexpattern.md) - -## SavedObjectsType.indexPattern property - -If defined, the type instances will be stored in the given index instead of the default one. - -Signature: - -```typescript -indexPattern?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.management.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.management.md deleted file mode 100644 index d98c553656b1f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.management.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [management](./kibana-plugin-core-server.savedobjectstype.management.md) - -## SavedObjectsType.management property - -An optional [saved objects management section](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) definition for the type. - -Signature: - -```typescript -management?: SavedObjectsTypeManagementDefinition; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.mappings.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.mappings.md deleted file mode 100644 index 066561b8c8633..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.mappings.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [mappings](./kibana-plugin-core-server.savedobjectstype.mappings.md) - -## SavedObjectsType.mappings property - -The [mapping definition](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) for the type. - -Signature: - -```typescript -mappings: SavedObjectsTypeMappingDefinition; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md deleted file mode 100644 index cd6e724685777..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md +++ /dev/null @@ -1,58 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) - -## SavedObjectsType interface - - -Signature: - -```typescript -export interface SavedObjectsType -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [convertToAliasScript?](./kibana-plugin-core-server.savedobjectstype.converttoaliasscript.md) | string | (Optional) If defined, will be used to convert the type to an alias. | -| [convertToMultiNamespaceTypeVersion?](./kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md) | string | (Optional) If defined, objects of this type will be converted to a 'multiple' or 'multiple-isolated' namespace type when migrating to this version.Requirements:1. This string value must be a valid semver version 2. This type must have previously specified [\`namespaceType: 'single'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) 3. This type must also specify [\`namespaceType: 'multiple'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) \*or\* [\`namespaceType: 'multiple-isolated'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md)Example of a single-namespace type in 7.12: -```ts -{ - name: 'foo', - hidden: false, - namespaceType: 'single', - mappings: {...} -} -``` -Example after converting to a multi-namespace (isolated) type in 8.0: -```ts -{ - name: 'foo', - hidden: false, - namespaceType: 'multiple-isolated', - mappings: {...}, - convertToMultiNamespaceTypeVersion: '8.0.0' -} -``` -Example after converting to a multi-namespace (shareable) type in 8.1: -```ts -{ - name: 'foo', - hidden: false, - namespaceType: 'multiple', - mappings: {...}, - convertToMultiNamespaceTypeVersion: '8.0.0' -} -``` -Note: migration function(s) can be optionally specified for any of these versions and will not interfere with the conversion process. | -| [excludeOnUpgrade?](./kibana-plugin-core-server.savedobjectstype.excludeonupgrade.md) | SavedObjectTypeExcludeFromUpgradeFilterHook | (Optional) If defined, allows a type to exclude unneeded documents from the migration process and effectively be deleted. See [SavedObjectTypeExcludeFromUpgradeFilterHook](./kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md) for more details. | -| [hidden](./kibana-plugin-core-server.savedobjectstype.hidden.md) | boolean | Is the type hidden by default. If true, repositories will not have access to this type unless explicitly declared as an extraType when creating the repository.See [createInternalRepository](./kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md). | -| [indexPattern?](./kibana-plugin-core-server.savedobjectstype.indexpattern.md) | string | (Optional) If defined, the type instances will be stored in the given index instead of the default one. | -| [management?](./kibana-plugin-core-server.savedobjectstype.management.md) | SavedObjectsTypeManagementDefinition<Attributes> | (Optional) An optional [saved objects management section](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) definition for the type. | -| [mappings](./kibana-plugin-core-server.savedobjectstype.mappings.md) | SavedObjectsTypeMappingDefinition | The [mapping definition](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) for the type. | -| [migrations?](./kibana-plugin-core-server.savedobjectstype.migrations.md) | SavedObjectMigrationMap \| (() => SavedObjectMigrationMap) | (Optional) An optional map of [migrations](./kibana-plugin-core-server.savedobjectmigrationfn.md) or a function returning a map of [migrations](./kibana-plugin-core-server.savedobjectmigrationfn.md) to be used to migrate the type. | -| [name](./kibana-plugin-core-server.savedobjectstype.name.md) | string | The name of the type, which is also used as the internal id. | -| [namespaceType](./kibana-plugin-core-server.savedobjectstype.namespacetype.md) | SavedObjectsNamespaceType | The [namespace type](./kibana-plugin-core-server.savedobjectsnamespacetype.md) for the type. | -| [schemas?](./kibana-plugin-core-server.savedobjectstype.schemas.md) | SavedObjectsValidationMap \| (() => SavedObjectsValidationMap) | (Optional) An optional schema that can be used to validate the attributes of the type.When provided, calls to [create](./kibana-plugin-core-server.savedobjectsclient.create.md) will be validated against this schema.See [SavedObjectsValidationMap](./kibana-plugin-core-server.savedobjectsvalidationmap.md) for more details. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.migrations.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.migrations.md deleted file mode 100644 index 6550d48a1c26a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.migrations.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [migrations](./kibana-plugin-core-server.savedobjectstype.migrations.md) - -## SavedObjectsType.migrations property - -An optional map of [migrations](./kibana-plugin-core-server.savedobjectmigrationfn.md) or a function returning a map of [migrations](./kibana-plugin-core-server.savedobjectmigrationfn.md) to be used to migrate the type. - -Signature: - -```typescript -migrations?: SavedObjectMigrationMap | (() => SavedObjectMigrationMap); -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.name.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.name.md deleted file mode 100644 index 4c63500498085..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [name](./kibana-plugin-core-server.savedobjectstype.name.md) - -## SavedObjectsType.name property - -The name of the type, which is also used as the internal id. - -Signature: - -```typescript -name: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.namespacetype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.namespacetype.md deleted file mode 100644 index 3a3b0f7f3a9a5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.namespacetype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [namespaceType](./kibana-plugin-core-server.savedobjectstype.namespacetype.md) - -## SavedObjectsType.namespaceType property - -The [namespace type](./kibana-plugin-core-server.savedobjectsnamespacetype.md) for the type. - -Signature: - -```typescript -namespaceType: SavedObjectsNamespaceType; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.schemas.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.schemas.md deleted file mode 100644 index 466d8e361f995..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.schemas.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) > [schemas](./kibana-plugin-core-server.savedobjectstype.schemas.md) - -## SavedObjectsType.schemas property - -An optional schema that can be used to validate the attributes of the type. - -When provided, calls to [create](./kibana-plugin-core-server.savedobjectsclient.create.md) will be validated against this schema. - -See [SavedObjectsValidationMap](./kibana-plugin-core-server.savedobjectsvalidationmap.md) for more details. - -Signature: - -```typescript -schemas?: SavedObjectsValidationMap | (() => SavedObjectsValidationMap); -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.defaultsearchfield.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.defaultsearchfield.md deleted file mode 100644 index d922a8daaac93..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.defaultsearchfield.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [defaultSearchField](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.defaultsearchfield.md) - -## SavedObjectsTypeManagementDefinition.defaultSearchField property - -The default search field to use for this type. Defaults to `id`. - -Signature: - -```typescript -defaultSearchField?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.displayname.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.displayname.md deleted file mode 100644 index 71325318a68e6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.displayname.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [displayName](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.displayname.md) - -## SavedObjectsTypeManagementDefinition.displayName property - -When specified, will be used instead of the type's name in SO management section's labels. - -Signature: - -```typescript -displayName?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getediturl.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getediturl.md deleted file mode 100644 index 75f820d7a8e56..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getediturl.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [getEditUrl](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.getediturl.md) - -## SavedObjectsTypeManagementDefinition.getEditUrl property - -Function returning the url to use to redirect to the editing page of this object. If not defined, editing will not be allowed. - -Signature: - -```typescript -getEditUrl?: (savedObject: SavedObject) => string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getinappurl.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getinappurl.md deleted file mode 100644 index d6d50840aaadb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.getinappurl.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [getInAppUrl](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.getinappurl.md) - -## SavedObjectsTypeManagementDefinition.getInAppUrl property - -Function returning the url to use to redirect to this object from the management section. If not defined, redirecting to the object will not be allowed. - -Signature: - -```typescript -getInAppUrl?: (savedObject: SavedObject) => { - path: string; - uiCapabilitiesPath: string; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.gettitle.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.gettitle.md deleted file mode 100644 index 75784666ef963..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.gettitle.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [getTitle](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.gettitle.md) - -## SavedObjectsTypeManagementDefinition.getTitle property - -Function returning the title to display in the management table. If not defined, will use the object's type and id to generate a label. - -Signature: - -```typescript -getTitle?: (savedObject: SavedObject) => string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.icon.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.icon.md deleted file mode 100644 index d4bbea50b5692..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.icon.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [icon](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.icon.md) - -## SavedObjectsTypeManagementDefinition.icon property - -The eui icon name to display in the management table. If not defined, the default icon will be used. - -Signature: - -```typescript -icon?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.importableandexportable.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.importableandexportable.md deleted file mode 100644 index 9300f830e105b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.importableandexportable.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [importableAndExportable](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.importableandexportable.md) - -## SavedObjectsTypeManagementDefinition.importableAndExportable property - -Is the type importable or exportable. Defaults to `false`. - -Signature: - -```typescript -importableAndExportable?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.isexportable.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.isexportable.md deleted file mode 100644 index c6dff60610990..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.isexportable.md +++ /dev/null @@ -1,48 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [isExportable](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.isexportable.md) - -## SavedObjectsTypeManagementDefinition.isExportable property - -Optional hook to specify whether an object should be exportable. - -If specified, `isExportable` will be called during export for each of this type's objects in the export, and the ones not matching the predicate will be excluded from the export. - -When implementing both `isExportable` and `onExport`, it is mandatory that `isExportable` returns the same value for an object before and after going though the export transform. E.g `isExportable(objectBeforeTransform) === isExportable(objectAfterTransform)` - -Signature: - -```typescript -isExportable?: SavedObjectsExportablePredicate; -``` - -## Remarks - -`importableAndExportable` must be `true` to specify this property. - -## Example - -Registering a type with a per-object exportability predicate - -```ts -// src/plugins/my_plugin/server/plugin.ts -import { myType } from './saved_objects'; - -export class Plugin() { - setup: (core: CoreSetup) => { - core.savedObjects.registerType({ - ...myType, - management: { - ...myType.management, - isExportable: (object) => { - if (object.attributes.myCustomAttr === 'foo') { - return false; - } - return true; - } - }, - }); - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.md deleted file mode 100644 index eeda40cd59664..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) - -## SavedObjectsTypeManagementDefinition interface - -Configuration options for the [type](./kibana-plugin-core-server.savedobjectstype.md)'s management section. - -Signature: - -```typescript -export interface SavedObjectsTypeManagementDefinition -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [defaultSearchField?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.defaultsearchfield.md) | string | (Optional) The default search field to use for this type. Defaults to id. | -| [displayName?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.displayname.md) | string | (Optional) When specified, will be used instead of the type's name in SO management section's labels. | -| [getEditUrl?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.getediturl.md) | (savedObject: SavedObject<Attributes>) => string | (Optional) Function returning the url to use to redirect to the editing page of this object. If not defined, editing will not be allowed. | -| [getInAppUrl?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.getinappurl.md) | (savedObject: SavedObject<Attributes>) => { path: string; uiCapabilitiesPath: string; } | (Optional) Function returning the url to use to redirect to this object from the management section. If not defined, redirecting to the object will not be allowed. | -| [getTitle?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.gettitle.md) | (savedObject: SavedObject<Attributes>) => string | (Optional) Function returning the title to display in the management table. If not defined, will use the object's type and id to generate a label. | -| [icon?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.icon.md) | string | (Optional) The eui icon name to display in the management table. If not defined, the default icon will be used. | -| [importableAndExportable?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.importableandexportable.md) | boolean | (Optional) Is the type importable or exportable. Defaults to false. | -| [isExportable?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.isexportable.md) | SavedObjectsExportablePredicate<Attributes> | (Optional) Optional hook to specify whether an object should be exportable.If specified, isExportable will be called during export for each of this type's objects in the export, and the ones not matching the predicate will be excluded from the export.When implementing both isExportable and onExport, it is mandatory that isExportable returns the same value for an object before and after going though the export transform. E.g isExportable(objectBeforeTransform) === isExportable(objectAfterTransform) | -| [onExport?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.onexport.md) | SavedObjectsExportTransform<Attributes> | (Optional) An optional export transform function that can be used transform the objects of the registered type during the export process.It can be used to either mutate the exported objects, or add additional objects (of any type) to the export list.See [the transform type documentation](./kibana-plugin-core-server.savedobjectsexporttransform.md) for more info and examples.When implementing both isExportable and onExport, it is mandatory that isExportable returns the same value for an object before and after going though the export transform. E.g isExportable(objectBeforeTransform) === isExportable(objectAfterTransform) | -| [onImport?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.onimport.md) | SavedObjectsImportHook<Attributes> | (Optional) An optional [import hook](./kibana-plugin-core-server.savedobjectsimporthook.md) to use when importing given type.Import hooks are executed during the savedObjects import process and allow to interact with the imported objects. See the [hook documentation](./kibana-plugin-core-server.savedobjectsimporthook.md) for more info. | -| [visibleInManagement?](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.visibleinmanagement.md) | boolean | (Optional) When set to false, the type will not be listed or searchable in the SO management section. Main usage of setting this property to false for a type is when objects from the type should be included in the export via references or export hooks, but should not directly appear in the SOM. Defaults to true. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onexport.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onexport.md deleted file mode 100644 index a0d41d2d64967..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onexport.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [onExport](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.onexport.md) - -## SavedObjectsTypeManagementDefinition.onExport property - -An optional export transform function that can be used transform the objects of the registered type during the export process. - -It can be used to either mutate the exported objects, or add additional objects (of any type) to the export list. - -See [the transform type documentation](./kibana-plugin-core-server.savedobjectsexporttransform.md) for more info and examples. - -When implementing both `isExportable` and `onExport`, it is mandatory that `isExportable` returns the same value for an object before and after going though the export transform. E.g `isExportable(objectBeforeTransform) === isExportable(objectAfterTransform)` - -Signature: - -```typescript -onExport?: SavedObjectsExportTransform; -``` - -## Remarks - -`importableAndExportable` must be `true` to specify this property. - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onimport.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onimport.md deleted file mode 100644 index c54570d79a7e2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.onimport.md +++ /dev/null @@ -1,54 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [onImport](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.onimport.md) - -## SavedObjectsTypeManagementDefinition.onImport property - -An optional [import hook](./kibana-plugin-core-server.savedobjectsimporthook.md) to use when importing given type. - -Import hooks are executed during the savedObjects import process and allow to interact with the imported objects. See the [hook documentation](./kibana-plugin-core-server.savedobjectsimporthook.md) for more info. - -Signature: - -```typescript -onImport?: SavedObjectsImportHook; -``` - -## Remarks - -`importableAndExportable` must be `true` to specify this property. - -## Example - -Registering a hook displaying a warning about a specific type of object - -```ts -// src/plugins/my_plugin/server/plugin.ts -import { myType } from './saved_objects'; - -export class Plugin() { - setup: (core: CoreSetup) => { - core.savedObjects.registerType({ - ...myType, - management: { - ...myType.management, - onImport: (objects) => { - if(someActionIsNeeded(objects)) { - return { - warnings: [ - { - type: 'action_required', - message: 'Objects need to be manually enabled after import', - actionPath: '/app/my-app/require-activation', - }, - ] - } - } - return {}; - } - }, - }); - } -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.visibleinmanagement.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.visibleinmanagement.md deleted file mode 100644 index 33ddc8e8c8307..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemanagementdefinition.visibleinmanagement.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) > [visibleInManagement](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.visibleinmanagement.md) - -## SavedObjectsTypeManagementDefinition.visibleInManagement property - -When set to false, the type will not be listed or searchable in the SO management section. Main usage of setting this property to false for a type is when objects from the type should be included in the export via references or export hooks, but should not directly appear in the SOM. Defaults to `true`. - -Signature: - -```typescript -visibleInManagement?: boolean; -``` - -## Remarks - -`importableAndExportable` must be `true` to specify this property. - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.dynamic.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.dynamic.md deleted file mode 100644 index 70775760ac77d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.dynamic.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeMappingDefinition](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) > [dynamic](./kibana-plugin-core-server.savedobjectstypemappingdefinition.dynamic.md) - -## SavedObjectsTypeMappingDefinition.dynamic property - -The dynamic property of the mapping, either `false` or `'strict'`. If unspecified `dynamic: 'strict'` will be inherited from the top-level index mappings. - -Signature: - -```typescript -dynamic?: false | 'strict'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.md deleted file mode 100644 index 7f4c82c23e2ca..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.md +++ /dev/null @@ -1,45 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeMappingDefinition](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) - -## SavedObjectsTypeMappingDefinition interface - -Describe a saved object type mapping. - -Signature: - -```typescript -export interface SavedObjectsTypeMappingDefinition -``` - -## Example - - -```ts -const typeDefinition: SavedObjectsTypeMappingDefinition = { - properties: { - enabled: { - type: "boolean" - }, - sendUsageFrom: { - ignore_above: 256, - type: "keyword" - }, - lastReported: { - type: "date" - }, - lastVersionChecked: { - ignore_above: 256, - type: "keyword" - }, - } -} -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [dynamic?](./kibana-plugin-core-server.savedobjectstypemappingdefinition.dynamic.md) | false \| 'strict' | (Optional) The dynamic property of the mapping, either false or 'strict'. If unspecified dynamic: 'strict' will be inherited from the top-level index mappings. | -| [properties](./kibana-plugin-core-server.savedobjectstypemappingdefinition.properties.md) | SavedObjectsMappingProperties | The underlying properties of the type mapping | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.properties.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.properties.md deleted file mode 100644 index 6ccf2e2c90d0b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstypemappingdefinition.properties.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsTypeMappingDefinition](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) > [properties](./kibana-plugin-core-server.savedobjectstypemappingdefinition.properties.md) - -## SavedObjectsTypeMappingDefinition.properties property - -The underlying properties of the type mapping - -Signature: - -```typescript -properties: SavedObjectsMappingProperties; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.id.md deleted file mode 100644 index dac110ac4f475..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md) > [id](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.id.md) - -## SavedObjectsUpdateObjectsSpacesObject.id property - -The type of the object to update - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md deleted file mode 100644 index 6fa04623c96a6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md) - -## SavedObjectsUpdateObjectsSpacesObject interface - -An object that should have its spaces updated. - -Signature: - -```typescript -export interface SavedObjectsUpdateObjectsSpacesObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.id.md) | string | The type of the object to update | -| [type](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.type.md) | string | The ID of the object to update | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.type.md deleted file mode 100644 index 2e54d1636c5e9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.md) > [type](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesobject.type.md) - -## SavedObjectsUpdateObjectsSpacesObject.type property - -The ID of the object to update - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.md deleted file mode 100644 index b8f17699b1841..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesOptions](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.md) - -## SavedObjectsUpdateObjectsSpacesOptions interface - -Options for the update operation. - -Signature: - -```typescript -export interface SavedObjectsUpdateObjectsSpacesOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [refresh?](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.refresh.md) | MutatingOperationRefreshSetting | (Optional) The Elasticsearch Refresh setting for this operation | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.refresh.md deleted file mode 100644 index 3d210f6ac51c7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesOptions](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesoptions.refresh.md) - -## SavedObjectsUpdateObjectsSpacesOptions.refresh property - -The Elasticsearch Refresh setting for this operation - -Signature: - -```typescript -refresh?: MutatingOperationRefreshSetting; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.md deleted file mode 100644 index aff67e0c54e66..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesResponse](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.md) - -## SavedObjectsUpdateObjectsSpacesResponse interface - -The response when objects' spaces are updated. - -Signature: - -```typescript -export interface SavedObjectsUpdateObjectsSpacesResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [objects](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.objects.md) | SavedObjectsUpdateObjectsSpacesResponseObject\[\] | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.objects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.objects.md deleted file mode 100644 index 13328e2aed094..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.objects.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesResponse](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.md) > [objects](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponse.objects.md) - -## SavedObjectsUpdateObjectsSpacesResponse.objects property - -Signature: - -```typescript -objects: SavedObjectsUpdateObjectsSpacesResponseObject[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.error.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.error.md deleted file mode 100644 index 7d7ac4ada884d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.error.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesResponseObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md) > [error](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.error.md) - -## SavedObjectsUpdateObjectsSpacesResponseObject.error property - -Included if there was an error updating this object's spaces - -Signature: - -```typescript -error?: SavedObjectError; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.id.md deleted file mode 100644 index 28a81ee5dfd6a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesResponseObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md) > [id](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.id.md) - -## SavedObjectsUpdateObjectsSpacesResponseObject.id property - -The ID of the referenced object - -Signature: - -```typescript -id: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md deleted file mode 100644 index 5078473e9e6bd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesResponseObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md) - -## SavedObjectsUpdateObjectsSpacesResponseObject interface - -Details about a specific object's update result. - -Signature: - -```typescript -export interface SavedObjectsUpdateObjectsSpacesResponseObject -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error?](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.error.md) | SavedObjectError | (Optional) Included if there was an error updating this object's spaces | -| [id](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.id.md) | string | The ID of the referenced object | -| [spaces](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.spaces.md) | string\[\] | The space(s) that the referenced object exists in | -| [type](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.type.md) | string | The type of the referenced object | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.spaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.spaces.md deleted file mode 100644 index 52b1ca187925c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.spaces.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesResponseObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md) > [spaces](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.spaces.md) - -## SavedObjectsUpdateObjectsSpacesResponseObject.spaces property - -The space(s) that the referenced object exists in - -Signature: - -```typescript -spaces: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.type.md deleted file mode 100644 index da0bbb1088507..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateObjectsSpacesResponseObject](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.md) > [type](./kibana-plugin-core-server.savedobjectsupdateobjectsspacesresponseobject.type.md) - -## SavedObjectsUpdateObjectsSpacesResponseObject.type property - -The type of the referenced object - -Signature: - -```typescript -type: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.md deleted file mode 100644 index 7044f3007c382..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) - -## SavedObjectsUpdateOptions interface - - -Signature: - -```typescript -export interface SavedObjectsUpdateOptions extends SavedObjectsBaseOptions -``` -Extends: SavedObjectsBaseOptions - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [references?](./kibana-plugin-core-server.savedobjectsupdateoptions.references.md) | SavedObjectReference\[\] | (Optional) A reference to another saved object. | -| [refresh?](./kibana-plugin-core-server.savedobjectsupdateoptions.refresh.md) | MutatingOperationRefreshSetting | (Optional) The Elasticsearch Refresh setting for this operation | -| [retryOnConflict?](./kibana-plugin-core-server.savedobjectsupdateoptions.retryonconflict.md) | number | (Optional) The Elasticsearch retry_on_conflict setting for this operation. Defaults to 0 when version is provided, 3 otherwise. | -| [upsert?](./kibana-plugin-core-server.savedobjectsupdateoptions.upsert.md) | Attributes | (Optional) If specified, will be used to perform an upsert if the document doesn't exist | -| [version?](./kibana-plugin-core-server.savedobjectsupdateoptions.version.md) | string | (Optional) An opaque version number which changes on each successful write operation. Can be used for implementing optimistic concurrency control. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.references.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.references.md deleted file mode 100644 index 2cea0a7bdf0da..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.references.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) > [references](./kibana-plugin-core-server.savedobjectsupdateoptions.references.md) - -## SavedObjectsUpdateOptions.references property - -A reference to another saved object. - -Signature: - -```typescript -references?: SavedObjectReference[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.refresh.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.refresh.md deleted file mode 100644 index 16ad763df46d2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.refresh.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) > [refresh](./kibana-plugin-core-server.savedobjectsupdateoptions.refresh.md) - -## SavedObjectsUpdateOptions.refresh property - -The Elasticsearch Refresh setting for this operation - -Signature: - -```typescript -refresh?: MutatingOperationRefreshSetting; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.retryonconflict.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.retryonconflict.md deleted file mode 100644 index 2fc54d0fb41ff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.retryonconflict.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) > [retryOnConflict](./kibana-plugin-core-server.savedobjectsupdateoptions.retryonconflict.md) - -## SavedObjectsUpdateOptions.retryOnConflict property - -The Elasticsearch `retry_on_conflict` setting for this operation. Defaults to `0` when `version` is provided, `3` otherwise. - -Signature: - -```typescript -retryOnConflict?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.upsert.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.upsert.md deleted file mode 100644 index 53b769afd0938..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.upsert.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) > [upsert](./kibana-plugin-core-server.savedobjectsupdateoptions.upsert.md) - -## SavedObjectsUpdateOptions.upsert property - -If specified, will be used to perform an upsert if the document doesn't exist - -Signature: - -```typescript -upsert?: Attributes; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.version.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.version.md deleted file mode 100644 index b92e517509c5c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateoptions.version.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) > [version](./kibana-plugin-core-server.savedobjectsupdateoptions.version.md) - -## SavedObjectsUpdateOptions.version property - -An opaque version number which changes on each successful write operation. Can be used for implementing optimistic concurrency control. - -Signature: - -```typescript -version?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.attributes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.attributes.md deleted file mode 100644 index df80e7ec56803..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.attributes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateResponse](./kibana-plugin-core-server.savedobjectsupdateresponse.md) > [attributes](./kibana-plugin-core-server.savedobjectsupdateresponse.attributes.md) - -## SavedObjectsUpdateResponse.attributes property - -Signature: - -```typescript -attributes: Partial; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.md deleted file mode 100644 index 5c773d92c6364..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateResponse](./kibana-plugin-core-server.savedobjectsupdateresponse.md) - -## SavedObjectsUpdateResponse interface - - -Signature: - -```typescript -export interface SavedObjectsUpdateResponse extends Omit, 'attributes' | 'references'> -``` -Extends: Omit<SavedObject<T>, 'attributes' \| 'references'> - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attributes](./kibana-plugin-core-server.savedobjectsupdateresponse.attributes.md) | Partial<T> | | -| [references](./kibana-plugin-core-server.savedobjectsupdateresponse.references.md) | SavedObjectReference\[\] \| undefined | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.references.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.references.md deleted file mode 100644 index 262a4733e7beb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsupdateresponse.references.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUpdateResponse](./kibana-plugin-core-server.savedobjectsupdateresponse.md) > [references](./kibana-plugin-core-server.savedobjectsupdateresponse.references.md) - -## SavedObjectsUpdateResponse.references property - -Signature: - -```typescript -references: SavedObjectReference[] | undefined; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.createemptyfindresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.createemptyfindresponse.md deleted file mode 100644 index 23cbebf22aa21..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.createemptyfindresponse.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) > [createEmptyFindResponse](./kibana-plugin-core-server.savedobjectsutils.createemptyfindresponse.md) - -## SavedObjectsUtils.createEmptyFindResponse property - -Creates an empty response for a find operation. This is only intended to be used by saved objects client wrappers. - -Signature: - -```typescript -static createEmptyFindResponse: ({ page, perPage, }: SavedObjectsFindOptions) => SavedObjectsFindResponse; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.generateid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.generateid.md deleted file mode 100644 index 887f2fb5d9fe1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.generateid.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) > [generateId](./kibana-plugin-core-server.savedobjectsutils.generateid.md) - -## SavedObjectsUtils.generateId() method - -Generates a random ID for a saved objects. - -Signature: - -```typescript -static generateId(): string; -``` -Returns: - -string - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.getconvertedobjectid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.getconvertedobjectid.md deleted file mode 100644 index 502d9dcab8cf7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.getconvertedobjectid.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) > [getConvertedObjectId](./kibana-plugin-core-server.savedobjectsutils.getconvertedobjectid.md) - -## SavedObjectsUtils.getConvertedObjectId() method - -Uses a single-namespace object's "legacy ID" to determine what its new ID will be after it is converted to a multi-namespace type. - -Signature: - -```typescript -static getConvertedObjectId(namespace: string | undefined, type: string, id: string): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| namespace | string \| undefined | The namespace of the saved object before it is converted. | -| type | string | The type of the saved object before it is converted. | -| id | string | The ID of the saved object before it is converted. | - -Returns: - -string - -{string} The ID of the saved object after it is converted. - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.israndomid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.israndomid.md deleted file mode 100644 index 75db00c449654..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.israndomid.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) > [isRandomId](./kibana-plugin-core-server.savedobjectsutils.israndomid.md) - -## SavedObjectsUtils.isRandomId() method - -Validates that a saved object ID has been randomly generated. - -Signature: - -```typescript -static isRandomId(id: string | undefined): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string \| undefined | The ID of a saved object. Use uuid.validate once upgraded to v5.3+ | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.md deleted file mode 100644 index 9a8c5cf9889b2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) - -## SavedObjectsUtils class - - -Signature: - -```typescript -export declare class SavedObjectsUtils -``` - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [createEmptyFindResponse](./kibana-plugin-core-server.savedobjectsutils.createemptyfindresponse.md) | static | <T, A>({ page, perPage, }: SavedObjectsFindOptions) => SavedObjectsFindResponse<T, A> | Creates an empty response for a find operation. This is only intended to be used by saved objects client wrappers. | -| [namespaceIdToString](./kibana-plugin-core-server.savedobjectsutils.namespaceidtostring.md) | static | (namespace?: string \| undefined) => string | Converts a given saved object namespace ID to its string representation. All namespace IDs have an identical string representation, with the exception of the undefined namespace ID (which has a namespace string of 'default'). | -| [namespaceStringToId](./kibana-plugin-core-server.savedobjectsutils.namespacestringtoid.md) | static | (namespace: string) => string \| undefined | Converts a given saved object namespace string to its ID representation. All namespace strings have an identical ID representation, with the exception of the 'default' namespace string (which has a namespace ID of undefined). | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [generateId()](./kibana-plugin-core-server.savedobjectsutils.generateid.md) | static | Generates a random ID for a saved objects. | -| [getConvertedObjectId(namespace, type, id)](./kibana-plugin-core-server.savedobjectsutils.getconvertedobjectid.md) | static | Uses a single-namespace object's "legacy ID" to determine what its new ID will be after it is converted to a multi-namespace type. | -| [isRandomId(id)](./kibana-plugin-core-server.savedobjectsutils.israndomid.md) | static | Validates that a saved object ID has been randomly generated. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespaceidtostring.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespaceidtostring.md deleted file mode 100644 index 591505892e64f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespaceidtostring.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) > [namespaceIdToString](./kibana-plugin-core-server.savedobjectsutils.namespaceidtostring.md) - -## SavedObjectsUtils.namespaceIdToString property - -Converts a given saved object namespace ID to its string representation. All namespace IDs have an identical string representation, with the exception of the `undefined` namespace ID (which has a namespace string of `'default'`). - -Signature: - -```typescript -static namespaceIdToString: (namespace?: string | undefined) => string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespacestringtoid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespacestringtoid.md deleted file mode 100644 index e052fe493b5ea..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsutils.namespacestringtoid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsUtils](./kibana-plugin-core-server.savedobjectsutils.md) > [namespaceStringToId](./kibana-plugin-core-server.savedobjectsutils.namespacestringtoid.md) - -## SavedObjectsUtils.namespaceStringToId property - -Converts a given saved object namespace string to its ID representation. All namespace strings have an identical ID representation, with the exception of the `'default'` namespace string (which has a namespace ID of `undefined`). - -Signature: - -```typescript -static namespaceStringToId: (namespace: string) => string | undefined; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationmap.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationmap.md deleted file mode 100644 index 3716db5c3d9ac..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationmap.md +++ /dev/null @@ -1,37 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsValidationMap](./kibana-plugin-core-server.savedobjectsvalidationmap.md) - -## SavedObjectsValidationMap interface - -A map of [validation specs](./kibana-plugin-core-server.savedobjectsvalidationspec.md) to be used for a given type. The map's keys must be valid semver versions. - -Any time you change the schema of a [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md), you should add a new entry to this map for the Kibana version the change was introduced in. - -Signature: - -```typescript -export interface SavedObjectsValidationMap -``` - -## Example - - -```typescript -const validationMap: SavedObjectsValidationMap = { - '1.0.0': schema.object({ - foo: schema.string(), - }), - '2.0.0': schema.object({ - foo: schema.string({ - minLength: 2, - validate(value) { - if (!/^[a-z]+$/.test(value)) { - return 'must be lowercase letters only'; - } - } - }), - }), -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationspec.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationspec.md deleted file mode 100644 index 55938fb4b4b6c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsvalidationspec.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsValidationSpec](./kibana-plugin-core-server.savedobjectsvalidationspec.md) - -## SavedObjectsValidationSpec type - -Allows for validating properties using @kbn/config-schema validations. - -Signature: - -```typescript -export declare type SavedObjectsValidationSpec = ObjectType; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md deleted file mode 100644 index bd1c43529895c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeExcludeFromUpgradeFilterHook](./kibana-plugin-core-server.savedobjecttypeexcludefromupgradefilterhook.md) - -## SavedObjectTypeExcludeFromUpgradeFilterHook type - -If defined, allows a type to run a search query and return a query filter that may match any documents which may be excluded from the next migration upgrade process. Useful for cleaning up large numbers of old documents which are no longer needed and may slow the migration process. - -If this hook fails, the migration will proceed without these documents having been filtered out, so this should not be used as a guarantee that these documents have been deleted. - -Experimental and subject to change - -Signature: - -```typescript -export declare type SavedObjectTypeExcludeFromUpgradeFilterHook = (toolkit: { - readonlyEsClient: Pick; -}) => estypes.QueryDslQueryContainer | Promise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md deleted file mode 100644 index 7e4733f892955..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [getAllTypes](./kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md) - -## SavedObjectTypeRegistry.getAllTypes() method - -Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered, including the hidden ones. - -To only get the visible types (which is the most common use case), use `getVisibleTypes` instead. - -Signature: - -```typescript -getAllTypes(): SavedObjectsType[]; -``` -Returns: - -SavedObjectsType<any>\[\] - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getimportableandexportabletypes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getimportableandexportabletypes.md deleted file mode 100644 index a20360128406a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getimportableandexportabletypes.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [getImportableAndExportableTypes](./kibana-plugin-core-server.savedobjecttyperegistry.getimportableandexportabletypes.md) - -## SavedObjectTypeRegistry.getImportableAndExportableTypes() method - -Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered that are importable/exportable. - -Signature: - -```typescript -getImportableAndExportableTypes(): SavedObjectsType[]; -``` -Returns: - -SavedObjectsType<any>\[\] - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getindex.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getindex.md deleted file mode 100644 index 9da28c7f01278..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getindex.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [getIndex](./kibana-plugin-core-server.savedobjecttyperegistry.getindex.md) - -## SavedObjectTypeRegistry.getIndex() method - -Returns the `indexPattern` property for given type, or `undefined` if the type is not registered. - -Signature: - -```typescript -getIndex(type: string): string | undefined; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -string \| undefined - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.gettype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.gettype.md deleted file mode 100644 index d6fc255958c8c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.gettype.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [getType](./kibana-plugin-core-server.savedobjecttyperegistry.gettype.md) - -## SavedObjectTypeRegistry.getType() method - -Return the [type](./kibana-plugin-core-server.savedobjectstype.md) definition for given type name. - -Signature: - -```typescript -getType(type: string): SavedObjectsType | undefined; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -SavedObjectsType<any> \| undefined - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md deleted file mode 100644 index 9588e77e646fc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [getVisibleTypes](./kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md) - -## SavedObjectTypeRegistry.getVisibleTypes() method - -Returns all visible [types](./kibana-plugin-core-server.savedobjectstype.md). - -A visible type is a type that doesn't explicitly define `hidden=true` during registration. - -Signature: - -```typescript -getVisibleTypes(): SavedObjectsType[]; -``` -Returns: - -SavedObjectsType<any>\[\] - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md deleted file mode 100644 index 2d29e753218d7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [isHidden](./kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md) - -## SavedObjectTypeRegistry.isHidden() method - -Returns the `hidden` property for given type, or `false` if the type is not registered. - -Signature: - -```typescript -isHidden(type: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md deleted file mode 100644 index 8487af6a58911..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [isImportableAndExportable](./kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md) - -## SavedObjectTypeRegistry.isImportableAndExportable() method - -Returns the `management.importableAndExportable` property for given type, or `false` if the type is not registered or does not define a management section. - -Signature: - -```typescript -isImportableAndExportable(type: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md deleted file mode 100644 index d4ec6de2392dd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [isMultiNamespace](./kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md) - -## SavedObjectTypeRegistry.isMultiNamespace() method - -Returns whether the type is multi-namespace (shareable \*or\* isolated); resolves to `false` if the type is not registered - -Signature: - -```typescript -isMultiNamespace(type: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isnamespaceagnostic.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isnamespaceagnostic.md deleted file mode 100644 index d6eca4981f7ab..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isnamespaceagnostic.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [isNamespaceAgnostic](./kibana-plugin-core-server.savedobjecttyperegistry.isnamespaceagnostic.md) - -## SavedObjectTypeRegistry.isNamespaceAgnostic() method - -Returns whether the type is namespace-agnostic (global); resolves to `false` if the type is not registered - -Signature: - -```typescript -isNamespaceAgnostic(type: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md deleted file mode 100644 index 0b67992e53080..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [isShareable](./kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md) - -## SavedObjectTypeRegistry.isShareable() method - -Returns whether the type is multi-namespace (shareable); resolves to `false` if the type is not registered - -Signature: - -```typescript -isShareable(type: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.issinglenamespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.issinglenamespace.md deleted file mode 100644 index d1db00d0c8162..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.issinglenamespace.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [isSingleNamespace](./kibana-plugin-core-server.savedobjecttyperegistry.issinglenamespace.md) - -## SavedObjectTypeRegistry.isSingleNamespace() method - -Returns whether the type is single-namespace (isolated); resolves to `true` if the type is not registered - -Signature: - -```typescript -isSingleNamespace(type: string): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | string | | - -Returns: - -boolean - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md deleted file mode 100644 index 0f2de8c8ef9b3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) - -## SavedObjectTypeRegistry class - -Registry holding information about all the registered [saved object types](./kibana-plugin-core-server.savedobjectstype.md). - -Signature: - -```typescript -export declare class SavedObjectTypeRegistry -``` - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [getAllTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md) | | Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered, including the hidden ones.To only get the visible types (which is the most common use case), use getVisibleTypes instead. | -| [getImportableAndExportableTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getimportableandexportabletypes.md) | | Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered that are importable/exportable. | -| [getIndex(type)](./kibana-plugin-core-server.savedobjecttyperegistry.getindex.md) | | Returns the indexPattern property for given type, or undefined if the type is not registered. | -| [getType(type)](./kibana-plugin-core-server.savedobjecttyperegistry.gettype.md) | | Return the [type](./kibana-plugin-core-server.savedobjectstype.md) definition for given type name. | -| [getVisibleTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md) | | Returns all visible [types](./kibana-plugin-core-server.savedobjectstype.md).A visible type is a type that doesn't explicitly define hidden=true during registration. | -| [isHidden(type)](./kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md) | | Returns the hidden property for given type, or false if the type is not registered. | -| [isImportableAndExportable(type)](./kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md) | | Returns the management.importableAndExportable property for given type, or false if the type is not registered or does not define a management section. | -| [isMultiNamespace(type)](./kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md) | | Returns whether the type is multi-namespace (shareable \*or\* isolated); resolves to false if the type is not registered | -| [isNamespaceAgnostic(type)](./kibana-plugin-core-server.savedobjecttyperegistry.isnamespaceagnostic.md) | | Returns whether the type is namespace-agnostic (global); resolves to false if the type is not registered | -| [isShareable(type)](./kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md) | | Returns whether the type is multi-namespace (shareable); resolves to false if the type is not registered | -| [isSingleNamespace(type)](./kibana-plugin-core-server.savedobjecttyperegistry.issinglenamespace.md) | | Returns whether the type is single-namespace (isolated); resolves to true if the type is not registered | -| [registerType(type)](./kibana-plugin-core-server.savedobjecttyperegistry.registertype.md) | | Register a [type](./kibana-plugin-core-server.savedobjectstype.md) inside the registry. A type can only be registered once. subsequent calls with the same type name will throw an error. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.registertype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.registertype.md deleted file mode 100644 index c0442e2aaa4ce..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.registertype.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [registerType](./kibana-plugin-core-server.savedobjecttyperegistry.registertype.md) - -## SavedObjectTypeRegistry.registerType() method - -Register a [type](./kibana-plugin-core-server.savedobjectstype.md) inside the registry. A type can only be registered once. subsequent calls with the same type name will throw an error. - -Signature: - -```typescript -registerType(type: SavedObjectsType): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | SavedObjectsType | | - -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectunsanitizeddoc.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectunsanitizeddoc.md deleted file mode 100644 index 8e2395ee6310d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectunsanitizeddoc.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectUnsanitizedDoc](./kibana-plugin-core-server.savedobjectunsanitizeddoc.md) - -## SavedObjectUnsanitizedDoc type - -Describes Saved Object documents from Kibana < 7.0.0 which don't have a `references` root property defined. This type should only be used in migrations. - -Signature: - -```typescript -export declare type SavedObjectUnsanitizedDoc = SavedObjectDoc & Partial; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.scopeablerequest.md b/docs/development/core/server/kibana-plugin-core-server.scopeablerequest.md deleted file mode 100644 index f8f05823ae81f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.scopeablerequest.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ScopeableRequest](./kibana-plugin-core-server.scopeablerequest.md) - -## ScopeableRequest type - -A user credentials container. It accommodates the necessary auth credentials to impersonate the current user. - -See [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md). - -Signature: - -```typescript -export declare type ScopeableRequest = KibanaRequest | FakeRequest; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse._scroll_id.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse._scroll_id.md deleted file mode 100644 index a9dd0e76475fd..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse._scroll_id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [\_scroll\_id](./kibana-plugin-core-server.searchresponse._scroll_id.md) - -## SearchResponse.\_scroll\_id property - -Signature: - -```typescript -_scroll_id?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse._shards.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse._shards.md deleted file mode 100644 index e090ad20e8bc8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse._shards.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [\_shards](./kibana-plugin-core-server.searchresponse._shards.md) - -## SearchResponse.\_shards property - -Signature: - -```typescript -_shards: ShardsResponse; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.aggregations.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.aggregations.md deleted file mode 100644 index 686e6f2aa05e9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.aggregations.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [aggregations](./kibana-plugin-core-server.searchresponse.aggregations.md) - -## SearchResponse.aggregations property - -Signature: - -```typescript -aggregations?: any; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md deleted file mode 100644 index 599c4e3ad6319..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [hits](./kibana-plugin-core-server.searchresponse.hits.md) - -## SearchResponse.hits property - -Signature: - -```typescript -hits: { - total: number; - max_score: number; - hits: Array<{ - _index: string; - _type: string; - _id: string; - _score: number; - _source: T; - _version?: number; - _explanation?: Explanation; - fields?: any; - highlight?: any; - inner_hits?: any; - matched_queries?: string[]; - sort?: unknown[]; - }>; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.md deleted file mode 100644 index 7deca96e4054c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) - -## SearchResponse interface - - -Signature: - -```typescript -export interface SearchResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [\_scroll\_id?](./kibana-plugin-core-server.searchresponse._scroll_id.md) | string | (Optional) | -| [\_shards](./kibana-plugin-core-server.searchresponse._shards.md) | ShardsResponse | | -| [aggregations?](./kibana-plugin-core-server.searchresponse.aggregations.md) | any | (Optional) | -| [hits](./kibana-plugin-core-server.searchresponse.hits.md) | { total: number; max\_score: number; hits: Array<{ \_index: string; \_type: string; \_id: string; \_score: number; \_source: T; \_version?: number; \_explanation?: Explanation; fields?: any; highlight?: any; inner\_hits?: any; matched\_queries?: string\[\]; sort?: unknown\[\]; }>; } | | -| [pit\_id?](./kibana-plugin-core-server.searchresponse.pit_id.md) | string | (Optional) | -| [timed\_out](./kibana-plugin-core-server.searchresponse.timed_out.md) | boolean | | -| [took](./kibana-plugin-core-server.searchresponse.took.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.pit_id.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.pit_id.md deleted file mode 100644 index f214bc0538045..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.pit_id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [pit\_id](./kibana-plugin-core-server.searchresponse.pit_id.md) - -## SearchResponse.pit\_id property - -Signature: - -```typescript -pit_id?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.timed_out.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.timed_out.md deleted file mode 100644 index a3488117cd874..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.timed_out.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [timed\_out](./kibana-plugin-core-server.searchresponse.timed_out.md) - -## SearchResponse.timed\_out property - -Signature: - -```typescript -timed_out: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.took.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.took.md deleted file mode 100644 index 8c9c0b0f7c420..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.took.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [took](./kibana-plugin-core-server.searchresponse.took.md) - -## SearchResponse.took property - -Signature: - -```typescript -took: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md deleted file mode 100644 index fa369aa0bdfbb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [detail](./kibana-plugin-core-server.servicestatus.detail.md) - -## ServiceStatus.detail property - -A more detailed description of the service status. - -Signature: - -```typescript -detail?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md deleted file mode 100644 index 5ef8c1251a602..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [documentationUrl](./kibana-plugin-core-server.servicestatus.documentationurl.md) - -## ServiceStatus.documentationUrl property - -A URL to open in a new tab about how to resolve or troubleshoot the problem. - -Signature: - -```typescript -documentationUrl?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md deleted file mode 100644 index 551c10c9bff82..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [level](./kibana-plugin-core-server.servicestatus.level.md) - -## ServiceStatus.level property - -The current availability level of the service. - -Signature: - -```typescript -level: ServiceStatusLevel; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.md deleted file mode 100644 index 5c04cb33a7529..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatus.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) - -## ServiceStatus interface - -The current status of a service at a point in time. - -Signature: - -```typescript -export interface ServiceStatus | unknown = unknown> -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [detail?](./kibana-plugin-core-server.servicestatus.detail.md) | string | (Optional) A more detailed description of the service status. | -| [documentationUrl?](./kibana-plugin-core-server.servicestatus.documentationurl.md) | string | (Optional) A URL to open in a new tab about how to resolve or troubleshoot the problem. | -| [level](./kibana-plugin-core-server.servicestatus.level.md) | ServiceStatusLevel | The current availability level of the service. | -| [meta?](./kibana-plugin-core-server.servicestatus.meta.md) | Meta | (Optional) Any JSON-serializable data to be included in the HTTP API response. Useful for providing more fine-grained, machine-readable information about the service status. May include status information for underlying features. | -| [summary](./kibana-plugin-core-server.servicestatus.summary.md) | string | A high-level summary of the service status. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md deleted file mode 100644 index a48994daa5a4e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [meta](./kibana-plugin-core-server.servicestatus.meta.md) - -## ServiceStatus.meta property - -Any JSON-serializable data to be included in the HTTP API response. Useful for providing more fine-grained, machine-readable information about the service status. May include status information for underlying features. - -Signature: - -```typescript -meta?: Meta; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md deleted file mode 100644 index db90afd6f74a6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [summary](./kibana-plugin-core-server.servicestatus.summary.md) - -## ServiceStatus.summary property - -A high-level summary of the service status. - -Signature: - -```typescript -summary: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md b/docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md deleted file mode 100644 index 5f995ff5e13e3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatusLevel](./kibana-plugin-core-server.servicestatuslevel.md) - -## ServiceStatusLevel type - -A convenience type that represents the union of each value in [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md). - -Signature: - -```typescript -export declare type ServiceStatusLevel = typeof ServiceStatusLevels[keyof typeof ServiceStatusLevels]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md b/docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md deleted file mode 100644 index e57dc192cd572..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md +++ /dev/null @@ -1,41 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md) - -## ServiceStatusLevels variable - -The current "level" of availability of a service. - -Signature: - -```typescript -ServiceStatusLevels: Readonly<{ - available: Readonly<{ - toString: () => "available"; - valueOf: () => 0; - toJSON: () => "available"; - }>; - degraded: Readonly<{ - toString: () => "degraded"; - valueOf: () => 1; - toJSON: () => "degraded"; - }>; - unavailable: Readonly<{ - toString: () => "unavailable"; - valueOf: () => 2; - toJSON: () => "unavailable"; - }>; - critical: Readonly<{ - toString: () => "critical"; - valueOf: () => 3; - toJSON: () => "critical"; - }>; -}> -``` - -## Remarks - -The values implement `valueOf` to allow for easy comparisons between status levels with <, >, etc. Higher values represent higher severities. Note that the default `Array.prototype.sort` implementation does not correctly sort these values. - -A snapshot serializer is available in `src/core/server/test_utils` to ease testing of these values with Jest. - diff --git a/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.isvalid.md b/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.isvalid.md deleted file mode 100644 index c9132b9692318..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.isvalid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionCookieValidationResult](./kibana-plugin-core-server.sessioncookievalidationresult.md) > [isValid](./kibana-plugin-core-server.sessioncookievalidationresult.isvalid.md) - -## SessionCookieValidationResult.isValid property - -Whether the cookie is valid or not. - -Signature: - -```typescript -isValid: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.md b/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.md deleted file mode 100644 index 6c1a5e7af78a7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionCookieValidationResult](./kibana-plugin-core-server.sessioncookievalidationresult.md) - -## SessionCookieValidationResult interface - -Return type from a function to validate cookie contents. - -Signature: - -```typescript -export interface SessionCookieValidationResult -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [isValid](./kibana-plugin-core-server.sessioncookievalidationresult.isvalid.md) | boolean | Whether the cookie is valid or not. | -| [path?](./kibana-plugin-core-server.sessioncookievalidationresult.path.md) | string | (Optional) The "Path" attribute of the cookie; if the cookie is invalid, this is used to clear it. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.path.md b/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.path.md deleted file mode 100644 index 59b6cb7ca6e6b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessioncookievalidationresult.path.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionCookieValidationResult](./kibana-plugin-core-server.sessioncookievalidationresult.md) > [path](./kibana-plugin-core-server.sessioncookievalidationresult.path.md) - -## SessionCookieValidationResult.path property - -The "Path" attribute of the cookie; if the cookie is invalid, this is used to clear it. - -Signature: - -```typescript -path?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.clear.md b/docs/development/core/server/kibana-plugin-core-server.sessionstorage.clear.md deleted file mode 100644 index ac34c9b17be8d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.clear.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorage](./kibana-plugin-core-server.sessionstorage.md) > [clear](./kibana-plugin-core-server.sessionstorage.clear.md) - -## SessionStorage.clear() method - -Clears current session. - -Signature: - -```typescript -clear(): void; -``` -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.get.md b/docs/development/core/server/kibana-plugin-core-server.sessionstorage.get.md deleted file mode 100644 index 9e867b9e0fcc8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.get.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorage](./kibana-plugin-core-server.sessionstorage.md) > [get](./kibana-plugin-core-server.sessionstorage.get.md) - -## SessionStorage.get() method - -Retrieves session value from the session storage. - -Signature: - -```typescript -get(): Promise; -``` -Returns: - -Promise<T \| null> - diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.md b/docs/development/core/server/kibana-plugin-core-server.sessionstorage.md deleted file mode 100644 index e6ddef20c22a4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorage](./kibana-plugin-core-server.sessionstorage.md) - -## SessionStorage interface - -Provides an interface to store and retrieve data across requests. - -Signature: - -```typescript -export interface SessionStorage -``` - -## Methods - -| Method | Description | -| --- | --- | -| [clear()](./kibana-plugin-core-server.sessionstorage.clear.md) | Clears current session. | -| [get()](./kibana-plugin-core-server.sessionstorage.get.md) | Retrieves session value from the session storage. | -| [set(sessionValue)](./kibana-plugin-core-server.sessionstorage.set.md) | Puts current session value into the session storage. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.set.md b/docs/development/core/server/kibana-plugin-core-server.sessionstorage.set.md deleted file mode 100644 index a17aadf8fb984..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstorage.set.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorage](./kibana-plugin-core-server.sessionstorage.md) > [set](./kibana-plugin-core-server.sessionstorage.set.md) - -## SessionStorage.set() method - -Puts current session value into the session storage. - -Signature: - -```typescript -set(sessionValue: T): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| sessionValue | T | value to put | - -Returns: - -void - diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.encryptionkey.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.encryptionkey.md deleted file mode 100644 index 377ce19b31601..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.encryptionkey.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) > [encryptionKey](./kibana-plugin-core-server.sessionstoragecookieoptions.encryptionkey.md) - -## SessionStorageCookieOptions.encryptionKey property - -A key used to encrypt a cookie's value. Should be at least 32 characters long. - -Signature: - -```typescript -encryptionKey: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.issecure.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.issecure.md deleted file mode 100644 index fc401fa99b83c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.issecure.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) > [isSecure](./kibana-plugin-core-server.sessionstoragecookieoptions.issecure.md) - -## SessionStorageCookieOptions.isSecure property - -Flag indicating whether the cookie should be sent only via a secure connection. - -Signature: - -```typescript -isSecure: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.md deleted file mode 100644 index 425daf32f5cb3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) - -## SessionStorageCookieOptions interface - -Configuration used to create HTTP session storage based on top of cookie mechanism. - -Signature: - -```typescript -export interface SessionStorageCookieOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [encryptionKey](./kibana-plugin-core-server.sessionstoragecookieoptions.encryptionkey.md) | string | A key used to encrypt a cookie's value. Should be at least 32 characters long. | -| [isSecure](./kibana-plugin-core-server.sessionstoragecookieoptions.issecure.md) | boolean | Flag indicating whether the cookie should be sent only via a secure connection. | -| [name](./kibana-plugin-core-server.sessionstoragecookieoptions.name.md) | string | Name of the session cookie. | -| [sameSite?](./kibana-plugin-core-server.sessionstoragecookieoptions.samesite.md) | 'Strict' \| 'Lax' \| 'None' | (Optional) Defines SameSite attribute of the Set-Cookie Header. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite | -| [validate](./kibana-plugin-core-server.sessionstoragecookieoptions.validate.md) | (sessionValue: T \| T\[\]) => SessionCookieValidationResult | Function called to validate a cookie's decrypted value. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.name.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.name.md deleted file mode 100644 index 47c1926415221..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) > [name](./kibana-plugin-core-server.sessionstoragecookieoptions.name.md) - -## SessionStorageCookieOptions.name property - -Name of the session cookie. - -Signature: - -```typescript -name: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.samesite.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.samesite.md deleted file mode 100644 index a2bf79a52d521..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.samesite.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) > [sameSite](./kibana-plugin-core-server.sessionstoragecookieoptions.samesite.md) - -## SessionStorageCookieOptions.sameSite property - -Defines SameSite attribute of the Set-Cookie Header. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite - -Signature: - -```typescript -sameSite?: 'Strict' | 'Lax' | 'None'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.validate.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.validate.md deleted file mode 100644 index 2626c94f6afb1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragecookieoptions.validate.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) > [validate](./kibana-plugin-core-server.sessionstoragecookieoptions.validate.md) - -## SessionStorageCookieOptions.validate property - -Function called to validate a cookie's decrypted value. - -Signature: - -```typescript -validate: (sessionValue: T | T[]) => SessionCookieValidationResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.asscoped.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.asscoped.md deleted file mode 100644 index be3c997a0aa71..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.asscoped.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageFactory](./kibana-plugin-core-server.sessionstoragefactory.md) > [asScoped](./kibana-plugin-core-server.sessionstoragefactory.asscoped.md) - -## SessionStorageFactory.asScoped property - -Signature: - -```typescript -asScoped: (request: KibanaRequest) => SessionStorage; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.md b/docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.md deleted file mode 100644 index 7bdea28beeda1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sessionstoragefactory.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SessionStorageFactory](./kibana-plugin-core-server.sessionstoragefactory.md) - -## SessionStorageFactory interface - -SessionStorage factory to bind one to an incoming request - -Signature: - -```typescript -export interface SessionStorageFactory -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [asScoped](./kibana-plugin-core-server.sessionstoragefactory.asscoped.md) | (request: KibanaRequest) => SessionStorage<T> | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.failed.md b/docs/development/core/server/kibana-plugin-core-server.shardsinfo.failed.md deleted file mode 100644 index a47fc1263be41..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.failed.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsInfo](./kibana-plugin-core-server.shardsinfo.md) > [failed](./kibana-plugin-core-server.shardsinfo.failed.md) - -## ShardsInfo.failed property - -Signature: - -```typescript -failed: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.md b/docs/development/core/server/kibana-plugin-core-server.shardsinfo.md deleted file mode 100644 index 6c006c020d3fb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsInfo](./kibana-plugin-core-server.shardsinfo.md) - -## ShardsInfo interface - - -Signature: - -```typescript -export interface ShardsInfo -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [failed](./kibana-plugin-core-server.shardsinfo.failed.md) | number | | -| [skipped](./kibana-plugin-core-server.shardsinfo.skipped.md) | number | | -| [successful](./kibana-plugin-core-server.shardsinfo.successful.md) | number | | -| [total](./kibana-plugin-core-server.shardsinfo.total.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.skipped.md b/docs/development/core/server/kibana-plugin-core-server.shardsinfo.skipped.md deleted file mode 100644 index 0c87831edd6ca..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.skipped.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsInfo](./kibana-plugin-core-server.shardsinfo.md) > [skipped](./kibana-plugin-core-server.shardsinfo.skipped.md) - -## ShardsInfo.skipped property - -Signature: - -```typescript -skipped: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.successful.md b/docs/development/core/server/kibana-plugin-core-server.shardsinfo.successful.md deleted file mode 100644 index c927adb39932a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.successful.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsInfo](./kibana-plugin-core-server.shardsinfo.md) > [successful](./kibana-plugin-core-server.shardsinfo.successful.md) - -## ShardsInfo.successful property - -Signature: - -```typescript -successful: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.total.md b/docs/development/core/server/kibana-plugin-core-server.shardsinfo.total.md deleted file mode 100644 index 820c8a70fd222..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsinfo.total.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsInfo](./kibana-plugin-core-server.shardsinfo.md) > [total](./kibana-plugin-core-server.shardsinfo.total.md) - -## ShardsInfo.total property - -Signature: - -```typescript -total: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.failed.md b/docs/development/core/server/kibana-plugin-core-server.shardsresponse.failed.md deleted file mode 100644 index 7f7a173af2e58..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.failed.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsResponse](./kibana-plugin-core-server.shardsresponse.md) > [failed](./kibana-plugin-core-server.shardsresponse.failed.md) - -## ShardsResponse.failed property - -Signature: - -```typescript -failed: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.md b/docs/development/core/server/kibana-plugin-core-server.shardsresponse.md deleted file mode 100644 index 65e113f05212f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsResponse](./kibana-plugin-core-server.shardsresponse.md) - -## ShardsResponse interface - - -Signature: - -```typescript -export interface ShardsResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [failed](./kibana-plugin-core-server.shardsresponse.failed.md) | number | | -| [skipped](./kibana-plugin-core-server.shardsresponse.skipped.md) | number | | -| [successful](./kibana-plugin-core-server.shardsresponse.successful.md) | number | | -| [total](./kibana-plugin-core-server.shardsresponse.total.md) | number | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.skipped.md b/docs/development/core/server/kibana-plugin-core-server.shardsresponse.skipped.md deleted file mode 100644 index b01c3501fe022..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.skipped.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsResponse](./kibana-plugin-core-server.shardsresponse.md) > [skipped](./kibana-plugin-core-server.shardsresponse.skipped.md) - -## ShardsResponse.skipped property - -Signature: - -```typescript -skipped: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.successful.md b/docs/development/core/server/kibana-plugin-core-server.shardsresponse.successful.md deleted file mode 100644 index 23c6ff0519ed7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.successful.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsResponse](./kibana-plugin-core-server.shardsresponse.md) > [successful](./kibana-plugin-core-server.shardsresponse.successful.md) - -## ShardsResponse.successful property - -Signature: - -```typescript -successful: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.total.md b/docs/development/core/server/kibana-plugin-core-server.shardsresponse.total.md deleted file mode 100644 index e669f6216a10f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.shardsresponse.total.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ShardsResponse](./kibana-plugin-core-server.shardsresponse.md) > [total](./kibana-plugin-core-server.shardsresponse.total.md) - -## ShardsResponse.total property - -Signature: - -```typescript -total: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md b/docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md deleted file mode 100644 index 477cd5a651a56..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md +++ /dev/null @@ -1,16 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SharedGlobalConfig](./kibana-plugin-core-server.sharedglobalconfig.md) - -## SharedGlobalConfig type - - -Signature: - -```typescript -export declare type SharedGlobalConfig = RecursiveReadonly<{ - elasticsearch: Pick; - path: Pick; - savedObjects: Pick; -}>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.startservicesaccessor.md b/docs/development/core/server/kibana-plugin-core-server.startservicesaccessor.md deleted file mode 100644 index 7f90060d3ffa8..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.startservicesaccessor.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StartServicesAccessor](./kibana-plugin-core-server.startservicesaccessor.md) - -## StartServicesAccessor type - -Allows plugins to get access to APIs available in start inside async handlers. Promise will not resolve until Core and plugin dependencies have completed `start`. This should only be used inside handlers registered during `setup` that will only be executed after `start` lifecycle. - -Signature: - -```typescript -export declare type StartServicesAccessor = () => Promise<[CoreStart, TPluginsStart, TStart]>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md deleted file mode 100644 index 6662e68b44d36..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) > [core$](./kibana-plugin-core-server.statusservicesetup.core_.md) - -## StatusServiceSetup.core$ property - -Current status for all Core services. - -Signature: - -```typescript -core$: Observable; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.dependencies_.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.dependencies_.md deleted file mode 100644 index 7475f0e3a4c1c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.dependencies_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) > [dependencies$](./kibana-plugin-core-server.statusservicesetup.dependencies_.md) - -## StatusServiceSetup.dependencies$ property - -Current status for all plugins this plugin depends on. Each key of the `Record` is a plugin id. - -Signature: - -```typescript -dependencies$: Observable>; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.derivedstatus_.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.derivedstatus_.md deleted file mode 100644 index 96784359457fb..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.derivedstatus_.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) > [derivedStatus$](./kibana-plugin-core-server.statusservicesetup.derivedstatus_.md) - -## StatusServiceSetup.derivedStatus$ property - -The status of this plugin as derived from its dependencies. - -Signature: - -```typescript -derivedStatus$: Observable; -``` - -## Remarks - -By default, plugins inherit this derived status from their dependencies. Calling overrides this default status. - -This may emit multiple times for a single status change event as propagates through the dependency tree - diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.isstatuspageanonymous.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.isstatuspageanonymous.md deleted file mode 100644 index c417aaa2cef48..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.isstatuspageanonymous.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) > [isStatusPageAnonymous](./kibana-plugin-core-server.statusservicesetup.isstatuspageanonymous.md) - -## StatusServiceSetup.isStatusPageAnonymous property - -Whether or not the status HTTP APIs are available to unauthenticated users when an authentication provider is present. - -Signature: - -```typescript -isStatusPageAnonymous: () => boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md deleted file mode 100644 index 5409772c369c2..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md +++ /dev/null @@ -1,83 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) - -## StatusServiceSetup interface - -API for accessing status of Core and this plugin's dependencies as well as for customizing this plugin's status. - -Signature: - -```typescript -export interface StatusServiceSetup -``` - -## Remarks - -By default, a plugin inherits it's current status from the most severe status level of any Core services and any plugins that it depends on. This default status is available on the API. - -Plugins may customize their status calculation by calling the API with an Observable. Within this Observable, a plugin may choose to only depend on the status of some of its dependencies, to ignore severe status levels of particular Core services they are not concerned with, or to make its status dependent on other external services. - -## Example 1 - -Customize a plugin's status to only depend on the status of SavedObjects: - -```ts -core.status.set( - core.status.core$.pipe( -. map((coreStatus) => { - return coreStatus.savedObjects; - }) ; - ); -); -``` - -## Example 2 - -Customize a plugin's status to include an external service: - -```ts -const externalStatus$ = interval(1000).pipe( - switchMap(async () => { - const resp = await fetch(`https://myexternaldep.com/_healthz`); - const body = await resp.json(); - if (body.ok) { - return of({ level: ServiceStatusLevels.available, summary: 'External Service is up'}); - } else { - return of({ level: ServiceStatusLevels.available, summary: 'External Service is unavailable'}); - } - }), - catchError((error) => { - of({ level: ServiceStatusLevels.unavailable, summary: `External Service is down`, meta: { error }}) - }) -); - -core.status.set( - combineLatest([core.status.derivedStatus$, externalStatus$]).pipe( - map(([derivedStatus, externalStatus]) => { - if (externalStatus.level > derivedStatus) { - return externalStatus; - } else { - return derivedStatus; - } - }) - ) -); -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [core$](./kibana-plugin-core-server.statusservicesetup.core_.md) | Observable<CoreStatus> | Current status for all Core services. | -| [dependencies$](./kibana-plugin-core-server.statusservicesetup.dependencies_.md) | Observable<Record<string, ServiceStatus>> | Current status for all plugins this plugin depends on. Each key of the Record is a plugin id. | -| [derivedStatus$](./kibana-plugin-core-server.statusservicesetup.derivedstatus_.md) | Observable<ServiceStatus> | The status of this plugin as derived from its dependencies. | -| [isStatusPageAnonymous](./kibana-plugin-core-server.statusservicesetup.isstatuspageanonymous.md) | () => boolean | Whether or not the status HTTP APIs are available to unauthenticated users when an authentication provider is present. | -| [overall$](./kibana-plugin-core-server.statusservicesetup.overall_.md) | Observable<ServiceStatus> | Overall system status for all of Kibana. | - -## Methods - -| Method | Description | -| --- | --- | -| [set(status$)](./kibana-plugin-core-server.statusservicesetup.set.md) | Allows a plugin to specify a custom status dependent on its own criteria. Completely overrides the default inherited status. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.overall_.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.overall_.md deleted file mode 100644 index bb7c31311d520..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.overall_.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) > [overall$](./kibana-plugin-core-server.statusservicesetup.overall_.md) - -## StatusServiceSetup.overall$ property - -Overall system status for all of Kibana. - -Signature: - -```typescript -overall$: Observable; -``` - -## Remarks - -The level of the overall status will reflect the most severe status of any core service or plugin. - -Exposed only for reporting purposes to outside systems and should not be used by plugins. Instead, plugins should only depend on the statuses of [Core](./kibana-plugin-core-server.statusservicesetup.core_.md) or their dependencies. - diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.set.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.set.md deleted file mode 100644 index b60319e19529a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.set.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) > [set](./kibana-plugin-core-server.statusservicesetup.set.md) - -## StatusServiceSetup.set() method - -Allows a plugin to specify a custom status dependent on its own criteria. Completely overrides the default inherited status. - -Signature: - -```typescript -set(status$: Observable): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| status$ | Observable<ServiceStatus> | | - -Returns: - -void - -## Remarks - -The first emission from this Observable should occur within 30s, else this plugin's status will fallback to `unavailable` until the first emission. - -See the [StatusServiceSetup.derivedStatus$](./kibana-plugin-core-server.statusservicesetup.derivedstatus_.md) API for leveraging the default status calculation that is provided by Core. - diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.category.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.category.md deleted file mode 100644 index 224df5f073eb7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.category.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [category](./kibana-plugin-core-server.uisettingsparams.category.md) - -## UiSettingsParams.category property - -used to group the configured setting in the UI - -Signature: - -```typescript -category?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.deprecation.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.deprecation.md deleted file mode 100644 index 0be426d609606..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.deprecation.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [deprecation](./kibana-plugin-core-server.uisettingsparams.deprecation.md) - -## UiSettingsParams.deprecation property - -optional deprecation information. Used to generate a deprecation warning. - -Signature: - -```typescript -deprecation?: DeprecationSettings; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.description.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.description.md deleted file mode 100644 index 5ba8244e6cfb4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.description.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [description](./kibana-plugin-core-server.uisettingsparams.description.md) - -## UiSettingsParams.description property - -description provided to a user in UI - -Signature: - -```typescript -description?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md deleted file mode 100644 index 531a0e75c97b0..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) - -## UiSettingsParams interface - -UiSettings parameters defined by the plugins. - -Signature: - -```typescript -export interface UiSettingsParams -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [category?](./kibana-plugin-core-server.uisettingsparams.category.md) | string\[\] | (Optional) used to group the configured setting in the UI | -| [deprecation?](./kibana-plugin-core-server.uisettingsparams.deprecation.md) | DeprecationSettings | (Optional) optional deprecation information. Used to generate a deprecation warning. | -| [description?](./kibana-plugin-core-server.uisettingsparams.description.md) | string | (Optional) description provided to a user in UI | -| [metric?](./kibana-plugin-core-server.uisettingsparams.metric.md) | { type: UiCounterMetricType; name: string; } | (Optional) Metric to track once this property changes | -| [name?](./kibana-plugin-core-server.uisettingsparams.name.md) | string | (Optional) title in the UI | -| [optionLabels?](./kibana-plugin-core-server.uisettingsparams.optionlabels.md) | Record<string, string> | (Optional) text labels for 'select' type UI element | -| [options?](./kibana-plugin-core-server.uisettingsparams.options.md) | string\[\] | (Optional) array of permitted values for this setting | -| [order?](./kibana-plugin-core-server.uisettingsparams.order.md) | number | (Optional) index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI. settings without order defined will be displayed last and ordered by name | -| [readonly?](./kibana-plugin-core-server.uisettingsparams.readonly.md) | boolean | (Optional) a flag indicating that value cannot be changed | -| [requiresPageReload?](./kibana-plugin-core-server.uisettingsparams.requirespagereload.md) | boolean | (Optional) a flag indicating whether new value applying requires page reloading | -| [schema](./kibana-plugin-core-server.uisettingsparams.schema.md) | Type<T> | | -| [sensitive?](./kibana-plugin-core-server.uisettingsparams.sensitive.md) | boolean | (Optional) a flag indicating that value might contain user sensitive data. used by telemetry to mask the value of the setting when sent. | -| [type?](./kibana-plugin-core-server.uisettingsparams.type.md) | UiSettingsType | (Optional) defines a type of UI element [UiSettingsType](./kibana-plugin-core-server.uisettingstype.md) | -| [value?](./kibana-plugin-core-server.uisettingsparams.value.md) | T | (Optional) default value to fall back to if a user doesn't provide any | - diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.metric.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.metric.md deleted file mode 100644 index 8491de9a8f5dc..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.metric.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [metric](./kibana-plugin-core-server.uisettingsparams.metric.md) - -## UiSettingsParams.metric property - -> Warning: This API is now obsolete. -> -> Temporary measure until https://github.com/elastic/kibana/issues/83084 is in place -> - -Metric to track once this property changes - -Signature: - -```typescript -metric?: { - type: UiCounterMetricType; - name: string; - }; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.name.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.name.md deleted file mode 100644 index 248498c232c9f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [name](./kibana-plugin-core-server.uisettingsparams.name.md) - -## UiSettingsParams.name property - -title in the UI - -Signature: - -```typescript -name?: string; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.optionlabels.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.optionlabels.md deleted file mode 100644 index 97a66e71fb846..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.optionlabels.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [optionLabels](./kibana-plugin-core-server.uisettingsparams.optionlabels.md) - -## UiSettingsParams.optionLabels property - -text labels for 'select' type UI element - -Signature: - -```typescript -optionLabels?: Record; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.options.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.options.md deleted file mode 100644 index 94eff9f0a0146..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.options.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [options](./kibana-plugin-core-server.uisettingsparams.options.md) - -## UiSettingsParams.options property - -array of permitted values for this setting - -Signature: - -```typescript -options?: string[]; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.order.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.order.md deleted file mode 100644 index 140bdad5d786b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.order.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [order](./kibana-plugin-core-server.uisettingsparams.order.md) - -## UiSettingsParams.order property - -index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI. - - settings without order defined will be displayed last and ordered by name - -Signature: - -```typescript -order?: number; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.readonly.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.readonly.md deleted file mode 100644 index b9342eff345c9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.readonly.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [readonly](./kibana-plugin-core-server.uisettingsparams.readonly.md) - -## UiSettingsParams.readonly property - -a flag indicating that value cannot be changed - -Signature: - -```typescript -readonly?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.requirespagereload.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.requirespagereload.md deleted file mode 100644 index 46bfa291857d4..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.requirespagereload.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [requiresPageReload](./kibana-plugin-core-server.uisettingsparams.requirespagereload.md) - -## UiSettingsParams.requiresPageReload property - -a flag indicating whether new value applying requires page reloading - -Signature: - -```typescript -requiresPageReload?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.schema.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.schema.md deleted file mode 100644 index f181fbd309b7f..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.schema.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [schema](./kibana-plugin-core-server.uisettingsparams.schema.md) - -## UiSettingsParams.schema property - -Signature: - -```typescript -schema: Type; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.sensitive.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.sensitive.md deleted file mode 100644 index f2c7de19dde1a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.sensitive.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [sensitive](./kibana-plugin-core-server.uisettingsparams.sensitive.md) - -## UiSettingsParams.sensitive property - -a flag indicating that value might contain user sensitive data. used by telemetry to mask the value of the setting when sent. - -Signature: - -```typescript -sensitive?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.type.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.type.md deleted file mode 100644 index 9d663f05713c6..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [type](./kibana-plugin-core-server.uisettingsparams.type.md) - -## UiSettingsParams.type property - -defines a type of UI element [UiSettingsType](./kibana-plugin-core-server.uisettingstype.md) - -Signature: - -```typescript -type?: UiSettingsType; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.value.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.value.md deleted file mode 100644 index 78c8f0c8fcf8d..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.value.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [value](./kibana-plugin-core-server.uisettingsparams.value.md) - -## UiSettingsParams.value property - -default value to fall back to if a user doesn't provide any - -Signature: - -```typescript -value?: T; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.md deleted file mode 100644 index 97b711bca303a..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsServiceSetup](./kibana-plugin-core-server.uisettingsservicesetup.md) - -## UiSettingsServiceSetup interface - - -Signature: - -```typescript -export interface UiSettingsServiceSetup -``` - -## Methods - -| Method | Description | -| --- | --- | -| [register(settings)](./kibana-plugin-core-server.uisettingsservicesetup.register.md) | Sets settings with default values for the uiSettings. | - diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.register.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.register.md deleted file mode 100644 index 97b06ddb00e70..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.register.md +++ /dev/null @@ -1,39 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsServiceSetup](./kibana-plugin-core-server.uisettingsservicesetup.md) > [register](./kibana-plugin-core-server.uisettingsservicesetup.register.md) - -## UiSettingsServiceSetup.register() method - -Sets settings with default values for the uiSettings. - -Signature: - -```typescript -register(settings: Record): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| settings | Record<string, UiSettingsParams> | | - -Returns: - -void - -## Example - - -```ts -setup(core: CoreSetup){ - core.uiSettings.register([{ - foo: { - name: i18n.translate('my foo settings'), - value: true, - description: 'add some awesomeness', - }, - }]); -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.asscopedtoclient.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.asscopedtoclient.md deleted file mode 100644 index 1d76bc26a4150..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.asscopedtoclient.md +++ /dev/null @@ -1,36 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsServiceStart](./kibana-plugin-core-server.uisettingsservicestart.md) > [asScopedToClient](./kibana-plugin-core-server.uisettingsservicestart.asscopedtoclient.md) - -## UiSettingsServiceStart.asScopedToClient() method - -Creates a [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) with provided \*scoped\* saved objects client. - -This should only be used in the specific case where the client needs to be accessed from outside of the scope of a [RequestHandler](./kibana-plugin-core-server.requesthandler.md). - -Signature: - -```typescript -asScopedToClient(savedObjectsClient: SavedObjectsClientContract): IUiSettingsClient; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| savedObjectsClient | SavedObjectsClientContract | | - -Returns: - -IUiSettingsClient - -## Example - - -```ts -start(core: CoreStart) { - const soClient = core.savedObjects.getScopedClient(arbitraryRequest); - const uiSettingsClient = core.uiSettings.asScopedToClient(soClient); -} -``` - diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.md deleted file mode 100644 index 014f7d533b2ff..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingsservicestart.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsServiceStart](./kibana-plugin-core-server.uisettingsservicestart.md) - -## UiSettingsServiceStart interface - - -Signature: - -```typescript -export interface UiSettingsServiceStart -``` - -## Methods - -| Method | Description | -| --- | --- | -| [asScopedToClient(savedObjectsClient)](./kibana-plugin-core-server.uisettingsservicestart.asscopedtoclient.md) | Creates a [IUiSettingsClient](./kibana-plugin-core-server.iuisettingsclient.md) with provided \*scoped\* saved objects client.This should only be used in the specific case where the client needs to be accessed from outside of the scope of a [RequestHandler](./kibana-plugin-core-server.requesthandler.md). | - diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingstype.md b/docs/development/core/server/kibana-plugin-core-server.uisettingstype.md deleted file mode 100644 index 7edee442baa24..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.uisettingstype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsType](./kibana-plugin-core-server.uisettingstype.md) - -## UiSettingsType type - -UI element type to represent the settings. - -Signature: - -```typescript -export declare type UiSettingsType = 'undefined' | 'json' | 'markdown' | 'number' | 'select' | 'boolean' | 'string' | 'array' | 'image' | 'color'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederror.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederror.md deleted file mode 100644 index a79d62ab7f3c7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederror.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedError](./kibana-plugin-core-server.unauthorizederror.md) - -## UnauthorizedError type - - -Signature: - -```typescript -export declare type UnauthorizedError = errors.ResponseError & { - statusCode: 401; -}; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandler.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandler.md deleted file mode 100644 index 10c6253619217..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandler.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandler](./kibana-plugin-core-server.unauthorizederrorhandler.md) - -## UnauthorizedErrorHandler type - -A handler used to handle unauthorized error returned by elasticsearch - -Signature: - -```typescript -export declare type UnauthorizedErrorHandler = (options: UnauthorizedErrorHandlerOptions, toolkit: UnauthorizedErrorHandlerToolkit) => MaybePromise; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.md deleted file mode 100644 index 2300d53816e07..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerNotHandledResult](./kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.md) - -## UnauthorizedErrorHandlerNotHandledResult interface - - -Signature: - -```typescript -export interface UnauthorizedErrorHandlerNotHandledResult -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.type.md) | 'notHandled' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.type.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.type.md deleted file mode 100644 index 9a8fc62517bce..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerNotHandledResult](./kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.md) > [type](./kibana-plugin-core-server.unauthorizederrorhandlernothandledresult.type.md) - -## UnauthorizedErrorHandlerNotHandledResult.type property - -Signature: - -```typescript -type: 'notHandled'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.error.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.error.md deleted file mode 100644 index b3b355dfdc97e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.error.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerOptions](./kibana-plugin-core-server.unauthorizederrorhandleroptions.md) > [error](./kibana-plugin-core-server.unauthorizederrorhandleroptions.error.md) - -## UnauthorizedErrorHandlerOptions.error property - -Signature: - -```typescript -error: UnauthorizedError; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.md deleted file mode 100644 index efaf5109568be..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerOptions](./kibana-plugin-core-server.unauthorizederrorhandleroptions.md) - -## UnauthorizedErrorHandlerOptions interface - - -Signature: - -```typescript -export interface UnauthorizedErrorHandlerOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [error](./kibana-plugin-core-server.unauthorizederrorhandleroptions.error.md) | UnauthorizedError | | -| [request](./kibana-plugin-core-server.unauthorizederrorhandleroptions.request.md) | KibanaRequest | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.request.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.request.md deleted file mode 100644 index 94a0970844615..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandleroptions.request.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerOptions](./kibana-plugin-core-server.unauthorizederrorhandleroptions.md) > [request](./kibana-plugin-core-server.unauthorizederrorhandleroptions.request.md) - -## UnauthorizedErrorHandlerOptions.request property - -Signature: - -```typescript -request: KibanaRequest; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresult.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresult.md deleted file mode 100644 index fb5d8ad7d35c5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresult.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerResult](./kibana-plugin-core-server.unauthorizederrorhandlerresult.md) - -## UnauthorizedErrorHandlerResult type - - -Signature: - -```typescript -export declare type UnauthorizedErrorHandlerResult = UnauthorizedErrorHandlerRetryResult | UnauthorizedErrorHandlerNotHandledResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.authheaders.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.authheaders.md deleted file mode 100644 index f6a8cb3d5b613..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.authheaders.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerResultRetryParams](./kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.md) > [authHeaders](./kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.authheaders.md) - -## UnauthorizedErrorHandlerResultRetryParams.authHeaders property - -Signature: - -```typescript -authHeaders: AuthHeaders; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.md deleted file mode 100644 index d9c8e4c0733a7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerResultRetryParams](./kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.md) - -## UnauthorizedErrorHandlerResultRetryParams interface - - -Signature: - -```typescript -export interface UnauthorizedErrorHandlerResultRetryParams -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [authHeaders](./kibana-plugin-core-server.unauthorizederrorhandlerresultretryparams.authheaders.md) | AuthHeaders | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.md deleted file mode 100644 index 09d7f08229be3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerRetryResult](./kibana-plugin-core-server.unauthorizederrorhandlerretryresult.md) - -## UnauthorizedErrorHandlerRetryResult interface - - -Signature: - -```typescript -export interface UnauthorizedErrorHandlerRetryResult extends UnauthorizedErrorHandlerResultRetryParams -``` -Extends: UnauthorizedErrorHandlerResultRetryParams - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [type](./kibana-plugin-core-server.unauthorizederrorhandlerretryresult.type.md) | 'retry' | | - diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.type.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.type.md deleted file mode 100644 index 64d1e9270682b..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlerretryresult.type.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerRetryResult](./kibana-plugin-core-server.unauthorizederrorhandlerretryresult.md) > [type](./kibana-plugin-core-server.unauthorizederrorhandlerretryresult.type.md) - -## UnauthorizedErrorHandlerRetryResult.type property - -Signature: - -```typescript -type: 'retry'; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md deleted file mode 100644 index f28dae053b351..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerToolkit](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md) - -## UnauthorizedErrorHandlerToolkit interface - -Toolkit passed to a [UnauthorizedErrorHandler](./kibana-plugin-core-server.unauthorizederrorhandler.md) used to generate responses from the handler - -Signature: - -```typescript -export interface UnauthorizedErrorHandlerToolkit -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [notHandled](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.nothandled.md) | () => UnauthorizedErrorHandlerNotHandledResult | The handler cannot handle the error, or was not able to authenticate. | -| [retry](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.retry.md) | (params: UnauthorizedErrorHandlerResultRetryParams) => UnauthorizedErrorHandlerRetryResult | The handler was able to authenticate. Will retry the failed request with new auth headers | - diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.nothandled.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.nothandled.md deleted file mode 100644 index 76fc3dd48ff74..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.nothandled.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerToolkit](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md) > [notHandled](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.nothandled.md) - -## UnauthorizedErrorHandlerToolkit.notHandled property - -The handler cannot handle the error, or was not able to authenticate. - -Signature: - -```typescript -notHandled: () => UnauthorizedErrorHandlerNotHandledResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.retry.md b/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.retry.md deleted file mode 100644 index 6a5e5c78414ac..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.unauthorizederrorhandlertoolkit.retry.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UnauthorizedErrorHandlerToolkit](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.md) > [retry](./kibana-plugin-core-server.unauthorizederrorhandlertoolkit.retry.md) - -## UnauthorizedErrorHandlerToolkit.retry property - -The handler was able to authenticate. Will retry the failed request with new auth headers - -Signature: - -```typescript -retry: (params: UnauthorizedErrorHandlerResultRetryParams) => UnauthorizedErrorHandlerRetryResult; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.isoverridden.md b/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.isoverridden.md deleted file mode 100644 index 12fc1af0d6ae9..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.isoverridden.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UserProvidedValues](./kibana-plugin-core-server.userprovidedvalues.md) > [isOverridden](./kibana-plugin-core-server.userprovidedvalues.isoverridden.md) - -## UserProvidedValues.isOverridden property - -Signature: - -```typescript -isOverridden?: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.md b/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.md deleted file mode 100644 index fe8aaf233fbf7..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UserProvidedValues](./kibana-plugin-core-server.userprovidedvalues.md) - -## UserProvidedValues interface - -Describes the values explicitly set by user. - -Signature: - -```typescript -export interface UserProvidedValues -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [isOverridden?](./kibana-plugin-core-server.userprovidedvalues.isoverridden.md) | boolean | (Optional) | -| [userValue?](./kibana-plugin-core-server.userprovidedvalues.uservalue.md) | T | (Optional) | - diff --git a/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.uservalue.md b/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.uservalue.md deleted file mode 100644 index 6840f66d6f9f3..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.userprovidedvalues.uservalue.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UserProvidedValues](./kibana-plugin-core-server.userprovidedvalues.md) > [userValue](./kibana-plugin-core-server.userprovidedvalues.uservalue.md) - -## UserProvidedValues.userValue property - -Signature: - -```typescript -userValue?: T; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.validbodyoutput.md b/docs/development/core/server/kibana-plugin-core-server.validbodyoutput.md deleted file mode 100644 index 97d6a42602ab5..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.validbodyoutput.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [validBodyOutput](./kibana-plugin-core-server.validbodyoutput.md) - -## validBodyOutput variable - -The set of valid body.output - -Signature: - -```typescript -validBodyOutput: readonly ["data", "stream"] -``` diff --git a/package.json b/package.json index 0cf2676cdc172..dcf846f3dd039 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "debug": "node --nolazy --inspect scripts/kibana --dev", "debug-break": "node --nolazy --inspect-brk scripts/kibana --dev", "dev-docs": "scripts/dev_docs.sh", - "docs:acceptApiChanges": "node --max-old-space-size=6144 scripts/check_published_api_changes.js --accept", "es": "node scripts/es", "preinstall": "node ./preinstall_check", "kbn": "node scripts/kbn", diff --git a/scripts/check_published_api_changes.js b/scripts/check_published_api_changes.js deleted file mode 100644 index 44d98ca51361b..0000000000000 --- a/scripts/check_published_api_changes.js +++ /dev/null @@ -1,10 +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'); -require('../src/dev/run_check_published_api_changes'); diff --git a/src/core/README.md b/src/core/README.md index 4dd045f37b483..08dd2f49f7f72 100644 --- a/src/core/README.md +++ b/src/core/README.md @@ -32,17 +32,3 @@ by the "legacy" Kibana may be rejected by the `core` now. `core` has its own [logging system](./server/logging/README.mdx) and will output log records directly (e.g. to file or terminal) when configured. When no specific configuration is provided, logs are forwarded to the "legacy" Kibana so that they look the same as the rest of the log records throughout Kibana. - -## Core API Review -To provide a stable API for plugin developers, it is important that the Core Public and Server API's are stable and -well documented. To reduce the chance of regressions, development on the Core API's includes an API signature review -process described below. Changes to the API signature which have not been accepted will cause the build to fail. - -When changes to the Core API's signatures are made, the following process needs to be followed: -1. After changes have been made, run `yarn docs:acceptApiChanges` which performs the following: - - Recompiles all typescript typings files - - Updates the API review files `src/core/public/kibana.api.md` and `src/core/server/kibana.api.md` - - Updates the Core API documentation in `docs/development/core/` -2. Review and commit the updated API Review files and documentation -3. Clearly flag any breaking changes in your pull request - diff --git a/src/dev/run_check_published_api_changes.ts b/src/dev/run_check_published_api_changes.ts deleted file mode 100644 index 7ca27e51dd4b5..0000000000000 --- a/src/dev/run_check_published_api_changes.ts +++ /dev/null @@ -1,288 +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. - */ - -import { ToolingLog } from '@kbn/tooling-log'; -import { getTimeReporter } from '@kbn/ci-stats-reporter'; -import { - Extractor, - IConfigFile, - ExtractorLogLevel, - ExtractorConfig, - ExtractorResult, - ExtractorMessage, -} from '@microsoft/api-extractor'; -import chalk from 'chalk'; -import dedent from 'dedent'; -import execa from 'execa'; -import fs from 'fs'; -import path from 'path'; -import getopts from 'getopts'; - -const log = new ToolingLog({ - level: 'info', - writeTo: process.stdout, -}); - -const runStartTime = Date.now(); -const reportTime = getTimeReporter(log, 'scripts/check_published_api_changes'); - -/* - * Step 1: execute build:types - * This users tsconfig.types.json to generate types in `target/types` - * Step 2: run Api Extractor to detect API changes - * Step 3: generate new docs if needed - */ - -const getReportFileName = (folder: string) => { - switch (true) { - case folder.includes('public'): - return 'public'; - case folder.includes('server'): - return 'server'; - case folder.includes('common'): - return 'common'; - default: - throw new Error( - `folder "${folder}" expected to include one of ["public", "server", "common"]` - ); - } -}; - -const apiExtractorConfig = (folder: string): ExtractorConfig => { - const fname = getReportFileName(folder); - const config: IConfigFile = { - newlineKind: 'lf', - compiler: { - tsconfigFilePath: '/tsconfig.json', - }, - projectFolder: path.resolve('./'), - mainEntryPointFilePath: `target/types/${folder}/index.d.ts`, - apiReport: { - enabled: true, - reportFileName: `${fname}.api.md`, - reportFolder: `/src/${folder}/`, - reportTempFolder: `/build/${folder}/`, - }, - docModel: { - enabled: true, - apiJsonFilePath: `./build/${folder}/${fname}.api.json`, - }, - tsdocMetadata: { - enabled: false, - }, - messages: { - extractorMessageReporting: { - default: { - logLevel: 'warning' as ExtractorLogLevel.Warning, - addToApiReportFile: true, - }, - 'ae-internal-missing-underscore': { - logLevel: 'none' as ExtractorLogLevel.None, - addToApiReportFile: false, - }, - }, - }, - }; - const cfg = ExtractorConfig.prepare({ - configObject: config, - configObjectFullPath: undefined, - packageJsonFullPath: path.resolve('package.json'), - }); - - return cfg; -}; - -const runBuildTypes = async () => { - await execa('yarn', ['run', 'build:types']); -}; - -const runApiDocumenter = async (folder: string) => { - const sourceFolder = `./build/${folder}`; - const targetFolder = `./docs/development/${folder}`; - log.info(`Generating docs from ${sourceFolder} into ${targetFolder}...`); - await execa('api-documenter', ['generate', '-i', sourceFolder, '-o', targetFolder], { - preferLocal: true, - }); -}; - -const renameExtractedApiPackageName = async (folder: string) => { - const fname = getReportFileName(folder); - const jsonApiFile = `build/${folder}/${fname}.api.json`; - log.info(`Updating ${jsonApiFile}...`); - const json = JSON.parse(fs.readFileSync(jsonApiFile).toString()); - json.name = json.canonicalReference = `kibana-plugin-${folder.replace(/\//g, '-')}`; - fs.writeFileSync(jsonApiFile, JSON.stringify(json, null, 2)); -}; - -/** - * Runs api-extractor with a custom logger in order to extract results from the process - * - */ -const runApiExtractor = (folder: string, acceptChanges: boolean = false): ExtractorResult => { - const config = apiExtractorConfig(folder); - const options = { - // Indicates that API Extractor is running as part of a local build, - // e.g. on developer's machine. For example, if the *.api.md output file - // has differences, it will be automatically overwritten for a - // local build, whereas this should report an error for a production build. - localBuild: acceptChanges, - messageCallback: (message: ExtractorMessage) => { - if (message.messageId === 'console-api-report-not-copied') { - // ConsoleMessageId.ApiReportNotCopied - log.warning(`You have changed the signature of the ${folder} public API`); - log.warning( - 'To accept these changes run `node scripts/check_published_api_changes.js --accept` and then:\n' + - "\t 1. Commit the updated documentation and API review file '" + - config.reportFilePath + - "' \n" + - "\t 2. Describe the change in your PR including whether it's a major, minor or patch" - ); - message.handled = true; - } else if (message.messageId === 'console-api-report-copied') { - // ConsoleMessageId.ApiReportCopied - log.warning(`You have changed the signature of the ${folder} public API`); - log.warning( - "Please commit the updated API documentation and the API review file: '" + - config.reportFilePath - ); - message.handled = true; - } else if (message.messageId === 'console-api-report-unchanged') { - // ConsoleMessageId.ApiReportUnchanged - log.info(`${folder} API: no changes detected ✔`); - message.handled = true; - } - }, - }; - - return Extractor.invoke(config, options); -}; - -interface Options { - accept: boolean; - docs: boolean; - help: boolean; - filter: string; -} - -async function run(folder: string, { opts }: { opts: Options }): Promise { - log.info(`${folder} API: checking for changes in API signature...`); - - const { apiReportChanged, succeeded } = runApiExtractor(folder, opts.accept); - - // If we're not accepting changes and there's a failure, exit. - if (!opts.accept && !succeeded) { - return false; - } - - // Attempt to generate docs even if api-extractor didn't succeed - if ((opts.accept && apiReportChanged) || opts.docs) { - try { - await renameExtractedApiPackageName(folder); - await runApiDocumenter(folder); - } catch (e) { - log.error(e); - return false; - } - - log.info(`${folder} API: updated documentation ✔`); - } - - // If the api signature changed or any errors or warnings occured, exit with an error - // NOTE: Because of https://github.com/Microsoft/web-build-tools/issues/1258 - // api-extractor will not return `succeeded: false` when the API changes. - return !apiReportChanged && succeeded; -} - -(async () => { - const extraFlags: string[] = []; - const opts = getopts(process.argv.slice(2), { - boolean: ['accept', 'docs', 'help'], - string: ['filter'], - default: { - project: undefined, - }, - unknown(name) { - extraFlags.push(name); - return false; - }, - }) as any as Options; - - if (extraFlags.length > 0) { - for (const flag of extraFlags) { - log.error(`Unknown flag: ${flag}`); - } - - opts.help = true; - } - - const folders = ['core/public', 'core/server']; - - if (opts.help) { - process.stdout.write( - dedent(chalk` - {dim usage:} node scripts/check_published_api_changes [...options] - - Checks for any changes to the Kibana shared API - - Examples: - - {dim # Checks for any changes to the Kibana shared API} - {dim $} node scripts/check_published_api_changes - - {dim # Checks for any changes to the Kibana shared API and updates the documentation} - {dim $} node scripts/check_published_api_changes --docs - - {dim # Checks for and automatically accepts and updates documentation for any changes to the Kibana shared API} - {dim $} node scripts/check_published_api_changes --accept - - {dim # Only checks the core/public directory} - {dim $} node scripts/check_published_api_changes --filter=core/public - - Options: - --accept {dim Accepts all changes by updating the API Review files and documentation} - --docs {dim Updates the API documentation} - --filter {dim RegExp that folder names must match, folders: [${folders.join(', ')}]} - --help {dim Show this message} - `) - ); - process.stdout.write('\n'); - return !(extraFlags.length > 0); - } - - log.info('Building types for api extractor...'); - await runBuildTypes(); - log.info('Types for api extractor has been built'); - - const filteredFolders = folders.filter((folder) => - opts.filter.length ? folder.match(opts.filter) : true - ); - const results = []; - for (const folder of filteredFolders) { - results.push(await run(folder, { opts })); - } - - if (results.includes(false)) { - reportTime(runStartTime, 'error', { - success: false, - ...opts, - }); - process.exitCode = 1; - } else { - reportTime(runStartTime, 'total', { - success: true, - ...opts, - }); - } -})().catch((e) => { - reportTime(runStartTime, 'error', { - success: false, - error: e.message, - }); - log.error(e); - process.exitCode = 1; -}); diff --git a/test/scripts/checks/doc_api_changes.sh b/test/scripts/checks/doc_api_changes.sh deleted file mode 100755 index f2f508fd8f7d4..0000000000000 --- a/test/scripts/checks/doc_api_changes.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -checks-reporter-with-killswitch "Check Doc API Changes" \ - node scripts/check_published_api_changes diff --git a/test/scripts/jenkins_unit.sh b/test/scripts/jenkins_unit.sh index b852a5b313ad9..e0ff16f387e3d 100755 --- a/test/scripts/jenkins_unit.sh +++ b/test/scripts/jenkins_unit.sh @@ -16,7 +16,6 @@ if [[ -z "$CODE_COVERAGE" ]] ; then ./test/scripts/checks/telemetry.sh ./test/scripts/checks/ts_projects.sh ./test/scripts/checks/jest_configs.sh - ./test/scripts/checks/doc_api_changes.sh ./test/scripts/checks/type_check.sh ./test/scripts/checks/bundle_limits.sh ./test/scripts/checks/i18n.sh diff --git a/vars/tasks.groovy b/vars/tasks.groovy index ee440c9c11731..0f44ad0658043 100644 --- a/vars/tasks.groovy +++ b/vars/tasks.groovy @@ -8,7 +8,6 @@ def check() { kibanaPipeline.scriptTask('Check Telemetry Schema', 'test/scripts/checks/telemetry.sh'), kibanaPipeline.scriptTask('Check TypeScript Projects', 'test/scripts/checks/ts_projects.sh'), kibanaPipeline.scriptTask('Check Jest Configs', 'test/scripts/checks/jest_configs.sh'), - kibanaPipeline.scriptTask('Check Doc API Changes', 'test/scripts/checks/doc_api_changes.sh'), kibanaPipeline.scriptTask('Check @kbn/pm Distributable', 'test/scripts/checks/kbn_pm_dist.sh'), kibanaPipeline.scriptTask('Check Plugin List Docs', 'test/scripts/checks/plugin_list_docs.sh'), kibanaPipeline.scriptTask('Check Types and Public API Docs', 'test/scripts/checks/type_check_plugin_public_api_docs.sh'), From 02bc0e97bbc109eb2c5f155c0769d0a9bab26030 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Tue, 21 Jun 2022 11:03:29 -0500 Subject: [PATCH 43/50] [Security Solution] redirect old isolate / release routes (#134536) * [Security Solution] redirect old isolate / release routes deprecate old isolate / release routes and 308 to newer routes * add header check to tests --- .../common/endpoint/constants.ts | 2 +- .../server/endpoint/routes/actions/index.ts | 4 - .../endpoint/routes/actions/isolation.test.ts | 568 ------------------ .../endpoint/routes/actions/isolation.ts | 294 --------- .../routes/actions/response_actions.test.ts | 32 +- .../routes/actions/response_actions.ts | 50 +- 6 files changed, 74 insertions(+), 876 deletions(-) delete mode 100644 x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts delete mode 100644 x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts diff --git a/x-pack/plugins/security_solution/common/endpoint/constants.ts b/x-pack/plugins/security_solution/common/endpoint/constants.ts index 13747e53025c7..6d4a3407e644b 100644 --- a/x-pack/plugins/security_solution/common/endpoint/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/constants.ts @@ -58,7 +58,7 @@ const BASE_ENDPOINT_ACTION_ROUTE = `${BASE_ENDPOINT_ROUTE}/action`; /** Action Response Routes */ export const ISOLATE_HOST_ROUTE_V2 = `${BASE_ENDPOINT_ACTION_ROUTE}/isolate`; -export const RELEASE_HOST_ROUTE = `${BASE_ENDPOINT_ACTION_ROUTE}/release`; +export const UNISOLATE_HOST_ROUTE_V2 = `${BASE_ENDPOINT_ACTION_ROUTE}/unisolate`; export const GET_RUNNING_PROCESSES_ROUTE = `${BASE_ENDPOINT_ACTION_ROUTE}/running_procs`; export const KILL_PROCESS_ROUTE = `${BASE_ENDPOINT_ACTION_ROUTE}/kill_process`; export const SUSPEND_PROCESS_ROUTE = `${BASE_ENDPOINT_ACTION_ROUTE}/suspend_process`; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/index.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/index.ts index 318e479d7116b..e30b982fc2e9b 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/index.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/index.ts @@ -8,21 +8,17 @@ import { registerActionDetailsRoutes } from './details'; import { SecuritySolutionPluginRouter } from '../../../types'; import { EndpointAppContext } from '../../types'; -import { registerHostIsolationRoutes } from './isolation'; import { registerActionStatusRoutes } from './status'; import { registerActionAuditLogRoutes } from './audit_log'; import { registerActionListRoutes } from './list'; import { registerResponseActionRoutes } from './response_actions'; -export * from './isolation'; - // wrap route registration export function registerActionRoutes( router: SecuritySolutionPluginRouter, endpointContext: EndpointAppContext ) { - registerHostIsolationRoutes(router, endpointContext); registerActionStatusRoutes(router, endpointContext); registerActionAuditLogRoutes(router, endpointContext); registerActionListRoutes(router, endpointContext); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts deleted file mode 100644 index bd3484a0e7518..0000000000000 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.test.ts +++ /dev/null @@ -1,568 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { AwaitedProperties } from '@kbn/utility-types'; -import { - KibanaRequest, - KibanaResponseFactory, - RequestHandler, - RouteConfig, -} from '@kbn/core/server'; -import { - elasticsearchServiceMock, - httpServerMock, - httpServiceMock, - loggingSystemMock, - savedObjectsClientMock, -} from '@kbn/core/server/mocks'; -import { parseExperimentalConfigValue } from '../../../../common/experimental_features'; -import { EndpointAppContextService } from '../../endpoint_app_context_services'; -import { - createMockEndpointAppContextServiceSetupContract, - createMockEndpointAppContextServiceStartContract, - createRouteHandlerContext, -} from '../../mocks'; -import { NoParametersRequestSchema } from '../../../../common/endpoint/schema/actions'; -import { registerHostIsolationRoutes } from './isolation'; -import { createMockConfig } from '../../../lib/detection_engine/routes/__mocks__'; -import { LicenseService } from '../../../../common/license'; -import { Subject } from 'rxjs'; -import { ILicense } from '@kbn/licensing-plugin/common/types'; -import { licenseMock } from '@kbn/licensing-plugin/common/licensing.mock'; -import { License } from '@kbn/licensing-plugin/common/license'; -import { - ISOLATE_HOST_ROUTE, - UNISOLATE_HOST_ROUTE, - metadataTransformPrefix, - ENDPOINT_ACTIONS_INDEX, -} from '../../../../common/endpoint/constants'; -import { - EndpointAction, - HostIsolationRequestBody, - HostIsolationResponse, - HostMetadata, - LogsEndpointAction, -} from '../../../../common/endpoint/types'; -import { EndpointDocGenerator } from '../../../../common/endpoint/generate_data'; -import { legacyMetadataSearchResponseMock } from '../metadata/support/test_support'; -import { AGENT_ACTIONS_INDEX, ElasticsearchAssetType } from '@kbn/fleet-plugin/common'; -import { CasesClientMock } from '@kbn/cases-plugin/server/client/mocks'; -import { EndpointAuthz } from '../../../../common/endpoint/types/authz'; -import type { PackageClient } from '@kbn/fleet-plugin/server'; -import { createMockPackageService } from '@kbn/fleet-plugin/server/mocks'; -import { SecuritySolutionRequestHandlerContextMock } from '../../../lib/detection_engine/routes/__mocks__/request_context'; - -interface CallRouteInterface { - body?: HostIsolationRequestBody; - idxResponse?: any; - searchResponse?: HostMetadata; - mockUser?: any; - license?: License; - authz?: Partial; -} - -const Platinum = licenseMock.createLicense({ license: { type: 'platinum', mode: 'platinum' } }); -const Gold = licenseMock.createLicense({ license: { type: 'gold', mode: 'gold' } }); - -describe('Host Isolation', () => { - describe('schema', () => { - it('should require at least 1 Endpoint ID', () => { - expect(() => { - NoParametersRequestSchema.body.validate({}); - }).toThrow(); - }); - - it('should accept an Endpoint ID as the only required field', () => { - expect(() => { - NoParametersRequestSchema.body.validate({ - endpoint_ids: ['ABC-XYZ-000'], - }); - }).not.toThrow(); - }); - - it('should accept a comment', () => { - expect(() => { - NoParametersRequestSchema.body.validate({ - endpoint_ids: ['ABC-XYZ-000'], - comment: 'a user comment', - }); - }).not.toThrow(); - }); - - it('should accept alert IDs', () => { - expect(() => { - NoParametersRequestSchema.body.validate({ - endpoint_ids: ['ABC-XYZ-000'], - alert_ids: ['0000000-000-00'], - }); - }).not.toThrow(); - }); - - it('should accept case IDs', () => { - expect(() => { - NoParametersRequestSchema.body.validate({ - endpoint_ids: ['ABC-XYZ-000'], - case_ids: ['000000000-000-000'], - }); - }).not.toThrow(); - }); - }); - - describe('handler', () => { - let endpointAppContextService: EndpointAppContextService; - let mockResponse: jest.Mocked; - let licenseService: LicenseService; - let licenseEmitter: Subject; - - let callRoute: ( - routePrefix: string, - opts: CallRouteInterface, - indexExists?: { endpointDsExists: boolean } - ) => Promise>; - const superUser = { - username: 'superuser', - roles: ['superuser'], - }; - - const docGen = new EndpointDocGenerator(); - - beforeEach(() => { - // instantiate... everything - const mockScopedClient = elasticsearchServiceMock.createScopedClusterClient(); - const mockClusterClient = elasticsearchServiceMock.createClusterClient(); - mockClusterClient.asScoped.mockReturnValue(mockScopedClient); - const routerMock = httpServiceMock.createRouter(); - mockResponse = httpServerMock.createResponseFactory(); - const startContract = createMockEndpointAppContextServiceStartContract(); - endpointAppContextService = new EndpointAppContextService(); - const mockSavedObjectClient = savedObjectsClientMock.create(); - const mockPackageService = createMockPackageService(); - const mockedPackageClient = mockPackageService.asInternalUser as jest.Mocked; - mockedPackageClient.getInstallation.mockResolvedValue({ - installed_kibana: [], - package_assets: [], - es_index_patterns: {}, - name: '', - version: '', - install_status: 'installed', - install_version: '', - install_started_at: '', - install_source: 'registry', - installed_es: [ - { - id: 'logs-endpoint.events.security', - type: ElasticsearchAssetType.indexTemplate, - }, - { - id: `${metadataTransformPrefix}-0.16.0-dev.0`, - type: ElasticsearchAssetType.transform, - }, - ], - keep_policies_up_to_date: false, - }); - - licenseEmitter = new Subject(); - licenseService = new LicenseService(); - licenseService.start(licenseEmitter); - - endpointAppContextService.setup(createMockEndpointAppContextServiceSetupContract()); - endpointAppContextService.start({ - ...startContract, - licenseService, - packageService: mockPackageService, - }); - - // add the host isolation route handlers to routerMock - registerHostIsolationRoutes(routerMock, { - logFactory: loggingSystemMock.create(), - service: endpointAppContextService, - config: () => Promise.resolve(createMockConfig()), - experimentalFeatures: parseExperimentalConfigValue(createMockConfig().enableExperimental), - }); - - // define a convenience function to execute an API call for a given route, body, and mocked response from ES - // it returns the requestContext mock used in the call, to assert internal calls (e.g. the indexed document) - callRoute = async ( - routePrefix: string, - { body, idxResponse, searchResponse, mockUser, license, authz = {} }: CallRouteInterface, - indexExists?: { endpointDsExists: boolean } - ): Promise> => { - const asUser = mockUser ? mockUser : superUser; - (startContract.security.authc.getCurrentUser as jest.Mock).mockImplementationOnce( - () => asUser - ); - - const ctx = createRouteHandlerContext(mockScopedClient, mockSavedObjectClient); - - ctx.securitySolution.endpointAuthz = { - ...ctx.securitySolution.endpointAuthz, - ...authz, - }; - - // mock _index_template - ctx.core.elasticsearch.client.asInternalUser.indices.existsIndexTemplate.mockResponseImplementationOnce( - () => { - if (indexExists) { - return { - body: true, - statusCode: 200, - }; - } - return { - body: false, - statusCode: 404, - }; - } - ); - - const withIdxResp = idxResponse ? idxResponse : { statusCode: 201 }; - ctx.core.elasticsearch.client.asInternalUser.index.mockResponseImplementation( - () => withIdxResp - ); - ctx.core.elasticsearch.client.asCurrentUser.search.mockResponseImplementation(() => { - return { - body: legacyMetadataSearchResponseMock(searchResponse), - }; - }); - - const withLicense = license ? license : Platinum; - licenseEmitter.next(withLicense); - - const mockRequest = httpServerMock.createKibanaRequest({ body }); - const [, routeHandler]: [ - RouteConfig, - RequestHandler - ] = routerMock.post.mock.calls.find(([{ path }]) => path.startsWith(routePrefix))!; - - await routeHandler(ctx, mockRequest, mockResponse); - - return ctx; - }; - }); - - afterEach(() => { - endpointAppContextService.stop(); - licenseService.stop(); - licenseEmitter.complete(); - }); - it('succeeds when an endpoint ID is provided', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { body: { endpoint_ids: ['XYZ'] } }); - expect(mockResponse.ok).toBeCalled(); - }); - it('reports elasticsearch errors creating an action', async () => { - const ErrMessage = 'something went wrong?'; - - await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - idxResponse: { - statusCode: 500, - body: { - result: ErrMessage, - }, - }, - }); - expect(mockResponse.ok).not.toBeCalled(); - const response = mockResponse.customError.mock.calls[0][0]; - expect(response.statusCode).toEqual(500); - expect((response.body as Error).message).toEqual(ErrMessage); - }); - it('accepts a comment field', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { body: { endpoint_ids: ['XYZ'], comment: 'XYZ' } }); - expect(mockResponse.ok).toBeCalled(); - }); - it('sends the action to the requested agent', async () => { - const metadataResponse = docGen.generateHostMetadata(); - const AgentID = metadataResponse.elastic.agent.id; - const ctx = await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['ABC-XYZ-000'] }, - searchResponse: metadataResponse, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - expect(actionDoc.agents).toContain(AgentID); - }); - it('records the user who performed the action to the action record', async () => { - const testU = { username: 'testuser', roles: ['superuser'] }; - const ctx = await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - mockUser: testU, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - expect(actionDoc.user_id).toEqual(testU.username); - }); - it('records the comment in the action payload', async () => { - const CommentText = "I am isolating this because it's Friday"; - const ctx = await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'], comment: CommentText }, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - expect(actionDoc.data.comment).toEqual(CommentText); - }); - it('creates an action and returns its ID', async () => { - const ctx = await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'], comment: 'XYZ' }, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - const actionID = actionDoc.action_id; - expect(mockResponse.ok).toBeCalled(); - expect((mockResponse.ok.mock.calls[0][0]?.body as HostIsolationResponse).action).toEqual( - actionID - ); - }); - it('records the timeout in the action payload', async () => { - const ctx = await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - expect(actionDoc.timeout).toEqual(300); - }); - it('sends the action to the correct agent when endpoint ID is given', async () => { - const doc = docGen.generateHostMetadata(); - const AgentID = doc.elastic.agent.id; - - const ctx = await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - searchResponse: doc, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - expect(actionDoc.agents).toContain(AgentID); - }); - - it('sends the isolate command payload from the isolate route', async () => { - const ctx = await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - expect(actionDoc.data.command).toEqual('isolate'); - }); - it('sends the unisolate command payload from the unisolate route', async () => { - const ctx = await callRoute(UNISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - }); - const actionDoc: EndpointAction = ( - ctx.core.elasticsearch.client.asInternalUser.index.mock - .calls[0][0] as estypes.IndexRequest - ).body!; - expect(actionDoc.data.command).toEqual('unisolate'); - }); - - describe('With endpoint data streams', () => { - it('handles unisolation', async () => { - const ctx = await callRoute( - UNISOLATE_HOST_ROUTE, - { - body: { endpoint_ids: ['XYZ'] }, - }, - { endpointDsExists: true } - ); - - const indexDoc = ctx.core.elasticsearch.client.asInternalUser.index; - const actionDocs: [ - { index: string; body?: LogsEndpointAction }, - { index: string; body?: EndpointAction } - ] = [ - indexDoc.mock.calls[0][0] as estypes.IndexRequest, - indexDoc.mock.calls[1][0] as estypes.IndexRequest, - ]; - - expect(actionDocs[0].index).toEqual(ENDPOINT_ACTIONS_INDEX); - expect(actionDocs[1].index).toEqual(AGENT_ACTIONS_INDEX); - expect(actionDocs[0].body!.EndpointActions.data.command).toEqual('unisolate'); - expect(actionDocs[1].body!.data.command).toEqual('unisolate'); - }); - - it('handles isolation', async () => { - const ctx = await callRoute( - ISOLATE_HOST_ROUTE, - { - body: { endpoint_ids: ['XYZ'] }, - }, - { endpointDsExists: true } - ); - const indexDoc = ctx.core.elasticsearch.client.asInternalUser.index; - const actionDocs: [ - { index: string; body?: LogsEndpointAction }, - { index: string; body?: EndpointAction } - ] = [ - indexDoc.mock.calls[0][0] as estypes.IndexRequest, - indexDoc.mock.calls[1][0] as estypes.IndexRequest, - ]; - - expect(actionDocs[0].index).toEqual(ENDPOINT_ACTIONS_INDEX); - expect(actionDocs[1].index).toEqual(AGENT_ACTIONS_INDEX); - expect(actionDocs[0].body!.EndpointActions.data.command).toEqual('isolate'); - expect(actionDocs[1].body!.data.command).toEqual('isolate'); - }); - - it('handles errors', async () => { - const ErrMessage = 'Uh oh!'; - await callRoute( - UNISOLATE_HOST_ROUTE, - { - body: { endpoint_ids: ['XYZ'] }, - idxResponse: { - statusCode: 500, - body: { - result: ErrMessage, - }, - }, - }, - { endpointDsExists: true } - ); - - expect(mockResponse.ok).not.toBeCalled(); - const response = mockResponse.customError.mock.calls[0][0]; - expect(response.statusCode).toEqual(500); - expect((response.body as Error).message).toEqual(ErrMessage); - }); - }); - - describe('License Level', () => { - it('allows platinum license levels to isolate hosts', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - license: Platinum, - }); - expect(mockResponse.ok).toBeCalled(); - }); - - it('prohibits isolating hosts if no authz for it', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - authz: { canIsolateHost: false }, - license: Gold, - }); - - expect(mockResponse.forbidden).toBeCalled(); - }); - - it('allows any license level to unisolate', async () => { - licenseEmitter.next(Gold); - await callRoute(UNISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - license: Gold, - }); - expect(mockResponse.ok).toBeCalled(); - }); - }); - - describe('User Authorization Level', () => { - it('allows user to perform isolation when canIsolateHost is true', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - }); - expect(mockResponse.ok).toBeCalled(); - }); - - it('allows user to perform unisolation when canUnIsolateHost is true', async () => { - await callRoute(UNISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - }); - expect(mockResponse.ok).toBeCalled(); - }); - - it('prohibits user from performing isolation if canIsolateHost is false', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - authz: { canIsolateHost: false }, - }); - expect(mockResponse.forbidden).toBeCalled(); - }); - - it('prohibits user from performing un-isolation if canUnIsolateHost is false', async () => { - await callRoute(UNISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'] }, - authz: { canUnIsolateHost: false }, - }); - expect(mockResponse.forbidden).toBeCalled(); - }); - }); - - describe('Cases', () => { - let casesClient: CasesClientMock; - - const getCaseIdsFromAttachmentAddService = () => { - return casesClient.attachments.add.mock.calls.map(([addArgs]) => addArgs.caseId); - }; - - beforeEach(async () => { - casesClient = (await endpointAppContextService.getCasesClient( - {} as KibanaRequest - )) as CasesClientMock; - - let counter = 1; - casesClient.cases.getCasesByAlertID.mockImplementation(async () => { - return [ - { - id: `case-${counter++}`, - title: 'case', - }, - ]; - }); - }); - - it('logs a comment to the provided cases', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'], case_ids: ['one', 'two'] }, - }); - - expect(casesClient.attachments.add).toHaveBeenCalledTimes(2); - expect(getCaseIdsFromAttachmentAddService()).toEqual( - expect.arrayContaining(['one', 'two']) - ); - }); - - it('logs a comment to any cases associated with the given alerts', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { - body: { endpoint_ids: ['XYZ'], alert_ids: ['one', 'two'] }, - }); - - expect(getCaseIdsFromAttachmentAddService()).toEqual( - expect.arrayContaining(['case-1', 'case-2']) - ); - }); - - it('logs a comment to any cases provided on input along with cases associated with the given alerts', async () => { - await callRoute(ISOLATE_HOST_ROUTE, { - // 'case-1` provided on `case_ids` should be dedupped - body: { - endpoint_ids: ['XYZ'], - case_ids: ['ONE', 'TWO', 'case-1'], - alert_ids: ['one', 'two'], - }, - }); - - expect(casesClient.attachments.add).toHaveBeenCalledTimes(4); - expect(getCaseIdsFromAttachmentAddService()).toEqual( - expect.arrayContaining(['ONE', 'TWO', 'case-1', 'case-2']) - ); - }); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts deleted file mode 100644 index bd0e3f07ce6a8..0000000000000 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/isolation.ts +++ /dev/null @@ -1,294 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import moment from 'moment'; -import { RequestHandler, Logger } from '@kbn/core/server'; -import uuid from 'uuid'; -import { TypeOf } from '@kbn/config-schema'; -import { CommentType } from '@kbn/cases-plugin/common'; -import { CasesByAlertId } from '@kbn/cases-plugin/common/api/cases/case'; -import { AGENT_ACTIONS_INDEX } from '@kbn/fleet-plugin/common'; -import { NoParametersRequestSchema } from '../../../../common/endpoint/schema/actions'; -import { - ENDPOINT_ACTIONS_DS, - ENDPOINT_ACTION_RESPONSES_DS, - ISOLATE_HOST_ROUTE, - UNISOLATE_HOST_ROUTE, - failedFleetActionErrorCode, -} from '../../../../common/endpoint/constants'; -import { - EndpointAction, - HostMetadata, - LogsEndpointAction, - LogsEndpointActionResponse, -} from '../../../../common/endpoint/types'; -import { - SecuritySolutionPluginRouter, - SecuritySolutionRequestHandlerContext, -} from '../../../types'; -import { getMetadataForEndpoints } from '../../services'; -import { EndpointAppContext } from '../../types'; -import { APP_ID } from '../../../../common/constants'; -import { doLogsEndpointActionDsExists } from '../../utils'; -import { withEndpointAuthz } from '../with_endpoint_authz'; - -/** - * Registers the Host-(un-)isolation routes - */ -export function registerHostIsolationRoutes( - router: SecuritySolutionPluginRouter, - endpointContext: EndpointAppContext -) { - const logger = endpointContext.logFactory.get('hostIsolation'); - - // perform isolation - router.post( - { - path: ISOLATE_HOST_ROUTE, - validate: NoParametersRequestSchema, - options: { authRequired: true, tags: ['access:securitySolution'] }, - }, - withEndpointAuthz( - { all: ['canIsolateHost'] }, - logger, - isolationRequestHandler(endpointContext, true) - ) - ); - - // perform UN-isolate - router.post( - { - path: UNISOLATE_HOST_ROUTE, - validate: NoParametersRequestSchema, - options: { authRequired: true, tags: ['access:securitySolution'] }, - }, - withEndpointAuthz( - { all: ['canUnIsolateHost'] }, - logger, - isolationRequestHandler(endpointContext, false) - ) - ); -} - -const createFailedActionResponseEntry = async ({ - context, - doc, - logger, -}: { - context: SecuritySolutionRequestHandlerContext; - doc: LogsEndpointActionResponse; - logger: Logger; -}): Promise => { - // 8.0+ requires internal user to write to system indices - const esClient = (await context.core).elasticsearch.client.asInternalUser; - try { - await esClient.index({ - index: `${ENDPOINT_ACTION_RESPONSES_DS}-default`, - body: { - ...doc, - error: { - code: failedFleetActionErrorCode, - message: 'Failed to deliver action request to fleet', - }, - }, - }); - } catch (e) { - logger.error(e); - } -}; - -export const isolationRequestHandler = function ( - endpointContext: EndpointAppContext, - isolate: boolean -): RequestHandler< - unknown, - unknown, - TypeOf, - SecuritySolutionRequestHandlerContext -> { - return async (context, req, res) => { - endpointContext.service.getFeatureUsageService().notifyUsage('HOST_ISOLATION'); - const user = endpointContext.service.security?.authc.getCurrentUser(req); - - // fetch the Agent IDs to send the commands to - const endpointIDs = [...new Set(req.body.endpoint_ids)]; // dedupe - const endpointData = await getMetadataForEndpoints(endpointIDs, context); - - const casesClient = await endpointContext.service.getCasesClient(req); - - // convert any alert IDs into cases - let caseIDs: string[] = req.body.case_ids?.slice() || []; - if (req.body.alert_ids && req.body.alert_ids.length > 0) { - const newIDs: string[][] = await Promise.all( - req.body.alert_ids.map(async (a: string) => { - const cases: CasesByAlertId = await casesClient.cases.getCasesByAlertID({ - alertID: a, - options: { owner: APP_ID }, - }); - return cases.map((caseInfo): string => { - return caseInfo.id; - }); - }) - ); - caseIDs = caseIDs.concat(...newIDs); - } - caseIDs = [...new Set(caseIDs)]; - - // create an Action ID and dispatch it to ES & Fleet Server - const actionID = uuid.v4(); - - let fleetActionIndexResult; - let logsEndpointActionsResult; - - const agents = endpointData.map((endpoint: HostMetadata) => endpoint.elastic.agent.id); - const doc = { - '@timestamp': moment().toISOString(), - agent: { - id: agents, - }, - EndpointActions: { - action_id: actionID, - expiration: moment().add(2, 'weeks').toISOString(), - type: 'INPUT_ACTION', - input_type: 'endpoint', - data: { - command: isolate ? 'isolate' : 'unisolate', - comment: req.body.comment ?? undefined, - }, - } as Omit, - user: { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - id: user!.username, - }, - }; - - // if .logs-endpoint.actions data stream exists - // try to create action request record in .logs-endpoint.actions DS as the current user - // (from >= v7.16, use this check to ensure the current user has privileges to write to the new index) - // and allow only users with superuser privileges to write to fleet indices - const logger = endpointContext.logFactory.get('host-isolation'); - const doesLogsEndpointActionsDsExist = await doLogsEndpointActionDsExists({ - context, - logger, - dataStreamName: ENDPOINT_ACTIONS_DS, - }); - - // 8.0+ requires internal user to write to system indices - const esClient = (await context.core).elasticsearch.client.asInternalUser; - - // if the new endpoint indices/data streams exists - // write the action request to the new endpoint index - if (doesLogsEndpointActionsDsExist) { - try { - logsEndpointActionsResult = await esClient.index( - { - index: `${ENDPOINT_ACTIONS_DS}-default`, - body: { - ...doc, - }, - refresh: 'wait_for', - }, - { meta: true } - ); - if (logsEndpointActionsResult.statusCode !== 201) { - return res.customError({ - statusCode: 500, - body: { - message: logsEndpointActionsResult.body.result, - }, - }); - } - } catch (e) { - return res.customError({ - statusCode: 500, - body: { message: e }, - }); - } - } - - // write actions to .fleet-actions index - try { - fleetActionIndexResult = await esClient.index( - { - index: AGENT_ACTIONS_INDEX, - body: { - ...doc.EndpointActions, - '@timestamp': doc['@timestamp'], - agents, - timeout: 300, // 5 minutes - user_id: doc.user.id, - }, - refresh: 'wait_for', - }, - { meta: true } - ); - - if (fleetActionIndexResult.statusCode !== 201) { - return res.customError({ - statusCode: 500, - body: { - message: fleetActionIndexResult.body.result, - }, - }); - } - } catch (e) { - // create entry in .logs-endpoint.action.responses-default data stream - // when writing to .fleet-actions fails - if (doesLogsEndpointActionsDsExist) { - await createFailedActionResponseEntry({ - context, - doc: { - '@timestamp': moment().toISOString(), - agent: doc.agent, - EndpointActions: { - action_id: doc.EndpointActions.action_id, - completed_at: moment().toISOString(), - started_at: moment().toISOString(), - data: doc.EndpointActions.data, - }, - }, - logger, - }); - } - return res.customError({ - statusCode: 500, - body: { message: e }, - }); - } - - // Update all cases with a comment - if (caseIDs.length > 0) { - const targets = endpointData.map((endpt: HostMetadata) => ({ - hostname: endpt.host.hostname, - endpointId: endpt.agent.id, - })); - - await Promise.all( - caseIDs.map((caseId) => - casesClient.attachments.add({ - caseId, - comment: { - type: CommentType.actions, - comment: req.body.comment || '', - actions: { - targets, - type: isolate ? 'isolate' : 'unisolate', - }, - owner: APP_ID, - }, - }) - ) - ); - } - - return res.ok({ - body: { - action: actionID, - }, - }); - }; -}; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts index bbcb549f55f74..c91d000f8341c 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts @@ -35,12 +35,14 @@ import { parseExperimentalConfigValue } from '../../../../common/experimental_fe import { LicenseService } from '../../../../common/license'; import { ISOLATE_HOST_ROUTE_V2, - RELEASE_HOST_ROUTE, + UNISOLATE_HOST_ROUTE_V2, metadataTransformPrefix, ENDPOINT_ACTIONS_INDEX, KILL_PROCESS_ROUTE, SUSPEND_PROCESS_ROUTE, GET_RUNNING_PROCESSES_ROUTE, + ISOLATE_HOST_ROUTE, + UNISOLATE_HOST_ROUTE, } from '../../../../common/endpoint/constants'; import { ActionDetails, @@ -221,6 +223,22 @@ describe('Response actions', () => { getActionDetailsByIdSpy.mockClear(); }); + it('correctly redirects legacy isolate to new route', async () => { + await callRoute(ISOLATE_HOST_ROUTE, { body: { endpoint_ids: ['XYZ'] } }); + expect(mockResponse.custom).toBeCalled(); + const response = mockResponse.custom.mock.calls[0][0]; + expect(response.statusCode).toEqual(308); + expect(response.headers?.location).toEqual(ISOLATE_HOST_ROUTE_V2); + }); + + it('correctly redirects legacy release to new route', async () => { + await callRoute(UNISOLATE_HOST_ROUTE, { body: { endpoint_ids: ['XYZ'] } }); + expect(mockResponse.custom).toBeCalled(); + const response = mockResponse.custom.mock.calls[0][0]; + expect(response.statusCode).toEqual(308); + expect(response.headers?.location).toEqual(UNISOLATE_HOST_ROUTE_V2); + }); + it('succeeds when an endpoint ID is provided', async () => { await callRoute(ISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] } }); expect(mockResponse.ok).toBeCalled(); @@ -350,7 +368,7 @@ describe('Response actions', () => { }); it('sends the unisolate command payload from the unisolate route', async () => { - const ctx = await callRoute(RELEASE_HOST_ROUTE, { + const ctx = await callRoute(UNISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] }, }); const actionDoc: EndpointAction = ( @@ -396,7 +414,7 @@ describe('Response actions', () => { describe('With endpoint data streams', () => { it('handles unisolation', async () => { const ctx = await callRoute( - RELEASE_HOST_ROUTE, + UNISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] }, }, @@ -537,7 +555,7 @@ describe('Response actions', () => { it('handles errors', async () => { const ErrMessage = 'Uh oh!'; await callRoute( - RELEASE_HOST_ROUTE, + UNISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] }, idxResponse: { @@ -578,7 +596,7 @@ describe('Response actions', () => { it('allows any license level to unisolate', async () => { licenseEmitter.next(Gold); - await callRoute(RELEASE_HOST_ROUTE, { + await callRoute(UNISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] }, license: Gold, }); @@ -595,7 +613,7 @@ describe('Response actions', () => { }); it('allows user to perform unisolation when canUnIsolateHost is true', async () => { - await callRoute(RELEASE_HOST_ROUTE, { + await callRoute(UNISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] }, }); expect(mockResponse.ok).toBeCalled(); @@ -610,7 +628,7 @@ describe('Response actions', () => { }); it('prohibits user from performing un-isolation if canUnIsolateHost is false', async () => { - await callRoute(RELEASE_HOST_ROUTE, { + await callRoute(UNISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] }, authz: { canUnIsolateHost: false }, }); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts index 71c61d8aacce8..5d024488d4958 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts @@ -22,13 +22,15 @@ import { import { APP_ID } from '../../../../common/constants'; import { ISOLATE_HOST_ROUTE_V2, - RELEASE_HOST_ROUTE, + UNISOLATE_HOST_ROUTE_V2, ENDPOINT_ACTIONS_DS, ENDPOINT_ACTION_RESPONSES_DS, failedFleetActionErrorCode, KILL_PROCESS_ROUTE, SUSPEND_PROCESS_ROUTE, GET_RUNNING_PROCESSES_ROUTE, + ISOLATE_HOST_ROUTE, + UNISOLATE_HOST_ROUTE, } from '../../../../common/endpoint/constants'; import type { EndpointAction, @@ -56,6 +58,34 @@ export function registerResponseActionRoutes( ) { const logger = endpointContext.logFactory.get('hostIsolation'); + /** + * @deprecated use ISOLATE_HOST_ROUTE_V2 instead + */ + router.post( + { + path: ISOLATE_HOST_ROUTE, + validate: NoParametersRequestSchema, + options: { authRequired: true, tags: ['access:securitySolution'] }, + }, + withEndpointAuthz({ all: ['canIsolateHost'] }, logger, redirectHandler(ISOLATE_HOST_ROUTE_V2)) + ); + + /** + * @deprecated use RELEASE_HOST_ROUTE instead + */ + router.post( + { + path: UNISOLATE_HOST_ROUTE, + validate: NoParametersRequestSchema, + options: { authRequired: true, tags: ['access:securitySolution'] }, + }, + withEndpointAuthz( + { all: ['canUnIsolateHost'] }, + logger, + redirectHandler(UNISOLATE_HOST_ROUTE_V2) + ) + ); + router.post( { path: ISOLATE_HOST_ROUTE_V2, @@ -71,7 +101,7 @@ export function registerResponseActionRoutes( router.post( { - path: RELEASE_HOST_ROUTE, + path: UNISOLATE_HOST_ROUTE_V2, validate: NoParametersRequestSchema, options: { authRequired: true, tags: ['access:securitySolution'] }, }, @@ -364,3 +394,19 @@ const createFailedActionResponseEntry = async ({ logger.error(e); } }; + +function redirectHandler( + location: string +): RequestHandler< + unknown, + unknown, + TypeOf, + SecuritySolutionRequestHandlerContext +> { + return async (_context, _req, res) => { + return res.custom({ + statusCode: 308, + headers: { location }, + }); + }; +} From e1eb3db9161243e881089019e2e3b6e1bc61cdc3 Mon Sep 17 00:00:00 2001 From: Clint Andrew Hall Date: Tue, 21 Jun 2022 11:10:00 -0500 Subject: [PATCH 44/50] [Shared UX] Move No Data Cards to packages (#134503) * [Shared UX] Move No Data Cards to packages * Consolidate cards * Fix some Regex mistakes * Adjust Storybook a bit * Adjust tests and context arrangement * Fix bugs; kill bad snapshots; improve tests --- package.json | 2 + packages/BUILD.bazel | 2 + packages/kbn-shared-ux-components/BUILD.bazel | 2 + .../src/page_template/index.ts | 2 +- .../__snapshots__/no_data_page.test.tsx.snap | 55 --- .../src/page_template/no_data_page/index.ts | 1 - ...elastic_agent_card.component.test.tsx.snap | 104 ----- .../elastic_agent_card.test.tsx.snap | 75 ---- .../__snapshots__/no_data_card.test.tsx.snap | 231 ------------ .../elastic_agent_card.component.test.tsx | 43 --- .../elastic_agent_card.component.tsx | 83 ---- .../elastic_agent_card.stories.tsx | 42 --- .../no_data_card/elastic_agent_card.test.tsx | 78 ---- .../no_data_card/elastic_agent_card.tsx | 45 --- .../no_data_card/no_data_card.stories.tsx | 37 -- .../no_data_card/no_data_card.tsx | 65 ---- .../no_data_page/no_data_card/types.ts | 34 -- .../no_data_page/no_data_page.test.tsx | 29 +- .../no_data_page/no_data_page.tsx | 21 +- .../src/page_template/no_data_page/types.ts | 4 +- .../src/config/main.ts | 3 + packages/shared-ux/card/no_data/BUILD.bazel | 143 +++++++ packages/shared-ux/card/no_data/README.mdx | 29 ++ .../card/no_data/jest.config.js} | 9 +- packages/shared-ux/card/no_data/package.json | 8 + .../no_data_card.component.test.tsx.snap | 117 ++++++ .../__snapshots__/no_data_card.test.tsx.snap | 356 ++++++++++++++++++ .../src}/assets/elastic_agent_card.svg | 0 packages/shared-ux/card/no_data/src/index.ts | 19 + packages/shared-ux/card/no_data/src/mocks.ts | 88 +++++ .../src/no_data_card.component.test.tsx | 36 ++ .../no_data/src/no_data_card.component.tsx | 136 +++++++ .../card/no_data/src/no_data_card.stories.tsx | 45 +++ .../card/no_data/src}/no_data_card.styles.ts | 0 .../card/no_data/src}/no_data_card.test.tsx | 24 +- .../card/no_data/src/no_data_card.tsx | 41 ++ .../shared-ux/card/no_data/src/services.tsx | 97 +++++ packages/shared-ux/card/no_data/tsconfig.json | 20 + .../shared-ux/link/redirect_app/src/index.tsx | 35 +- .../shared-ux/link/redirect_app/src/mocks.ts | 46 +++ .../src/redirect_app_links.component.tsx | 9 +- .../src/redirect_app_links.stories.tsx | 19 +- .../redirect_app/src/redirect_app_links.tsx | 13 +- .../link/redirect_app/src/services.tsx | 7 +- .../src/analytics_no_data_page.stories.tsx | 2 +- .../src/kibana_no_data_page.stories.tsx | 2 +- .../page/kibana_no_data/src/mocks.ts | 15 + .../page/kibana_no_data/src/services.tsx | 10 +- .../translations/translations/fr-FR.json | 9 +- .../translations/translations/ja-JP.json | 9 +- .../translations/translations/zh-CN.json | 9 +- yarn.lock | 8 + 52 files changed, 1341 insertions(+), 978 deletions(-) delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/__snapshots__/no_data_page.test.tsx.snap delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.component.test.tsx.snap delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.test.tsx.snap delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/no_data_card.test.tsx.snap delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.test.tsx delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.tsx delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.stories.tsx delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.test.tsx delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.tsx delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.stories.tsx delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.tsx delete mode 100644 packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/types.ts create mode 100644 packages/shared-ux/card/no_data/BUILD.bazel create mode 100644 packages/shared-ux/card/no_data/README.mdx rename packages/{kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/index.ts => shared-ux/card/no_data/jest.config.js} (67%) create mode 100644 packages/shared-ux/card/no_data/package.json create mode 100644 packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.component.test.tsx.snap create mode 100644 packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.test.tsx.snap rename packages/{kbn-shared-ux-components/src/page_template/no_data_page/no_data_card => shared-ux/card/no_data/src}/assets/elastic_agent_card.svg (100%) create mode 100644 packages/shared-ux/card/no_data/src/index.ts create mode 100644 packages/shared-ux/card/no_data/src/mocks.ts create mode 100644 packages/shared-ux/card/no_data/src/no_data_card.component.test.tsx create mode 100644 packages/shared-ux/card/no_data/src/no_data_card.component.tsx create mode 100644 packages/shared-ux/card/no_data/src/no_data_card.stories.tsx rename packages/{kbn-shared-ux-components/src/page_template/no_data_page/no_data_card => shared-ux/card/no_data/src}/no_data_card.styles.ts (100%) rename packages/{kbn-shared-ux-components/src/page_template/no_data_page/no_data_card => shared-ux/card/no_data/src}/no_data_card.test.tsx (73%) create mode 100644 packages/shared-ux/card/no_data/src/no_data_card.tsx create mode 100644 packages/shared-ux/card/no_data/src/services.tsx create mode 100644 packages/shared-ux/card/no_data/tsconfig.json create mode 100644 packages/shared-ux/link/redirect_app/src/mocks.ts diff --git a/package.json b/package.json index dcf846f3dd039..57492fc0c6b6a 100644 --- a/package.json +++ b/package.json @@ -210,6 +210,7 @@ "@kbn/shared-ux-avatar-solution": "link:bazel-bin/packages/shared-ux/avatar/solution", "@kbn/shared-ux-button-exit-full-screen": "link:bazel-bin/packages/shared-ux/button/exit_full_screen", "@kbn/shared-ux-button-toolbar": "link:bazel-bin/packages/shared-ux/button_toolbar", + "@kbn/shared-ux-card-no-data": "link:bazel-bin/packages/shared-ux/card/no_data", "@kbn/shared-ux-components": "link:bazel-bin/packages/kbn-shared-ux-components", "@kbn/shared-ux-link-redirect-app": "link:bazel-bin/packages/shared-ux/link/redirect_app", "@kbn/shared-ux-page-analytics-no-data": "link:bazel-bin/packages/shared-ux/page/analytics_no_data", @@ -750,6 +751,7 @@ "@types/kbn__shared-ux-avatar-solution": "link:bazel-bin/packages/shared-ux/avatar/solution/npm_module_types", "@types/kbn__shared-ux-button-exit-full-screen": "link:bazel-bin/packages/shared-ux/button/exit_full_screen/npm_module_types", "@types/kbn__shared-ux-button-toolbar": "link:bazel-bin/packages/shared-ux/button_toolbar/npm_module_types", + "@types/kbn__shared-ux-card-no-data": "link:bazel-bin/packages/shared-ux/card/no_data/npm_module_types", "@types/kbn__shared-ux-components": "link:bazel-bin/packages/kbn-shared-ux-components/npm_module_types", "@types/kbn__shared-ux-link-redirect-app": "link:bazel-bin/packages/shared-ux/link/redirect_app/npm_module_types", "@types/kbn__shared-ux-page-analytics-no-data": "link:bazel-bin/packages/shared-ux/page/analytics_no_data/npm_module_types", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index cc5c0e13dcccf..6c65af1a97e91 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -146,6 +146,7 @@ filegroup( "//packages/shared-ux/avatar/solution:build", "//packages/shared-ux/button_toolbar:build", "//packages/shared-ux/button/exit_full_screen:build", + "//packages/shared-ux/card/no_data:build", "//packages/shared-ux/link/redirect_app:build", "//packages/shared-ux/page/analytics_no_data:build", "//packages/shared-ux/page/kibana_no_data:build", @@ -279,6 +280,7 @@ filegroup( "//packages/shared-ux/avatar/solution:build_types", "//packages/shared-ux/button_toolbar:build_types", "//packages/shared-ux/button/exit_full_screen:build_types", + "//packages/shared-ux/card/no_data:build_types", "//packages/shared-ux/link/redirect_app:build_types", "//packages/shared-ux/page/analytics_no_data:build_types", "//packages/shared-ux/page/kibana_no_data:build_types", diff --git a/packages/kbn-shared-ux-components/BUILD.bazel b/packages/kbn-shared-ux-components/BUILD.bazel index 1a4a7100ded72..20d71557fef9a 100644 --- a/packages/kbn-shared-ux-components/BUILD.bazel +++ b/packages/kbn-shared-ux-components/BUILD.bazel @@ -45,6 +45,7 @@ RUNTIME_DEPS = [ "//packages/shared-ux/avatar/solution", "//packages/shared-ux/link/redirect_app", "//packages/shared-ux/prompt/no_data_views", + "//packages/shared-ux/card/no_data", "//packages/kbn-shared-ux-services", "//packages/kbn-shared-ux-storybook", "//packages/kbn-shared-ux-utility", @@ -74,6 +75,7 @@ TYPES_DEPS = [ "//packages/shared-ux/avatar/solution:npm_module_types", "//packages/shared-ux/link/redirect_app:npm_module_types", "//packages/shared-ux/prompt/no_data_views:npm_module_types", + "//packages/shared-ux/card/no_data:npm_module_types", "//packages/kbn-shared-ux-services:npm_module_types", "//packages/kbn-shared-ux-storybook:npm_module_types", "//packages/kbn-shared-ux-utility:npm_module_types", diff --git a/packages/kbn-shared-ux-components/src/page_template/index.ts b/packages/kbn-shared-ux-components/src/page_template/index.ts index 671f720972fc9..cd7d6232d9a8b 100644 --- a/packages/kbn-shared-ux-components/src/page_template/index.ts +++ b/packages/kbn-shared-ux-components/src/page_template/index.ts @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -export { NoDataCard, ElasticAgentCard, NoDataPage, NoDataConfigPage } from './no_data_page'; +export { NoDataPage, NoDataConfigPage } from './no_data_page'; export { KibanaPageTemplate } from './page_template'; export type { KibanaPageTemplateProps } from './types'; export type { NoDataPageProps } from './no_data_page'; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/__snapshots__/no_data_page.test.tsx.snap b/packages/kbn-shared-ux-components/src/page_template/no_data_page/__snapshots__/no_data_page.test.tsx.snap deleted file mode 100644 index 5fd29bc57b331..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/__snapshots__/no_data_page.test.tsx.snap +++ /dev/null @@ -1,55 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NoDataPage render 1`] = ` -

- - - -

- Welcome to Elastic Analytics! -

- -

- - - , - "solution": "Analytics", - } - } - /> -

-
-
- - -
-`; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/index.ts b/packages/kbn-shared-ux-components/src/page_template/no_data_page/index.ts index 894097727cd1f..a6f8c91f7614c 100644 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/index.ts +++ b/packages/kbn-shared-ux-components/src/page_template/no_data_page/index.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -export { NoDataCard, ElasticAgentCard } from './no_data_card'; export { NoDataPage } from './no_data_page'; export type { NoDataPageProps } from './types'; export { NoDataConfigPage, NoDataConfigPageWithSolutionNavBar } from './no_data_config_page'; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.component.test.tsx.snap b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.component.test.tsx.snap deleted file mode 100644 index c871196b92282..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.component.test.tsx.snap +++ /dev/null @@ -1,104 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ElasticAgentCardComponent props button 1`] = ` - - } - title="Add Elastic Agent" -/> -`; - -exports[`ElasticAgentCardComponent props href 1`] = ` - - } - title="Add Elastic Agent" -/> -`; - -exports[`ElasticAgentCardComponent renders 1`] = ` - - } - title="Add Elastic Agent" -/> -`; - -exports[`ElasticAgentCardComponent renders with canAccessFleet false 1`] = ` - - This integration is not yet enabled. Your administrator has the required permissions to turn it on. - - } - image={ - - } - isDisabled={true} - title={ - - Contact your administrator - - } -/> -`; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.test.tsx.snap b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.test.tsx.snap deleted file mode 100644 index dbdb652a10c1f..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/elastic_agent_card.test.tsx.snap +++ /dev/null @@ -1,75 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ElasticAgentCard renders 1`] = ` -
-
-
-
-
- -
-
-
-
- - - - Add Elastic Agent - - - -
-

- Use Elastic Agent for a simple, unified way to collect data from your machines. -

-
-
- -
-
-`; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/no_data_card.test.tsx.snap b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/no_data_card.test.tsx.snap deleted file mode 100644 index 0028d505e9187..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/__snapshots__/no_data_card.test.tsx.snap +++ /dev/null @@ -1,231 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NoDataCard props button 1`] = ` -
-
- - - Card title - - -
-

- Description -

-
-
- -
-`; - -exports[`NoDataCard props extends EuiCardProps 1`] = ` -
-
- - - Card title - - -
-

- Description -

-
-
- -
-`; - -exports[`NoDataCard props href 1`] = ` -
-
- - - - Card title - - - -
-

- Description -

-
-
- -
-`; - -exports[`NoDataCard props isDisabled 1`] = ` -
-
- - - -
-

- Description -

-
-
-
-`; - -exports[`NoDataCard renders 1`] = ` -
-
- - - Card title - - -
-

- Description -

-
-
- -
-`; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.test.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.test.tsx deleted file mode 100644 index 367fcd10b96a9..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.test.tsx +++ /dev/null @@ -1,43 +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. - */ - -import { shallow } from 'enzyme'; -import React from 'react'; -import { ElasticAgentCardComponent } from './elastic_agent_card.component'; -import { NoDataCard } from './no_data_card'; - -describe('ElasticAgentCardComponent', () => { - test('renders', () => { - const component = shallow(); - expect(component).toMatchSnapshot(); - }); - - test('renders with canAccessFleet false', () => { - const component = shallow(); - expect(component.find(NoDataCard).props().isDisabled).toBe(true); - expect(component).toMatchSnapshot(); - }); - - describe('props', () => { - test('button', () => { - const component = shallow( - - ); - expect(component.find(NoDataCard).props().button).toBe('Button'); - expect(component).toMatchSnapshot(); - }); - - test('href', () => { - const component = shallow( - - ); - expect(component.find(NoDataCard).props().href).toBe('some path'); - expect(component).toMatchSnapshot(); - }); - }); -}); diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.tsx deleted file mode 100644 index 31d0aad7cc631..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.component.tsx +++ /dev/null @@ -1,83 +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. - */ - -import React, { FunctionComponent } from 'react'; -import { i18n } from '@kbn/i18n'; -import { EuiImage, EuiTextColor } from '@elastic/eui'; -import { ElasticAgentCardProps } from './types'; -import { NoDataCard } from './no_data_card'; -import ElasticAgentCardIllustration from './assets/elastic_agent_card.svg'; - -export type ElasticAgentCardComponentProps = ElasticAgentCardProps & { - canAccessFleet: boolean; -}; - -const noPermissionTitle = i18n.translate( - 'sharedUXComponents.noDataPage.elasticAgentCard.noPermission.title', - { - defaultMessage: `Contact your administrator`, - } -); - -const noPermissionDescription = i18n.translate( - 'sharedUXComponents.noDataPage.elasticAgentCard.noPermission.description', - { - defaultMessage: `This integration is not yet enabled. Your administrator has the required permissions to turn it on.`, - } -); - -const elasticAgentCardTitle = i18n.translate( - 'sharedUXComponents.noDataPage.elasticAgentCard.title', - { - defaultMessage: 'Add Elastic Agent', - } -); - -const elasticAgentCardDescription = i18n.translate( - 'sharedUXComponents.noDataPage.elasticAgentCard.description', - { - defaultMessage: `Use Elastic Agent for a simple, unified way to collect data from your machines.`, - } -); - -/** - * Creates a specific NoDataCard pointing users to Integrations when `canAccessFleet` - */ -export const ElasticAgentCardComponent: FunctionComponent = ({ - canAccessFleet, - title = elasticAgentCardTitle, - description, - ...cardRest -}) => { - const props = canAccessFleet - ? { - title, - description: description || elasticAgentCardDescription, - } - : { - title: {noPermissionTitle}, - description: {noPermissionDescription}, - isDisabled: true, - }; - - const image = ( - - ); - - return ; -}; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.stories.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.stories.tsx deleted file mode 100644 index a87da6ff9ca0e..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.stories.tsx +++ /dev/null @@ -1,42 +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. - */ - -import React from 'react'; - -import { - ElasticAgentCardComponent as Component, - ElasticAgentCardComponentProps as ComponentProps, -} from './elastic_agent_card.component'; - -import { ElasticAgentCard } from './elastic_agent_card'; - -export default { - title: 'Page Template/No Data/Elastic Agent Data Card', - description: 'A solution-specific wrapper around NoDataCard, to be used on NoData page', -}; - -type Params = Pick; - -export const PureComponent = (params: Params) => { - return ; -}; - -PureComponent.argTypes = { - canAccessFleet: { - control: 'boolean', - defaultValue: true, - }, - description: { - control: 'text', - defaultValue: '', - }, -}; - -export const ConnectedComponent = () => { - return ; -}; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.test.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.test.tsx deleted file mode 100644 index ed0b4471fa32c..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.test.tsx +++ /dev/null @@ -1,78 +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. - */ - -import { ReactWrapper } from 'enzyme'; -import React from 'react'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; -import { - SharedUxServicesProvider, - SharedUxServices, - mockServicesFactory, -} from '@kbn/shared-ux-services'; - -import { ElasticAgentCard } from './elastic_agent_card'; -import { ElasticAgentCardComponent } from './elastic_agent_card.component'; - -describe('ElasticAgentCard', () => { - let services: SharedUxServices; - let mount: (element: JSX.Element) => ReactWrapper; - - beforeEach(() => { - services = mockServicesFactory(); - mount = (element: JSX.Element) => - mountWithIntl({element}); - }); - - afterEach(() => { - jest.resetAllMocks(); - }); - - test('renders', () => { - const component = mount(); - expect(component.render()).toMatchSnapshot(); - }); - - describe('href', () => { - test('returns href if href is given', () => { - const component = mount(); - expect(component.find(ElasticAgentCardComponent).props().href).toBe('/take/me/somewhere'); - }); - - test('returns prefix + category if href is not given', () => { - const component = mount(); - expect(component.find(ElasticAgentCardComponent).props().href).toBe( - '/app/integrations/browse/solutions' - ); - }); - - test('returns prefix if nor category nor href are given', () => { - const component = mount(); - expect(component.find(ElasticAgentCardComponent).props().href).toBe( - '/app/integrations/browse' - ); - }); - }); - - describe('description', () => { - test('renders custom description if provided', () => { - const component = mount( - - ); - expect(component.find(ElasticAgentCardComponent).props().description).toBe( - 'Build seamless search experiences faster.' - ); - }); - }); - - describe('canAccessFleet', () => { - test('passes in the right parameter', () => { - const component = mount(); - expect(component.find(ElasticAgentCardComponent).props().canAccessFleet).toBe(true); - }); - }); -}); diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.tsx deleted file mode 100644 index a4025f33616ed..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/elastic_agent_card.tsx +++ /dev/null @@ -1,45 +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. - */ - -import React, { useMemo } from 'react'; -import { useApplication, useHttp, usePermissions } from '@kbn/shared-ux-services'; -import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; -import useObservable from 'react-use/lib/useObservable'; - -import { ElasticAgentCardProps } from './types'; -import { ElasticAgentCardComponent } from './elastic_agent_card.component'; - -export const ElasticAgentCard = (props: ElasticAgentCardProps) => { - const { canAccessFleet } = usePermissions(); - const { addBasePath } = useHttp(); - const { navigateToUrl, currentAppId$ } = useApplication(); - const currentAppId = useObservable(currentAppId$); - - const { href: srcHref, category, description } = props; - - const href = useMemo(() => { - if (srcHref) { - return srcHref; - } - - // TODO: get this URL from a locator - const prefix = '/app/integrations/browse'; - - if (category) { - return addBasePath(`${prefix}/${category}`); - } - - return addBasePath(prefix); - }, [addBasePath, srcHref, category]); - - return ( - - - - ); -}; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.stories.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.stories.tsx deleted file mode 100644 index 9c1b2d0322074..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.stories.tsx +++ /dev/null @@ -1,37 +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. - */ - -import React from 'react'; -import { NoDataCard } from './no_data_card'; -import type { NoDataCardProps } from './types'; - -export default { - title: 'Page Template/No Data/No Data Card', - description: 'A wrapper around EuiCard, to be used on NoData page', -}; - -type Params = Pick; - -export const PureComponent = (params: Params) => { - return ; -}; - -PureComponent.argTypes = { - button: { - control: { - type: 'text', - }, - defaultValue: 'Button text', - }, - description: { - control: { - type: 'text', - }, - defaultValue: 'This is a description', - }, -}; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.tsx deleted file mode 100644 index 508d03d5028b8..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.tsx +++ /dev/null @@ -1,65 +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. - */ - -import { i18n } from '@kbn/i18n'; -import React, { FunctionComponent } from 'react'; -import { EuiButton, EuiCard, EuiScreenReaderOnly } from '@elastic/eui'; - -import type { NoDataCardProps } from './types'; -import { NoDataCardStyles } from './no_data_card.styles'; - -const defaultDescription = i18n.translate( - 'sharedUXComponents.pageTemplate.noDataCard.description', - { - defaultMessage: `Proceed without collecting data`, - } -); - -export const NoDataCard: FunctionComponent = ({ - title: titleProp, - button, - description, - isDisabled, - ...cardRest -}) => { - const styles = NoDataCardStyles(); - - const footer = () => { - // Don't render the footer action if disabled - if (isDisabled) { - return; - } - // Render a custom footer action if the button is not a simple string - if (button && typeof button !== 'string') { - return button; - } - // Default footer action is a button with the provided or default string - return {button || titleProp}; - }; - - const cardDescription = description || defaultDescription; - - // Fix the need for an a11y title even though the button exists by setting to screen reader only - const title = titleProp ? ( - - {titleProp} - - ) : null; - - return ( - - ); -}; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/types.ts b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/types.ts deleted file mode 100644 index fef4f654ce970..0000000000000 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/types.ts +++ /dev/null @@ -1,34 +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. - */ - -import { EuiCardProps } from '@elastic/eui'; -import { MouseEventHandler, ReactNode } from 'react'; - -export type NoDataCardProps = Partial> & { - /** - * Provide just a string for the button's label, or a whole component; - * The button will be hidden completely if `isDisabled=true` - */ - button?: string | ReactNode; - /** - * Remapping `onClick` to any element - */ - onClick?: MouseEventHandler; - /** - * Description for the card; - * If not provided, the default will be used - */ - description?: string | ReactNode; -}; - -export type ElasticAgentCardProps = NoDataCardProps & { - /** - * Category to auto-select within Fleet - */ - category?: string; -}; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.test.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.test.tsx index c84dea27552aa..b9474285469e1 100644 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.test.tsx +++ b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.test.tsx @@ -7,24 +7,27 @@ */ import React from 'react'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import { NoDataCard } from '@kbn/shared-ux-card-no-data'; +import { SharedUxServicesProvider, mockServicesFactory } from '@kbn/shared-ux-services'; + import { NoDataPage } from './no_data_page'; -import { shallowWithIntl } from '@kbn/test-jest-helpers'; -import { ElasticAgentCard } from './no_data_card'; describe('NoDataPage', () => { test('render', () => { - const component = shallowWithIntl( - + const component = mountWithIntl( + + + ); - expect(component).toMatchSnapshot(); expect(component.find('h1').html()).toContain('Welcome to Elastic Analytics!'); - expect(component.find(ElasticAgentCard).length).toBe(1); + expect(component.find(NoDataCard).length).toBe(1); }); }); diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.tsx b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.tsx index 093a76d17759f..724570d4baccd 100644 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.tsx +++ b/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_page.tsx @@ -7,6 +7,7 @@ */ import React, { useMemo, FunctionComponent } from 'react'; +import useObservable from 'react-use/lib/useObservable'; import classNames from 'classnames'; import { EuiLink, EuiSpacer, EuiText, EuiTextColor } from '@elastic/eui'; @@ -14,7 +15,8 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { KibanaSolutionAvatar } from '@kbn/shared-ux-avatar-solution'; -import { ElasticAgentCard } from './no_data_card'; +import { useSharedUxServices } from '@kbn/shared-ux-services'; +import { NoDataCard, NoDataCardProvider } from '@kbn/shared-ux-card-no-data'; import { NoDataPageProps } from './types'; export const NoDataPage: FunctionComponent = ({ @@ -25,6 +27,19 @@ export const NoDataPage: FunctionComponent = ({ pageTitle, ...rest }) => { + const services = useSharedUxServices(); + + // TODO: clintandrewhall - including the `NoDataCardProvider` here is a temporary solution + // to consumers using this context to populate the NoDataPage. This will likely be removed soon, + // when NoDataPage is moved to its own package. + const currentAppId = useObservable(services.application.currentAppId$); + const noDataCardServices = { + currentAppId, + addBasePath: services.http.addBasePath, + canAccessFleet: services.permissions.canAccessFleet, + navigateToUrl: services.application.navigateToUrl, + }; + const actionKeys = Object.keys(action); const actionCard = useMemo(() => { @@ -34,7 +49,7 @@ export const NoDataPage: FunctionComponent = ({ const actionKey = actionKeys[0]; const key = actionKey === 'elasticAgent' ? 'empty-page-agent-action' : `empty-page-${actionKey}-action`; - return ; + return ; }, [action, actionKeys]); const title = @@ -74,7 +89,7 @@ export const NoDataPage: FunctionComponent = ({ - {actionCard} + {actionCard} ); }; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/types.ts b/packages/kbn-shared-ux-components/src/page_template/no_data_page/types.ts index b304a1462a278..e22f7a7b81a77 100644 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/types.ts +++ b/packages/kbn-shared-ux-components/src/page_template/no_data_page/types.ts @@ -7,9 +7,9 @@ */ import { CommonProps } from '@elastic/eui'; -import { ElasticAgentCardProps } from './no_data_card'; +import { NoDataCardProps } from '@kbn/shared-ux-card-no-data'; -export type NoDataPageActions = ElasticAgentCardProps; +export type NoDataPageActions = NoDataCardProps; export interface NoDataPageProps extends CommonProps { /** diff --git a/packages/kbn-shared-ux-storybook/src/config/main.ts b/packages/kbn-shared-ux-storybook/src/config/main.ts index ccd0d1e73cba8..6e57ca8ad5e72 100644 --- a/packages/kbn-shared-ux-storybook/src/config/main.ts +++ b/packages/kbn-shared-ux-storybook/src/config/main.ts @@ -15,4 +15,7 @@ module.exports = { '../../../kbn-shared-ux*/**/*.stories.+(tsx|mdx)', '../../../../src/plugins/shared_ux/**/*.stories.+(tsx|mdx)', ], + reactOptions: { + strictMode: true, + }, }; diff --git a/packages/shared-ux/card/no_data/BUILD.bazel b/packages/shared-ux/card/no_data/BUILD.bazel new file mode 100644 index 0000000000000..ae3e21ba55247 --- /dev/null +++ b/packages/shared-ux/card/no_data/BUILD.bazel @@ -0,0 +1,143 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "no_data" +PKG_REQUIRE_NAME = "@kbn/shared-ux-card-no-data" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.mdx", + "src/**/*.svg", + ], + exclude = [ + "**/*.test.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +# In this array place runtime dependencies, including other packages and NPM packages +# which must be available for this code to run. +# +# To reference other packages use: +# "//repo/relative/path/to/package" +# eg. "//packages/kbn-utils" +# +# To reference a NPM package use: +# "@npm//name-of-package" +# eg. "@npm//lodash" +RUNTIME_DEPS = [ + "@npm//@elastic/eui", + "@npm//@storybook/addon-actions", + "@npm//enzyme", + "@npm//react", + "//packages/kbn-i18n-react", + "//packages/kbn-i18n", + "//packages/shared-ux/link/redirect_app", +] + +# In this array place dependencies necessary to build the types, which will include the +# :npm_module_types target of other packages and packages from NPM, including @types/* +# packages. +# +# To reference the types for another package use: +# "//repo/relative/path/to/package:npm_module_types" +# eg. "//packages/kbn-utils:npm_module_types" +# +# References to NPM packages work the same as RUNTIME_DEPS +TYPES_DEPS = [ + "@npm//@elastic/eui", + "@npm//@storybook/addon-actions", + "@npm//@types/enzyme", + "@npm//@types/jest", + "@npm//@types/node", + "@npm//@types/react", + "//packages/kbn-ambient-ui-types", + "//packages/kbn-i18n-react:npm_module_types", + "//packages/kbn-i18n:npm_module_types", + "//packages/shared-ux/link/redirect_app:npm_module_types", +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, + additional_args = [ + "--copy-files", + "--quiet" + ], +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/shared-ux/card/no_data/README.mdx b/packages/shared-ux/card/no_data/README.mdx new file mode 100644 index 0000000000000..e2b044c27ac44 --- /dev/null +++ b/packages/shared-ux/card/no_data/README.mdx @@ -0,0 +1,29 @@ +--- +id: sharedUX/Components/NoDataCard +slug: /shared-ux/components/no-data-card +title: No Data Card +summary: A card displayed when no data is available is available in Kibana. +tags: ['shared-ux', 'component'] +date: 2022-06-15 +--- + +## Description + +A wrapper around `EuiCard` tailored for use in Kibana solutions when no data is available. + +## Usage + +All of the `EuiCard` props are available with the exception of `layout`. A default `description` and `button` are provided, but can be overridden in specific use cases. + +The `NoDataCard` connected component uses: + +- `navLinks.integrations` from `coreStart.application.capabilities` to determine if the user has access to the Integrations page. +- `addBasePath` from `coreStart` to navigate to the Integrations page. + +## API +| Export | Description | +|---|---| +| `NoDataCardProvider` | Provides contextual services to `NoDataCard`. | +| `NoDataCardKibanaProvider` | Maps Kibana dependencies to provide contextual services to `NoDataCard`. | +| `NoDataCard` | Uses a `Provider` to access contextual services to populate props on the `NoDataCardComponent`. | +| `NoDataCardComponent` | The pure component, a pre-configured **EuiCard**. | \ No newline at end of file diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/index.ts b/packages/shared-ux/card/no_data/jest.config.js similarity index 67% rename from packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/index.ts rename to packages/shared-ux/card/no_data/jest.config.js index e4cdeb401584f..47ce28115535f 100644 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/index.ts +++ b/packages/shared-ux/card/no_data/jest.config.js @@ -5,6 +5,9 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -export { NoDataCard } from './no_data_card'; -export { ElasticAgentCard } from './elastic_agent_card'; -export type { NoDataCardProps, ElasticAgentCardProps } from './types'; + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/shared-ux/card/no_data'], +}; diff --git a/packages/shared-ux/card/no_data/package.json b/packages/shared-ux/card/no_data/package.json new file mode 100644 index 0000000000000..a1d3efd5a6985 --- /dev/null +++ b/packages/shared-ux/card/no_data/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/shared-ux-card-no-data", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.component.test.tsx.snap b/packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.component.test.tsx.snap new file mode 100644 index 0000000000000..17eb4ef8804cd --- /dev/null +++ b/packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.component.test.tsx.snap @@ -0,0 +1,117 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NoDataCardComponent props button 1`] = ` + + Button + + } + image={} + isDisabled={false} + paddingSize="l" + title={ + + + Add Elastic Agent + + + } +/> +`; + +exports[`NoDataCardComponent props href 1`] = ` + + Add Elastic Agent + + } + href="some path" + image={} + isDisabled={false} + paddingSize="l" + title={ + + + Add Elastic Agent + + + } +/> +`; + +exports[`NoDataCardComponent renders 1`] = ` + + Add Elastic Agent + + } + image={} + isDisabled={false} + paddingSize="l" + title={ + + + Add Elastic Agent + + + } +/> +`; + +exports[`NoDataCardComponent renders with canAccessFleet false 1`] = ` + + This integration is not yet enabled. Your administrator has the required permissions to turn it on. + + } + image={} + isDisabled={true} + paddingSize="l" + title={ + + Contact your administrator + + } +/> +`; diff --git a/packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.test.tsx.snap b/packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.test.tsx.snap new file mode 100644 index 0000000000000..1f4277ffd139f --- /dev/null +++ b/packages/shared-ux/card/no_data/src/__snapshots__/no_data_card.test.tsx.snap @@ -0,0 +1,356 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NoDataCard props button 1`] = ` +
+
+
+
+
+ +
+
+
+
+ + + + Card title + + + +
+

+ Description +

+
+
+ +
+
+`; + +exports[`NoDataCard props extends EuiCardProps 1`] = ` +
+
+
+
+
+ +
+
+
+
+ + + + Card title + + + +
+

+ Description +

+
+
+ +
+
+`; + +exports[`NoDataCard props href 1`] = ` +
+
+
+
+
+ +
+
+
+
+ + + + Card title + + + +
+

+ Description +

+
+
+ +
+
+`; + +exports[`NoDataCard props no access to Fleet 1`] = ` +
+
+
+
+
+ +
+
+
+
+ + + +
+

+ + This integration is not yet enabled. Your administrator has the required permissions to turn it on. + +

+
+
+
+
+`; + +exports[`NoDataCard renders 1`] = ` +
+
+
+
+
+ +
+
+
+
+ + + + Card title + + + +
+

+ Description +

+
+
+ +
+
+`; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/assets/elastic_agent_card.svg b/packages/shared-ux/card/no_data/src/assets/elastic_agent_card.svg similarity index 100% rename from packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/assets/elastic_agent_card.svg rename to packages/shared-ux/card/no_data/src/assets/elastic_agent_card.svg diff --git a/packages/shared-ux/card/no_data/src/index.ts b/packages/shared-ux/card/no_data/src/index.ts new file mode 100644 index 0000000000000..24463007b5a8c --- /dev/null +++ b/packages/shared-ux/card/no_data/src/index.ts @@ -0,0 +1,19 @@ +/* + * 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. + */ + +export { NoDataCard } from './no_data_card'; +export type { Props as NoDataCardProps } from './no_data_card'; + +export { NoDataCardKibanaProvider, NoDataCardProvider } from './services'; +export type { NoDataCardKibanaDependencies, NoDataCardServices } from './services'; + +export { + getMockServices as getNoDataCardMockServices, + getStoryArgTypes as getNoDataCardStoryArgTypes, + getStoryServices as getNoDataCardStoryServices, +} from './mocks'; diff --git a/packages/shared-ux/card/no_data/src/mocks.ts b/packages/shared-ux/card/no_data/src/mocks.ts new file mode 100644 index 0000000000000..d5ec849e1456b --- /dev/null +++ b/packages/shared-ux/card/no_data/src/mocks.ts @@ -0,0 +1,88 @@ +/* + * 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. + */ + +import { action } from '@storybook/addon-actions'; +import { + getRedirectAppLinksMockServices, + getRedirectAppLinksStoryArgTypes, + getRedirectAppLinksStoryServices, +} from '@kbn/shared-ux-link-redirect-app'; + +import { NoDataCardServices } from './services'; + +/** + * Parameters drawn from the Storybook arguments collection that customize a component story. + */ +export type Params = Record, any>; + +/** + * Returns Storybook-compatible service abstractions for the `NoDataCard` Provider. + */ +export const getStoryServices = (params: Params) => { + const services: NoDataCardServices = { + ...getRedirectAppLinksStoryServices(), + ...params, + addBasePath: (path) => { + action('addBasePath')(path); + return path; + }, + }; + + return services; +}; + +/** + * Returns the Storybook arguments for `NoDataCard`, for its stories and for + * consuming component stories. + */ +export const getStoryArgTypes = () => ({ + ...getRedirectAppLinksStoryArgTypes(), + canAccessFleet: { + control: 'boolean', + defaultValue: true, + }, + category: { + control: { + type: 'text', + }, + defaultValue: '', + }, + title: { + control: { + type: 'text', + }, + defaultValue: '', + }, + description: { + control: { + type: 'text', + }, + defaultValue: '', + }, + button: { + control: { + type: 'text', + }, + defaultValue: '', + }, +}); + +/** + * Returns the Jest-compatible service abstractions for the `NoDataCard` Provider. + */ +export const getMockServices = (params?: Params) => { + const { canAccessFleet } = params || { canAccessFleet: true }; + + const services: NoDataCardServices = { + ...getRedirectAppLinksMockServices(), + canAccessFleet, + addBasePath: (path) => path, + }; + + return services; +}; diff --git a/packages/shared-ux/card/no_data/src/no_data_card.component.test.tsx b/packages/shared-ux/card/no_data/src/no_data_card.component.test.tsx new file mode 100644 index 0000000000000..72d179602e6d5 --- /dev/null +++ b/packages/shared-ux/card/no_data/src/no_data_card.component.test.tsx @@ -0,0 +1,36 @@ +/* + * 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. + */ + +import React from 'react'; +import { shallow } from 'enzyme'; + +import { NoDataCard } from './no_data_card.component'; + +describe('NoDataCardComponent', () => { + test('renders', () => { + const component = shallow(); + expect(component).toMatchSnapshot(); + }); + + test('renders with canAccessFleet false', () => { + const component = shallow(); + expect(component).toMatchSnapshot(); + }); + + describe('props', () => { + test('button', () => { + const component = shallow(); + expect(component).toMatchSnapshot(); + }); + + test('href', () => { + const component = shallow(); + expect(component).toMatchSnapshot(); + }); + }); +}); diff --git a/packages/shared-ux/card/no_data/src/no_data_card.component.tsx b/packages/shared-ux/card/no_data/src/no_data_card.component.tsx new file mode 100644 index 0000000000000..43c4e9cd3a4af --- /dev/null +++ b/packages/shared-ux/card/no_data/src/no_data_card.component.tsx @@ -0,0 +1,136 @@ +/* + * 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. + */ + +import React, { MouseEventHandler, ReactNode } from 'react'; +import { + EuiButton, + EuiCard, + EuiScreenReaderOnly, + EuiTextColor, + EuiCardProps, + EuiImage, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { NoDataCardStyles } from './no_data_card.styles'; +import ElasticAgentCardIllustration from './assets/elastic_agent_card.svg'; + +export type Props = Partial< + Omit +> & { + /** + * Provide just a string for the button's label, or a whole component; + * The button will be hidden completely if `isDisabled=true` + */ + button?: string | ReactNode; + /** Remapping `onClick` to any element */ + onClick?: MouseEventHandler; + /** + * Description for the card; + * If not provided, the default will be used + */ + description?: string | ReactNode; + /** Category to auto-select within Fleet */ + category?: string; + /** True if the person has permission to access Fleet, false otherwise */ + canAccessFleet?: boolean; +}; + +const noPermissionTitle = i18n.translate('sharedUXPackages.card.noData.noPermission.title', { + defaultMessage: `Contact your administrator`, +}); + +const noPermissionDescription = i18n.translate( + 'sharedUXPackages.card.noData.noPermission.description', + { + defaultMessage: `This integration is not yet enabled. Your administrator has the required permissions to turn it on.`, + } +); + +const defaultTitle = i18n.translate('sharedUXPackages.card.noData.title', { + defaultMessage: 'Add Elastic Agent', +}); + +const defaultDescription = i18n.translate('sharedUXPackages.card.noData.description', { + defaultMessage: `Use Elastic Agent for a simple, unified way to collect data from your machines.`, +}); + +const Image = () => ( + +); + +/** + * Creates a specific NoDataCard pointing users to Integrations when `canAccessFleet` + */ +export const NoDataCard = ({ + title: titleProp, + description: descriptionProp, + canAccessFleet, + button, + ...props +}: Props) => { + const styles = NoDataCardStyles(); + + const footer = () => { + // Don't render the footer action if disabled + if (!canAccessFleet) { + return; + } + + // Render a custom footer action if the button is not a simple string + if (button && typeof button !== 'string') { + return button; + } + + // Default footer action is a button with the provided or default string + return {button || titleProp || defaultTitle}; + }; + + const title = () => { + if (!canAccessFleet) { + return {noPermissionTitle}; + } + + return ( + + {titleProp || defaultTitle} + + ); + }; + + const description = () => { + if (!canAccessFleet) { + return {noPermissionDescription}; + } + + return descriptionProp || defaultDescription; + }; + + return ( + } + {...props} + /> + ); +}; diff --git a/packages/shared-ux/card/no_data/src/no_data_card.stories.tsx b/packages/shared-ux/card/no_data/src/no_data_card.stories.tsx new file mode 100644 index 0000000000000..38f299d3d3d35 --- /dev/null +++ b/packages/shared-ux/card/no_data/src/no_data_card.stories.tsx @@ -0,0 +1,45 @@ +/* + * 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. + */ + +import React from 'react'; + +import { Params, getStoryArgTypes, getStoryServices } from './mocks'; + +import { NoDataCard as Component } from './no_data_card.component'; +import { NoDataCard as ConnectedComponent } from './no_data_card'; +import { NoDataCardProvider } from './services'; + +import mdx from '../README.mdx'; + +export default { + title: 'No Data/Card', + description: 'A solution-specific wrapper around `EuiCard`, to be used on `NoData` page', + parameters: { + docs: { + page: mdx, + }, + }, +}; + +const argTypes = getStoryArgTypes(); + +export const NoDataCard = (params: Params) => { + return ( + + + + ); +}; + +NoDataCard.argTypes = argTypes; + +export const NoDataCardComponent = (params: Params) => { + return ; +}; + +NoDataCardComponent.argTypes = argTypes; diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.styles.ts b/packages/shared-ux/card/no_data/src/no_data_card.styles.ts similarity index 100% rename from packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.styles.ts rename to packages/shared-ux/card/no_data/src/no_data_card.styles.ts diff --git a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.test.tsx b/packages/shared-ux/card/no_data/src/no_data_card.test.tsx similarity index 73% rename from packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.test.tsx rename to packages/shared-ux/card/no_data/src/no_data_card.test.tsx index 6bbed463f23ed..0f659ad7a7f50 100644 --- a/packages/kbn-shared-ux-components/src/page_template/no_data_page/no_data_card/no_data_card.test.tsx +++ b/packages/shared-ux/card/no_data/src/no_data_card.test.tsx @@ -6,11 +6,23 @@ * Side Public License, v 1. */ -import { render } from 'enzyme'; +import { render as enzymeRender } from 'enzyme'; import React from 'react'; + import { NoDataCard } from './no_data_card'; +import { NoDataCardProvider } from './services'; + +const services = { + addBasePath: (path: string) => path, + navigateToUrl: () => {}, +}; describe('NoDataCard', () => { + const render = (element: React.ReactElement, canAccessFleet: boolean = true) => + enzymeRender( + {element} + ); + test('renders', () => { const component = render(); expect(component).toMatchSnapshot(); @@ -31,14 +43,10 @@ describe('NoDataCard', () => { expect(component).toMatchSnapshot(); }); - test('isDisabled', () => { + test('no access to Fleet', () => { const component = render( - + , + false ); expect(component).toMatchSnapshot(); }); diff --git a/packages/shared-ux/card/no_data/src/no_data_card.tsx b/packages/shared-ux/card/no_data/src/no_data_card.tsx new file mode 100644 index 0000000000000..a58ee5bc9d08b --- /dev/null +++ b/packages/shared-ux/card/no_data/src/no_data_card.tsx @@ -0,0 +1,41 @@ +/* + * 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. + */ + +import React, { useMemo } from 'react'; +import { RedirectAppLinksContainer } from '@kbn/shared-ux-link-redirect-app'; + +import { NoDataCard as Component, Props as ComponentProps } from './no_data_card.component'; + +import { useServices } from './services'; + +export type Props = Omit; + +export const NoDataCard = ({ href: srcHref, category, description, ...props }: Props) => { + const { canAccessFleet, addBasePath } = useServices(); + + const href = useMemo(() => { + if (srcHref) { + return srcHref; + } + + // TODO: get this URL from a locator + const prefix = '/app/integrations/browse'; + + if (category) { + return addBasePath(`${prefix}/${category}`); + } + + return addBasePath(prefix); + }, [addBasePath, srcHref, category]); + + return ( + + + + ); +}; diff --git a/packages/shared-ux/card/no_data/src/services.tsx b/packages/shared-ux/card/no_data/src/services.tsx new file mode 100644 index 0000000000000..c4937a6d21da9 --- /dev/null +++ b/packages/shared-ux/card/no_data/src/services.tsx @@ -0,0 +1,97 @@ +/* + * 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. + */ + +import React, { FC, useContext } from 'react'; +import { + RedirectAppLinksServices, + RedirectAppLinksKibanaDependencies, + RedirectAppLinksProvider, + RedirectAppLinksKibanaProvider, +} from '@kbn/shared-ux-link-redirect-app'; + +/** + * A list of services that are consumed by this component. + */ +interface Services { + addBasePath: (path: string) => string; + canAccessFleet: boolean; +} + +const Context = React.createContext(null); + +/** + * Services that are consumed by this component and its dependencies. + */ +export type NoDataCardServices = Services & RedirectAppLinksServices; + +/** + * A Context Provider that provides services to the component and its dependencies. + */ +export const NoDataCardProvider: FC = ({ children, ...services }) => { + const { addBasePath, canAccessFleet } = services; + + return ( + + {children} + + ); +}; + +interface KibanaDependencies { + coreStart: { + http: { + basePath: { + prepend: (path: string) => string; + }; + }; + application: { + capabilities: { + navLinks: Record; + }; + }; + }; +} +/** + * An interface containing a collection of Kibana plugins and services required to + * render this component as well as its dependencies. + */ +export type NoDataCardKibanaDependencies = KibanaDependencies & RedirectAppLinksKibanaDependencies; + +/** + * Kibana-specific Provider that maps dependencies to services. + */ +export const NoDataCardKibanaProvider: FC = ({ + children, + ...dependencies +}) => { + const value: Services = { + addBasePath: dependencies.coreStart.http.basePath.prepend, + canAccessFleet: dependencies.coreStart.application.capabilities.navLinks.integrations, + }; + + return ( + + {children} + + ); +}; + +/** + * React hook for accessing pre-wired services. + */ +export function useServices() { + const context = useContext(Context); + + if (!context) { + throw new Error( + 'NoDataCard Context is missing. Ensure your component or React root is wrapped with NoDataCardContext.' + ); + } + + return context; +} diff --git a/packages/shared-ux/card/no_data/tsconfig.json b/packages/shared-ux/card/no_data/tsconfig.json new file mode 100644 index 0000000000000..44b240540718d --- /dev/null +++ b/packages/shared-ux/card/no_data/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node", + "react", + "@emotion/react/types/css-prop", + "@kbn/ambient-ui-types" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/shared-ux/link/redirect_app/src/index.tsx b/packages/shared-ux/link/redirect_app/src/index.tsx index 09317ebab59f7..0d1c61242edb3 100644 --- a/packages/shared-ux/link/redirect_app/src/index.tsx +++ b/packages/shared-ux/link/redirect_app/src/index.tsx @@ -10,16 +10,27 @@ export { RedirectAppLinks as RedirectAppLinksContainer } from './redirect_app_li export { RedirectAppLinks as RedirectAppLinksComponent } from './redirect_app_links.component'; export { RedirectAppLinksKibanaProvider, RedirectAppLinksProvider } from './services'; +export type { + Services as RedirectAppLinksServices, + KibanaDependencies as RedirectAppLinksKibanaDependencies, +} from './services'; + +export { + getMockServices as getRedirectAppLinksMockServices, + getStoryArgTypes as getRedirectAppLinksStoryArgTypes, + getStoryServices as getRedirectAppLinksStoryServices, +} from './mocks'; + import React, { FC } from 'react'; import { RedirectAppLinks as RedirectAppLinksContainer } from './redirect_app_links'; import { Services, - KibanaServices, + KibanaDependencies, RedirectAppLinksKibanaProvider, RedirectAppLinksProvider, } from './services'; -const isKibanaContract = (services: any): services is KibanaServices => { +const isKibanaContract = (services: any): services is KibanaDependencies => { return typeof services.coreStart !== 'undefined'; }; @@ -28,12 +39,22 @@ const isKibanaContract = (services: any): services is KibanaServices => { * `RedirectAppLinksKibanaProvider` based on the services provided, creating a single component * with which consumers can wrap their components or solutions. */ -export const RedirectAppLinks: FC = ({ children, ...services }) => { +export const RedirectAppLinks: FC = ({ children, ...services }) => { const container = {children}; - return isKibanaContract(services) ? ( - {container} - ) : ( - {container} + if (isKibanaContract(services)) { + const { coreStart } = services; + return ( + + {container} + + ); + } + + const { navigateToUrl, currentAppId } = services; + return ( + + {container} + ); }; diff --git a/packages/shared-ux/link/redirect_app/src/mocks.ts b/packages/shared-ux/link/redirect_app/src/mocks.ts new file mode 100644 index 0000000000000..4b5519dd646bb --- /dev/null +++ b/packages/shared-ux/link/redirect_app/src/mocks.ts @@ -0,0 +1,46 @@ +/* + * 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. + */ + +import { action } from '@storybook/addon-actions'; + +import { Services } from './services'; + +/** + * Parameters drawn from the Storybook arguments collection that customize a component story. + */ +export type Params = Record, any>; + +/** + * Returns Storybook-compatible service abstractions for the `NoDataCard` Provider. + */ +export const getStoryServices = () => { + const services: Services = { + navigateToUrl: action('navigateToUrl'), + currentAppId: 'currentAppId', + }; + + return services; +}; + +/** + * Returns the Storybook arguments for `NoDataCard`, for its stories and for + * consuming component stories. + */ +export const getStoryArgTypes = () => ({}); + +/** + * Returns the Jest-compatible service abstractions for the `NoDataCard` Provider. + */ +export const getMockServices = () => { + const services: Services = { + navigateToUrl: jest.fn(), + currentAppId: 'currentAppId', + }; + + return services; +}; diff --git a/packages/shared-ux/link/redirect_app/src/redirect_app_links.component.tsx b/packages/shared-ux/link/redirect_app/src/redirect_app_links.component.tsx index 477471fe71824..f0da5b307fbd1 100644 --- a/packages/shared-ux/link/redirect_app/src/redirect_app_links.component.tsx +++ b/packages/shared-ux/link/redirect_app/src/redirect_app_links.component.tsx @@ -29,12 +29,7 @@ export interface Props extends DetailedHTMLProps, * * ``` */ -export const RedirectAppLinks: FC = ({ - children, - navigateToUrl, - currentAppId, - ...otherProps -}) => { +export const RedirectAppLinks: FC = ({ children, navigateToUrl, currentAppId }) => { const containerRef = useRef(null); const handleClick: MouseEventHandler = useCallback( @@ -50,7 +45,7 @@ export const RedirectAppLinks: FC = ({ return ( // eslint-disable-next-line jsx-a11y/click-events-have-key-events -
+
{children}
); diff --git a/packages/shared-ux/link/redirect_app/src/redirect_app_links.stories.tsx b/packages/shared-ux/link/redirect_app/src/redirect_app_links.stories.tsx index 9bb3d0d9782d4..1b77f7148964e 100644 --- a/packages/shared-ux/link/redirect_app/src/redirect_app_links.stories.tsx +++ b/packages/shared-ux/link/redirect_app/src/redirect_app_links.stories.tsx @@ -10,11 +10,12 @@ import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import { action } from '@storybook/addon-actions'; -import { RedirectAppLinks } from '.'; +import { RedirectAppLinks as Component } from '.'; +import { getStoryArgTypes, getStoryServices } from './mocks'; import mdx from '../README.mdx'; export default { - title: 'Redirect App Links', + title: 'Link', description: 'An "area of effect" component which intercepts clicks on anchor elements and redirects them to Kibana solutions without a page refresh.', parameters: { @@ -24,16 +25,10 @@ export default { }, }; -export const Component = () => { - const navigateToUrl = async (url: string) => { - action('navigateToUrl')(url); - }; - - const currentAppId = 'abc123'; - +export const RedirectAppLinks = () => { return ( <> - + { - + { ); }; + +RedirectAppLinks.argTypes = getStoryArgTypes(); diff --git a/packages/shared-ux/link/redirect_app/src/redirect_app_links.tsx b/packages/shared-ux/link/redirect_app/src/redirect_app_links.tsx index 1e805ad4475b6..9a069881b2128 100644 --- a/packages/shared-ux/link/redirect_app/src/redirect_app_links.tsx +++ b/packages/shared-ux/link/redirect_app/src/redirect_app_links.tsx @@ -6,15 +6,10 @@ * Side Public License, v 1. */ -import React from 'react'; +import React, { FC } from 'react'; import { useServices } from './services'; -import { - RedirectAppLinks as Component, - Props as ComponentProps, -} from './redirect_app_links.component'; - -type Props = Omit; +import { RedirectAppLinks as Component } from './redirect_app_links.component'; /** * A service-enabled component that provides Kibana-specific functionality to the `RedirectAppLinks` @@ -27,4 +22,6 @@ type Props = Omit; * * ``` */ -export const RedirectAppLinks = (props: Props) => ; +export const RedirectAppLinks: FC<{}> = ({ children }) => ( + {children} +); diff --git a/packages/shared-ux/link/redirect_app/src/services.tsx b/packages/shared-ux/link/redirect_app/src/services.tsx index 22bc5a5cd0c55..b29d82f8eea13 100644 --- a/packages/shared-ux/link/redirect_app/src/services.tsx +++ b/packages/shared-ux/link/redirect_app/src/services.tsx @@ -25,8 +25,9 @@ const RedirectAppLinksContext = React.createContext(null); * Contextual services Provider. */ export const RedirectAppLinksProvider: FC = ({ children, ...services }) => { + const { navigateToUrl, currentAppId } = services; return ( - + {children} ); @@ -35,7 +36,7 @@ export const RedirectAppLinksProvider: FC = ({ children, ...services } /** * Kibana-specific contextual services to be adapted for this component. */ -export interface KibanaServices { +export interface KibanaDependencies { coreStart: { application: { currentAppId$: Observable; @@ -47,7 +48,7 @@ export interface KibanaServices { /** * Kibana-specific contextual services Provider. */ -export const RedirectAppLinksKibanaProvider: FC = ({ children, coreStart }) => { +export const RedirectAppLinksKibanaProvider: FC = ({ children, coreStart }) => { const { navigateToUrl, currentAppId$ } = coreStart.application; const currentAppId = useObservable(currentAppId$, undefined); diff --git a/packages/shared-ux/page/analytics_no_data/src/analytics_no_data_page.stories.tsx b/packages/shared-ux/page/analytics_no_data/src/analytics_no_data_page.stories.tsx index d5d82d801fc8d..8cb9b3aaa5f7e 100644 --- a/packages/shared-ux/page/analytics_no_data/src/analytics_no_data_page.stories.tsx +++ b/packages/shared-ux/page/analytics_no_data/src/analytics_no_data_page.stories.tsx @@ -16,7 +16,7 @@ import mdx from '../README.mdx'; import { Params, getStoryArgTypes, getStoryServices } from './mocks'; export default { - title: 'No Data/Analytics', + title: 'No Data/Analytics Page', description: 'An Analytics-specific version of KibanaNoDataPage.', parameters: { docs: { diff --git a/packages/shared-ux/page/kibana_no_data/src/kibana_no_data_page.stories.tsx b/packages/shared-ux/page/kibana_no_data/src/kibana_no_data_page.stories.tsx index 206b958e64771..c18adc20e4af0 100644 --- a/packages/shared-ux/page/kibana_no_data/src/kibana_no_data_page.stories.tsx +++ b/packages/shared-ux/page/kibana_no_data/src/kibana_no_data_page.stories.tsx @@ -16,7 +16,7 @@ import { KibanaNoDataPageProvider } from './services'; import mdx from '../README.mdx'; export default { - title: 'No Data/Kibana', + title: 'No Data/Kibana Page', description: 'A component to display when there is no data available', parameters: { docs: { diff --git a/packages/shared-ux/page/kibana_no_data/src/mocks.ts b/packages/shared-ux/page/kibana_no_data/src/mocks.ts index e88097c933849..d91949ddc6c32 100644 --- a/packages/shared-ux/page/kibana_no_data/src/mocks.ts +++ b/packages/shared-ux/page/kibana_no_data/src/mocks.ts @@ -14,6 +14,12 @@ import { getNoDataViewsPromptMockServices, } from '@kbn/shared-ux-prompt-no-data-views'; +import { + getNoDataCardMockServices, + getNoDataCardStoryArgTypes, + getNoDataCardStoryServices, +} from '@kbn/shared-ux-card-no-data'; + import { KibanaNoDataPageServices } from './services'; // TODO: clintandrewhall - this looks (and is) a bit complicated because the No Data View @@ -32,6 +38,8 @@ export const getStoryServices = (params: StoryParams) => { const { canCreateNewDataView, dataViewsDocLink, openDataViewEditor } = getNoDataViewsPromptStorybookServices(params); + const { addBasePath, canAccessFleet } = getNoDataCardStoryServices(params); + // Workaround to leverage the services package. const { application, data, docLinks, editors, http, permissions, platform } = servicesFactory(params); @@ -47,6 +55,8 @@ export const getStoryServices = (params: StoryParams) => { canCreateNewDataView, dataViewsDocLink, openDataViewEditor, + addBasePath, + canAccessFleet, }; return services; @@ -75,6 +85,7 @@ export const getStoryArgTypes = () => ({ defaultValue: false, }, ...getNoDataViewsPromptStoryArgTypes(), + ...getNoDataCardStoryArgTypes(), }); /** @@ -84,6 +95,8 @@ export const getMockServices = (params?: MockServicesFactoryParams) => { const { canCreateNewDataView, dataViewsDocLink, openDataViewEditor } = getNoDataViewsPromptMockServices(); + const { addBasePath, canAccessFleet } = getNoDataCardMockServices(); + const { application, data, docLinks, editors, http, permissions, platform } = mockServicesFactory(params); @@ -98,6 +111,8 @@ export const getMockServices = (params?: MockServicesFactoryParams) => { canCreateNewDataView, dataViewsDocLink, openDataViewEditor, + addBasePath, + canAccessFleet, }; return services; diff --git a/packages/shared-ux/page/kibana_no_data/src/services.tsx b/packages/shared-ux/page/kibana_no_data/src/services.tsx index 07b5787ae8b72..47f6b9c3690f9 100644 --- a/packages/shared-ux/page/kibana_no_data/src/services.tsx +++ b/packages/shared-ux/page/kibana_no_data/src/services.tsx @@ -13,6 +13,8 @@ import { NoDataViewsPromptKibanaProvider, } from '@kbn/shared-ux-prompt-no-data-views'; +import { NoDataCardProvider, NoDataCardKibanaProvider } from '@kbn/shared-ux-card-no-data'; + import { LegacyServicesProvider, getLegacyServices } from './legacy_services'; /** @@ -85,7 +87,9 @@ export const KibanaNoDataPageProvider: FC = ({ }) => ( - {children} + + {children} + ); @@ -159,7 +163,9 @@ export const KibanaNoDataPageKibanaProvider: FC - {children} + + {children} + ); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index ca46806ff7214..3eeda946ada8f 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -5336,11 +5336,10 @@ "share.urlService.redirect.RedirectManager.missingParamLocator": "ID du localisateur non spécifié. Spécifiez le paramètre de recherche \"l\" dans l'URL ; ce devrait être un ID de localisateur existant.", "share.urlService.redirect.RedirectManager.missingParamParams": "Paramètres du localisateur non spécifiés. Spécifiez le paramètre de recherche \"p\" dans l'URL ; ce devrait être un objet sérialisé JSON des paramètres du localisateur.", "share.urlService.redirect.RedirectManager.missingParamVersion": "Version des paramètres du localisateur non spécifiée. Spécifiez le paramètre de recherche \"v\" dans l'URL ; ce devrait être la version de Kibana au moment de la génération des paramètres du localisateur.", - "sharedUXComponents.noDataPage.elasticAgentCard.description": "Utilisez Elastic Agent pour collecter de manière simple et unifiée les données de vos machines.", - "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.description": "Cette intégration n'est pas encore activée. Votre administrateur possède les autorisations requises pour l’activer.", - "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.title": "Contactez votre administrateur", - "sharedUXComponents.noDataPage.elasticAgentCard.title": "Ajouter Elastic Agent", - "sharedUXComponents.pageTemplate.noDataCard.description": "Continuer sans collecter de données", + "sharedUXPackages.card.noData.description": "Utilisez Elastic Agent pour collecter de manière simple et unifiée les données de vos machines.", + "sharedUXPackages.card.noData.noPermission.description": "Cette intégration n'est pas encore activée. Votre administrateur possède les autorisations requises pour l’activer.", + "sharedUXPackages.card.noData.noPermission.title": "Contactez votre administrateur", + "sharedUXPackages.card.noData.title": "Ajouter Elastic Agent", "sharedUXPackages.buttonToolbar.buttons.addFromLibrary.libraryButtonLabel": "Ajouter depuis la bibliothèque", "sharedUXPackages.noDataViewsPrompt.learnMore": "Envie d'en savoir plus ?", "sharedUXPackages.noDataViewsPrompt.readDocumentation": "Lisez les documents", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 83bf2bf0eee3d..2fa35f6e723b2 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -5438,11 +5438,10 @@ "share.urlService.redirect.RedirectManager.missingParamLocator": "ロケーターIDが指定されていません。URLで「l」検索パラメーターを指定します。これは既存のロケーターIDにしてください。", "share.urlService.redirect.RedirectManager.missingParamParams": "ロケーターパラメーターが指定されていません。URLで「p」検索パラメーターを指定します。これはロケーターパラメーターのJSONシリアル化オブジェクトにしてください。", "share.urlService.redirect.RedirectManager.missingParamVersion": "ロケーターパラメーターバージョンが指定されていません。URLで「v」検索パラメーターを指定します。これはロケーターパラメーターが生成されたときのKibanaのリリースバージョンです。", - "sharedUXComponents.noDataPage.elasticAgentCard.description": "Elasticエージェントを使用すると、シンプルで統一された方法でコンピューターからデータを収集するできます。", - "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.description": "この統合はまだ有効ではありません。管理者にはオンにするために必要なアクセス権があります。", - "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.title": "管理者にお問い合わせください", - "sharedUXComponents.noDataPage.elasticAgentCard.title": "Elasticエージェントの追加", - "sharedUXComponents.pageTemplate.noDataCard.description": "データを収集せずに続行", + "sharedUXPackages.card.noData.description": "Elasticエージェントを使用すると、シンプルで統一された方法でコンピューターからデータを収集するできます。", + "sharedUXPackages.card.noData.noPermission.description": "この統合はまだ有効ではありません。管理者にはオンにするために必要なアクセス権があります。", + "sharedUXPackages.card.noData.noPermission.title": "管理者にお問い合わせください", + "sharedUXPackages.card.noData.title": "Elasticエージェントの追加", "sharedUXPackages.buttonToolbar.buttons.addFromLibrary.libraryButtonLabel": "ライブラリから追加", "sharedUXPackages.noDataViewsPrompt.learnMore": "詳細について", "sharedUXPackages.noDataViewsPrompt.readDocumentation": "ドキュメントを読む", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index f37c2745c000f..01b30dda57b2c 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -5449,11 +5449,10 @@ "share.urlService.redirect.RedirectManager.missingParamLocator": "未指定定位器 ID。在 URL 中指定“l”搜索参数,其应为现有定位器 ID。", "share.urlService.redirect.RedirectManager.missingParamParams": "定位器参数未指定。在 URL 中指定“p”搜索参数,其应为定位器参数的 JSON 序列化对象。", "share.urlService.redirect.RedirectManager.missingParamVersion": "定位器参数版本未指定。在 URL 中指定“v”搜索参数,其应为生成定位器参数时 Kibana 的版本。", - "sharedUXComponents.noDataPage.elasticAgentCard.description": "使用 Elastic 代理以简单统一的方式从您的计算机中收集数据。", - "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.description": "尚未启用此集成。您的管理员具有打开它所需的权限。", - "sharedUXComponents.noDataPage.elasticAgentCard.noPermission.title": "请联系您的管理员", - "sharedUXComponents.noDataPage.elasticAgentCard.title": "添加 Elastic 代理", - "sharedUXComponents.pageTemplate.noDataCard.description": "继续,而不收集数据", + "sharedUXPackages.card.noData.description": "使用 Elastic 代理以简单统一的方式从您的计算机中收集数据。", + "sharedUXPackages.card.noData.noPermission.description": "尚未启用此集成。您的管理员具有打开它所需的权限。", + "sharedUXPackages.card.noData.noPermission.title": "请联系您的管理员", + "sharedUXPackages.card.noData.title": "添加 Elastic 代理", "sharedUXPackages.buttonToolbar.buttons.addFromLibrary.libraryButtonLabel": "从库中添加", "sharedUXPackages.noDataViewsPrompt.learnMore": "希望了解详情?", "sharedUXPackages.noDataViewsPrompt.readDocumentation": "阅读文档", diff --git a/yarn.lock b/yarn.lock index 649e628ecf74a..2d8dde05811f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3351,6 +3351,10 @@ version "0.0.0" uid "" +"@kbn/shared-ux-card-no-data@link:bazel-bin/packages/shared-ux/card/no_data": + version "0.0.0" + uid "" + "@kbn/shared-ux-components@link:bazel-bin/packages/kbn-shared-ux-components": version "0.0.0" uid "" @@ -6722,6 +6726,10 @@ version "0.0.0" uid "" +"@types/kbn__shared-ux-card-no-data@link:bazel-bin/packages/shared-ux/card/no_data/npm_module_types": + version "0.0.0" + uid "" + "@types/kbn__shared-ux-components@link:bazel-bin/packages/kbn-shared-ux-components/npm_module_types": version "0.0.0" uid "" From d8558fcaaff9c76ce5c3ecc2d1e5939ad7a5755b Mon Sep 17 00:00:00 2001 From: Kyle Pollich Date: Tue, 21 Jun 2022 12:22:38 -0400 Subject: [PATCH 45/50] [Fleet] [Feature Branch] Create Fleet `_debug` UI (#131322) * Bootstrap Fleet /_debug route + React Query * [Fleet] [Debug UI] Implement "Agent Policy Debugger" UI (#131335) * Add initial agent policy debugger module * Fix clear button in agent policy select * Implement deletion of selected policy * Fix layout of combo-box/button * Add searchable ID to agent policy labels * Add description text to debugger module * Fixup loading/error logic * [Fleet] Saved Objects Debugger (#131370) * saved objects debugger * converted so names to combobox * types fix * extracted combo box component * fixed error display * [Fleet] [Debug UI] Implement "Integration Debugger" UI (#131354) * Implement integrations debugger UI * Clean up + add link to integration settings * Add divider below integration debugger * Clean up loading states * Fix flex spacing for saved objects debugger * [Fleet] Added fleet indices query to debug UI (#131395) * fleet indices * keeping the type and name combo close in saved objects * fixed prettier * removed useEffects, simplified use of useQuery (#131482) * using different query for saved objects (#131491) * [Fleet] [Debug UI] Implement "Preconfiguration debugger" UI (#131436) * Implement preconfiguration debugger UI * Add code block view * Added missing newline Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> * Prevent flicker in saved objects code block * added links including health check report (#131503) * added links including health check report * experiment with accordion Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> * Refactor panel rendering + danger zone callout * Convert panels to all singular * confirm modal for reset preconfig (#131596) * Add icons to useful links + fix reset all -> title case * Fix disabled health check link * added orphaned policies api and to debug page (#131697) * Language fixes around orphaned policy module * Add some basic dev docs around the debugger * increasing page load bundle limit slightly (#132690) * Remove health check link as it's not implemented * Fix agents link + disable reset all button when no preconfigured policies * Update doc title on debug page * Translate everything * Remove delete orphaned endpoint + fix force flag in existing delete endpoint * Fix type * Add API integration tests for orphaned policies Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../plugins/fleet/common/constants/routes.ts | 2 + .../plugins/fleet/common/services/routes.ts | 13 + .../common/types/rest_spec/package_policy.ts | 1 + .../plugins/fleet/dev_docs/fleet_debugger.md | 27 ++ .../fleet/public/applications/fleet/app.tsx | 5 + .../components/agent_policy_debugger.tsx | 172 ++++++++++ .../sections/debug/components/code_block.tsx | 38 +++ .../debug/components/fleet_index_debugger.tsx | 120 +++++++ .../fleet/sections/debug/components/index.tsx | 13 + .../debug/components/integration_debugger.tsx | 314 ++++++++++++++++++ .../orphaned_integration_policy_debugger.tsx | 262 +++++++++++++++ .../components/preconfiguration_debugger.tsx | 272 +++++++++++++++ .../components/saved_object_debugger.tsx | 178 ++++++++++ .../components/saved_object_names_combo.tsx | 110 ++++++ .../fleet/sections/debug/index.tsx | 187 +++++++++++ .../fleet/public/constants/page_paths.ts | 5 +- .../public/hooks/use_request/agent_policy.ts | 16 + .../fleet/public/hooks/use_request/epm.ts | 5 +- .../hooks/use_request/package_policy.ts | 7 + .../plugins/fleet/public/search_provider.ts | 17 +- x-pack/plugins/fleet/public/services/icons.ts | 24 ++ x-pack/plugins/fleet/server/plugin.ts | 2 + .../fleet/server/routes/health_check/index.ts | 34 ++ x-pack/plugins/fleet/server/routes/index.ts | 1 + .../server/routes/package_policy/handlers.ts | 54 ++- .../server/routes/package_policy/index.ts | 12 + .../apis/package_policy/get.ts | 192 +++++++---- 27 files changed, 2007 insertions(+), 76 deletions(-) create mode 100644 x-pack/plugins/fleet/dev_docs/fleet_debugger.md create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/agent_policy_debugger.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/code_block.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/fleet_index_debugger.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/index.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/integration_debugger.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/orphaned_integration_policy_debugger.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/debug/index.tsx create mode 100644 x-pack/plugins/fleet/public/services/icons.ts create mode 100644 x-pack/plugins/fleet/server/routes/health_check/index.ts diff --git a/x-pack/plugins/fleet/common/constants/routes.ts b/x-pack/plugins/fleet/common/constants/routes.ts index 7b185960dcb7b..33bf1b6f6b5b7 100644 --- a/x-pack/plugins/fleet/common/constants/routes.ts +++ b/x-pack/plugins/fleet/common/constants/routes.ts @@ -54,6 +54,7 @@ export const PACKAGE_POLICY_API_ROUTES = { DELETE_PATTERN: `${PACKAGE_POLICY_API_ROOT}/delete`, UPGRADE_PATTERN: `${PACKAGE_POLICY_API_ROOT}/upgrade`, DRYRUN_PATTERN: `${PACKAGE_POLICY_API_ROOT}/upgrade/dryrun`, + ORPHANED_INTEGRATION_POLICIES: `${INTERNAL_ROOT}/orphaned_integration_policies`, }; // Agent policy API routes @@ -92,6 +93,7 @@ export const SETTINGS_API_ROUTES = { // App API routes export const APP_API_ROUTES = { + HEALTH_CHECK_PATTERN: `${API_ROOT}/health_check`, CHECK_PERMISSIONS_PATTERN: `${API_ROOT}/check-permissions`, GENERATE_SERVICE_TOKEN_PATTERN: `${API_ROOT}/service_tokens`, // deprecated since 8.0 diff --git a/x-pack/plugins/fleet/common/services/routes.ts b/x-pack/plugins/fleet/common/services/routes.ts index a8a6c34f06f3c..8c66a11cd3569 100644 --- a/x-pack/plugins/fleet/common/services/routes.ts +++ b/x-pack/plugins/fleet/common/services/routes.ts @@ -19,6 +19,7 @@ import { SETTINGS_API_ROUTES, APP_API_ROUTES, K8S_API_ROUTES, + PRECONFIGURATION_API_ROUTES, } from '../constants'; export const epmRouteService = { @@ -105,6 +106,10 @@ export const packagePolicyRouteService = { getDryRunPath: () => { return PACKAGE_POLICY_API_ROUTES.DRYRUN_PATTERN; }, + + getOrphanedIntegrationPoliciesPath: () => { + return PACKAGE_POLICY_API_ROUTES.ORPHANED_INTEGRATION_POLICIES; + }, }; export const agentPolicyRouteService = { @@ -150,6 +155,14 @@ export const agentPolicyRouteService = { getK8sFullDownloadPath: () => { return K8S_API_ROUTES.K8S_DOWNLOAD_PATTERN; }, + + getResetOnePreconfiguredAgentPolicyPath: (agentPolicyId: string) => { + return PRECONFIGURATION_API_ROUTES.RESET_ONE_PATTERN.replace(`{agentPolicyId}`, agentPolicyId); + }, + + getResetAllPreconfiguredAgentPolicyPath: () => { + return PRECONFIGURATION_API_ROUTES.RESET_PATTERN; + }, }; export const dataStreamRouteService = { diff --git a/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts b/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts index 35202a0eb42aa..b2cb1a4561394 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts @@ -49,6 +49,7 @@ export type UpdatePackagePolicyResponse = CreatePackagePolicyResponse; export interface DeletePackagePoliciesRequest { body: { packagePolicyIds: string[]; + force?: boolean; }; } diff --git a/x-pack/plugins/fleet/dev_docs/fleet_debugger.md b/x-pack/plugins/fleet/dev_docs/fleet_debugger.md new file mode 100644 index 0000000000000..cafaeaae71f37 --- /dev/null +++ b/x-pack/plugins/fleet/dev_docs/fleet_debugger.md @@ -0,0 +1,27 @@ +# Fleet Debugger + +Fleet includes a "debug" interface that provides some insight and data management capabilities around Fleet's underlying data. This interface can be used to diagnose issues, assist support engineers, and restore functionality to broken Fleet installations. + +![Fleet Debugger UI Screenshot](https://user-images.githubusercontent.com/6766512/167193984-fcb100c4-729d-4a0b-ae64-2b280272da96.png) + +## Accessing the Fleet debugger + +The debugger is served at `/app/fleet/_debug`. This page shares the same permissions requirement as other `/fleet` pages, so you'll need a user with the `fleet.all` permission. + +## Using the Fleet debugger + +The Fleet debugger provides debugger modules for the following Fleet data: + +- Agent Policies +- Installed Integrations +- Saved Objects +- System Indices +- Preconfiguration +- "Orphaned" Integration Policies + +Each module contains an explanation of its functionality and behavior, but generally the goal of each module is to + +1. Provide visibility into the underlying data for the given object +1. Provide cleanup/reset functionality in order to recover from malformed data that may be preventing normal usage of Fleet + +The debugger should be used when possible to assist with SDH's when we request things like a copy/paste of a given policy object or for some cleanup operation to be run via `cURL`. As common SDH tasks are identified, the debugger should be expanded to suit the Fleet UI team's and the support team's needs. diff --git a/x-pack/plugins/fleet/public/applications/fleet/app.tsx b/x-pack/plugins/fleet/public/applications/fleet/app.tsx index eb8b01d831cd5..ca8083fb51325 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/app.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/app.tsx @@ -58,6 +58,7 @@ import { MissingESRequirementsPage } from './sections/agents/agent_requirements_ import { CreatePackagePolicyPage } from './sections/agent_policy/create_package_policy_page'; import { EnrollmentTokenListPage } from './sections/agents/enrollment_token_list_page'; import { SettingsApp } from './sections/settings'; +import { DebugPage } from './sections/debug'; const FEEDBACK_URL = 'https://ela.st/fleet-feedback'; @@ -326,6 +327,10 @@ export const AppRoutes = memo( + + + + {/* TODO: Move this route to the Integrations app */} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/agent_policy_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/agent_policy_debugger.tsx new file mode 100644 index 0000000000000..71ee096f1e4fa --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/agent_policy_debugger.tsx @@ -0,0 +1,172 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useState } from 'react'; +import { + EuiButton, + EuiCallOut, + EuiCode, + EuiComboBox, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiSpacer, + EuiText, +} from '@elastic/eui'; +import { useQuery } from 'react-query'; + +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; + +import { sendGetAgentPolicies, useLink } from '../../../hooks'; +import { SO_SEARCH_LIMIT } from '../../../constants'; + +import { policyHasFleetServer } from '../../../services'; +import type { AgentPolicy } from '../../../types'; +import { AgentPolicyDeleteProvider } from '../../agent_policy/components'; + +import { queryClient } from '..'; + +import { CodeBlock } from './code_block'; + +const fetchAgentPolicies = async () => { + const response = await sendGetAgentPolicies({ + full: true, + perPage: SO_SEARCH_LIMIT, + sortOrder: 'asc', + }); + + if (response.error) { + throw new Error(response.error.message); + } + + return response; +}; + +export const AgentPolicyDebugger: React.FunctionComponent = () => { + const { getHref } = useLink(); + const [selectedPolicyId, setSelectedPolicyId] = useState(); + + // TODO: Depending on the number of agent policies, this might need to be switched to + // `useInfinite` query with an infinite scrolling approach in the dropdown options. + const { data, status } = useQuery('debug-agent-policies', fetchAgentPolicies); + + const agentPolicies = data?.data?.items ?? []; + const comboBoxOptions = agentPolicies.map((policy) => ({ + label: `${policy.name} - ${policy.id}`, + value: policy.id, + })); + + const selectedOptions = selectedPolicyId + ? [comboBoxOptions.find((option) => option.value === selectedPolicyId)!] + : []; + + const selectedAgentPolicy = agentPolicies.find((policy) => policy.id === selectedPolicyId); + + const onDelete = () => { + setSelectedPolicyId(undefined); + queryClient.invalidateQueries('debug-agent-policies'); + }; + + if (status === 'error') { + return ( + + + + ); + } + + return ( + <> + +

+ id }} + /> +

+
+ + + + + + { + // Handle "clear" action + if (!newSelectedOptions.length) { + setSelectedPolicyId(undefined); + } else { + setSelectedPolicyId(newSelectedOptions[0].value); + } + }} + /> + + + {selectedPolicyId && ( + + {(deleteAgentPolicyPrompt) => { + return ( + +
+ deleteAgentPolicyPrompt(selectedPolicyId, onDelete)} + > + + +
+
+ ); + }} +
+ )} +
+ + {selectedPolicyId && ( + <> + + + + + + + + + + + )} + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/code_block.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/code_block.tsx new file mode 100644 index 0000000000000..3addcaa862c3f --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/code_block.tsx @@ -0,0 +1,38 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { CodeEditor } from '@kbn/kibana-react-plugin/public'; + +/** + * A read-only code block with various default settings suitable for displaying API responses, etc + */ +export const CodeBlock: React.FunctionComponent<{ value: string }> = ({ value }) => { + return ( + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/fleet_index_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/fleet_index_debugger.tsx new file mode 100644 index 0000000000000..7c0c81858414a --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/fleet_index_debugger.tsx @@ -0,0 +1,120 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; +import { + EuiCallOut, + EuiComboBox, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiSpacer, + EuiText, +} from '@elastic/eui'; +import { useQuery } from 'react-query'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { sendRequest } from '../../../hooks'; + +import { CodeBlock } from './code_block'; + +const fetchIndex = async (index?: string) => { + if (!index) return; + const path = `/${index}/_search`; + const response = await sendRequest({ + method: 'post', + path: `/api/console/proxy`, + query: { + path, + method: 'GET', + }, + }); + + return response; +}; + +export const FleetIndexDebugger = () => { + const indices = [ + { label: '.fleet-agents', value: '.fleet-agents' }, + { label: '.fleet-actions', value: '.fleet-actions' }, + ]; + const [index, setIndex] = useState(); + + const { data: indexResult, status } = useQuery( + ['debug-indices', index], + () => fetchIndex(index), + { + retry: false, + } + ); + + const selectedOptions = index ? [indices.find((option) => option.value === index)!] : []; + + return ( + <> + +

+ +

+
+ + + + + + { + if (!newSelectedOptions.length) { + setIndex(undefined); + } else { + setIndex(newSelectedOptions[0].value as string); + } + }} + /> + + + + {indexResult?.error && ( + <> + + + {(indexResult?.error as any)?.error?.reason ?? ( + + )} + + + )} + + {indexResult && ( + <> + + + + )} + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/index.tsx new file mode 100644 index 0000000000000..6a89a696874a7 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/index.tsx @@ -0,0 +1,13 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './agent_policy_debugger'; +export * from './integration_debugger'; +export * from './saved_object_debugger'; +export * from './preconfiguration_debugger'; +export * from './fleet_index_debugger'; +export * from './orphaned_integration_policy_debugger'; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/integration_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/integration_debugger.tsx new file mode 100644 index 0000000000000..92f82285357f0 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/integration_debugger.tsx @@ -0,0 +1,314 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; +import { + EuiButton, + EuiButtonEmpty, + EuiCallOut, + EuiComboBox, + EuiConfirmModal, + EuiFlexGroup, + EuiFlexItem, + EuiHighlight, + EuiIcon, + EuiLink, + EuiSpacer, + EuiText, +} from '@elastic/eui'; +import { useMutation, useQuery } from 'react-query'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { getEuiIconType } from '../../../../../services/icons'; + +import { + sendGetPackages, + sendInstallPackage, + sendRemovePackage, + useLink, + useStartServices, +} from '../../../hooks'; +import type { PackageListItem } from '../../../types'; +import { queryClient } from '..'; +import { pkgKeyFromPackageInfo } from '../../../services'; + +const fetchInstalledIntegrations = async () => { + const response = await sendGetPackages({ experimental: true }); + + if (response.error) { + throw new Error(response.error.message); + } + + const installedIntegrations = response.data?.items.filter(({ status }) => status === 'installed'); + + return installedIntegrations; +}; + +export const IntegrationDebugger: React.FunctionComponent = () => { + const { http, notifications } = useStartServices(); + const { getHref } = useLink(); + + const [selectedIntegrationId, setSelectedIntegrationId] = useState(); + const [isReinstallModalVisible, setIsReinstallModalVisible] = useState(false); + const [isUninstallModalVisible, setIsUninstallModalVisible] = useState(false); + + const integrations = useQuery('debug-integrations', fetchInstalledIntegrations); + + const uninstallMutation = useMutation(async (integration: PackageListItem) => { + const response = await sendRemovePackage(integration.name, integration.version, true); + + if (response.error) { + notifications.toasts.addError(response.error, { + title: i18n.translate('xpack.fleet.debug.integrationDebugger.uninstall.error', { + defaultMessage: 'Error uninstalling {integrationTitle}', + values: { integrationTitle: integration.title }, + }), + toastMessage: response.error.message, + }); + + setIsUninstallModalVisible(false); + throw new Error(response.error.message); + } + + notifications.toasts.addSuccess( + i18n.translate('xpack.fleet.debug.integrationDebugger.uninstall.success', { + defaultMessage: 'Successfully uninstalled {integrationTitle}', + values: { integrationTitle: integration.title }, + }) + ); + + setSelectedIntegrationId(undefined); + setIsUninstallModalVisible(false); + + queryClient.invalidateQueries('debug-integrations'); + + return response.data; + }); + + const reinstallMutation = useMutation(async (integration: PackageListItem) => { + const uninstallResponse = await sendRemovePackage(integration.name, integration.version, true); + + if (uninstallResponse.error) { + notifications.toasts.addError(uninstallResponse.error, { + title: i18n.translate('xpack.fleet.debug.integrationDebugger.reinstall.error', { + defaultMessage: 'Error reinstalling {integrationTitle}', + values: { integrationTitle: integration.title }, + }), + toastMessage: uninstallResponse.error.message, + }); + + setIsReinstallModalVisible(false); + throw new Error(uninstallResponse.error.message); + } + + const installResponse = await sendInstallPackage(integration.name, integration.version); + + if (installResponse.error) { + notifications.toasts.addError(installResponse.error, { + title: i18n.translate('xpack.fleet.debug.integrationDebugger.reinstall.error', { + defaultMessage: 'Error reinstalling {integrationTitle}', + values: { integrationTitle: integration.title }, + }), + toastMessage: installResponse.error.message, + }); + + setIsReinstallModalVisible(false); + throw new Error(installResponse.error.message); + } + + notifications.toasts.addSuccess( + i18n.translate('xpack.fleet.debug.integrationDebugger.reinstall.success', { + defaultMessage: 'Successfully reinstalled {integrationTitle}', + values: { integrationTitle: integration.title }, + }) + ); + + setSelectedIntegrationId(undefined); + setIsReinstallModalVisible(false); + + queryClient.invalidateQueries('debug-integrations'); + + return installResponse.data; + }); + + if (integrations.status === 'error') { + return ( + + + + ); + } + + const comboBoxOptions = + integrations.data?.map((integration) => ({ + label: integration.name, + value: integration.id, + icon: getEuiIconType(integration, http.basePath), + })) ?? []; + + const selectedOptions = selectedIntegrationId + ? [comboBoxOptions.find((option) => option.value === selectedIntegrationId)!] + : []; + + const selectedIntegration = integrations.data?.find( + (integration) => integration.id === selectedIntegrationId + ); + + return ( + <> + +

+ +

+ +

+ +

+
+ + + + + + 0 ? ( + + + + ) : undefined + } + renderOption={(option, searchValue, contentClassName) => ( + + +   + {option.label} + + )} + onChange={(newSelectedOptions) => { + // Handle "clear" action + if (!newSelectedOptions.length) { + setSelectedIntegrationId(undefined); + } else { + setSelectedIntegrationId(newSelectedOptions[0].value); + } + }} + /> + + + {selectedIntegration && ( + + + setIsReinstallModalVisible(true)}> + Reinstall + + + + + setIsUninstallModalVisible(true)}> + Uninstall + + + + {isReinstallModalVisible && ( + setIsReinstallModalVisible(false)} + onConfirm={() => reinstallMutation.mutate(selectedIntegration)} + isLoading={reinstallMutation.isLoading} + cancelButtonText={i18n.translate( + 'xpack.fleet.debug.integrationDebugger.cancelReinstall', + { defaultMessage: 'Cancel' } + )} + confirmButtonText={i18n.translate( + 'xpack.fleet.debug.integrationDebugger.confirmReinstall', + { defaultMessage: 'Reinstall' } + )} + > + + + )} + + {isUninstallModalVisible && ( + setIsUninstallModalVisible(false)} + onConfirm={() => uninstallMutation.mutate(selectedIntegration)} + isLoading={uninstallMutation.isLoading} + cancelButtonText={i18n.translate( + 'xpack.fleet.debug.integrationDebugger.cancelUninstall', + { defaultMessage: 'Cancel' } + )} + confirmButtonText={i18n.translate( + 'xpack.fleet.debug.integrationDebugger.confirmUninstall', + { defaultMessage: 'Uninstall' } + )} + > + + + )} + + )} + + + {selectedIntegration && ( + <> + + + + + + )} + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/orphaned_integration_policy_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/orphaned_integration_policy_debugger.tsx new file mode 100644 index 0000000000000..abc84ad425900 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/orphaned_integration_policy_debugger.tsx @@ -0,0 +1,262 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; +import { + EuiSpacer, + EuiText, + EuiFlexGroup, + EuiComboBox, + EuiFlexItem, + EuiButton, + EuiConfirmModal, +} from '@elastic/eui'; +import { useMutation, useQuery } from 'react-query'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { + sendDeletePackagePolicy, + sendGetOrphanedIntegrationPolicies, + useStartServices, +} from '../../../hooks'; +import { queryClient } from '..'; + +import { CodeBlock } from './code_block'; + +const fetchOrphanedPolicies = async () => { + const response = await sendGetOrphanedIntegrationPolicies(); + + if (response.error) { + throw new Error(response.error.message); + } + + return response.data?.items ?? []; +}; + +export const OrphanedIntegrationPolicyDebugger: React.FunctionComponent = () => { + const { notifications } = useStartServices(); + + const [selectedPolicyId, setSelectedPolicyId] = useState(); + const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); + const [isDeleteAllModalVisible, setIsDeleteAllModalVisible] = useState(false); + + const { data: orphanedPolicies } = useQuery('debug-orphaned-policies', fetchOrphanedPolicies); + + const comboBoxOptions = + orphanedPolicies?.map((policy: { id: string; name: string }) => ({ + label: policy.name, + value: policy.id, + })) ?? []; + + const selectedOptions = selectedPolicyId + ? [comboBoxOptions.find(({ value }: { value: string }) => value === selectedPolicyId)!] + : []; + + const selectedPolicy = orphanedPolicies?.find( + (policy: { id: string }) => policy.id === selectedPolicyId + ); + + const deleteOnePolicyMutation = useMutation(async (policyId: string) => { + const response = await sendDeletePackagePolicy({ + packagePolicyIds: [policyId], + force: true, + }); + + if (response.error) { + notifications.toasts.addError(response.error, { + title: i18n.translate('xpack.fleet.debug.orphanedIntegrationPolicyDebugger.deleteError', { + defaultMessage: 'Error deleting policy', + }), + toastMessage: response.error.message, + }); + throw new Error(response.error.message); + } + + notifications.toasts.addSuccess( + i18n.translate('xpack.fleet.debug.orphanedIntegrationPolicyDebugger.deleteSuccess', { + defaultMessage: 'Successfully deleted orphaned policy', + }) + ); + queryClient.invalidateQueries('debug-orphaned-policies'); + setSelectedPolicyId(undefined); + setIsDeleteModalVisible(false); + + return response.data; + }); + + const deleteAllPoliciesMutation = useMutation(async () => { + const response = await sendDeletePackagePolicy({ + packagePolicyIds: orphanedPolicies?.map((policy: { id: string }) => policy.id), + force: true, + }); + + if (response.error) { + notifications.toasts.addError(response.error, { + title: i18n.translate( + 'xpack.fleet.debug.orphanedIntegrationPolicyDebugger.deleteAllError', + { defaultMessage: 'Error deleting orphaned policies' } + ), + toastMessage: response.error.message, + }); + throw new Error(response.error.message); + } + + notifications.toasts.addSuccess( + i18n.translate('xpack.fleet.debug.orphanedIntegrationPolicyDebugger.deleteAllSuccess', { + defaultMessage: 'Successfully deleted all orphaned policies', + }) + ); + queryClient.invalidateQueries('debug-orphaned-policies'); + setSelectedPolicyId(undefined); + setIsDeleteAllModalVisible(false); + + return response.data; + }); + + return ( + <> + +

+ +

+ +

+ +

+
+ + + + + + { + if (!newSelectedOptions.length) { + setSelectedPolicyId(undefined); + } else { + setSelectedPolicyId(newSelectedOptions[0].value); + } + }} + /> + + + +
+ setIsDeleteModalVisible(true)} + > + + +
+
+ + +
+ setIsDeleteAllModalVisible(true)} + > + + +
+
+
+ + {isDeleteModalVisible && selectedPolicy && selectedPolicyId && ( + setIsDeleteModalVisible(false)} + onConfirm={() => deleteOnePolicyMutation.mutate(selectedPolicyId)} + isLoading={deleteOnePolicyMutation.isLoading} + cancelButtonText={i18n.translate( + 'xpack.fleet.debug.orphanedIntegrationPolicyDebugger.cancelDelete', + { defaultMessage: 'Cancel' } + )} + confirmButtonText={i18n.translate( + 'xpack.fleet.debug.orphanedIntegrationPolicyDebugger.confirmDelete', + { defaultMessage: 'Delete' } + )} + > + + + )} + + {isDeleteAllModalVisible && ( + setIsDeleteAllModalVisible(false)} + onConfirm={() => deleteAllPoliciesMutation.mutate()} + isLoading={deleteAllPoliciesMutation.isLoading} + cancelButtonText={i18n.translate( + 'xpack.fleet.debug.orphanedIntegrationPolicyDebugger.cancelDeleteAll', + { defaultMessage: 'Cancel' } + )} + confirmButtonText={i18n.translate( + 'xpack.fleet.debug.orphanedIntegrationPolicyDebugger.confirmDeleteAll', + { defaultMessage: 'Delete all' } + )} + > + + + )} + + {selectedPolicyId && ( + <> + + + + )} + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx new file mode 100644 index 0000000000000..35e9bcba75492 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx @@ -0,0 +1,272 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; +import { + EuiSpacer, + EuiText, + EuiCode, + EuiFlexGroup, + EuiComboBox, + EuiFlexItem, + EuiButton, + EuiLink, + EuiConfirmModal, +} from '@elastic/eui'; +import { useMutation, useQuery } from 'react-query'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { + sendGetAgentPolicies, + sendResetAllPreconfiguredAgentPolicies, + sendResetOnePreconfiguredAgentPolicy, + useLink, + useStartServices, +} from '../../../hooks'; +import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../constants'; +import { queryClient } from '..'; + +import { CodeBlock } from './code_block'; + +const fetchPreconfiguredPolicies = async () => { + const kuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.is_preconfigured:true`; + + const response = await sendGetAgentPolicies({ kuery, perPage: SO_SEARCH_LIMIT, full: true }); + + if (response.error) { + throw new Error(response.error.message); + } + + return response.data?.items ?? []; +}; + +export const PreconfigurationDebugger: React.FunctionComponent = () => { + const { getHref } = useLink(); + const { notifications } = useStartServices(); + + const [selectedPolicyId, setSelectedPolicyId] = useState(); + const [isResetModalVisible, setIsResetModalVisible] = useState(false); + const [isResetAllModalVisible, setIsResetAllModalVisible] = useState(false); + + const preconfiguredPolicies = useQuery( + 'debug-preconfigured-policies', + fetchPreconfiguredPolicies + ); + + const comboBoxOptions = + preconfiguredPolicies.data?.map((policy) => ({ + label: policy.name, + value: policy.id, + })) ?? []; + + const selectedOptions = selectedPolicyId + ? [comboBoxOptions.find(({ value }) => value === selectedPolicyId)!] + : []; + + const selectedPolicy = preconfiguredPolicies.data?.find( + (policy) => policy.id === selectedPolicyId + ); + + const resetOnePolicyMutation = useMutation(async (policyId: string) => { + const response = await sendResetOnePreconfiguredAgentPolicy(policyId); + + if (response.error) { + notifications.toasts.addError(response.error, { + title: i18n.translate('xpack.fleet.debug.preconfigurationDebugger.resetError', { + defaultMessage: 'Error resetting policy', + }), + toastMessage: response.error.message, + }); + throw new Error(response.error.message); + } + + notifications.toasts.addSuccess( + i18n.translate('xpack.fleet.debug.preconfigurationDebugger.resetSuccess', { + defaultMessage: 'Successfully reset policy', + }) + ); + queryClient.invalidateQueries('debug-preconfigured-policies'); + setSelectedPolicyId(undefined); + setIsResetModalVisible(false); + + return response.data; + }); + + const resetAllPoliciesMutation = useMutation(async () => { + const response = await sendResetAllPreconfiguredAgentPolicies(); + + if (response.error) { + notifications.toasts.addError(response.error, { + title: i18n.translate('xpack.fleet.debug.preconfigurationDebugger.resetAllError', { + defaultMessage: 'Error resetting policies', + }), + toastMessage: response.error.message, + }); + throw new Error(response.error.message); + } + + notifications.toasts.addSuccess( + i18n.translate('xpack.fleet.debug.preconfigurationDebugger.resetAllSuccess', { + defaultMessage: 'Successfully reset policies', + }) + ); + queryClient.invalidateQueries('debug-preconfigured-policies'); + setSelectedPolicyId(undefined); + setIsResetAllModalVisible(false); + + return response.data; + }); + + return ( + <> + +

+ kibana.yml }} + /> +

+ +

+ +

+
+ + + + + + { + if (!newSelectedOptions.length) { + setSelectedPolicyId(undefined); + } else { + setSelectedPolicyId(newSelectedOptions[0].value); + } + }} + /> + + + +
+ setIsResetModalVisible(true)} + > + + +
+
+ + +
+ setIsResetAllModalVisible(true)} + > + + +
+
+
+ + {isResetModalVisible && selectedPolicy && selectedPolicyId && ( + setIsResetModalVisible(false)} + onConfirm={() => resetOnePolicyMutation.mutate(selectedPolicyId)} + isLoading={resetOnePolicyMutation.isLoading} + cancelButtonText={i18n.translate( + 'xpack.fleet.debug.preconfigurationDebugger.resetModalCancel', + { defaultMessage: 'Cancel' } + )} + confirmButtonText={i18n.translate( + 'xpack.fleet.debug.preconfigurationDebugger.resetModalConfirm', + { defaultMessage: 'Reset' } + )} + > + + + )} + + {isResetAllModalVisible && ( + setIsResetAllModalVisible(false)} + onConfirm={() => resetAllPoliciesMutation.mutate()} + isLoading={resetAllPoliciesMutation.isLoading} + cancelButtonText={i18n.translate( + 'xpack.fleet.debug.preconfigurationDebugger.resetAllModalCancel', + { defaultMessage: 'Cancel' } + )} + confirmButtonText={i18n.translate( + 'xpack.fleet.debug.preconfigurationDebugger.resetAllModalConfirm', + { defaultMessage: 'Reset all' } + )} + > + + + )} + + {selectedPolicyId && ( + <> + + + + + + + + + )} + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx new file mode 100644 index 0000000000000..c23b383d96f9d --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx @@ -0,0 +1,178 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState, useRef } from 'react'; +import { useQuery } from 'react-query'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiSelect, + EuiSpacer, + EuiText, + EuiCallOut, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { sendRequest } from '../../../hooks'; + +import { CodeBlock } from './code_block'; +import { SavedObjectNamesCombo } from './saved_object_names_combo'; + +const fetchSavedObjects = async (type?: string, name?: string) => { + if (!type || !name) return; + const path = `/.kibana/_search`; + const body = { + query: { + bool: { + must: { + match: { [`${type}.name`]: name }, + }, + filter: { + term: { + type, + }, + }, + }, + }, + }; + const response = await sendRequest({ + method: 'post', + path: `/api/console/proxy`, + query: { + path, + method: 'GET', + }, + body, + }); + + if (response.error) { + throw new Error(response.error.message); + } + return response.data?.hits; +}; + +export const SavedObjectDebugger: React.FunctionComponent = () => { + const types = [ + { + value: 'ingest-agent-policies', + text: i18n.translate('xpack.fleet.debug.savedObjectDebugger.agentPolicyLabel', { + defaultMessage: 'Agent policy', + }), + }, + { + value: 'ingest-package-policies', + text: i18n.translate('xpack.fleet.debug.savedObjectDebugger.packagePolicyLabel', { + defaultMessage: 'Integration policy', + }), + }, + { + value: 'ingest-outputs', + text: i18n.translate('xpack.fleet.debug.savedObjectDebugger.outputLabel', { + defaultMessage: 'Output', + }), + }, + { + value: 'epm-packages', + text: i18n.translate('xpack.fleet.debug.savedObjectDebugger.packageLabel', { + defaultMessage: 'Packages', + }), + }, + ]; + + const [type, setType] = useState(types[0].value); + const [name, setName] = useState(); + const [namesStatus, setNamesStatus] = useState(); + + const childRef = useRef<{ refetchNames: Function }>(); + + const onTypeChange = (e: any) => { + setType(e.target.value); + setName(undefined); + childRef.current!.refetchNames(); + }; + + const { data: savedObjectResult, status } = useQuery(['debug-saved-objects', type, name], () => + fetchSavedObjects(type, name) + ); + + return ( + <> + +

+ +

+
+ + + + + + + onTypeChange(e)} + aria-label={i18n.translate('xpack.fleet.debug.savedObjectDebugger.selectTypeLabel', { + defaultMessage: 'Select saved object type', + })} + /> + + + + + + + + + + {(status === 'error' || namesStatus === 'error') && ( + <> + + + + + + )} + + {/* Allowing this to render while status === loading prevents the Code Block UI from + flickering when selecting a new object */} + {(savedObjectResult || status === 'loading') && ( + <> + + + + )} + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx new file mode 100644 index 0000000000000..9458bca298b9a --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_names_combo.tsx @@ -0,0 +1,110 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { forwardRef, useImperativeHandle } from 'react'; +import { useQuery } from 'react-query'; +import { EuiComboBox } from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +import { sendRequest } from '../../../hooks'; + +const fetchSavedObjectNames = async (type: string) => { + const path = `/.kibana/_search`; + const body = { + size: 0, + query: { + bool: { + filter: { + term: { + type, + }, + }, + }, + }, + aggs: { + names: { + terms: { field: `${type}.name`, size: 500 }, + }, + }, + }; + const response = await sendRequest({ + method: 'post', + path: `/api/console/proxy`, + query: { + path, + method: 'GET', + }, + body, + }); + + if (response.error) { + throw new Error(response.error.message); + } + return response.data?.aggregations.names.buckets; +}; + +interface SavedObjectNamesComboProps { + name: string; + setName: Function; + type: string; + setNamesStatus: Function; +} + +export const SavedObjectNamesCombo = forwardRef( + ({ name, setName, type, setNamesStatus }: SavedObjectNamesComboProps, ref) => { + const { + data: savedObjectNames, + refetch, + status, + } = useQuery(['debug-saved-object-names', type], () => fetchSavedObjectNames(type), { + refetchOnWindowFocus: false, + }); + + setNamesStatus?.(status); + + useImperativeHandle(ref, () => ({ + refetchNames: refetch, + })); + + const comboBoxOptions = (savedObjectNames ?? []).map((obj: { key: string }) => ({ + label: obj.key, + value: obj.key, + })); + + const selectedOption = comboBoxOptions.find( + (option: { value: string }) => option.value === name + )!; + const selectedOptions = selectedOption ? [selectedOption] : []; + + return ( + { + if (!newSelectedOptions.length) { + setName(undefined); + } else { + setName(newSelectedOptions[0].value as string); + } + }} + /> + ); + } +); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/index.tsx new file mode 100644 index 0000000000000..b54a97d3b270c --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/index.tsx @@ -0,0 +1,187 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { + EuiAccordion, + EuiCallOut, + EuiHorizontalRule, + EuiListGroup, + EuiPage, + EuiPageBody, + EuiPageHeader, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { ReactQueryDevtools } from 'react-query/devtools'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { useLink, useStartServices } from '../../hooks'; + +import { + AgentPolicyDebugger, + IntegrationDebugger, + PreconfigurationDebugger, + FleetIndexDebugger, + SavedObjectDebugger, + OrphanedIntegrationPolicyDebugger, +} from './components'; + +// TODO: Evaluate moving this react-query initialization up to the main Fleet app +// setup if we end up pursuing wider adoption of react-query. +export const queryClient = new QueryClient(); + +const panels = [ + { + title: i18n.translate('xpack.fleet.debug.agentPolicyDebugger.title', { + defaultMessage: 'Agent Policy Debugger', + }), + id: 'agentPolicyDebugger', + component: , + }, + { + title: i18n.translate('xpack.fleet.debug.integrationDebugger.title', { + defaultMessage: 'Integration Debugger', + }), + id: 'integrationDebugger', + component: , + }, + { + title: i18n.translate('xpack.fleet.debug.savedObjectDebugger.title', { + defaultMessage: 'Saved Object Debugger', + }), + id: 'savedObjectDebugger', + component: , + }, + { + title: i18n.translate('xpack.fleet.debug.fleetIndexDebugger.title', { + defaultMessage: 'Fleet Index Debugger', + }), + id: 'fleetIndexDebugger', + component: , + }, + { + title: i18n.translate('xpack.fleet.debug.preconfigurationDebugger.title', { + defaultMessage: 'Preconfiguration Debugger', + }), + id: 'preconfigurationDebugger', + component: , + }, + { + title: i18n.translate('xpack.fleet.debug.orphanedIntegrationPolicyDebugger.title', { + defaultMessage: 'Orphaned Integration Policy Debugger', + }), + id: 'orphanedIntegrationPolicyDebugger', + component: , + }, +]; + +export const DebugPage: React.FunctionComponent = () => { + const { chrome } = useStartServices(); + const { getHref } = useLink(); + + chrome.docTitle.change(['Debug', 'Fleet']); + + return ( + + + + + + + + + + ), + strongLossOfData: ( + + + + ), + }} + /> + + + + + + {panels.map(({ title, id, component }) => ( + <> + +

{title}

+ + } + > + + {component} +
+ + + + ))} + + +

+ +

+
+ + + + +
+
+ +
+ ); +}; diff --git a/x-pack/plugins/fleet/public/constants/page_paths.ts b/x-pack/plugins/fleet/public/constants/page_paths.ts index 26db09d68f41d..e7134f8549e27 100644 --- a/x-pack/plugins/fleet/public/constants/page_paths.ts +++ b/x-pack/plugins/fleet/public/constants/page_paths.ts @@ -17,7 +17,8 @@ export type StaticPage = | 'data_streams' | 'settings' | 'settings_edit_fleet_server_hosts' - | 'settings_create_outputs'; + | 'settings_create_outputs' + | 'debug'; export type DynamicPage = | 'integrations_all' @@ -67,6 +68,7 @@ export const FLEET_ROUTING_PATHS = { settings_edit_fleet_server_hosts: '/settings/edit-fleet-server-hosts', settings_create_outputs: '/settings/create-outputs', settings_edit_outputs: '/settings/outputs/:outputId', + debug: '/_debug', // TODO: Move this to the integrations app add_integration_to_policy: '/integrations/:pkgkey/add-integration/:integration?', @@ -190,4 +192,5 @@ export const pagePathGetters: { FLEET_ROUTING_PATHS.settings_edit_outputs.replace(':outputId', outputId as string), ], settings_create_outputs: () => [FLEET_BASE_PATH, FLEET_ROUTING_PATHS.settings_create_outputs], + debug: () => [FLEET_BASE_PATH, FLEET_ROUTING_PATHS.debug], }; diff --git a/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts b/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts index 777a74b079d7b..248fb60f5bf70 100644 --- a/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts +++ b/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts @@ -115,3 +115,19 @@ export const sendDeleteAgentPolicy = (body: DeleteAgentPolicyRequest['body']) => body: JSON.stringify(body), }); }; + +export const sendResetOnePreconfiguredAgentPolicy = (agentPolicyId: string) => { + return sendRequest({ + path: agentPolicyRouteService.getResetOnePreconfiguredAgentPolicyPath(agentPolicyId), + method: 'post', + body: JSON.stringify({}), + }); +}; + +export const sendResetAllPreconfiguredAgentPolicies = () => { + return sendRequest({ + path: agentPolicyRouteService.getResetAllPreconfiguredAgentPolicyPath(), + method: 'post', + body: JSON.stringify({}), + }); +}; diff --git a/x-pack/plugins/fleet/public/hooks/use_request/epm.ts b/x-pack/plugins/fleet/public/hooks/use_request/epm.ts index 7864f08d19a6e..02959d06327cb 100644 --- a/x-pack/plugins/fleet/public/hooks/use_request/epm.ts +++ b/x-pack/plugins/fleet/public/hooks/use_request/epm.ts @@ -109,10 +109,13 @@ export const sendInstallPackage = (pkgName: string, pkgVersion: string) => { }); }; -export const sendRemovePackage = (pkgName: string, pkgVersion: string) => { +export const sendRemovePackage = (pkgName: string, pkgVersion: string, force: boolean = false) => { return sendRequest({ path: epmRouteService.getRemovePath(pkgName, pkgVersion), method: 'delete', + body: { + force, + }, }); }; diff --git a/x-pack/plugins/fleet/public/hooks/use_request/package_policy.ts b/x-pack/plugins/fleet/public/hooks/use_request/package_policy.ts index 0d2e1179108f2..3b2b14960379f 100644 --- a/x-pack/plugins/fleet/public/hooks/use_request/package_policy.ts +++ b/x-pack/plugins/fleet/public/hooks/use_request/package_policy.ts @@ -109,3 +109,10 @@ export function sendUpgradePackagePolicy(packagePolicyIds: string[]) { }), }); } + +export function sendGetOrphanedIntegrationPolicies() { + return sendRequest({ + path: packagePolicyRouteService.getOrphanedIntegrationPoliciesPath(), + method: 'get', + }); +} diff --git a/x-pack/plugins/fleet/public/search_provider.ts b/x-pack/plugins/fleet/public/search_provider.ts index 9ce1ebc14c5e9..b632c3d1301fc 100644 --- a/x-pack/plugins/fleet/public/search_provider.ts +++ b/x-pack/plugins/fleet/public/search_provider.ts @@ -10,18 +10,17 @@ import type { Observable } from 'rxjs'; import { from, of, combineLatest } from 'rxjs'; import { map, shareReplay, takeUntil } from 'rxjs/operators'; -import { ICON_TYPES } from '@elastic/eui'; - import type { GlobalSearchResultProvider, GlobalSearchProviderResult, } from '@kbn/global-search-plugin/public'; -import { epmRouteService, INTEGRATIONS_PLUGIN_ID } from '../common'; +import { INTEGRATIONS_PLUGIN_ID } from '../common'; import { sendGetPackages } from './hooks'; import type { GetPackagesResponse, PackageListItem } from './types'; import { pagePathGetters } from './constants'; +import { getEuiIconType } from './services/icons'; const packageType = 'integration'; @@ -36,18 +35,6 @@ const createPackages$ = () => shareReplay(1) ); -const getEuiIconType = (pkg: PackageListItem, basePath: IBasePath): string | undefined => { - const pkgIcon = pkg.icons?.find((icon) => icon.type === 'image/svg+xml'); - if (!pkgIcon) { - // If no valid SVG is available, attempt to fallback to built-in EUI icons - return ICON_TYPES.find((key) => key.toLowerCase() === `logo${pkg.name}`); - } - - return basePath.prepend( - epmRouteService.getFilePath(`/package/${pkg.name}/${pkg.version}${pkgIcon.src}`) - ); -}; - /** Exported for testing only @internal */ export const toSearchResult = ( pkg: PackageListItem, diff --git a/x-pack/plugins/fleet/public/services/icons.ts b/x-pack/plugins/fleet/public/services/icons.ts new file mode 100644 index 0000000000000..89287169d7537 --- /dev/null +++ b/x-pack/plugins/fleet/public/services/icons.ts @@ -0,0 +1,24 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ICON_TYPES } from '@elastic/eui'; +import type { IBasePath } from '@kbn/core/public'; + +import { epmRouteService } from '../applications/fleet/services'; +import type { PackageListItem } from '../types'; + +export const getEuiIconType = (pkg: PackageListItem, basePath: IBasePath): string | undefined => { + const pkgIcon = pkg.icons?.find((icon) => icon.type === 'image/svg+xml'); + if (!pkgIcon) { + // If no valid SVG is available, attempt to fallback to built-in EUI icons + return ICON_TYPES.find((key) => key.toLowerCase() === `logo${pkg.name}`); + } + + return basePath.prepend( + epmRouteService.getFilePath(`/package/${pkg.name}/${pkg.version}${pkgIcon.src}`) + ); +}; diff --git a/x-pack/plugins/fleet/server/plugin.ts b/x-pack/plugins/fleet/server/plugin.ts index 51178e80260d4..ae4f6134e891f 100644 --- a/x-pack/plugins/fleet/server/plugin.ts +++ b/x-pack/plugins/fleet/server/plugin.ts @@ -67,6 +67,7 @@ import { registerSettingsRoutes, registerAppRoutes, registerPreconfigurationRoutes, + registerHealthCheckRoutes, } from './routes'; import type { ExternalCallback, FleetRequestHandlerContext } from './types'; @@ -366,6 +367,7 @@ export class FleetPlugin registerSettingsRoutes(fleetAuthzRouter); registerDataStreamRoutes(fleetAuthzRouter); registerPreconfigurationRoutes(fleetAuthzRouter); + registerHealthCheckRoutes(fleetAuthzRouter); // Conditional config routes if (config.agents.enabled) { diff --git a/x-pack/plugins/fleet/server/routes/health_check/index.ts b/x-pack/plugins/fleet/server/routes/health_check/index.ts new file mode 100644 index 0000000000000..23d917aa09a43 --- /dev/null +++ b/x-pack/plugins/fleet/server/routes/health_check/index.ts @@ -0,0 +1,34 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { APP_API_ROUTES } from '../../constants'; +import type { FleetRequestHandler } from '../../types'; +import type { FleetAuthzRouter } from '../security'; + +export const registerRoutes = (router: FleetAuthzRouter) => { + router.get( + { + path: APP_API_ROUTES.HEALTH_CHECK_PATTERN, + validate: {}, + fleetAuthz: { + fleet: { all: true }, + }, + }, + getHealthCheckHandler + ); +}; + +export const getHealthCheckHandler: FleetRequestHandler = async ( + context, + request, + response +) => { + return response.ok({ + body: 'Fleet Health Check Report:\nFleet Server: HEALTHY', + headers: { 'content-type': 'text/plain' }, + }); +}; diff --git a/x-pack/plugins/fleet/server/routes/index.ts b/x-pack/plugins/fleet/server/routes/index.ts index bcdc2db54ae0c..b04e179a05dcf 100644 --- a/x-pack/plugins/fleet/server/routes/index.ts +++ b/x-pack/plugins/fleet/server/routes/index.ts @@ -16,3 +16,4 @@ export { registerRoutes as registerOutputRoutes } from './output'; export { registerRoutes as registerSettingsRoutes } from './settings'; export { registerRoutes as registerAppRoutes } from './app'; export { registerRoutes as registerPreconfigurationRoutes } from './preconfiguration'; +export { registerRoutes as registerHealthCheckRoutes } from './health_check'; diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts index ad46f25ff91de..c6f9e1583841b 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts @@ -11,7 +11,9 @@ import Boom from '@hapi/boom'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import type { RequestHandler } from '@kbn/core/server'; -import { appContextService, packagePolicyService } from '../../services'; +import { groupBy, keyBy } from 'lodash'; + +import { agentPolicyService, appContextService, packagePolicyService } from '../../services'; import type { GetPackagePoliciesRequestSchema, GetOnePackagePolicyRequestSchema, @@ -21,6 +23,7 @@ import type { UpgradePackagePoliciesRequestSchema, DryRunPackagePoliciesRequestSchema, FleetRequestHandler, + PackagePolicy, } from '../../types'; import type { CreatePackagePolicyResponse, @@ -29,7 +32,10 @@ import type { UpgradePackagePolicyDryRunResponse, UpgradePackagePolicyResponse, } from '../../../common'; +import { installationStatuses } from '../../../common'; import { defaultIngestErrorHandler } from '../../errors'; +import { getInstallations } from '../../services/epm/packages'; +import { PACKAGES_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../constants'; export const getPackagePoliciesHandler: RequestHandler< undefined, @@ -82,6 +88,50 @@ export const getOnePackagePolicyHandler: RequestHandler< } }; +export const getOrphanedPackagePolicies: RequestHandler = async ( + context, + request, + response +) => { + const soClient = (await context.core).savedObjects.client; + try { + const installedPackages = await getInstallations(soClient, { + perPage: SO_SEARCH_LIMIT, + filter: ` + ${PACKAGES_SAVED_OBJECT_TYPE}.attributes.install_status:${installationStatuses.Installed} + `, + }); + const orphanedPackagePolicies: PackagePolicy[] = []; + const packagePolicies = await packagePolicyService.list(soClient, { + perPage: SO_SEARCH_LIMIT, + }); + const packagePoliciesByPackage = groupBy(packagePolicies.items, 'package.name'); + const agentPolicies = await agentPolicyService.list(soClient, { + perPage: SO_SEARCH_LIMIT, + }); + const agentPoliciesById = keyBy(agentPolicies.items, 'id'); + const usedPackages = installedPackages.saved_objects.filter( + ({ attributes: { name } }) => !!packagePoliciesByPackage[name] + ); + usedPackages.forEach(({ attributes: { name } }) => { + packagePoliciesByPackage[name].forEach((packagePolicy) => { + if (!agentPoliciesById[packagePolicy.policy_id]) { + orphanedPackagePolicies.push(packagePolicy); + } + }); + }); + + return response.ok({ + body: { + items: orphanedPackagePolicies, + total: orphanedPackagePolicies.length, + }, + }); + } catch (error) { + return defaultIngestErrorHandler({ error, response }); + } +}; + export const createPackagePolicyHandler: FleetRequestHandler< undefined, undefined, @@ -218,7 +268,7 @@ export const deletePackagePolicyHandler: RequestHandler< soClient, esClient, request.body.packagePolicyIds, - { user, force: request.body.force } + { user, force: request.body.force, skipUnassignFromAgentPolicies: request.body.force } ); try { await packagePolicyService.runExternalCallbacks( diff --git a/x-pack/plugins/fleet/server/routes/package_policy/index.ts b/x-pack/plugins/fleet/server/routes/package_policy/index.ts index 68cdfc26df531..2b2ae190b80bb 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/index.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/index.ts @@ -25,6 +25,7 @@ import { deletePackagePolicyHandler, upgradePackagePolicyHandler, dryRunUpgradePackagePolicyHandler, + getOrphanedPackagePolicies, } from './handlers'; export const registerRoutes = (router: FleetAuthzRouter) => { @@ -52,6 +53,17 @@ export const registerRoutes = (router: FleetAuthzRouter) => { getOnePackagePolicyHandler ); + router.get( + { + path: PACKAGE_POLICY_API_ROUTES.ORPHANED_INTEGRATION_POLICIES, + validate: {}, + fleetAuthz: { + integrations: { readIntegrationPolicies: true }, + }, + }, + getOrphanedPackagePolicies + ); + // Create router.post( { diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/get.ts b/x-pack/test/fleet_api_integration/apis/package_policy/get.ts index 1e90ab76666fe..5c3ed257d7b5e 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/get.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/get.ts @@ -5,6 +5,7 @@ * 2.0. */ +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; @@ -18,10 +19,9 @@ export default function (providerContext: FtrProviderContext) { // because `this` has to point to the Mocha context // see https://mochajs.org/#arrow-functions - describe('Package Policy - get by id', async function () { + describe('Package Policy APIs', () => { skipIfNoDockerRegistry(providerContext); - let agentPolicyId: string; - let packagePolicyId: string; + before(async () => { await getService('esArchiver').load('x-pack/test/functional/es_archives/empty_kibana'); await getService('esArchiver').load( @@ -29,68 +29,146 @@ export default function (providerContext: FtrProviderContext) { ); }); - before(async function () { - if (!server.enabled) { - return; - } - const { body: agentPolicyResponse } = await supertest - .post(`/api/fleet/agent_policies`) - .set('kbn-xsrf', 'xxxx') - .send({ - name: 'Test policy', - namespace: 'default', - }); - agentPolicyId = agentPolicyResponse.item.id; - - const { body: packagePolicyResponse } = await supertest - .post(`/api/fleet/package_policies`) - .set('kbn-xsrf', 'xxxx') - .send({ - name: 'filetest-1', - description: '', - namespace: 'default', - policy_id: agentPolicyId, - enabled: true, - output_id: '', - inputs: [], - package: { - name: 'filetest', - title: 'For File Tests', - version: '0.1.0', - }, - }); - packagePolicyId = packagePolicyResponse.item.id; - }); - - after(async function () { - if (!server.enabled) { - return; - } - - await supertest - .post(`/api/fleet/agent_policies/delete`) - .set('kbn-xsrf', 'xxxx') - .send({ agentPolicyId }) - .expect(200); - - await supertest - .post(`/api/fleet/package_policies/delete`) - .set('kbn-xsrf', 'xxxx') - .send({ packagePolicyIds: [packagePolicyId] }) - .expect(200); - }); after(async () => { await getService('esArchiver').unload( 'x-pack/test/functional/es_archives/fleet/empty_fleet_server' ); await getService('esArchiver').unload('x-pack/test/functional/es_archives/empty_kibana'); }); - it('should succeed with a valid id', async function () { - await supertest.get(`/api/fleet/package_policies/${packagePolicyId}`).expect(200); + + describe('get by id', async function () { + let agentPolicyId: string; + let packagePolicyId: string; + + before(async function () { + if (!server.enabled) { + return; + } + + const { body: agentPolicyResponse } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Test policy', + namespace: 'default', + }); + agentPolicyId = agentPolicyResponse.item.id; + + const { body: packagePolicyResponse } = await supertest + .post(`/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'filetest-1', + description: '', + namespace: 'default', + policy_id: agentPolicyId, + enabled: true, + output_id: '', + inputs: [], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }); + packagePolicyId = packagePolicyResponse.item.id; + }); + + after(async function () { + if (!server.enabled) { + return; + } + + await supertest + .post(`/api/fleet/agent_policies/delete`) + .set('kbn-xsrf', 'xxxx') + .send({ agentPolicyId }) + .expect(200); + + await supertest + .post(`/api/fleet/package_policies/delete`) + .set('kbn-xsrf', 'xxxx') + .send({ packagePolicyIds: [packagePolicyId] }) + .expect(200); + }); + + it('should succeed with a valid id', async function () { + await supertest.get(`/api/fleet/package_policies/${packagePolicyId}`).expect(200); + }); + + it('should return a 404 with an invalid id', async function () { + await supertest.get(`/api/fleet/package_policies/IS_NOT_PRESENT`).expect(404); + }); }); - it('should return a 404 with an invalid id', async function () { - await supertest.get(`/api/fleet/package_policies/IS_NOT_PRESENT`).expect(404); + describe('get orphaned policies', () => { + let agentPolicyId: string; + let packagePolicyId: string; + + before(async function () { + if (!server.enabled) { + return; + } + + const { body: agentPolicyResponse } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Test policy', + namespace: 'default', + }); + + agentPolicyId = agentPolicyResponse.item.id; + + const { body: packagePolicyResponse } = await supertest + .post(`/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'filetest-1', + description: '', + namespace: 'default', + policy_id: agentPolicyId, + enabled: true, + output_id: '', + inputs: [], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }); + + packagePolicyId = packagePolicyResponse.item.id; + + // Delete the agent policy directly from ES to orphan the package policy + const esClient = getService('es'); + await esClient.delete({ + index: '.kibana', + id: `ingest-agent-policies:${agentPolicyId}`, + refresh: 'wait_for', + }); + }); + + after(async function () { + if (!server.enabled) { + return; + } + + await supertest + .post(`/api/fleet/package_policies/delete`) + .set('kbn-xsrf', 'xxxx') + .send({ packagePolicyIds: [packagePolicyId], force: true }) + .expect(200); + }); + + it('should return orphaned policy', async () => { + const response = await supertest + .get('/internal/fleet/orphaned_integration_policies') + .expect(200); + + expect(response.body.items).to.have.length(1); + expect(response.body.items[0].id).to.eql(packagePolicyId); + }); }); }); } From 04c8fb9b350ebd1460019d605dd5e6c2b7082f66 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Tue, 21 Jun 2022 12:54:01 -0400 Subject: [PATCH 46/50] [Ingest Pipeline] Provide url params to use ingestPipeline UI from Fleet (#134776) --- .../helpers/pipelines_create.helpers.ts | 19 ++++--- .../ingest_pipelines_create.test.tsx | 12 ++++ .../pipeline_form/pipeline_form.tsx | 4 ++ .../pipeline_form/pipeline_form_fields.tsx | 4 +- .../public/application/hooks/index.tsx | 8 +++ .../application/hooks/redirect_path.test.tsx | 56 +++++++++++++++++++ .../application/hooks/redirect_path.tsx | 35 ++++++++++++ .../pipelines_create/pipelines_create.tsx | 51 ++++++++++++----- .../pipelines_edit/pipelines_edit.tsx | 6 +- .../sections/pipelines_list/main.tsx | 4 +- 10 files changed, 173 insertions(+), 26 deletions(-) create mode 100644 x-pack/plugins/ingest_pipelines/public/application/hooks/index.tsx create mode 100644 x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.test.tsx create mode 100644 x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.tsx diff --git a/x-pack/plugins/ingest_pipelines/__jest__/client_integration/helpers/pipelines_create.helpers.ts b/x-pack/plugins/ingest_pipelines/__jest__/client_integration/helpers/pipelines_create.helpers.ts index 108e4d908d801..e29510d344b40 100644 --- a/x-pack/plugins/ingest_pipelines/__jest__/client_integration/helpers/pipelines_create.helpers.ts +++ b/x-pack/plugins/ingest_pipelines/__jest__/client_integration/helpers/pipelines_create.helpers.ts @@ -16,15 +16,18 @@ export type PipelinesCreateTestBed = TestBed & { actions: ReturnType; }; -const testBedConfig: AsyncTestBedConfig = { - memoryRouter: { - initialEntries: [getCreatePath()], - componentRoutePath: ROUTES.create, - }, - doMountAsync: true, -}; +export const setup = async ( + httpSetup: HttpSetup, + queryParams: string = '' +): Promise => { + const testBedConfig: AsyncTestBedConfig = { + memoryRouter: { + initialEntries: [`${getCreatePath()}${queryParams}`], + componentRoutePath: ROUTES.create, + }, + doMountAsync: true, + }; -export const setup = async (httpSetup: HttpSetup): Promise => { const initTestBed = registerTestBed( WithAppDependencies(PipelinesCreate, httpSetup), testBedConfig diff --git a/x-pack/plugins/ingest_pipelines/__jest__/client_integration/ingest_pipelines_create.test.tsx b/x-pack/plugins/ingest_pipelines/__jest__/client_integration/ingest_pipelines_create.test.tsx index ebc7acee3095e..f67d9d24ed690 100644 --- a/x-pack/plugins/ingest_pipelines/__jest__/client_integration/ingest_pipelines_create.test.tsx +++ b/x-pack/plugins/ingest_pipelines/__jest__/client_integration/ingest_pipelines_create.test.tsx @@ -80,6 +80,18 @@ describe('', () => { expect(find('apiRequestFlyout.apiRequestFlyoutTitle').text()).toBe('Request'); }); + test('should allow to prepopulate the name field', async () => { + await act(async () => { + testBed = await setup(httpSetup, '?name=test-pipeline'); + }); + + testBed.component.update(); + + expect(testBed.exists('nameField.input')).toBe(true); + expect(testBed.find('nameField.input').props().disabled).toBe(true); + expect(testBed.find('nameField.input').props().value).toBe('test-pipeline'); + }); + describe('form validation', () => { test('should prevent form submission if required fields are missing', async () => { const { form, actions, component, find } = testBed; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form.tsx index 36e7a78c87d92..ebb177f504c70 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form.tsx @@ -27,6 +27,8 @@ export interface PipelineFormProps { saveError: any; defaultValue?: Pipeline; isEditing?: boolean; + // That fields is used to disable the name field when creating a pipeline with the name prepopulated + canEditName?: boolean; } const defaultFormValue: Pipeline = Object.freeze({ @@ -43,6 +45,7 @@ export const PipelineForm: React.FunctionComponent = ({ saveError, isEditing, onCancel, + canEditName, }) => { const [isRequestVisible, setIsRequestVisible] = useState(false); @@ -129,6 +132,7 @@ export const PipelineForm: React.FunctionComponent = ({ onProcessorsUpdate={onProcessorsChangeHandler} hasVersion={Boolean(defaultValue.version)} isEditing={isEditing} + canEditName={canEditName} /> {/* Form submission */} diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx index 7beb057cef30e..aac3fa2914467 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx @@ -28,6 +28,7 @@ interface Props { hasVersion: boolean; onEditorFlyoutOpen: () => void; isEditing?: boolean; + canEditName?: boolean; } const UseField = getUseField({ component: Field }); @@ -41,6 +42,7 @@ export const PipelineFormFields: React.FunctionComponent = ({ isEditing, hasVersion, onEditorFlyoutOpen, + canEditName, }) => { const [isVersionVisible, setIsVersionVisible] = useState(hasVersion); @@ -74,7 +76,7 @@ export const PipelineFormFields: React.FunctionComponent = ({ path="name" componentProps={{ ['data-test-subj']: 'nameField', - euiFieldProps: { disabled: Boolean(isEditing) }, + euiFieldProps: { disabled: canEditName === false || Boolean(isEditing) }, }} /> diff --git a/x-pack/plugins/ingest_pipelines/public/application/hooks/index.tsx b/x-pack/plugins/ingest_pipelines/public/application/hooks/index.tsx new file mode 100644 index 0000000000000..58a981e34f131 --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/hooks/index.tsx @@ -0,0 +1,8 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { useRedirectPath as useRedirectToPathOrRedirectPath } from './redirect_path'; diff --git a/x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.test.tsx new file mode 100644 index 0000000000000..a387661fc1b53 --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.test.tsx @@ -0,0 +1,56 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import { createMemoryHistory } from 'history'; +import { useRedirectPath } from './redirect_path'; +import { useKibana } from '../../shared_imports'; + +const mockedUseKibana = useKibana as jest.MockedFunction; +jest.mock('../../shared_imports'); + +describe('useRedirectPath', () => { + const mockedNavigateToUrl = jest.fn(); + beforeEach(() => { + mockedNavigateToUrl.mockReset(); + mockedUseKibana.mockReturnValue({ + services: { + application: { + navigateToUrl: mockedNavigateToUrl, + }, + }, + } as any); + }); + it('should redirect to redirect path if a redirect path is specified in the url', () => { + const history = createMemoryHistory(); + history.push( + '/app/management/ingest/ingest_pipelines/create?name=logs-system.syslog@custom&redirect_path=/test-redirect-path' + ); + + const { + result: { current: redirectToPathOrRedirectPath }, + } = renderHook(() => useRedirectPath(history)); + + redirectToPathOrRedirectPath('/test'); + + expect(mockedNavigateToUrl).toBeCalledWith('/test-redirect-path'); + }); + + it('should redirect to the provided path if no redirect path is specified in the url', () => { + const history = createMemoryHistory(); + history.push('/app/management/ingest/ingest_pipelines/create'); + + const { + result: { current: redirectToPathOrRedirectPath }, + } = renderHook(() => useRedirectPath(history)); + + redirectToPathOrRedirectPath('/test'); + + expect(mockedNavigateToUrl).not.toBeCalled(); + expect(history.location.pathname).toBe('/test'); + }); +}); diff --git a/x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.tsx b/x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.tsx new file mode 100644 index 0000000000000..e70e094081da3 --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/hooks/redirect_path.tsx @@ -0,0 +1,35 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { History } from 'history'; +import { useCallback, useMemo } from 'react'; + +import { useKibana } from '../../shared_imports'; + +/** + * This hook allow to redirect to the provided path or using redirect_path if it's provided in the query params. + */ +export function useRedirectPath(history: History) { + const { services } = useKibana(); + + const redirectPath = useMemo(() => { + const locationSearchParams = new URLSearchParams(history.location.search); + + return locationSearchParams.get('redirect_path'); + }, [history.location.search]); + + return useCallback( + (path: string) => { + if (redirectPath) { + services.application.navigateToUrl(redirectPath); + } else { + history.push(path); + } + }, + [redirectPath, services.application, history] + ); +} diff --git a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_create/pipelines_create.tsx b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_create/pipelines_create.tsx index a7fbf6afaebf8..763751b2fabc9 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_create/pipelines_create.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_create/pipelines_create.tsx @@ -14,6 +14,7 @@ import { getListPath } from '../../services/navigation'; import { Pipeline } from '../../../../common/types'; import { useKibana } from '../../../shared_imports'; import { PipelineForm } from '../../components'; +import { useRedirectToPathOrRedirectPath } from '../../hooks'; interface Props { /** @@ -26,15 +27,48 @@ interface LocationState { sourcePipeline?: Pipeline; } +function useFormDefaultValue(sourcePipeline?: Pipeline) { + const history = useHistory(); + + const locationSearchParams = useMemo(() => { + return new URLSearchParams(history.location.search); + }, [history.location.search]); + + const formDefaultValue = useMemo(() => { + if (sourcePipeline) { + return sourcePipeline; + } + + if (history.location.state?.sourcePipeline) { + return history.location.state.sourcePipeline; + } + + if (locationSearchParams.has('name')) { + return { + name: locationSearchParams.get('name') as string, + description: '', + processors: [], + on_failure: [], + }; + } + }, [sourcePipeline, history, locationSearchParams]); + + return { formDefaultValue, canEditName: !locationSearchParams.has('name') }; +} + export const PipelinesCreate: React.FunctionComponent = ({ sourcePipeline, }) => { const history = useHistory(); + const { services } = useKibana(); const [isSaving, setIsSaving] = useState(false); const [saveError, setSaveError] = useState(null); + const { formDefaultValue, canEditName } = useFormDefaultValue(sourcePipeline); + const redirectToPathOrRedirectPath = useRedirectToPathOrRedirectPath(history); + const onSave = async (pipeline: Pipeline) => { setIsSaving(true); setSaveError(null); @@ -48,27 +82,15 @@ export const PipelinesCreate: React.FunctionComponent { - history.push(getListPath()); - }; + const onCancel = () => redirectToPathOrRedirectPath(getListPath()); useEffect(() => { services.breadcrumbs.setBreadcrumbs('create'); }, [services]); - const formDefaultValue = useMemo(() => { - if (sourcePipeline) { - return sourcePipeline; - } - - if (history.location.state?.sourcePipeline) { - return history.location.state.sourcePipeline; - } - }, [sourcePipeline, history]); - return ( <> (false); const [saveError, setSaveError] = useState(null); + const redirectToPathOrRedirectPath = useRedirectToPathOrRedirectPath(history); const decodedPipelineName = attemptToURIDecode(name)!; @@ -60,11 +62,11 @@ export const PipelinesEdit: React.FunctionComponent { - history.push(getListPath()); + redirectToPathOrRedirectPath(getListPath()); }; useEffect(() => { diff --git a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx index 4e53cabd9dcbb..5f084a7cc65f7 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx @@ -30,6 +30,7 @@ import { PipelineTable } from './table'; import { PipelineDetailsFlyout } from './details_flyout'; import { PipelineNotFoundFlyout } from './not_found_flyout'; import { PipelineDeleteModal } from './delete_modal'; +import { useRedirectToPathOrRedirectPath } from '../../hooks'; const getPipelineNameFromLocation = (location: Location) => { const { pipeline } = parse(location.search.substring(1)); @@ -49,6 +50,7 @@ export const PipelinesList: React.FunctionComponent = ({ const [pipelinesToDelete, setPipelinesToDelete] = useState([]); const { data, isLoading, error, resendRequest } = services.api.useLoadPipelines(); + const redirectToPathOrRedirectPath = useRedirectToPathOrRedirectPath(history); // Track component loaded useEffect(() => { @@ -74,7 +76,7 @@ export const PipelinesList: React.FunctionComponent = ({ const goHome = () => { setShowFlyout(false); - history.push(getListPath()); + redirectToPathOrRedirectPath(getListPath()); }; if (error) { From 42905ec9bf32725ba9328bbe9835474f8d48987b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=BCrkan=20YALAMAN?= Date: Tue, 21 Jun 2022 19:05:21 +0200 Subject: [PATCH 47/50] [Enterprise Search] Update Create New Index page designs (#134651) * Remove engine selector from the react template * Update button groups to latest designs * Add checkbox and bind it to logic * Add logic test * Add steps to the template * Remove checkbox and unused code * Remove learn more link on tabs view * Fix responsiveness * Fix type errors Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/new_index/method_api.test.tsx | 26 +++ .../components/new_index/method_api.tsx | 60 +----- .../components/new_index/method_connector.tsx | 1 + .../components/new_index/method_crawler.tsx | 1 + .../components/new_index/method_es.tsx | 1 + .../components/new_index/method_json.tsx | 1 + .../components/new_index/new_index.scss | 22 +++ .../components/new_index/new_index.tsx | 142 ++++++-------- .../new_index/new_search_index_logic.test.ts | 3 - .../new_index/new_search_index_logic.ts | 33 +--- .../new_index/new_search_index_template.tsx | 184 ++++++++++++------ 11 files changed, 244 insertions(+), 230 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.test.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.scss diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.test.tsx new file mode 100644 index 0000000000000..f47be4269edcc --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.test.tsx @@ -0,0 +1,26 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { shallow } from 'enzyme'; + +import { MethodApi } from './method_api'; +import { NewSearchIndexTemplate } from './new_search_index_template'; + +describe('API ingestion method', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders API ingestion method tab', () => { + const wrapper = shallow(); + const template = wrapper.find(NewSearchIndexTemplate); + + expect(template.prop('type')).toEqual('api'); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.tsx index 699b84327978c..a68c33db0eae5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.tsx @@ -8,76 +8,34 @@ /** * TODO: * - Need to add documentation URLs (search for `#`s) - * - Need to implement the logic for the attaching search engines functionality */ import React from 'react'; -import { useValues } from 'kea'; - -import { EuiCodeBlock, EuiLink, EuiPanel, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; +import { EuiText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { getEnterpriseSearchUrl } from '../../../shared/enterprise_search_url/external_url'; - -import { DOCUMENTS_API_JSON_EXAMPLE } from './constants'; -import { NewSearchIndexLogic } from './new_search_index_logic'; import { NewSearchIndexTemplate } from './new_search_index_template'; export const MethodApi: React.FC = () => { - const { name } = useValues(NewSearchIndexLogic); - const apiKey = 1212312313; // TODO change this - - const searchIndexApiUrl = getEnterpriseSearchUrl('/api/ent/v1/search_indices/'); - return ( + } description={ - {i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.methodApi.description.clientLibrariesLink', - { - defaultMessage: 'client libraries', - } - )} - - ), - }} + defaultMessage="Provide a name and optionally select a language analyzer for your documents. An Elasticsearch index will be created. In the next step, well display API instructions." /> } docsUrl="#" type="api" - > - - -

- {i18n.translate('xpack.enterpriseSearch.content.newIndex.methodApi.endpointTitle', { - defaultMessage: 'Enter a name to preview your new API endpoint', - })} -

-
- {name && ( - <> - - - {`\ -curl -X POST '${searchIndexApiUrl}${name}/document' \\ - -H 'Content-Type: application/json' \\ - -H 'Authorization: Bearer ${apiKey}' \\ - -d '${JSON.stringify(DOCUMENTS_API_JSON_EXAMPLE, null, 2)}' -`} - - - )} -
-
+ /> ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector.tsx index 927f5e79ff2ff..36522002d7e88 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector.tsx @@ -21,6 +21,7 @@ import { NewSearchIndexTemplate } from './new_search_index_template'; export const MethodConnector: React.FC = () => { return ( { return ( { return ( { return ( { id: 'crawler', icon: 'globe', label: i18n.translate('xpack.enterpriseSearch.content.newIndex.buttonGroup.crawler.label', { - defaultMessage: 'Web crawler', + defaultMessage: 'Use the web crawler', }), description: i18n.translate( 'xpack.enterpriseSearch.content.newIndex.buttonGroup.crawler.description', { - defaultMessage: 'Automatically index content from your website or knowlege base', - } - ), - }, - { - id: 'api', - icon: 'visVega', - label: i18n.translate('xpack.enterpriseSearch.content.newIndex.buttonGroup.api.label', { - defaultMessage: 'API', - }), - description: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.buttonGroup.api.description', - { - defaultMessage: 'Use a variety of client libraries to add documents to your search index', + defaultMessage: 'Index content from your websites', } ), }, @@ -93,42 +74,42 @@ export const NewIndex: React.FC = () => { id: 'connector', icon: 'package', label: i18n.translate('xpack.enterpriseSearch.content.newIndex.buttonGroup.connector.label', { - defaultMessage: 'Connector', + defaultMessage: 'Use a data integration', }), description: i18n.translate( 'xpack.enterpriseSearch.content.newIndex.buttonGroup.connector.description', { defaultMessage: - 'Ingest data from content sources like GitHub, Google Drive or SharePoint', + 'Index content frrom third-party services such as SharePoint and Google Drive', } ), }, { - id: 'elasticsearch', - icon: 'logoElasticsearch', - label: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.buttonGroup.elasticsearch.label', - { - defaultMessage: 'Elasticsearch index', - } - ), + id: 'api', + icon: 'visVega', + label: i18n.translate('xpack.enterpriseSearch.content.newIndex.buttonGroup.api.label', { + defaultMessage: 'Use the API', + }), description: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.buttonGroup.elasticsearch.description', + 'xpack.enterpriseSearch.content.newIndex.buttonGroup.api.description', { - defaultMessage: 'Connect to an existing Elasticsearch index', + defaultMessage: 'Use a variety of client libraries to add documents to your search index', } ), }, { - id: 'json', - icon: 'document', - label: i18n.translate('xpack.enterpriseSearch.content.newIndex.buttonGroup.json.label', { - defaultMessage: 'Paste or upload JSON', - }), + id: 'customIntegration', + icon: 'package', + label: i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.buttonGroup.customIntegration.label', + { + defaultMessage: 'Build a custom data integration', + } + ), description: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.buttonGroup.json.description', + 'xpack.enterpriseSearch.content.newIndex.buttonGroup.customIntegration.description', { - defaultMessage: 'Manually upload JSON files', + defaultMessage: 'Clone the connector package repo and start customizing.', } ), }, @@ -150,37 +131,20 @@ export const NewIndex: React.FC = () => { ); - const CardLabel: React.FC = ({ title, description, icon }) => ( - - - - - - - -

{title}

-
-
-
- - {description} -
- ); - const SelectSearchIndexLayout = () => ( <> - - + +

{i18n.translate('xpack.enterpriseSearch.content.newIndex.selectSearchIndex.title', { - defaultMessage: 'Create a search index', + defaultMessage: 'Select an ingestion method', })}

- +

{i18n.translate( 'xpack.enterpriseSearch.content.newIndex.selectSearchIndex.description', @@ -195,32 +159,42 @@ export const NewIndex: React.FC = () => { {buttonGroupOptions.map((item) => ( - + handleMethodChange(item.id)} - checked={selectedMethod.id === item.id} - /> + hasShadow={false} + onClick={() => { + handleMethodChange(item.id); + }} + > + + + + + +

{item.label}

+ +
+ + +

{item.description}

+
+
+
+
+ +
+ +
+
+
+ ))} - - - {i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.selectSearchIndex.learnMore.buttonText', - { - defaultMessage: 'Learn more about search indices', - } - )} - diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.test.ts index 9c205274f9cf9..d12ab55a37f75 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.test.ts @@ -11,12 +11,9 @@ import { DEFAULT_LANGUAGE } from './constants'; import { NewSearchIndexLogic } from './new_search_index_logic'; const DEFAULT_VALUES = { - searchEngines: [], - searchEngineSelectOptions: [], rawName: '', name: '', language: DEFAULT_LANGUAGE, - selectedSearchEngines: [], }; describe('NewSearchIndexLogic', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.ts index b1626c90b3f59..f2034a8c4ce76 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_logic.ts @@ -7,43 +7,26 @@ import { kea, MakeLogicType } from 'kea'; -import type { EuiComboBoxOptionOption } from '@elastic/eui'; - -import { Engine } from '../../../app_search/components/engine/types'; import { formatApiName } from '../../utils/format_api_name'; -import { SearchIndicesLogic, SearchIndicesValues } from '../search_indices/search_indices_logic'; - import { DEFAULT_LANGUAGE } from './constants'; -import { ISearchEngineOption } from './new_search_index_template'; -export interface NewSearchIndexValues extends Pick { - searchEngineSelectOptions: ISearchEngineOption[]; +export interface NewSearchIndexValues { rawName: string; name: string; language: string; - selectedSearchEngines: Array>; } export interface NewSearchIndexActions { setRawName(rawName: string): { rawName: string }; setLanguage(language: string): { language: string }; - setSelectedSearchEngineOptions(selectedSearchEngines: Array>): { - selectedSearchEngines: Array>; - }; } export const NewSearchIndexLogic = kea>({ path: ['enterprise_search', 'content', 'new_search_index'], - connect: { - values: [SearchIndicesLogic, ['searchEngines']], - }, actions: { setRawName: (rawName) => ({ rawName }), setLanguage: (language) => ({ language }), - setSelectedSearchEngineOptions: (selectedSearchEngines) => ({ - selectedSearchEngines, - }), }, reducers: { language: [ @@ -58,22 +41,8 @@ export const NewSearchIndexLogic = kea rawName, }, ], - selectedSearchEngines: [ - [], - { - setSelectedSearchEngineOptions: (_, { selectedSearchEngines }) => selectedSearchEngines, - }, - ], }, selectors: ({ selectors }) => ({ name: [() => [selectors.rawName], (rawName) => formatApiName(rawName)], - searchEngineSelectOptions: [ - () => [selectors.searchEngines], - (searchEngines) => - searchEngines.map((s: Engine) => ({ - label: s.name, - value: s, - })), - ], }), }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx index b0e3adf3bdb71..1eb228aa876e0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx @@ -17,7 +17,6 @@ import { useValues, useActions } from 'kea'; import { EuiButton, - EuiComboBox, EuiFieldText, EuiFlexGroup, EuiFlexItem, @@ -26,6 +25,7 @@ import { EuiPanel, EuiSelect, EuiSpacer, + EuiSteps, EuiText, EuiTitle, } from '@elastic/eui'; @@ -33,10 +33,11 @@ import { i18n } from '@kbn/i18n'; import { Engine } from '../../../app_search/components/engine/types'; -import { SUPPORTED_LANGUAGES, NEW_INDEX_TEMPLATE_TYPES } from './constants'; +import { SUPPORTED_LANGUAGES } from './constants'; import { NewSearchIndexLogic } from './new_search_index_logic'; export interface ISearchIndex { + title: React.ReactNode; description: React.ReactNode; docsUrl: string; type: string; @@ -50,14 +51,12 @@ export interface ISearchEngineOption { export const NewSearchIndexTemplate: React.FC = ({ children, + title, description, - type, onNameChange, }) => { - const { searchEngineSelectOptions, name, language, rawName, selectedSearchEngines } = - useValues(NewSearchIndexLogic); - const { setRawName, setLanguage, setSelectedSearchEngineOptions } = - useActions(NewSearchIndexLogic); + const { name, language, rawName } = useValues(NewSearchIndexLogic); + const { setRawName, setLanguage } = useActions(NewSearchIndexLogic); const handleNameChange = (e: ChangeEvent) => { setRawName(e.target.value); @@ -75,15 +74,7 @@ export const NewSearchIndexTemplate: React.FC = ({ -

- {i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.title', - { - defaultMessage: 'New {type}', - values: { type: NEW_INDEX_TEMPLATE_TYPES[type] }, - } - )} -

+

{title}

@@ -106,8 +97,17 @@ export const NewSearchIndexTemplate: React.FC = ({ label={i18n.translate( 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.nameInputLabel', { - defaultMessage: 'Name your {type}', - values: { type: NEW_INDEX_TEMPLATE_TYPES[type] }, + defaultMessage: 'Index name', + } + )} + helpText={i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.nameInputHelpText', + { + defaultMessage: + 'Names cannot contain spaces or special characters. {indexName}', + values: { + indexName: name.length > 0 ? `Your index will be named: ${name}` : '', + }, } )} fullWidth @@ -116,8 +116,7 @@ export const NewSearchIndexTemplate: React.FC = ({ placeholder={i18n.translate( 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.nameInputPlaceholder', { - defaultMessage: 'Set a name for the {type}', - values: { type: NEW_INDEX_TEMPLATE_TYPES[type] }, + defaultMessage: 'Set a name for your index', } )} fullWidth @@ -132,7 +131,13 @@ export const NewSearchIndexTemplate: React.FC = ({ label={i18n.translate( 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.languageInputLabel', { - defaultMessage: 'Language', + defaultMessage: 'Document language', + } + )} + helpText={i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.languageInputHelpText', + { + defaultMessage: 'Analyzers can be changed later, but may require a reindex', } )} > @@ -145,48 +150,107 @@ export const NewSearchIndexTemplate: React.FC = ({ - {searchEngineSelectOptions.length !== 0 && ( - - - { - setSelectedSearchEngineOptions(options); - }} - selectedOptions={selectedSearchEngines} - /> - - - )} {children} - - - {i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.createIndex.buttonText', - { - defaultMessage: 'Create search index', - } - )} - - + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.createIndex.buttonText', + { + defaultMessage: 'Create index', + } + )} + + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.viewDocumentation.linkText', + { + defaultMessage: 'View the documentation', + } + )} + + + + + + +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.steps.createIndex.content', + { + defaultMessage: + 'Provide a unique name for your index and select an optional language analyzer.', + } + )} +

+
+ ), + status: 'incomplete', + }, + { + title: i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.steps.configureIngestion.title', + { + defaultMessage: 'Configure ingestion settings', + } + ), + titleSize: 'xs', + children: ( + +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.steps.configureIngestion.content', + { + defaultMessage: + 'Generate an API key and view the documentation for posting documents to the Elasticsearch API endpoint. Language clients are available for streamlined integration.', + } + )} +

+
+ ), + status: 'incomplete', + }, + { + title: i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.steps.buildSearchExperience.title', + { + defaultMessage: 'Build a search experience', + } + ), + titleSize: 'xs', + children: ( + +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.steps.buildSearchExperience.content', + { + defaultMessage: + 'Connect your newly created Elasticsearch index to an App Search engine to build a cusomtizable search experience.', + } + )} +

+
+ ), + status: 'incomplete', + }, + ]} + /> ); }; From bf6cf59908d35b3cb98146a2a88fe1c1610110d6 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Tue, 21 Jun 2022 12:49:34 -0500 Subject: [PATCH 48/50] [Security Solution] backfill response action API tests (#134771) * [Security Solution] backfill response action API tests * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../apis/endpoint_authz.ts | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts index 1a009aaef07ec..c0b15090cda1e 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts @@ -6,6 +6,19 @@ */ import { wrapErrorAndRejectPromise } from '@kbn/security-solution-plugin/common/endpoint/data_loaders/utils'; +import { + ACTION_STATUS_ROUTE, + AGENT_POLICY_SUMMARY_ROUTE, + BASE_POLICY_RESPONSE_ROUTE, + GET_RUNNING_PROCESSES_ROUTE, + HOST_METADATA_LIST_ROUTE, + ISOLATE_HOST_ROUTE, + ISOLATE_HOST_ROUTE_V2, + KILL_PROCESS_ROUTE, + SUSPEND_PROCESS_ROUTE, + UNISOLATE_HOST_ROUTE, + UNISOLATE_HOST_ROUTE_V2, +} from '@kbn/security-solution-plugin/common/endpoint/constants'; import { FtrProviderContext } from '../ftr_provider_context'; import { createUserAndRole, @@ -30,17 +43,17 @@ export default function ({ getService }: FtrProviderContext) { const apiList = [ { method: 'get', - path: '/api/endpoint/metadata', + path: HOST_METADATA_LIST_ROUTE, body: undefined, }, { method: 'get', - path: '/api/endpoint/action_status?agent_ids=1', + path: `${ACTION_STATUS_ROUTE}?agent_ids=1`, body: undefined, }, { method: 'get', - path: '/api/endpoint/policy/summaries?package_name=endpoint', + path: `${AGENT_POLICY_SUMMARY_ROUTE}?package_name=endpoint`, body: undefined, }, { @@ -50,19 +63,44 @@ export default function ({ getService }: FtrProviderContext) { }, { method: 'get', - path: '/api/endpoint/policy_response?agentId=1', + path: `${BASE_POLICY_RESPONSE_ROUTE}?agentId=1`, body: undefined, }, { method: 'post', - path: '/api/endpoint/isolate', + path: ISOLATE_HOST_ROUTE, + body: { endpoint_ids: ['one'] }, + }, + { + method: 'post', + path: UNISOLATE_HOST_ROUTE, body: { endpoint_ids: ['one'] }, }, { method: 'post', - path: '/api/endpoint/unisolate', + path: ISOLATE_HOST_ROUTE_V2, body: { endpoint_ids: ['one'] }, }, + { + method: 'post', + path: UNISOLATE_HOST_ROUTE_V2, + body: { endpoint_ids: ['one'] }, + }, + { + method: 'post', + path: GET_RUNNING_PROCESSES_ROUTE, + body: { endpoint_ids: ['one'] }, + }, + { + method: 'post', + path: KILL_PROCESS_ROUTE, + body: { endpoint_ids: ['one'], parameters: { entity_id: 1234 } }, + }, + { + method: 'post', + path: SUSPEND_PROCESS_ROUTE, + body: { endpoint_ids: ['one'], parameters: { entity_id: 1234 } }, + }, ]; for (const apiListItem of apiList) { From 726ea2823bdda5f29bf1e1980dfdb53fa0691ebf Mon Sep 17 00:00:00 2001 From: Jack Date: Tue, 21 Jun 2022 15:30:11 -0400 Subject: [PATCH 49/50] [8.4] [Security Solution] [Kubernetes Security] Use sessions view component from security_solution (#134704) * Use sessions view component from security_solution * Add kubernetes columns --- .../kubernetes_security_routes/index.test.tsx | 1 + .../kubernetes_security_routes/index.tsx | 8 +-- .../components/percent_widget/styles.ts | 4 +- .../components/tree_view_container/index.tsx | 35 ++++++++++ .../components/tree_view_container/styles.ts | 43 +++++++++++++ .../kubernetes_security/public/types.ts | 1 + .../common/types/timeline/index.ts | 2 + .../sessions_viewer/default_headers.ts | 11 ++-- .../components/sessions_viewer/index.tsx | 6 +- .../components/sessions_viewer/types.ts | 4 +- .../common/components/top_n/helpers.test.tsx | 1 + .../public/kubernetes/pages/constants.ts | 64 +++++++++++++++++++ .../public/kubernetes/pages/index.tsx | 21 +++++- .../public/kubernetes/pages/translations.ts | 57 +++++++++++++++++ .../timelines/common/types/timeline/index.ts | 2 + .../timelines/public/store/t_grid/types.ts | 1 + 16 files changed, 246 insertions(+), 15 deletions(-) create mode 100644 x-pack/plugins/kubernetes_security/public/components/tree_view_container/index.tsx create mode 100644 x-pack/plugins/kubernetes_security/public/components/tree_view_container/styles.ts create mode 100644 x-pack/plugins/security_solution/public/kubernetes/pages/constants.ts create mode 100644 x-pack/plugins/security_solution/public/kubernetes/pages/translations.ts diff --git a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx index 08b6354abf201..38e2bb89da854 100644 --- a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx @@ -55,6 +55,7 @@ const renderWithRouter = ( startDate: '2022-03-08T18:52:15.532Z', endDate: '2022-06-09T17:52:15.532Z', }} + renderSessionsView={jest.fn()} /> ); diff --git a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx index f2949dd0e4ab1..7fe4b2ea3976a 100644 --- a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx @@ -12,7 +12,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiIconTip, - EuiLoadingContent, EuiSpacer, EuiText, EuiTextColor, @@ -31,11 +30,13 @@ import { PercentWidget } from '../percent_widget'; import { KubernetesSecurityDeps } from '../../types'; import { AggregateResult } from '../../../common/types/aggregate'; import { useStyles } from './styles'; +import { TreeViewContainer } from '../tree_view_container'; const KubernetesSecurityRoutesComponent = ({ filter, indexPattern, globalFilter, + renderSessionsView, }: KubernetesSecurityDeps) => { const styles = useStyles(); @@ -203,10 +204,7 @@ const KubernetesSecurityRoutesComponent = ({ />
-
- - -
+ ); diff --git a/x-pack/plugins/kubernetes_security/public/components/percent_widget/styles.ts b/x-pack/plugins/kubernetes_security/public/components/percent_widget/styles.ts index 5e90d7c946f92..57f1427710999 100644 --- a/x-pack/plugins/kubernetes_security/public/components/percent_widget/styles.ts +++ b/x-pack/plugins/kubernetes_security/public/components/percent_widget/styles.ts @@ -17,8 +17,8 @@ export const useStyles = () => { const container: CSSObject = { padding: size.base, - border: euiTheme.border.thin, - borderRadius: euiTheme.border.radius.medium, + border: border.thin, + borderRadius: border.radius.medium, overflow: 'auto', position: 'relative', }; diff --git a/x-pack/plugins/kubernetes_security/public/components/tree_view_container/index.tsx b/x-pack/plugins/kubernetes_security/public/components/tree_view_container/index.tsx new file mode 100644 index 0000000000000..e934fe4a31f2d --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/tree_view_container/index.tsx @@ -0,0 +1,35 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiSplitPanel, EuiText } from '@elastic/eui'; +import { useStyles } from './styles'; +import type { IndexPattern, GlobalFilter } from '../../types'; + +export interface TreeViewContainerDeps { + globalFilter: GlobalFilter; + renderSessionsView: (sessionsFilterQuery: string | undefined) => JSX.Element; + indexPattern?: IndexPattern; +} + +export const TreeViewContainer = ({ globalFilter, renderSessionsView }: TreeViewContainerDeps) => { + const styles = useStyles(); + // TODO: combine filterQuery with filters from tree view nav + + return ( + + + +

Tree view nav panel

+
+
+ + {renderSessionsView(globalFilter.filterQuery)} + +
+ ); +}; diff --git a/x-pack/plugins/kubernetes_security/public/components/tree_view_container/styles.ts b/x-pack/plugins/kubernetes_security/public/components/tree_view_container/styles.ts new file mode 100644 index 0000000000000..c490e5b711889 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/tree_view_container/styles.ts @@ -0,0 +1,43 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; +import { CSSObject } from '@emotion/react'; +import { useEuiTheme } from '../../hooks'; + +export const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + const cached = useMemo(() => { + const { border } = euiTheme; + + const outerPanel: CSSObject = { + minHeight: '500px', + }; + + const navPanel: CSSObject = { + borderRight: border.thin, + }; + + const treeViewNav: CSSObject = { + width: '284px', + }; + + const sessionsPanel: CSSObject = { + overflowX: 'auto', + }; + + return { + outerPanel, + navPanel, + treeViewNav, + sessionsPanel, + }; + }, [euiTheme]); + + return cached; +}; diff --git a/x-pack/plugins/kubernetes_security/public/types.ts b/x-pack/plugins/kubernetes_security/public/types.ts index d6313b25bf011..bf25e00eec2b2 100644 --- a/x-pack/plugins/kubernetes_security/public/types.ts +++ b/x-pack/plugins/kubernetes_security/public/types.ts @@ -32,6 +32,7 @@ export interface GlobalFilter { export interface KubernetesSecurityDeps { filter: React.ReactNode; + renderSessionsView: (sessionsFilterQuery: string | undefined) => JSX.Element; indexPattern?: IndexPattern; globalFilter: GlobalFilter; } diff --git a/x-pack/plugins/security_solution/common/types/timeline/index.ts b/x-pack/plugins/security_solution/common/types/timeline/index.ts index 3d4d1b5dc28cb..9b1405b78a57d 100644 --- a/x-pack/plugins/security_solution/common/types/timeline/index.ts +++ b/x-pack/plugins/security_solution/common/types/timeline/index.ts @@ -327,6 +327,7 @@ export enum TimelineId { test = 'test', // Reserved for testing purposes alternateTest = 'alternateTest', rulePreview = 'rule-preview', + kubernetesPageSessions = 'kubernetes-page-sessions', } export const TimelineIdLiteralRt = runtimeTypes.union([ @@ -341,6 +342,7 @@ export const TimelineIdLiteralRt = runtimeTypes.union([ runtimeTypes.literal(TimelineId.active), runtimeTypes.literal(TimelineId.test), runtimeTypes.literal(TimelineId.rulePreview), + runtimeTypes.literal(TimelineId.kubernetesPageSessions), ]); export type TimelineIdLiteral = runtimeTypes.TypeOf; diff --git a/x-pack/plugins/security_solution/public/common/components/sessions_viewer/default_headers.ts b/x-pack/plugins/security_solution/public/common/components/sessions_viewer/default_headers.ts index 4c045e358e1d6..0e7bdd7d1f540 100644 --- a/x-pack/plugins/security_solution/public/common/components/sessions_viewer/default_headers.ts +++ b/x-pack/plugins/security_solution/public/common/components/sessions_viewer/default_headers.ts @@ -59,10 +59,13 @@ export const sessionsHeaders: ColumnHeaderOptions[] = [ }, ]; -export const sessionsDefaultModel: SubsetTimelineModel = { +export const getSessionsDefaultModel = ( + columns: ColumnHeaderOptions[], + defaultColumns: ColumnHeaderOptions[] +): SubsetTimelineModel => ({ ...timelineDefaults, - columns: sessionsHeaders, - defaultColumns: sessionsHeaders, + columns, + defaultColumns, excludedRowRendererIds: Object.values(RowRendererId), sort: [ { @@ -71,4 +74,4 @@ export const sessionsDefaultModel: SubsetTimelineModel = { sortDirection: 'desc', }, ], -}; +}); diff --git a/x-pack/plugins/security_solution/public/common/components/sessions_viewer/index.tsx b/x-pack/plugins/security_solution/public/common/components/sessions_viewer/index.tsx index 4d89b969e5c17..6d3038e4554ed 100644 --- a/x-pack/plugins/security_solution/public/common/components/sessions_viewer/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/sessions_viewer/index.tsx @@ -10,7 +10,7 @@ import type { Filter } from '@kbn/es-query'; import { SessionsComponentsProps } from './types'; import { ESBoolQuery } from '../../../../common/typed_json'; import { StatefulEventsViewer } from '../events_viewer'; -import { sessionsDefaultModel } from './default_headers'; +import { getSessionsDefaultModel, sessionsHeaders } from './default_headers'; import { defaultRowRenderers } from '../../../timelines/components/timeline/body/renderers'; import { DefaultCellRenderer } from '../../../timelines/components/timeline/cell_rendering/default_cell_renderer'; import * as i18n from './translations'; @@ -48,6 +48,8 @@ const SessionsViewComponent: React.FC = ({ pageFilters, startDate, filterQuery, + columns = sessionsHeaders, + defaultColumns = sessionsHeaders, }) => { const parsedFilterQuery: ESBoolQuery = useMemo(() => { if (filterQuery && filterQuery !== '') { @@ -83,7 +85,7 @@ const SessionsViewComponent: React.FC = ({
{ timelineId: TimelineIdLiteral; @@ -15,4 +15,6 @@ export interface SessionsComponentsProps extends Pick x !== TimelineId.active); diff --git a/x-pack/plugins/security_solution/public/kubernetes/pages/constants.ts b/x-pack/plugins/security_solution/public/kubernetes/pages/constants.ts new file mode 100644 index 0000000000000..c7120947a9182 --- /dev/null +++ b/x-pack/plugins/security_solution/public/kubernetes/pages/constants.ts @@ -0,0 +1,64 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ColumnHeaderOptions } from '../../../common/types/timeline'; +import { defaultColumnHeaderType } from '../../timelines/components/timeline/body/column_headers/default_headers'; +import { DEFAULT_DATE_COLUMN_MIN_WIDTH } from '../../timelines/components/timeline/body/constants'; +import { + COLUMN_SESSION_START, + COLUMN_EXECUTABLE, + COLUMN_ENTRY_USER, + COLUMN_INTERACTIVE, + COLUMN_ENTRY_TYPE, + COLUMN_NODE, + COLUMN_CONTAINER, + COLUMN_POD, +} from './translations'; + +export const kubernetesSessionsHeaders: ColumnHeaderOptions[] = [ + { + columnHeaderType: defaultColumnHeaderType, + id: 'process.entry_leader.start', + initialWidth: DEFAULT_DATE_COLUMN_MIN_WIDTH, + display: COLUMN_SESSION_START, + }, + { + columnHeaderType: defaultColumnHeaderType, + id: 'process.entry_leader.user.name', + display: COLUMN_ENTRY_USER, + }, + { + columnHeaderType: defaultColumnHeaderType, + id: 'process.entry_leader.executable', + display: COLUMN_EXECUTABLE, + }, + { + columnHeaderType: defaultColumnHeaderType, + id: 'cloud.instance.name', + display: COLUMN_NODE, + }, + { + columnHeaderType: defaultColumnHeaderType, + id: 'process.entry_leader.entry_meta.type', + display: COLUMN_ENTRY_TYPE, + }, + { + columnHeaderType: defaultColumnHeaderType, + id: 'process.entry_leader.interactive', + display: COLUMN_INTERACTIVE, + }, + { + columnHeaderType: defaultColumnHeaderType, + id: 'container.name', + display: COLUMN_CONTAINER, + }, + { + columnHeaderType: defaultColumnHeaderType, + id: 'orchestrator.resource.name', + display: COLUMN_POD, + }, +]; diff --git a/x-pack/plugins/security_solution/public/kubernetes/pages/index.tsx b/x-pack/plugins/security_solution/public/kubernetes/pages/index.tsx index 59ba4fa340e21..0176355b6672f 100644 --- a/x-pack/plugins/security_solution/public/kubernetes/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/kubernetes/pages/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { SecuritySolutionPageWrapper } from '../../common/components/page_wrapper'; import { useKibana } from '../../common/lib/kibana'; @@ -21,6 +21,9 @@ import { useGlobalTime } from '../../common/containers/use_global_time'; import { useDeepEqualSelector } from '../../common/hooks/use_selector'; import { convertToBuildEsQuery } from '../../common/lib/keury'; import { useInvalidFilterQuery } from '../../common/hooks/use_invalid_filter_query'; +import { SessionsView } from '../../common/components/sessions_viewer'; +import { TimelineId } from '../../../common/types/timeline'; +import { kubernetesSessionsHeaders } from './constants'; export const KubernetesContainer = React.memo(() => { const { kubernetesSecurity, uiSettings } = useKibana().services; @@ -60,6 +63,21 @@ export const KubernetesContainer = React.memo(() => { endDate: to, }); + const renderSessionsView = useCallback( + (sessionsFilterQuery: string | undefined) => ( + + ), + [from, to] + ); + return ( {kubernetesSecurity.getKubernetesPage({ @@ -74,6 +92,7 @@ export const KubernetesContainer = React.memo(() => { startDate: from, endDate: to, }, + renderSessionsView, })} diff --git a/x-pack/plugins/security_solution/public/kubernetes/pages/translations.ts b/x-pack/plugins/security_solution/public/kubernetes/pages/translations.ts new file mode 100644 index 0000000000000..1b2c308c0bfa6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/kubernetes/pages/translations.ts @@ -0,0 +1,57 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const COLUMN_SESSION_START = i18n.translate( + 'xpack.securitySolution.kubernetes.columnSessionStart', + { + defaultMessage: 'Date connected', + } +); + +export const COLUMN_EXECUTABLE = i18n.translate( + 'xpack.securitySolution.kubernetes.columnExecutable', + { + defaultMessage: 'Session leader', + } +); + +export const COLUMN_NODE = i18n.translate('xpack.securitySolution.kubernetes.columnNode', { + defaultMessage: 'Node', +}); + +export const COLUMN_ENTRY_USER = i18n.translate( + 'xpack.securitySolution.kubernetes.columnEntryUser', + { + defaultMessage: 'Session entry users', + } +); + +export const COLUMN_INTERACTIVE = i18n.translate( + 'xpack.securitySolution.kubernetes.columnInteractive', + { + defaultMessage: 'Interactivity', + } +); + +export const COLUMN_ENTRY_TYPE = i18n.translate( + 'xpack.securitySolution.kubernetes.columnEntryType', + { + defaultMessage: 'Entry mechanism', + } +); + +export const COLUMN_CONTAINER = i18n.translate( + 'xpack.securitySolution.kubernetes.columnContainer', + { + defaultMessage: 'Container', + } +); +export const COLUMN_POD = i18n.translate('xpack.securitySolution.kubernetes.columnPod', { + defaultMessage: 'Pod', +}); diff --git a/x-pack/plugins/timelines/common/types/timeline/index.ts b/x-pack/plugins/timelines/common/types/timeline/index.ts index a19086f583284..8737652b47f4d 100644 --- a/x-pack/plugins/timelines/common/types/timeline/index.ts +++ b/x-pack/plugins/timelines/common/types/timeline/index.ts @@ -323,6 +323,7 @@ export enum TimelineId { test = 'test', // Reserved for testing purposes alternateTest = 'alternateTest', rulePreview = 'rule-preview', + kubernetesPageSessions = 'kubernetes-page-sessions', } export const TimelineIdLiteralRt = runtimeTypes.union([ @@ -335,6 +336,7 @@ export const TimelineIdLiteralRt = runtimeTypes.union([ runtimeTypes.literal(TimelineId.active), runtimeTypes.literal(TimelineId.test), runtimeTypes.literal(TimelineId.rulePreview), + runtimeTypes.literal(TimelineId.kubernetesPageSessions), ]); export type TimelineIdLiteral = runtimeTypes.TypeOf; diff --git a/x-pack/plugins/timelines/public/store/t_grid/types.ts b/x-pack/plugins/timelines/public/store/t_grid/types.ts index 8e0b7e995dbcd..c7127f16385af 100644 --- a/x-pack/plugins/timelines/public/store/t_grid/types.ts +++ b/x-pack/plugins/timelines/public/store/t_grid/types.ts @@ -54,6 +54,7 @@ export enum TimelineId { casePage = 'timeline-case', test = 'test', // Reserved for testing purposes alternateTest = 'alternateTest', + kubernetesPageSessions = 'kubernetes-page-sessions', } export interface InitialyzeTGridSettings extends Partial { From faede27bf7037e7808e212a959fe90eedc87772c Mon Sep 17 00:00:00 2001 From: Kaarina Tungseth Date: Tue, 21 Jun 2022 15:07:46 -0500 Subject: [PATCH 50/50] [DOCS] Adds the Vis Editor 8.3 docs (#134115) * [DOCS] Adds the Vis Editor 8.3 docs * Updates screenshots and UI labels * Update docs/user/dashboard/lens.asciidoc Co-authored-by: Stratoula Kalafateli * Review comments * Removes duplicate image * Review comment Co-authored-by: Stratoula Kalafateli --- docs/management/advanced-options.asciidoc | 2 +- .../user/dashboard/aggregation-based.asciidoc | 4 +- .../dashboard-troubleshooting.asciidoc | 52 +-------------- docs/user/dashboard/dashboard.asciidoc | 2 + .../Screen Shot 2022-06-13 at 3.41.52 PM.png | Bin 0 -> 20175 bytes .../images/aggBased_barChartTutorial1_8.3.png | Bin 0 -> 13640 bytes .../images/aggBased_barChartTutorial2_8.3.png | Bin 0 -> 36601 bytes .../dashboard_discoverDrilldown_8.3.gif | Bin 0 -> 736248 bytes .../dashboard_discoverDrilldown_8.3.png | Bin 0 -> 110262 bytes .../dashboard_drilldownOnDataTable_8.3.gif | Bin 0 -> 594583 bytes .../images/dashboard_drilldownOnPanel_8.3.png | Bin 0 -> 174122 bytes .../dashboard_urlDrilldownGithub_8.3.png | Bin 0 -> 50439 bytes .../dashboard_urlDrilldownGoToGitHub_8.3.gif | Bin 0 -> 346426 bytes .../dashboard_urlDrilldownPopup_8.3.png | Bin 0 -> 125167 bytes ...PercentageNumberOfOrdersByCategory_8.3.png | Bin 0 -> 35536 bytes .../lens_barChartCustomTimeInterval_8.3.png | Bin 0 -> 22494 bytes .../images/lens_dataViewDropDown_8.3.png | Bin 0 -> 47601 bytes ..._lineChartMetricOverTimeBottomAxis_8.3.png | Bin 0 -> 36271 bytes ...ns_lineChartMetricOverTimeLeftAxis_8.3.png | Bin 0 -> 51338 bytes .../images/lens_logsDashboard_8.3.png | Bin 0 -> 143659 bytes .../images/lens_metricUniqueVisitors_8.3.png | Bin 0 -> 45107 bytes .../images/lens_runtimeFieldMenu_8.3.png | Bin 0 -> 79926 bytes ...ns_timeSeriesDataTutorialDashboard_8.3.png | Bin 0 -> 223406 bytes docs/user/dashboard/lens-advanced.asciidoc | 48 +++++++------- docs/user/dashboard/lens.asciidoc | 25 ++++---- .../make-dashboards-interactive.asciidoc | 59 ++++++++++++++---- docs/user/dashboard/timelion.asciidoc | 2 - ...create-a-dashboard-of-lens-panels.asciidoc | 41 ++++++------ 28 files changed, 111 insertions(+), 124 deletions(-) create mode 100644 docs/user/dashboard/images/Screen Shot 2022-06-13 at 3.41.52 PM.png create mode 100644 docs/user/dashboard/images/aggBased_barChartTutorial1_8.3.png create mode 100644 docs/user/dashboard/images/aggBased_barChartTutorial2_8.3.png create mode 100644 docs/user/dashboard/images/dashboard_discoverDrilldown_8.3.gif create mode 100644 docs/user/dashboard/images/dashboard_discoverDrilldown_8.3.png create mode 100644 docs/user/dashboard/images/dashboard_drilldownOnDataTable_8.3.gif create mode 100644 docs/user/dashboard/images/dashboard_drilldownOnPanel_8.3.png create mode 100644 docs/user/dashboard/images/dashboard_urlDrilldownGithub_8.3.png create mode 100644 docs/user/dashboard/images/dashboard_urlDrilldownGoToGitHub_8.3.gif create mode 100644 docs/user/dashboard/images/dashboard_urlDrilldownPopup_8.3.png create mode 100644 docs/user/dashboard/images/lens_areaPercentageNumberOfOrdersByCategory_8.3.png create mode 100644 docs/user/dashboard/images/lens_barChartCustomTimeInterval_8.3.png create mode 100644 docs/user/dashboard/images/lens_dataViewDropDown_8.3.png create mode 100644 docs/user/dashboard/images/lens_lineChartMetricOverTimeBottomAxis_8.3.png create mode 100644 docs/user/dashboard/images/lens_lineChartMetricOverTimeLeftAxis_8.3.png create mode 100644 docs/user/dashboard/images/lens_logsDashboard_8.3.png create mode 100644 docs/user/dashboard/images/lens_metricUniqueVisitors_8.3.png create mode 100644 docs/user/dashboard/images/lens_runtimeFieldMenu_8.3.png create mode 100644 docs/user/dashboard/images/lens_timeSeriesDataTutorialDashboard_8.3.png diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index 2aa160674b744..120617ea4de94 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -215,7 +215,7 @@ When enabled, provides access to the experimental *Labs* features for *Canvas*. [[labs-dashboard-defer-below-fold]]`labs:dashboard:deferBelowFold`:: When enabled, the panels that appear below the fold are loaded when they become visible on the dashboard. -_Below the fold_ refers to panels that are not immediately visible when you open a dashboard, but become visible as you scroll. For additional information, refer to <>. +_Below the fold_ refers to panels that are not immediately visible when you open a dashboard, but become visible as you scroll. For additional information, refer to <>. [[labs-dashboard-enable-ui]]`labs:dashboard:enable_ui`:: When enabled, provides access to the experimental *Labs* features for *Dashboard*. diff --git a/docs/user/dashboard/aggregation-based.asciidoc b/docs/user/dashboard/aggregation-based.asciidoc index bf13661b9aadd..842f2e93bc58e 100644 --- a/docs/user/dashboard/aggregation-based.asciidoc +++ b/docs/user/dashboard/aggregation-based.asciidoc @@ -172,7 +172,7 @@ To create the bar chart, add a <>, then .. Click *Update*. + [role="screenshot"] -image:images/bar-chart-tutorial-1.png[Bar chart with sample logs data] +image:images/aggBased_barChartTutorial1_8.3.png[Bar chart with sample logs data] . To show the top five log traffic sources, add a sub-bucket aggregation. @@ -187,7 +187,7 @@ TIP: Aggregation-based panels support a maximum of three *Split series*. .. Click *Update*. + [role="screenshot"] -image:images/bar-chart-tutorial-2.png[Bar chart with sample logs data] +image:images/aggBased_barChartTutorial2_8.3.png[Bar chart with sample logs data] [float] [[save-the-aggregation-based-panel]] diff --git a/docs/user/dashboard/dashboard-troubleshooting.asciidoc b/docs/user/dashboard/dashboard-troubleshooting.asciidoc index d9bf80a5b1996..7fe1b7c3067b9 100644 --- a/docs/user/dashboard/dashboard-troubleshooting.asciidoc +++ b/docs/user/dashboard/dashboard-troubleshooting.asciidoc @@ -1,14 +1,5 @@ [[dashboard-troubleshooting]] -== Dashboard and visualizations troubleshooting -++++ -Troubleshooting -++++ - -Find solutions to common dashboard and visualization issues. - -[float] -[[defer-loading-panels-below-the-fold]] -=== Improve dashboard loading time +== Improve dashboard loading time To improve the dashboard loading time, enable *Defer loading panels below the fold* *Lab*, which loads dashboard panels as they become visible on the dashboard. @@ -26,44 +17,3 @@ To enable *Labs*, contact your administrator, or configure the < Aggregation based*, then select *Timelion*. - -.. In your browser, open a new tab, the open the *Timelion* app. - -.. Select the chart you want to copy, then copy the chart expression. -+ -[role="screenshot"] -image::images/timelion-copy-expression.png[Timelion app chart] - -.. Go to the *Timelion* editor, paste the chart expression in the *Timelion expression* field, then click *Update*. -+ -[role="screenshot"] -image::images/timelion-vis-paste-expression.png[Timelion advanced editor UI] - -. Save the visualization. - -.. In the toolbar, click *Save to library*. - -.. Enter the *Title* and add any applicable <>. - -.. Make sure that *Add to Dashboard after saving* is selected. - -.. Click *Save and return*. -+ -The Timelion visualization panel appears on the dashboard. -+ -[role="screenshot"] -image::user/dashboard/images/timelion-dashboard.png[Final dashboard with saved Timelion app worksheet] - diff --git a/docs/user/dashboard/dashboard.asciidoc b/docs/user/dashboard/dashboard.asciidoc index b63bbdc75e9f9..e0e469c0d7d11 100644 --- a/docs/user/dashboard/dashboard.asciidoc +++ b/docs/user/dashboard/dashboard.asciidoc @@ -337,6 +337,8 @@ Apply a set of design options to the entire dashboard. * *Sync color pallettes across panels* — Applies the same color palette to all panels on the dashboard. +* *Sync tooltips across panels* — When you hover your cursor over a *Lens*, *TSVB*, aggregation-based, or *Timelion* XY chart, the tooltips on all other related dashboard charts automatically appear. + [float] [[save-dashboards]] == Save dashboards diff --git a/docs/user/dashboard/images/Screen Shot 2022-06-13 at 3.41.52 PM.png b/docs/user/dashboard/images/Screen Shot 2022-06-13 at 3.41.52 PM.png new file mode 100644 index 0000000000000000000000000000000000000000..3322459294d3c60cb36be12ce266f03705c70b9d GIT binary patch literal 20175 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
oW6TbB{;ImPAaV9!l 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 literal 0 HcmV?d00001 diff --git a/docs/user/dashboard/images/dashboard_discoverDrilldown_8.3.gif b/docs/user/dashboard/images/dashboard_discoverDrilldown_8.3.gif new file mode 100644 index 0000000000000000000000000000000000000000..2015830f68fec41067071209d7574be034c5bcb8 GIT binary patch literal 736248 zcmWhzXHXMb6NPjV0-;JLR4D?XN>f7UO+yjshAQ2FsHljL1PDDKAOdP=N;gO^`a(yV z^p1ui()59%A{M^)?c5(bJNM4q**WLT&Y88aGS@xp9S6u}|H1bExWNhF;^vQ&J}U`96}2TzaQ?!UD8Q{D^sP3B+mB=J#$KV6k|~Mj65H*Pn+d7)si|qtQ>n`7ab-%pJ<5+v8N1<5rhPWV{<< zv^dp2OnLdd_GO!XL!Dbg0j*)Yw4tw|p>e6f*p#=)khcA1u1jV1?xsiGZrwe7i#^kBy`99~n&IAwsouq<-o>@v>At>^vVrv*Z|Zx7Cf0_Q zNyC4JhDT?Ir4fGERC+OkFM>GF1;9A+ZdZ3dpq^{t?l9XQrtv) z#>DI26UeElnWd@arKydLskPmyjl-$+hUwku={4rehtD%R-Lq3Ovy1O$cUEWj=yL;c>)+A;&gz$`)lctM*FUT-@2!6Pvbs63 z_Vw%9-rD+yPwTsV8-JEI_VzZu9&dc!`0(ZXhp&^H8y_}z#y|f4xb({|x;)`1@;r_s`#xlav3zFLi>rVCLj#VvIM_ zP{jb*|6lqE0)yC2*v|Z)9RH^Y8|;MbHcHr%LGL2N_>?>b8O1$GC>iS_%leYOR3Xja z<-z*WflRbXikMaQfbjhThyJfW2A>W;#P|*sSv5QxE!4ffv;3yv`P-*hGF;rcv0|ds z@_~})P-ErPbG1uV6zis{nQE7Y;FY1K>bVz$TIF&&H@wRa&LM+;^@ypZ~H^_DT-otH45mij(?TVeFfh* z0Ux>K_RyzA$VGw=&fng7V=G|f=a6|8D&uiczUy$^PBd1DGq4*fS@h(RD#PcX?*WiP+wvLw1a{2bP2KH6JdRhV9Ik(;Q9E=KN9*| z__v9pSg*C`$+k>$bPb9J!0p3gbO}4?0=as}k<$Bd$mwWPgiC$A`=Kv0!z!RY6&_6r_xhWZKE(D&ozY4gAtj zmrySGREV;CvPO)*cti(1r7y|CR+G&z6JbxNJ+kLlIV3$;q4vLf!Ow^~IK!-PZ%ucx zcA*xt!Bqj>$|M-6i&K!f&hH&aHu9hY1Iloc-W8{*8_NL#Idv*=O2*m*GslZiT7BBJM|*!fTkxT+ID9PGV_- ze=OgtpJ#*IS15sJyW@6#7iWsLVkNtdx~RX6Ij(K3^H*X51RPf1*!q1DeYOGQhsYy+ zbjBoO*no&*rv&do$_@6Hykhz+n7pnJn1}-85%AnXe(@X_g{#PX7Q6g30hWOx{ri`E zqIyG^DnEubMnLrOydaWSpMk_bVrj$3&2g7#jLKsI%uKyGGzJxZ zF&XxlJ!6PImGmQO{1rI}Ce|K(QSW?HGRGMtR1+IN7B^0k86n)4MdJ{WZW(rsXnuux zv$JkYApd?`r3#ZBlEF+7TrLqa9ITv-Mv?v$$H7ElrfRbhJ*Jju9;~GlR~(aEc}@VP zwl~e?nT>sDY0P;Zgdk<>_JU)&A#biT!A0nK-5e&nPHUWmDs7$@6~S&+)C(3Q^mTi& z04}X@Kx?eako+v<{QRD@c{Nn)oh%>oV1So@!d~3ZhhwRlBu&DD7f#ygNMqdu*dhT@ z6lV;1K5l_xGAK$eKu%Tq7H?pLJJ0+Z`FBL)$H(l6N;NN$)S6nZZdSHV;FPE|o7{zb z1mvC{sZ}+)_9zOQx`12l?5hQ+-H&^9m`&FVb0KLb{&L$;BE6EN_aV)vA*awS$i11a z`$6{S1YJtoW+)uGo=_4O#vA;yIzARlNW1IT1#~4+lK!nH`TDI&NYC#7`&%)$pvHvr zDm5aloS3TpNv8PJd>5B0!%+X+Df#G>EmMC+W)4IO&P0;31?nNPr}WAOXkF&zHPmx^ z@g@KA@kdQln%oTm!1z`$T%x$)lr5f9EznqP(zZ!3XZ?gnjX}ECYDRYq^|*j zBYF|2i4=Jvi9?J4;PW8N)V+@5-XO+bb~zA8^{nBxWw2dV`wsA!zwyF9z0+#zQ`-7W zyiF7ljuDrE-_=e09>q$J9c1H7*-GO2ZanF+Ov(BK>lVplAw$lr3Y~rxcrL^KRmdVp zqCN^EG>i2U2dxUJ&I5&b=Q6eNZ$PvYvV4HI|i8Ty>@s@Ulzo1aJLQBB-Fm&6JLj`;>-4&p=HGJe@V2q;{x~vp zGFeWbhy~ip=oYETO3Np~Qey|*E0jgzSuSTw%qF?=gYuEpadlU9wOHHo?j_ z4w{$Zq~@nVzI}T!Bu2pfg*d^?^Q&9Ki<($B*MKK*E*frd=fNMD+VOB&_-(^ov|8ETAI^4I&F#{|)<98^3>U>p*_? z5{USGfRuM1D`|uGD0i})Erz%VENF?rHhhM}%uH`po%1a>E2Y2}I!E zmmo>HTM8Sb_XdU=&n=0z_=~dml|Vca1RJxRzq`*q%R2Y@J1?IgTL08V+kG~}=KwSt zP~s-1c?;wh1A-anPLB8KXI%VyAa}-GP%{F-gJE~FOyI$Sb({^|S`3LLP^0g>#*lM- z4;1`d5(8Yq1CCC|WlM>yb3dI_d_|Kk$TlhLR^({BYJrk4B|^?jX{hkQ??ON;O!x{L z=;>*R)d)?lD8&e>GS`WgM2clnVYgEK>ANk@1&`T+aayKw1mF`Q_`yCng3axcAJ8EO z6by7T_X9c-bS|@89I-GLEbKfB7_kq2fB|2?0}uq@eLTRC4%H!oiN5B~Ztxv5p)ql2 zRXVH^Bl3t%;V+G27{>j+i}MeSBP~uvgPkjEKWz>xGSd&OWaC~9wDv}M>lAb6Fl-uW z93w1l78*(Hg2u*)yraW<#<@qvA!Jj&%}cRg=B*AaGxwQdl{8%z+qD%I@7_E&i(#Y6 z&VA5Idow8Z2gAws)nkJ}>*voLVOaj9A!1ORurKNFovzysO1e5+Fkymh(Vz^v&v}@^ zp%ajJ!gleUgEyn}qU{e#j4?lKO+L~gXXI-Fm!kC7iqlu;b1p38hyWz6+k&0^vu$v4-<`LDIBgt7Ww@f3i(Lv(+jpTs(%M^^8kBJ#x%j_xkVX)&v$Eb%+ zhj~x1W;doD-Vn}D^atG8=ZI{3c&8M4zlSf|mz<&K-MPWHe3XA~LagEdpYw*#{^g^= z{70D_r?Oo6@?0gA7F2Mw2bcx2sJW;sPPJp5ywNRpVJk{SK8K?_!TcwB7|XXolVblW z#pEaw(kL3ma?%>O3h^>SZABxMCL_tx&${8Y8jmMkA5Y(Y{Pxk~kvH(*?!3Ta?j}0) z&Itpw=K5sw_LHsTCtcZ3wu18KZavvmgs!t59|n=j7gS#PsvfsVZaJWvg!MSqILH_} zXouqmOKr@U3*JuWT%>ay(@|A)R+b{aTe0AsVxfX!k@jM-#o|+okH5JJ!bse|@Fnth zN)!r8l-f(qES4N$9!V`~6V*XS^-pzzORuaw#S7`dvXjpTpT>xk;tEts?8~x($}I1c zSr?SqwwGPdFO%AVHQ0MQ?G(J4D!A-c?q;p((O&MhSRhP`Rh5#rWIy#>>J+}TzI#d)X(x*n z8OIf6$)~dQD|7T8rNS%o3n~lRE8P!-b4zl??r2NsSC#2kjj=e-KB#&{N7Pgys;a7L z7ptm8svF&^o9|RN=~uV5SJxCsH?>Q5iqv%MNEb~a#_(1ADOE43s;JbOF}LD5G$IF6 zJ3Ry&7%Hx)s+l{k5m`h=D98+p)U8!HJuOgNyHmGSP7Unt`wlyHo;Zup-e#XY!U4UsXbB+-Go zn=hSwLqVd1jpGeRJ(pkI&3whN@fv|D>PA<6b9b#!aMBp&#@z#C3ok7B1YKo+io2MJ zt3iV;m|A|>iuPw4P2C&KejzPG8m+4vEvu1f`;9qFn7u($8a>VVZqv{f^!panZK|@aEvIL2UY7Pi#rt>!~3N_(vID$nXk;*N>g-ze1TVk;svDkFKr55+$rs(0O zG=jE$Qe)!XR%&YF=zgO^VN1p?w2;A-Y|xft)8^-(nPkKDjSiI9zi#w{U3#2za~zoy zqCN8luHo2fqkKcl2AOQoxP^yUU^*JzI~wjnTT?rdiO`Nh*lTxK0s)qQ=je6s>{aGq zE_HMkc8n}_j{WK!FYLIAhuFn|Lh%qwBFHQb6u^SGu^^-qI@l8PdLtFIgm@i52Z!Q8 zK&jUOsMn#Wf0mY@x#<6%b<(h4BO=I-1#SKBmn>*97W~~E;=_bA7@%tB?p$T-Ou&LI zupmzs^d=E9G!IV3!>$sc{shQN1jvHOOc;Mrh=*0aM7&~f2*f~22f9nILjCb32@H-* zw$6A0G?W<_&)_Iwt49sj)x_nV{oQS9c<1%qUJFAFKVD_q<=zXwdrdSoG95IZ@^A;@ zke}F2DNZ~t9KREf1-D>9%EsKgSnhzB{;M8+m(uzJ4Y|XA_lJ-4N7{1l(-FKg6? z0#x-n!q=AjfHf4jH~fh)6u!ru$o$7{e`H*2w3g7>mkKW>j?SgQE3l)>%cJjpkFsn> zOIeU`0?Z!|xyORs!oth&@G>-v8V9A~;n8%kGx2Qz?d?xP=ylrbpJ~tl0{CYQ_`N8{ zM+|oviX$8knKJ0?h~p|nF|*?k^W%upIj}zy=Fiqi!^1@HK`e-4rDwav!=Qvh*ghKJ znyOhE$5l4|$_>?Rqzo@T8Ap_iBWAGNUunG4G?-2YM+<`^89m*x3%!Nr=!ipZV*6*t zktOJ9`5I|-2gi3MxOKvdDt-95J?Wm%k^T{F4nO&jWv*Q|MNJ;K4-Hm*6>5r=c8(GJ zLm0>~oQpytZXywFw7ENv5t)W_w?7TuzBky&n4@^k-#s^<=kca8jx)+`ZiF_U8ajXH z&tUeexoFP?irr8I_;Y&n~ zHX}!C$KiPdj`_6Fj&tx1@#W5YqyHe6yU#7Zdc554xjeTFFJ&zcrH{7XgC;S?vuNYp zEZzmw+v{<#fD;Tf9|Lj5K-Ox(=Gbvx0{j{6^?EwU4GUdK=OCdtwi(DWCd3lOaSsn` zWgs`>xLOHgQt5~-BC>)2^Kggc(%+Y|CIGPzOU6VA9#%?3reVP`1jO7pS0Sn?mWX^s zcrk_MOlLu63txqfLp$~n9eCs>nrj-5++}gTq!o2A;e||i>o^kmw<8xju|?pTXRha> zrzx#m2Lvwrv={Z0({`h4KNk`6XW(dS{sWBjCw$*)G43%um*xaQiyx*E0olboyIRcM zOF;DQ7YcWC=08RZ#x2CyBBH!LKKQ*E$+eJdix`RHOk0^B+0VF>v5=GgF9lmA{w4c9L>gaWHTndvbbyM$XMc7%RA^VPl(06v6sV;1O{Sr9G;DD zx>HThp>NR)x@Q>3Z5me=0eXwp<4@d;j)Nw!aZE9$G{IWQLVJ{Vd|}!3!L{zg!8n(U314ST#npG5)RWJ1`QjfF#W`t3 z@EfnclG7J-uPjh&J~pE4NAQQ{R}M*B3o*#~dw=HixZfncp3}VcA2Rucw+A!17JKN3 z>z z4}G^A4gZJ0wTVHdd&RY_TE8fy*R`?V2mrUTd2tnHVz7m+bslC1jmGTz3RwH{Jz4c}t6X;l6@!PSXr@==ZDn-F`wJ6?%`HM{UfEBXSA9gk$zE zh0V0!zx>?!R>VBVhmV)5eZ#P5)yV_OrYbAvy97pJ!!E9@WVk=r%lX+oIB{_%;6RZ}-shH4R}-*#Oa^9r!u zOU<9$F4wt@mhalAdR~6L_4&in+`sQ%mx4086Ob#0_rFrY_~f_d)GW(JiZw0Z4yEST zwWhkXk{SeM-1^gsO$Jf~m8m27kH|3lP4jZ=tjH7J0QKhc2}&G%&UX3wPT6khRs2Dx z%5b;fxe?bD9LlWyhb+H1KEp>E+)_%A8=y|!@{IjG=#yhPSz%XrvsUK0jeCnhc*=uz zkQGY8kYxF3Q6OdJ#B*pNLF5j-+_ z1j;1MLJ~EqpZdg0$LXLZgc@;RcB(Kd!d&=aR+iA!vB{70hh7?iLaFFU%TjNAfkLsA zT~#GL6=VIuO2IKGJ5NS!2>d7?!W$@b>YLu~GdcHT%Yp!pjW4!7<4&4(p6#v&c1XKW z>!-1GDXU`!9g~=>`k|kYF@c%L5Pa)qci*WK(|d}g0-=m9xfdER(GRLjCGm_GU67D+ zOjJ?9X>kWjMKhZDv)gqTZ_8v;Cr8_2U(V@%OQevgq39^gBi&Nvv4dOn4Ce?)s;MCA zcf?_a<>bP%f?#4XD0kITu`F}>GvhnWgfrPs&p>vyCo`m`ryQjN-`*54QdlK(yGCW1 zJ`7p*9C#X?zayXJwN+`#8>_tVp(qU9bJ0a*9@C2Yi(4ocxjwQGP!QbSmGF<3xp9I( zY?!gxL+84Kqh&9{@UI2oML+v}uSS9ntHX7ECQI;`$f`>?hbIRodWCzNrD1tpg~vhy z`R{B6jdfyp3kuCSi4o-ODF}O`-O!E#0L>+voE(|D04k8E0 zKIqRahzOGN$^Lsg{QidDP?bRv)A3^CtZ>L<{7$*Mk}>oi0^Sy*ZrW!38NHgJk-_vY z6ojMM3tP`L{RcaEPk=;kenFB%RI|EgjwMA8#C_=(8Z7Q_l5Xnaz@v!dv9;{!<(%+q z^3hV+R4~&v^iqDt?+BXM5PP?23_ayBFXS&VRlm@ZZ4I}dL54h(`9M3*xeffH!RvZC z+mxtBe1NOl?lW``EtY+E^X|ll(~pOPei|F>xiGTr^JUbh6u`35CUC>UxB4_9S#U2d zY0zn1toS(rK6P~sgRa(zAQeipavwTq3_K-@g0>sULuW8UCeyxhmtj}mAPsFo7L)WqT+ev zy+z%*3$w~!2)wZflqt1HT$PvTeiQzeK6NQ^zh7z)4Lgpe@K^9q#c&A%_kGPyO%3LB z3vk6$fPCfXx=;x0TG3voJaunnIxE8#9j^;c2i zku%>`QR%4M&^!JRWkx?I72j9gAE&G=m)r@l3(^SEpGR=FwI}`uYC#!ofO+C-Px@UjeZsMhRXP0`0@fK81 zqKoWq*d1`O&Fty;)(lpJOEs_8oE^@_CPp9tbpwqNn>_JIg*Z&?8-6eP$5h8~pm-Ad ziciZ##Yuqi#h2r|8&ak-&_9%Gkz1BCp{f(GMeqKbPi_lbjjSA=$Vt?Gw&kxrc7QNO zON;g$_37nMDHb>nLRLcj#?M}`30)Cznye)sZ{Z61?2v+4e~D*C;}VF#C;06GC~P9`uwNQ z(2b1^&4%SPWy4C(dKYKakp~fGZ(x+6~`2*F& zzhovja#~97n~cqho1^_pP9N$gWvqC=#(C*}%xZ>6csc>#{Ilttvd{C*wju0;8qVS%>`X3}FUsQIAU>?@+V+RcgdZ+j)Y zH+9LRW!I4CMoxhhyv5ns1LW1lb>>E#1(XbAdj9qi0TfvnRCJ}}*sovwtBcYS(LoX~ zmI|%^1obz>cY6B8EQhE|RThpOxayNy_eE5RFk`__;TywxxXSH3U(D&mBG;>ciUHtXMz#~l=iTDZe+A*AjDiNv zMop+*-C7g%DoHZ?V>NNHd|ixfxL<2ios2T2zYtXb0Id&F|D-kgbB>*y9l_N*XH~-_ zdQQh4q+j`clUa(@e3FbMt!k5^K~!uRwYT=ly%eW^q^)Fwr*n?(396Y|pPqef=7Zxp ze17H6zKgkP;(<14YaY$gjs5e9oBP|xr((lDb~3w&k-Eq1FR-aMj|we_FSSbAdTuwg z=GUmpXui3F<vmy{87#MK+q*(#u612`bHny0lI8$yi_lzf~ht0 zZ8R4>J5o_Q6G90cOuT~6+b2DV3Iu7kHlD{SXc8X>p};{JLJk#)UJPhB;k0XO;x$)j zS9IpD1Jr%y6H{G)k^;z?nRsJ9!EP7a&U|u%3Hk1waL-uvV6gMVlbOK5k+HEuGK2w* z=0Wb*r`pRDOG1Jr3T!U~c3?C86Wrt3O7Ubuj$x+u6)kr|7>|BJ{`yv1D4e^mP|4a= zzsJV=+!*pxS;mjr`gs^+FV<)81k2X#t9jH)J~FLaka`nOGa+rjT+6CTPhx{rxJZJHTLhf_u(4Z)O-G+S}zT0=97NXnfFNuSvE% zO1KX1#_y7EPk^mmR1cNN20~mPXdt*1XvH!^reg3!lQ3wC=L#`Suy^57Y6UtgP`+Xl z?(uLRYEZti^lrGk`A!F!qcUAOAYtPWxc7h8gw&#hv`RUr)F1b;kRB{`eh19E)JNRg z2{28RA_1((02)pf+lVRNo9|VgP@*8RKWp|m(i3X;h8%wn)%L<3>#LvnLY3%J%4eKU zW%U-gB+~9ah^63a#=hymEAX}LSJGD>w5s?3-~vZ&7qXe@)KnZtU` zLt<<_6zVMTU~l_`h~IMF^ZnNkYp{Hc#x@r3c#!%Sau_CIIvDA=#c8MueO3XP1B%Z9 zgzhV(Su;A~cqrKF^cl8BjX*$XxBN-SM8b_#vhdERjDn=mc)G#P{%ELT`eR9Sk zpr(56>S6a0%*oQQoDj2tp2+2z1T^jM;xF@GPUY|$=}YSm3N;@D>1%#1yEJS&?2vHj zXL;CB&Di0HF|ZMzl|EfWelL|i4N4rN15E>S#{wx=0#m5gNl}b}AWH!cSQDw_vHa1b zJQg4u2+&j@r-lMnFq9LVCCJC6Cn_jmXB={$#_w^RcEiPL2m8XBS$19lNNNPB)qso$ z;K(fqGz*pWGXrb|GN)0zWss-QV;o-D~aXD|ZucentC&r&9 z+XPV0SGYlF9mCJ*56;2*Y1wg|spa=7n{ar3& z3@}t3sBsQ?;*gbYf+61*!v!fyTG3BOZCM^_JiU5{D+Ykyo=em^PVXgGyCk#%;()1N0b?3gmN(4D#<%rfOh_B zU{lJ`s&RW*;Eh>zcXmE;miv=YXVL806q14qiD!lujltG`m=(xXRv?Zb#2OH1=1fAD8}vM+&;A z^psf4vJ`eX_?2^ITwCP+`_rk*3S|4?KBkCD!^ow}7k8}s7Om!`z?V>o=K0UAc^LFZ zXYktkcoz#A(*;M`xm|palNwr7JLr^Oy0HmpHYh(BHrN^hQl_dXx6W%YftQsaC&pL+ zHTT(#d626m#T(Ikn+diebRKo7x{f>T+Gkd-Q1~C6iX<+$_)( zaq8929I?LtsVT5Gopc88EtruKc_hl}s0>%(@6G8Kz3>rMWd7(6^E?yCYwNP$?c;5= z#{0WLs*lqU)2K&H*HdUz&j%V~#OM0bu7`l^@*xuuufk~Qr@yT@3}&8K16#tjfbWa+ zL$L{7c$Ah$e&!108i%3LK04;n=wUR?9RuZ$N8RXBy;X8*!W$kH_~H=uh8&M!w@ypE zEqnu`<~dKd4_EbMD-JnIeDKpR+%mY_{6o%aB1%;3PFykD?8RIkMRkR9I)N{-(aRM% z5FZ6T;fTKC<_|v%HoecOmjo}_%W`B5QWAbq_d3oeKcG^5$3@Ao_M88BV_G#83j*Tm zxf4G$5GwgDte)B0RA4wGgQ~d}Ky^KfWFXhB1x?;MFyvjqdjH6qZ zsy?J&$(2nEq1|mlWFyxywk3J^Hs?Lh%j}QuX;-FowMiNu?XR= zD)q%B*pGUN$;}?~&_452pR_iK)V-2Y^EXO!!z;^0Q>!<$#U&HP`&>F^g9E)41p9=} zN@PSTo_!o!PM(i$j1p>z?W6dx1Prlh)19A|K2s9mk53vya_7t`<0(RmAP_b-}w#4bilIK@ij(2X-}g_KKFM#8|(Ts$!y2@&CN^@_pT@OV4y%)n=L zjQVgubnx@R-j_NNwHnU+Q?RB)JnBmJm!;Qj7j7mS97tM4BvB>Fck7uM2U(h{LA4RR zuMQga3vUo!x?g!TD53efB2?YRHtL0U>DP!*A@E03IalbKy@Kkh#G0&xL$yJd*CeMQ zlha2D%)fW}lCH!Ee(Sd7fOA*ataQih?kDHf%O~2ITXRgx{Cwg<*}4HkyU^pBy+Rsv z0pv*loxM9ibW#)hiPL#Npt$R@B0t_b1W+1=B36VklcZQQR+YD$-yn(EAu15&+mnu1XK`L z9X}LDJl(rmW`E-~(@_K*77Ds_{DkX_YGuRK(dXi0N#!mY*|s{Eq=uVVF3UrFF%#jwJW|WP(5^hf4b6^_q4-EE)D(C zqm2}?w-r&^PlNuq{F%I8g8h%B$f-exQWf{V0h2YAFNBAS^lo@oZ+|^KPRAu3r$HN^ zmMDb0^h@SVur@0BJDcm?qMBo0>2}X881O;ah2a&^7CbW~u-F(lT3~nAS;fO6^5f*U zgyA~1E8P_D>o>M0<&2Z8&5o5%YUayL(gn}9_qM9D2IFjUgSD=5mGmv8WVJh`@K@g6 z28{+e?L6F$>f0PI?zxj8Ama?0==X)Z6@0qBitF5AucmbJ!Iq}9 z_FSU_B<=nLMo9z(p-4Osia71 zr2ewGP>iXCm_YAOV>9Vjrl&lc6J)aog)NG*sIvY}?&f^4Y%NxDOIbE=qGDycVKNi; z(l)Q&OSf<+*HER06iWSCht)cS&ZLRoqjo3iVcEQ)fo0T}SMi^gc`s7svMVyF(>XFT z16p0B!x-5IwzhBDD^6NJYWL88zZ~w-()80D!`HmU44?6(S&c+jmYKaHy3)pR++}i_ zSY^G#9BhNB?4&7IPXkuNF-CjVq&{e>Fv6V2{IN;B!zH~HKXIq0_hUcIxP`W@%(?|l z+_>y@E&dJUooBlx$SIuvD3ag^2i|tQ8)n2+lGE-AK)&TUSE)biM%ukSE^+=STS2&G^{_j zHd=7XWn*y3DusdMF@>v*IBvta{b{6X!k)%O?c`;t&T_P+InmCp>!I^7c<3CL6=O{1k_O8HK7&!2aMcr&v`4bvs(jhgSVk%pn zAS>jtR%{ck!>jnX*Pqi+dbZh|@2p~9NEoaTKV+X9ZHPaJzwZY z^Z2Fc)zoFx40CR6Vhd)QGIYp$!17Kx4yWk1cN2ubs?zEy)`z4A$@?a@p~VQN3Yhp! zg-oN9x-PX)TYvGt^nv53iFA8b=B?(f1f4h>muI7o(Z+b9&T-32cN|`Peyd-zJ_&IG z9yaFcPSh5snBI4i^W`gf1N%@;(UZB>>1tcB|}K zxeAocD)q{t93RntQ0CPEa+l_ENY69dD46B(B!}q?hq6{+8*f*VsT07pq=q7DzI~FU zaTL!p>GtFdFOTi@`FLH671NWO2T#9-;siH$6IEr6IU+y2IJK#XvKyR84XL0?>~8hR z>!`!O?nxWInl}?Nv*)l+mgYSX>GMbGocfBc7cGpVgH8)^I}>3FuUf&PWsKwkCXjL% zdb*Dpf05!Ac2T!*5ykQHEe+k+$~J0dXrEn{xhI%pvKMAjYLk<+Bg1D`7AU%0*>ugt zpN~6t=vGj-ebdiwf$N2$!UuUR?VrG+cW=MI90IO52;qn%)UuS})z;yW#((~PdqDuq z!6tK_Rh9<_tH*X#g_-)C+C(`6l7bWQtKRBV{9_q+P3R>y6M~ zj%6Qzk(J`?%37xExuU-VJd7qe>cmC0UR!V%bPrgrgek((;hW5!Pr0ayUAh=g++&Cr5 z6o(+?_xo6Drx*xzpG&4E1(@YBy`p5?a|jY&{pyDdSR{!VriRWPZ>SR1M`AO6;P&1v zWS_L7s8wBrG+YWkiFEL}$1s5y1u??+a0V5yOxL5Uf^D!t!*5-E{`L|Qvic}rp3tw< zJKkLa>74%h5yDSq%G`74`3OG37Gck;cw>VP*c27vC=(lTSbiX`?l>pljlrCv>RKBTuE^hX5Yte7|&g zyZ*WGDxNZ;iR|%sk$irkMwPWzB`L~)#>bIl@k31Lge)l(Ke0AP0w)6g`y58Si_C`3q-Mu6vXfZBUFy|lrYkpX>tPe?-2n;Sq4jzR51A2p5l zI`?3Oxq~VRQyMd-XF)iHEi$;+v;33TIr{?mq^VIE02L3+#8Y$vaH=Cy^sXMfC0Scy z4yy6^q>od*tW^I?ua*XFF1|~mH+kOb1T5n>4ZcDC&m>Vpb&VV(U-ruq%r$#7n!dtW zX1qqi9Q9p6kKvT0R%5*Ht7rI_Ld49{#1X_R{a|XSnWNRAb>7SYd5~s}#2TdoG!rPv*ZtR(baRSDeMM)Wq4M zSxmSsl_7{{bjg4K{Xfb4eqc@w+Ig(6aWvi_#a0O=GEQ~G$B|93rlzJ8Q`0wQTL4{n zf^N2N@uSicIf_;^O_S?HzAt)3q<39nk6ow}9sS3`Ko%G6iA3Spm-ttCBxK*Q><-Wy z|Ls8dh>g7$@Alr4XUy=#e`EikVD2mHrHB%eymZNbB#RVARzOYKqG9LgJ@4kdCHE6U z_Y-%~Br6{w@tWdz%%IL5Ko*p`e#TtKmP~5vKFnp8)I}8)lPv`SN~#M@NAY=5sV(!y z(s-OQ>$J@DTcvL}d4FNid3M>FxA$u}LGdQa6*5Yw9@1p5A%UzwAt@ZL|cwhw{GTE2O9 zJJkj#o``Am`Q5WfHsj= z-rV0wUrfoPM?VxQ0n@ieM3h4-vAzx&DTdWP3q!p@^0kgi^u#kQpUeD#^=# z>ZItYN0DpDBL$C=3XjPim9mA4^YO|g8+0gsPJ8-F31!yK*GR$6rmQ>VuPKd7(N}Q$ zvDAqoKAN1Zs%WHL84&p_#|wF5qC3}X8}Sana|9H?#|v25KcRH1OW23JTwHmT?l!&h zXfoYHcB8T^h_^1Nzk9o!I&@p9zbL@^Mc`?PtLqXKmHNaFkP zvP7Uv4M`P5QuTEH6jXgXj+@EC$rTAU)b=RI;)KsAE3S5@&b(9jGDcWgA}k=}4kyXY z1ByccliLxBDfP@g(rtKh75rkXwV1DR2xcSO+-B$JP+u4U`m=qYti6XlvoB{1h;mYAC~ z&pBP-T5#H0-KN%GIrSJ6@+~9h-4r(0)P`ZY=@8VRA7GYWr^QMBh&u`QPgIRauM2oa zf$7v|RD6EI`23F&NwRlP7!MRJ>S{mkdE7|mH@n>P`Lnwa{1F_kiu!lerN1v$%K1~k z=5Mz_RdWGn$Zpio6>Q3>*W2Q;*?$8h8ZMEy?fcb!lcc(&0$8DY1ONt2vX1>|od=+M zk>pTGqFTnnMJWPW#_HSvFve=W^IpVJ?<2!Tl@FF+Qi!1`8}$8E(1Xd zGR#SpFq~S&;MqfxYQ&uCZ-lHuVUicoZk((`C#i%ctw5^JludH}@OiXfl5ym-<7KC( z5bBWu8z59S-?Y4PESJWFX=i@b4z0i9MzCf~xz&}c&~0aKoDc#wtD*LqNHU7(E&o=f z{v;V~9QsTv4ygA_y2w}^Z&@!b)+pUsXXJuc82@~+5qPT!hzy@Lsu~T6v@aP+cy~DZ zZofcs#z{o8>_YjIqJDMX{3w5|svv@Q+{!6(P32v1T7KC3r_McEXkLGolYdR|kq>FN zan<_C1u-9h|8GSyjBNAG^HasU0-TL73(bqFwPJ^27A~HO>UtH?quPR#16}{V%&zZb zlFk~IFQcn;3!j?~R-=E@A0g{G0kvpXT{L#TtMHxkW55~`^m%)Jg#JRb&XC=%}!fw(a)TvC#D!CPLv~dj)uT;H5pM8LgaKQZF|AVE}o? zkRiHzn?81HGx1|lPjqw(UmcI=r-J_m6$QsG;l_MXVq}LEPN-(4Ee274*mYXqy?jmP zk+HMu`|LNB)N@3jGIPNYZvwVA(N-AL3WRl`Y_W?44{}4(t$* z9@sW6=u*hDObG1^ zKIaoYul7F66Y9$LPv{?u(1L9zv_ccbI+z{qQZztbbZ}$z7`wtKsFYUummfjK8f}9c z1>RyncXU5SO1BOkBnB2<;n4yrAbB?c@eMlQj^Nc%i?OsASj`@JB*Kq5)?PUS zJbVLLJHv@|LoE7nf~;bBTN3~gyLtG>0sMdhkN^QFz^tyHnwgKaYIDatR0fqpAdC$V z&;$%e*ATDMWoOMjQMrr`Rr~*%^O5hzju+gdWT1M;ifro(xaQe|2eU2~? zs(eI~urxyFltN4a6;UOQg)#CrsD>aAvMG!KB6NZy!yzA)iW|rUznKGlr-LaJ)ixAD zy12&$yY)P1!(F$6w4A|uta`f?!gI8kC0}19+yN!rLA8V#u^7U70P879f;Ox}s(u`- zVjgu8-?NFvf^36>Kv@AO015yB02Dws2!n<|cGk39HmjD$07W2(L4!*{AZ$Anx6C{V z$rCqJpbbg6FZsD6RJt45x`&{lNyEFx|9ef$d%Y_H5N84<ud%h6hoYE2 znXP)PI=cbKD2b1BD4B}!t-fp${r3Y19u7A^=n|YT?Ov=!_lIJ0)wPP`LlQt zV@8b|*RhI6k6t{HBjf4&c#GObf91+q?4}ZCOqns85hFGXXU<{HX7=2uZ~m$mYP8E`}c2OSFTzOCS2HXE5(QhTQcBu_SUh}5OYl@AH({8^Bo zMx}%m+qSJ(u~L^BwVq=JcI!x*4@HWEIo&o(q^jY<)omTUdGpX=BSorIa@MU|UsB$v zPpQymtjs|q=+``d#Sqa!)QOJwIe50sYc+gVqvOAdO)J)?kR(5T%GjA_ZrZtDh5C$= z#fXw-7}3QUSvKjVkWuKdh#qy&N#u@QenW?qLN;lon^v&FW|T@2na__qBtZq05hXcs zL=r1O(U3|;8O4$pUyP)T|50#BBoSPW*zHBVWC9K(l19=eq?dd=5=no^0f(F=!FlpY za_G^A$||kA63Z;Bgr^y4y!_J3p@JEc%wTdE^Qtt}90n_{q=6DnD7WH@&aA+^^Qk!X z+>^;Bll(I+mD)NblT!$#q^CscVhK={_yP=4!3Z;q(n@i0#gaoFyNol*45922+BzL| zvOY{bWHi%GL#>h5%xJEZNJ5(|l5KFQq*iov#ReA%Puu0VQLT*FD%8+Jdy40qb=JXaY=0hw zG%zRzW31A~GKGv(&O&vJvc5a@Ob}E1@GMnKu0v#-X_9M1v_@(Z2A4hz5xHYsl@+FN zR7q0>TI7EDr4&*k!GpJHwrQ2QQVucW5Ih>8!wPDN_>Z8^z4T7=R;yB zIpU7Te@Q2j|4LAyY_Zmv$Je zrkjuGL1%t*&@l%aXb2(*mumd)xEk2-pV-_MB$=6{9p6w%AlM)VYEXdYB0IlnUb=#Tnq&#Atd2dM)<+1G-HA}lu6k# zG7PjCDiesB$s-oEv$64|2}xAq675DQQozU(mDto2IVHGDs6teN)1qVy=Pc{2DmRY{ z4azJL36)`PL#IJb>0~7u()=P=q<~zq%&`qQhGq^|gw`R7p^8RO#|T=mjHbISbD1;S|fQ0W#SZ75-)N|FBUb z{}-A_kOo?)Gskd*AuK^)YYvbT#A$Lf1~ZHSrdNFpDR4nQfy|>E4;#)lDscoVK++JT z5MBULNeNqUk`jDige`P&jc&jLmI%6og0!IvzowEJz*z?_Ho=Oengb!CD1;r(Aciv( zLKFiLg)kuz34!dQ8rv|(Ih2)-`_*w8{_`I-cG0tVw9kM-B2qk@K~RfGVI7+gLm>Qd z1aJxzE#tHkI*Y>F-uf1V@GOcvmx4m8-SdU+454qOp+Vf@*0mNHMk>;Fid3XRE;3=L z+u$~~U*KU5;T7+A57D@3oEN?3J#T8*TMUe@CR8gmT<1E~(fEccGJTLJsb2c3|H*)~ z5f~kpKei!^rDCia>(G@QYhz#51dEM=z{41alaBS2<{XW{M0iJI227Ho7=-MO6|{f^ zD_Cw6+Q5ZymI|?IAmk2rpwAs5K?+DzBOTr91v&h{2tKT$837`PKDxJ#rDEe>taxQN zSfLAgbOV;%7{wjfz=l3VmLQ6~gB|Qph*1uwIK65nu=Zz=UsQt{q%CdFsL_tpl4P~< z+ekUY@Cbh}f(k}@?pbuZPIdbEYs#%54Vgh`;wps_tw@aJQ^p={pX$o8eM-Z z;}o>eG%XUE-Ix$@9dw!CFUBwjI+!{<;R!Dy+I!w;Oykuzbq{)JouAH5|3etcxy?we z7%KSkmpW$1qTvp=4S!5ylo*-EFa5VtRNeQ%k8=ZNgpm$hPsAL{g4Sq86E941rxBg# zPIzEb2HzQ?5V%0iG)Q5PWuFL=tZ3vfjGa?Eu%gFuwFQ8#p^s|>he$3_2qZ+&5ijq8 z;0M`7CERcaNbEwh=h_7;cF6`vcKKh080IidDWid1c7G1#nJ%Y!K$_W%(qikgIi=y1 zoN&@GUT>aIxKJVzxyNz?4W9z@Db!tebnK_thzaRCCN>u?m+VlZ7|0m|m+0RZH)7@Al zq!eoDXfvDTw5AWFP}Vje(Fb`|!ygv@#T=5uxL@=kT3#>49L6w)@XW3eyTL{)3h|ge zl)(+TT1Sac0m)HlC#Z;@hbVNh3hCwRUe16=leLi(R_aTS zUIV5ggHr;>R4hRl48aWouX~hD7`CnvY-5cir=)@q40B=G~t^y|j%18PkhUSk>)UQmqCKYVK7H{#oQehdo zM!A}+0W|^~%C9M!ixpL(7m&uUY=Rj4O8-15&?zM&mD zVnMtM4=hmCti#o^PV2Nz1W8aG)sX|SuGQ8n*Md-_B7+Dg$_&7(6pDcqXpq<_!xgj; zGoDBkP{|_RMHs39y;LIz)uVJKBlK29STJfH>`13b!9B8}81MiS=xtlxMOwnkI}ia8 zpu-J>VHDiJ5FF-`%&0@wr3{Xs36Lip$fdxvqd?~BKlY6g+>GK1!GHRvmgWH)YRty$ zpn>c_6g*}g=mBGPLCTb@U)-h}oPpvtfe|)g5u@x8B`|!_Y!Z9s$=s~^;4CD32_|kK zf~WxqOmQa0X(~i$6_ErUUJ(|v;^wgCD7Ho~|COT9`Y9`FA|~_!9C$HIq+!wmkeq~q zoEDQ9nsFogffx#t8M>q7Z`9RZlP_~AruUdWhzh{F%Z_w@fNwItz^d&RMgtF6Em=@QcJkvK6sHpisWq&i3}R$^FzH-`;T+}x z7YZQ}${-Bxpb3y564ZkfD!~r*g%KDr5jKIbb^#lla?Q{I`JxP#EW#YLffd*w5&Sd3 z;=z7|E!C2k=Qq<{^M;37nmE&ahQ z`?5`N!ZFdp6@{@b)6ay)gwftoxoYAUGh#5!3Fu&AX@;>e15<;{i5S4)GB+YKX+fSi zQzkZHQ7jEmzDpcWjT})BHCs(KUvukXQ%%?O>ewSSROd9}(OIkj51b=1ZX;DyoMu$|I+0;}WVZjtXoW6i+k+p%k_u8*I#`mIoLxp%Y9&++ITq z$}5WcC$kD{_$omgP+>l#h{oWE4-w9F4}<{|F-cPSm6ao;0zd{3wnVFoIzWkiDjaR6Uj0jOteMq zAQAk53TU)OEn=L4p-qATER+UGdNhQ7R7{XdYRW|ZWQZ#OGXRs+NsDnUv`QRgfvT&>d2H$Ggf0YcD-zqRg5YK{Z6M2M-VOn9sD5& z4IxGrV=(s71`kJ2ivb#{!8W^dd4Q7?u%W4%s@-}vvv^}BOXD^0AUU!FVz$9rz~k~H zY!tA;Kf5Z&`V$vM;b8f|4{U)L3WF5lQy4D65MmONAn6D~Ah$oPN&aNqz)fCOZL09Z*|#ilOaY)G!J zC%!RVf8r)wZb#3eA8bJ?kO3!<0l3P^Day}<>@_LKB)Ob|&~Atrjua#OwYLt_8Oez% znt@=Q@g{`v(I&I5s#GJSAr)H4780dPN6iW?*6KDEd6Sm|+3UPY;W`>YRaliCPwEov z$P(&pYDYn9t7xL;K*B`h2c;8u9;O;hClbbmBF`77m@wPs;T&2}aRkA`E@B@3sPYI2 z5Afjm5NVXmVG>tK8^VAOB*73|VH-MwG}(HX*TGeZUS_NvAKwGgEUAel%h;h@hYCUpHi3QR<~dK33h)%c7JP115+24 zc!_mEff80Ft|m=z!eM73f$U-vCN@bb)&j>=dFPm8nYS3E$|B7xPUSIPOhcz4p&HQP zVQfXG_-5@u>TsaNz=(68cQj7p2uGDWt_2fR?Fe}V6>uSy zAck8WVH3!q^eCYc?%-AMzzw3Mjv(O-^z9lLVO?0E5?EmuM!`ayXA~sK4^Cu0Oe7I( zp%o?uMN&*S{~+eG?q?gYA+%6N3>3f(6o3a5palw`TXq5EMlMAUNF-`6hm%B0s6;0G z%^AQr{~XaqwFDlHA{B)c9L`xE<`Nc52#V8Wx4?mw{u!WKF6M{lZX3G)iF_vVqpP?luD~sLnTJL`FL->{Cvqdj-LJ z!)w9>0TQO+BK#+`(&5;M-8vS&I%epEChT5BU{$sZWVA3~v=d*&Hkjx1uL zAMSNCYj-2?nJRd(DoV(N{IV#tj~F<&D@=PBgtUclqM)Vphieo8uZAdgF^y${6&8hC zDbVu5RE{zFqF+-3-2)Rs1A0Fiz0UMDM+ag^p+B&JWPU0$OhXt-1*IZ`qMW4<5YLf+ zuo`p+A#v=IN?MTbV_qUbbx1)F*o{3_2Rj~h8tfMlOhFYe;Z_e)R5{9`W?4TR&gIiFEDRq?`>`EQz0UlVXNs_s)yt+gr!Ffnz6i`7% z|3qdK)?t*2<2ZU``aHsMMS@7^;hHpp8Uo=K?0^RzfeqX^viS@rb}=d{8z$i4ccms3 z6z#`7yC{qtb!joZ~mC%I|*l5Eu<7%8*RK{q_3#!RCaE}?MJF27<*JsP2r%w-%7U4af=#J>@~Zau&#qGGo}0w`B3v8DVPnWa8`8QLG^rJa9mF;1jC^AP{~M(n z!rA&F5GKUn2+DyG&VUDIG{?;u$%n$nRiYn)T(!Bz7KmIWINK?%@Uu7J46(k`EPrW};K^Nph7F@N07X(2%B#_Mk7kXiqid7Wm zb{(+c8c2kdbO9A)0Tp^d8`c3HVCG`hK^wZ^8Ww}?i(M06X2oZQ9&mUg{~kdM{9zOH z;o7quP=Mksks){4FD8Io$>nJn#(nV7oyiML$(KU3zr@K+DBiVro$@c+{oO~{#xA;R zqQl%e*lXaG_q=Qj;iGfb!jA03Zq6}lBUJj?T7$S7L6Tj^RA7e`FvW6cfd2?4$(~l4EGifcKWEJY2%dVryL}K}AkB9pV!mb|DcM zAt!A?7M8vYSfN3Z&p+w5H+uQ9Is``?d>xAY8k(dVbV13&K72Ap8~We>0is*CR;_yV z@`o^?!i5YQ`YX4N9=&)JE5_4Dv75t<{`7JD2r{I|k@{>6JBjk7|E+5r;iVdu3udmF z!%~53IgFXkojQ^6{HarB%#<;K@|0$Dr!=86o2IhGQC~Bo(ulDfi8brOa#}w=f>@4P z*O0%)&^e11?HokYin)yjH?G{dbmO{x8@KJWX{9s?YV@nvv}}9#x()m*@jQRfc8O~! z?$_R5ks>v^bg5CJzks(1i{$3eC0B>~2s$J>QlHh^&ZSG|crij~zs#L8H;*1JZ1c7i z+gu8dpioVNX$gqC2UtUf9t;aqbG@ycuI*99rP#LA1gkL z7|D|5UYDdz)zEd@#j4x7YP)ucsw4_F>7cXDD1{^k7Y2}kp>U3p}SV9SoL@&|^&zDvHEJk(Tk+oK7Y6Nw;^wC2{Q z!jKY4IpT)q)d-c9XIg8u zh1Z{E*M(@KjX*+*WYrV~H=~aFbIvZ*q?gb+iB%JgqkTiy)-1|BaqG(`;kP9Ak`O#TbnsVul%{%royg z-E5MGx~!1XiX=Dda!qcF%_Ao(oA^OR7w$14i8_^DczYq$%=3;p;#4CFzoNWqj_tcV z*iALn2-J%}TAz;%_|!PFe#dU=LrugZl88|}-E`fM7;M~f3lD5~&5&lKWPm3di&VbU z3<1I{EASwO(5f=ED=mW=$l%#fPLd0t0gY%Jq@dA`mNbqm1xpER#+Hm?6#%N~YHs?9 zoLJbfJB3XxhzQi#ZfKW6X@V4KGt8m_bC_RDsxh|8Ts0(fsX_V8Fq#t0W;i7b#6{6F zu25Vb7Iz6%S;7*@8P++bfw_c;qd#Fh|Hn3daVX8C!;Gpi+&qd=3Oe8kc4JVM8CFF* ziL4_(>(GTCbU_I|NWvDVI1lZ+$F z1R|#620=^;A>D9>l60X9dbGk1Ww?VM5`l|#Y$J^RaK^c=;fFI+(hj|tS1$@73Uutk z4uyb3w`4;PfmB0l-=c;nM1i94iI0^1xsY4iYPYJDqa6~Pn2F*6!-PoT5n`c&#m?C< z0a9}q&A6tDW(E|hjirIil%`IC;moE$)3KBVp*2M~S*cN_88`9fSOBZ0M69D7VNszB z)w!p3x^phS5Y%Ky5h}^_5N^Uqj4*;YsWC!>QX++hYw2Q`ziBE|UnB*v4iUv)6bEsY zaf2Z+>IzFxR8^HoPdp;^|EPJ9)F1Dd-aO1Gx+prd5!FE4UrK>qGfanB!imJUwAKrF z_yZog@J=fX;fFgIA`zpg1}@OrQ$}n;7C>#!ChV|@gmgm`n6q8>Ac5BY7(^6s73Epa z`aSV!ZLM%^>&I@#O1nzr7Ia$3Educfe^BF=p7n=de*#QlCPjfB>W2fhDKun2HnJJ4 ztTd;zlWH1vA=1d~1H0Mctbmq9<$%Z@SzI-+p_VPGU2R_a_6tnh^KX*L=VWACjM`3v zdXaj}Le4>(#6ZJRmy(P4^zsYiZi9BD5S?+0afxTOrZF@_^g`=6`|GWwv)3}7P=0HzmnE?-xSPVU!!HRFd!+6xv1}Y?B2zTK^82kYk zx!SWlN$6q|cc=vB(4npe*$z44`&O@qM~`p$y29a8tN6s%p@zYauJg0VU8zAW6{#>} z15`-?yP}V3pM)4I@en*rqHQ1>MaMgKrjdR8lW>>pvKtYgy4Bt7BrCaUw}{g^Rtdn< z&M>uQ!{L|X+%|d6Hg0!GOk&P4k7?{;qze&fYvJ;XOG(_#Z!5+xcDPf|P-a)ZYQ(8X zQC{x~L%J9BGcHKMu1IXBq+yK5^cJ!Wz6jzM=oJJWvP-+(%s~rgXpVGj9=VCAt2>+M zg+yB6E<@a*{}8w^2Ran|p7!vek$gzR9V!WlZv1N<=(y#)#J5y%i2@Rkhy;aqG3d4q zde8~$@WS19D`fEveRM+-y}*X4C7~^n zAPG-*{~Nh6E~_95tWaQnunD+O4VJ(!cfbZk#ZjXGEPcRHkq|}SqH(NNUfX~T)ewRq zC`ujnF(5K`B8D*~rVx)13jWXyE*N@Rp$|Z13qYj{I%5mX5EZH5gFgs_;N~8&dy+vrjj?hHF-Ej!HfaNJW5!*rQCFBfMlL!#;4d1vXtv80R z_b0PA7X<}3gi;uNQ*gA0aQwk=l}H;LxrTAkW*&JMjj#)Ps5eP856e*v;?*|Du~gY{ z9p*4+{;&w4(Gr_^I(2S`3`%59_8>oiy{p%sGxGUF+RJn39!ZptDuYIVszl*E&H(xm9TW)CmZ>K4b;dX zYv-5HNR1xWFd$Y}BqA}e)DXAuf>J;QfzXf+V~|l{Li9K_#-tGa@PtJ{Oh)Js$ixiG zFhP{%OaUp7J~lN48JV7iO!T;r&G48FLt0uB3Sh`0VyGt;=_mj8aBHZBvWFN37Y(kV zaEL~d@I-vSMJOq07?_|5h^9G(@mSrUV*h@VRK#83+rGI>yUHWAb_mh}X z5D1BI28m#fv}us(NHgxp5SS^CQgV--=}SNcnndG|O#zTIF_49onpEhS)a05~lX~s2 z4(1qT>EwECVKx|voL(juj`Eve^hLU7lxg;G5XX^m(OQL(hl`;%Zo`RhHl5QTa=$_f zzoK&UVmeb)eHbNO(3MdcsvXdfl;Y5y+{LF#=?`Nz572-)6d@bJz$`u2bM&NTkl+Ru z!V0a(8;gMr;UNj-Q3z{S4JO(PvcL`3a1Gob3zR@Eejp19f(xTy|2&nz8{FX^2_uZF z#%i_YcDMR5?Z65tNIw@IH%i1> z1r=wKfe?+-W#`!_TB9&4Kw_ur2aG@o?_mq?feNh< zZ4^2R0MZTM(jR)-Rvvh4feBZm;G|r53%u%VC$f6n>LJ&_|BEGrwaAJP{a_0`W_eWM ztPF9aK#@!lWI|^PB}y1>T7o59;v`i8WmK!0#DKLW#0}zlf^!uQT$685T9ND8k!)zC z_B6gy3yCyY)zUliB zGD;O@!nO%?4Ru>W+r%ZyKo04PzxkWL;4m~w@g&ze{}Vn)xAMyk&hVNJA*u!W|9?77`hT=NhGCdWOJBD6GYNgCcQzv8CFvT?hd#YUW#ga<9-pxPd!QZR3&= z2f|+zu;1dj#3@j(@~$NXeZT^JDkp5i>#!uJIF`V=z_L9Jk-5$3580qMknphyF)N>g z32Tv+TB!v$=MU9zH|UWNy(1op;0Jy%3dLrBn*coD;0)Yww>Vf3xYLS*W;}(k36-EQ z2BD$GHjVMAp@LZ_F&JWo`AV$7CbJX@v1CpNftn4Bjx&Q;N|CKX@^0ER4DvM=OhQdM zkqfk-$(yXnK3HwNv~G#K6az#I%Rr-w%qCS6{||A}4t&dcetVl_Lr_;*d})Ih8VMIF z{I1utaEUt&X(kwTF?BZ9kfC@p50QazZPPd3#c=b|HR(AInt%sduoljN39;h_5LQ095o{7c4mn5= zWvLCp=3kp|23-&cY>Bf3)(x`ZJ@r8k>wpWrfPEcWA$9Db)MyZLwT&ezPQQ8vk01q7 zun9nr5Q&V+>x)>F`N%uLge=|CR58gO@_5a}$(-!TMRPPlCPI+642pHqA5t}p02Xkk z5Ri~!fxs170HX?Fn_^Q#j6%5a)I$T8|4+a7%;@pUdsEAFVVsaFD97y1k+B!mAP&p? zHea-*W>%<%3Y7?fW|EN|Q-nRU^HC)=lb*2}7)214;Fk%q7_hQ@f&vK$$BCgZhm5g3 z*-#9yqh<6g9C%O&Tr~<@w-BvBNY`Qut$+^sk|g882z(F-VSKY;oICo#AZRxVxbPq` zs}0?t4cOb-0I46&eFy4iOIoO$3j?1}*wOB0-U{tXe0zk?#67 z`m}K3Fv4HAH*3~q$GO2{Y8SyA|7Y4k*n1PhmQp!oeJR@|*5XhO!|SgImk!x6lisBr zh_gLOxeX5<30pJ@t?!nS4yUFq*@6n%pb%&bRPce&k2J^D7_@nP}A~)8)Irg<4q};=>d1K++MgiT??SoJVW0gk?qC5=WsuS=F<_zK8 zS^?howqyr-2K2xNMBoo%FcM8oLxD1;8<~c+XVriDU5#>R5_c)_{kUM7uZ@BnLPR@_ zqQYm*rkmrZnrka-EzQsT|JH;GE7&tVuQ3nV(>9y4Q~AP(gO*XPpy8ts30_5>Xgv*@ z@LgYo2~OPIUE>;ffCtRk37s&{m>>xEJUrh5+r5wolt4(fz<=BL(7K3&vakvRrhu9x zFS$V=+7Qv!I3W@;XbY3kA43h}+pF=gVp(C*dG5eE^KL0IO+UhqL_-W|-W5!;wryV1 z@yL&rXWb2J7_IEz4n=7y9I{Ae?hs zTCc(vPsqvD5Vz>ZJPq$KFC7f8Yql3<-6&y1InW@@41Q?1VGbnaxd`DZ>3|K#@fj*d zE9fB`=&-6jSqXOP|2SKO3+X^Te7eMf5Dlb2s02F?a}p6$*&Ozy2|d>wc;E(j&}a%F z5#1mQqo?aSp68ELGeCd$e=$%tJ>Rh?DG1lk_ zMq(W+mmT&eFyV27ht#xr4gEdz2d@<|X~a-Tl7vbdxo^&7t&$~+ z6*p%kzg=_2ij}Ba)XJ?h7tb8JbmnZ@#Fn#KwQjq1K?E99=un{R+R>vIPwCQl`jVC- z`VgwWsSou<#hUfuwPD1(ekG<$msYZ6&GtjaOzm2>$lRu7=62ZJW?k(PyE{ym-eI=- z+Oh=?D>%4p*GenTNV_&WUC`smh^eoq4tqW}8L|GD8qVFhK;5IU2!a znxXX3h9YooY^57|tm;Mj;4w~Smc@DQ=hr10rVvB7qI4i5WF1wwoGlxC% zzB^CG`i9lbK>2*C=AC!OTkjp9s(JQ2DytcBoAq{?$DCc#^T)r2gs~(NOD=JRlmrjC zM9N>R!_OaW=YgggrOeUMpB=3UqZG(bG7r<=6s1Qkd>1Lg7SlJ}y zkX9B+C6`swZMR=PD^W1Fou>UjGlx9EOtu2|!keJ;4hiIwh`?dEw$S`D!i);n>kg~nUpbgRb0 zcc9rtym-wOM;xHU5iVN;=aIR-^w5C>UUUnDXhdA{P0$hs8O#@tK7=v&7k}LI?HAYm zS%;c+;#tR^UeYtsMNB&BWFSOJ=|q!8iaEy|ad_&68k8}T#1>RgxgMg9N^*u9`?=9Y zB>hoNITTiU>BTO(!4sNMLuv8oMLduKrZD|1Z~lmf6sSjpZXE4yK@nS_I(5N3O>I(S zTg%lz*cPufDr{pT+Xu4-DYkTFZ7g&f+%^>_x~=Mh55&_ZUh<7^aPSv+{}`NXXtTKL zK%)f<8CY;KG&Mu7@lybooSAX!H?@uMHD!j-RFh00d;GFIFI zfW2@AH4KQea{O(93>4Gbo2pQ>gy z!?;i~b2CguWH^+5ER&fwyc-VNw2qgwBN51qn&5&+hr*Fh3n2)>{|xX61O_O;4gP3B z1X|Dn1w?>4(MTL~9tXwcM2CvG*%0T7L!H(ECt=(9+%%x^ymMf&TMwDWv)*H!cYLmQ z*4hmyy#*0-h@u<~EP7qdo>T}z5l*vfjKT^z{L)v(VoDl=f}vWx85O+rH7w&4 ziar|K7tHc9YNugmUh(w9dD4?M#Q+Wg2q1tKYybrVZGk@^{{et|ih%(|z>eb<%1|mM zt~wji=y|w!o`eC5A@vE*ZsKST)RoRA;xegv*hA53m=SX;wOxI7AqsZ+M_!_+mME0h zyM|!H6{8r1gY;zye;MKsktjnXuA`oFB()kap+-*%alLoohZLIVgvHE&2m-&RlaLtL zO6j4ERy4R3*Jy=Uu3-cbvw#c+n*sx&Tn$*w+&M=b$c7J9(L#3w$nHHAVB7PA-} zEiPH9zR}_qzc|KmGiNll*{3=A2{AwJaYa1C8dW$~<6~y70KJA=q7=?dVZ0Y~W-bxG01uY!{DrEcMcV zWbYtb;og9`!42CWsz1^(joj@b65TLI_2|(Hq?jWVq@b!6GHJ=Ha?cM&U^w`+#H6iF;kE@>zM}4L14Xo@35Bd~LFIS?ah_j}PUoyd#cDvp9KVnN z4W@zWH^aGcz4h&H7uQhUOlumx0ZzD(YdPJ}|La}O8`pcxaa{7mZlh>)NblnFj&hh> zUe(yfE=GYpQGACQHs{@XB4LO~EGR;k;FlTP5Q(M#LKxHdWIEh659y6!zv+X-hKkV$ zJgBG>rs%b=H8C9zS%n;;%C}cK1(|D*!ye4G$2FjxVQJfHRtn@9Q^Z6vtcal;M+il~ zOT($O9I8@>;x|#`7MHHYrBaC>%AVfMjJZ^;u<)+akXfYJ8HG!C?H|w z2BMf-zU>ZeX!V#&=%PS}s`CgS2-Z%}|DddwAdP;BK9v6uO)x_v`f!L6$uvLQH5v4J zag}ut(;q+Vx+%aOcC60AAk&CGdU%txgA=^?n6|Tr1jL7HXok5X38iU=Tfn;yONy50 zJAbePc=9&E%dEQS8Wx%h(}Re9Fq^_U6m*Kb%8QglF^tL6F=8;GsG&E*0KL`Vl+j~` z(&Ip>n5%YrgbmCS(t15Pn={49jl>z4CR&!~Fpl0*9Nox<-itli>kW+(kNOBX*+DLm z+7P5FyYj%I1ze~!-q{5_T92Q@E{MPeOXvgl>H{}8 z1b{IEJh%imD1-8gk`nQj9a#rw|1hhPU@1s&1B~InUNeY-_#%jahZ^~eI)M|95erl~ z6>dP4`>8uy!Ln-8yQJu$3uFV-+d->96mIGoTWAK&7#nV)JY5jMhuD)palvUyvbD&( zd2_)-(UigSltLMXU34Z_Gz-uw2WK3OE*qSBVkpQ-sAa)8Dx$({{FUKC900@|Ci)KP z8kUiYmzskJ*vUBbfFqz#3N-qh*+C=bORD-nDu$>jc$tTlKnHqIBbg(eVsHhdi-hvq zLo;ZCOE?5WD9C^r1zdoL9r*@bShfdzh#9Yr=SNB|BH&G0m4_ztjg*u$jhw7>Pco~w`ICK$wCx(3nv)lpt@+R zV;qgiz?4N<##fX^vWN#C%*i$pLN7yvWVy!3NvPOEsB2*yDm2T{X^3+WmXw;E>H3bN zDj)P%$JptjckCTbJHy$D2h1slON^Jjga|6xhMK6I|HwY7tA@S|Bb7>rU67DI{6kmh zLshs0hrEP*xr0JbjfWryMr;RJ_y#JA2QVy#?eWO4!-RsE4wfr1lGL}a0L4@J6tS4A zx&kJ8XosrQNv%*jPZ^X>(ZzFv%>rx&T|hyh=*39+MIDor9&1iw&^%Tt$vUCV0(45z zn2gvwmCY19-OP$d|3HmW3>??v%G&tKV!6GuR8QV`!tQ{U>sU)Me2DrwM{`KNa%{QZ z`?$1RDfsBLc}&B-WJ73(qra3n0}%)PNQZ`?7g2x&VW2?rQLj$3PaKg1GgkaQj*ZoCw67MbjPhPONZ=+#I+I+RAF|O654uI5SIbIm;*lmhG@2X~{DJ5tiey ziR44WKLfOn|3jnb6BqcPKIluMs*nk9S;I%;Gy-9lco_wm5r#;B7jwvuGKxN+Fo!=n z1X4HzGq?m*z|aQK&@wQDQ5pqxxCV>t%yvMgSfK{%I|mnq(T~K0Mwk+rsRkUy(QfF5 zF?BFvXfSibnRsx93A{~c3Tv#6PMm8AM<(CMcoOTTRt_!oNTLxNYIaMsFw0!It*EltlWm*VMsHu1YvM5 zS7?P-|8;`~sf1SeDs7MjXTZ&e;2~$Iig$>H?Rn8(y(*%`s*LG`QYZysC|7`!H~ zQ9-pZwt6L7oy1q70MFd)TdbJVT^SJyiE42o)znTN9+bb%5BL6^47$#jr9VYmcXRfU~mkWn)= z2f0~E@B`nKg>G2Ic4&uK35s*b22)5)qy5#?OwCe&1SI%{Qjn5q3sMTKN&C|_Ht+`` z{|E&jK$^WR+hJfEq{LFT%>}o8+jVVM4T8?W;1f$x6tB@+@#Vn46^h(6ibQA!e=RM9 zTSA5k*a5z?h>AjM@zb=-4)cg8hgFa4(9id%$M3_~F@&S?7^6$Y$3+Fq-YJiSA*pKd zqiWcZJ*tlY%1DKY3OyPTQ!B_;-KhlOsaEiXO7H_pFp`UCyI$a->Jf^0$OacJTIT&a zO-KMt2!Vi-fDix%=bfu{kjXGfifRQ4YIp>H2m}m_PWx4w>_p1A7zXrJ-}R-1xOHE; z#i03BluPN0`sLzp!{49?1iDHMA2PV|lsy3^;IoVFf>I25HUOc#s}(#u+a$YA-RXqeg0Yz`;Jbk*9|0s0N21yAfuf=3I~l zsfKD4Q)+r32d#c;ct}#Crb&8WQl!8WvsTk^9_Of0y>;-Ltke=*S?BU>=W8V3#zh?C z_+$9csNl$FJG19B{OjUk%aw|kn|Kd6TDk48zKXS-@}XqpqK1SywD6EiteA(AaftP( zm0h?6dNG-7YaPs~k58%(2tj2xa1cYdgHagiGWgv}cpqY5pF}`~QK$s;8ifFonZZQt zT+Rky0EYeZwPMie2*3jgh=33{W<`3|1d8IO&{`iR>O9db$I$M+|KRTJ=99Mol&-NG zElJMA;0A7n2ypO=y>JYVVQYVo2EPDT%BYjPzzff~x3J)g&j1aoj2c!z4RRKW)~IWM z-3`bwOT9KrVIjGX>*EFHvyua)%wcfzsOOmIPmI+f=xc0fNyB<%q(<(Y;L;+bq6U#O zi|FZKdMF2P=><{n;j7%T(KKy;n2v`?2W&tGSEz(oH3V2~g-Vd^N-*h4AaY5dgqs~6 z*hVi0fo)P~1qhwE!8`~4*oGjs4HGGbAQpt;HVEjpm0kksR2&nkg$N=@1b^TGDM<4d z2;b`tw#I@i$~(%#8ymTpi?k5$XUeg7LvPLm%51hs`0bOl{|&N3UyKb3J+(vhW}xEJ zvogMkhj)@wO&Y=j$Ll>NmObkt%Y|Tqm2d@~u9?{ld#2Pvv(H6sY=?y-dMs2%4Udi5 zkPn9F)hGuN&Z(rD2LOuka#$+Rt&fL*1`HvPc|Zqrz=dRYgF7JdGAIL7F!ENo2uY{} zN-%_0zy$}(-3Ej0R^aXQk`hv2T2&zT5^>r9Ye1C0QYZ$dWm+%~b0`*4DZa{~5CbaM z1R%K9O~8RShjWO~tfSN#v~jntS;fHWb7|0p{&f_)<)*Ho%o9IGE-B_4=v=Cox zh)~PpXr1$6Xj_Q~&h{3#eu!C9J@tTVN~Kr}(FAQ_!vLX&^3rV~4+BZC?FK_~jF{zY zcd!PN*_r+NnH77Ph4Qj*g|Z)o1tA6WO6KYInd}vcK#&3=2n05u0w6d8bQb4+SClVS z3-Csi@g{f;(uF_w2eFA?B@2r!28Z&cc*V#jMYln=Q6a>58~;|CD}(EPy&Jj?c?D^Q;?Z>fe`Kx}ka2W>C}Dv$)6tpwZt-K_8W?El~P?AP|;@&4iQ_ED(K>2{cQ z*jk}L)?O$FU9!M^pOHLYPUQ?C@Ro~=CyVk{jKX*Lzdx*oPk4Y}CU79Zf&!&AYvyku z!-ftY>XRm|;6!5G9%9U>aU;WW96vtX^le?aTOdz5{556{ot7?J&OtP7=Co)wZ_=cB zGg{7`Iivmh1uZBvXw`C>JNNF~xoOpe7ByP!=(MEs7S20oPMkP%NtK$T$@CrBd1l{j zRmyOlxT4dzPK#;|CEbSex>bvJ)nB}B>lp45MU7#+YUbXFd*@HFzjL9cVZBuiE4{s_ z%AlgBu3NWOiTp^SbO%+d(yd&XPOW-%X;-LCkN+A~m*YBC@#xWur+arieYu@^oGpAf zafbSa4MT>^AT#97pF@vsOB-=`#G)g&1#cs`fBoeH6 ztvK=E^c&tPM{@9ejK9pV^pZ<4`Bb2RKLHh#g1kOPjSlTsQVGw@9$ zX{4JXDrq}`(&MP8fbuDksirn_kw*F?YG*t3$>~oyezo&Rkg@usQh)-|L10Zh{koH| zHU$e5ur&qcQ-nG#2n|qFO~Vw2S%p=VSJyu1)wE&H?%bvrLLy0Xv zrxLW#G#@m~&qpI|3&`efTFQ&(RTM%g(~tH)A6D>Bsbcy9(&*P72PnAcF-S zdth8$QlvVGXh+=?zIAT;e%2BR$?4lRg zV2FgE5jo2#$sbKwlvX ziZ(c{bFc_pfIEte0Et4xy|5aLGRG()L5i7Bb zk#K`ABLRs=6ao^r2>(SiNih{+CLO42P=jl7!s=WRn-uWm9q-G9e09FhUlrU}rdkPyCE%UH)kh$J+6aAkhan za)FHJoX5c;9&tikrrd?Nhs3FBT7pHaGg!%K6I@g6eLBi3+KzOSzV)vIdE3cqZScq9 z0vCp0WdDwGo%kWc-O5ykG8D5V$jJ@ruP}UiRcz{OCYZSDFQ&Lu@FKOT#n{F+N`VLT zTD26~wQn?o`U^ZTlN8Gks$df0Pjsa& z4vmK+z;(2P5wJCrY(1(#k%n}~4%9JkvoQ^0pVX7p@@A7AbQmNnms?DR?lz;Mpr|BB zSPUvgm($ABrY@*#+SONovkKnuHe$@h0Pi8x>(f4zfeny|);0p;Ol#I#6inoyDDG=# zeg7Achi2PFtn@Qr-q`NQ50Au?uW$!yNhUg6RDLNnc26OhFL=TAQybRL=>I=D zk4ai>i=d#ZEgQ)83A2xGH@?X)Z(A8Wwb|BmXASH5$+C9Vg(CEG2z3`-PDeVlB_zY7 z18(7;$2N-i3t=qN4Sm=}Iv8S(O4z*`-Pi?QV#tb0FfrA==mj-6)531d3TJQzHSE=W zq|3qWM#53U=`aKp1j!~;o)p{)=FOhd*poed9$oZ9^3Y8A1VhO65z#Ee>M;#CAcLjF z-t5tyoUnrJg#rcESkBFsOw^XJ0H3f0j&U`gRA|V(;7Z=0QqehC);(EV{ED+6Vbn$6 z4qh9KWXlGX#k5EvhnT~Kl!Ll7S3{UX;BDcNt;L3z11S`O9oRu3i~^77mH#XO3>V@C zy6hj!=mIOeOfTpH9qyl@1yC>06`{pL;XFh)NP!ek0~JU?@Tg!$q!?qpUP1v@26h}V zh+09I&j%V*2+~Y?Y=^m28m6F%>>Xl%$lPp%0@o~Df9T!}@|=zVpVd_#P$6AXB-e19 zMRQeQvqe|6LEjQW(AhM|Ew&<5v`trh1qb;c3RU41t_8H!;!!}GKcs`$K>`_W!v3)W z5P2az1Rm~a#yZrAHgLwOv6?usLgOJEIu+n2(#3T^M_^TtdRzy`orLzZV{{;cK~Z8Z zklbGZlr7+%$xzMvpd%<|(MYsIBETSh*jU*78rs+(g|y->LW?jSS^qKC1&2r*T#Sp; z{bB?m;ndk6u+$(=BuKMFMMQoDEJ~sL2+&j%Q0Ul2PRUYk?8Uv%!!FoYB~(HoBtjto zQS9IaHatx0cw;x4GTy5qVx3xgiugQX5P1KkzM@d7EZ;rn8WIni#b5dD9~3W$PhLV zWigqiY2INkjDjfCj-V-JZ|FwvWJF1L1S?RbQ#vI)qyjDQX8&)}LMl*#&1i)9NY*f< z!mFH^G?d37G3PMof^$NrE_jb~>O!lF1(Pxwyp--g9wBV*gpao1$q-HY36J61CkwU*kLQrkPQ3yl7 z-9a=lkuX3ggbLhsG22cd(al zqGv@!8fBJcy~iLmn1VUt?Ahf>$e0%4VQfW`uchKHB4%Q4qdgLN8^3<_yn$fsiNM0^U1s8=d&I&b%g6D+7 zz6C}Rd8@w337YI7f$2s%Jp?@*K}IFQE&#!;^kbnW89D4GqS68-EUH7Ws6n}CrKS(2 zHpiyIT&I3S3*p*!;>sxs>A0XOswU=0RbMYQUH|n-srAVeu8zgB3dgkQhFAP*unwy? zwGgtJLp+dDES}grtSOV&%_%LTVVFe~;)Q;g13irFI>_HH+=3|NY!IDh#%xjUl%s}f zL?{G8ez3uh!mA3(E4>CyDK12#wrDCGr2JSaAK?>j3M@y^oL_hispcgv6^qY_q}T%6 z!lEj4ovDF*NGJK_a#aw=9;>i^>{J-5W=0{jqRMK~61kAnezE=UxI=?b>eK2uQ8<)I|XuB=+WrKO73BYzjHF!ynxWqS1*|-pXE7248IN zMvw)H>4Q3ugE{~TIi#;t(h07?TJ|o)1U7{CJ_P0oFiJGiexO7F`$H*sZP*CHkdoBw zN^pVbF79?x$?9ze17^u`a0h#EDOGC-!>#TftFf9e3F|Jfo-hita0~0M2y<+cC5dTz zs}Y@MG2y}u6C9vHZe5up@d9xm1+fA*R1n`sMrjc%^lwNIf$^L~DFDbENbwX)@llay zk&+~mYO#Y%u-Xu-3xjbB!!Qg-$o~fmuLfhR<#LGGdBqh)3=ZEgfCM#khY{nk zVd3Ty=kXB_&})H&7|_G;{4YoRf*@!@B5Oh;K*Azx0wgp-lU3*>Q*zp-ZBAJ7aX|~% z{!JJcYYC(9RybD}i!uq9@+o&kDvxp~18=o@^0AI_EX(pN%d$Dq;w@_?B|}5w4u@Qg zYdQ8I5%=*h6LT?d!~wU^Nr=HCRGusv^D{%U3XT&wO75Fb?rgAu6Jx|E&ZZb>vqOL= zFNZ?oKAdWm0~@GTAc(;=Geju7Q${>O$!xQ%hymt}Vo6{`@PtA=I|M%jPdpE>A&@Gv$ReTbl%JFT^`h9!9*=I^DKEu)$aZfjkMf7$B`3XmxUf z^zcZxLzKfK+(IBebR&s@8978C>@z$)1RMM|<|X$!tTaQ=!_oSK9kjNd+8!XsN<1`D zX4`i(m%}DhF9q&sHzZ|D=Y}6*4G{o$J2!4_A2&@)!FxBvBP6&#*z|)(I6NPFGR_xH0A|DJg~t#Hv~N-fJ8yzF9|33|ff$H18xR2z%=Dg9I@46%TL)ryKf)P2!V$269c%&- zoIxO{vt&EESgXpO(lNli2`^XrtHU}dzCcF|P$D3woRBvVNWng1xD@mPc(XxM+j*=L z`w1=cr#CetPyt@sK^LsU8Bjr^CjzvicJExX82q$<^C?Lbd$)W0Y=F2F%=$u9_M~e> zIRt`@1Wz}FLc81!=X`s-%g=QWMlU!+J8Xi6j)Xq6gEM?8H8ABPxCx_lLn6#TGe0gh zcMR{4w*S04ytl8@kNbn^5YWS0yu7o*5l8{{tV131p`l-V$alMpwZprJ{K?0AIgI0L z?hZbq{L2%2yYGk7!hFqNb~*Hd!UsuixR&Ddlj(9|H41FPcg!cZ$t^7s11WD32 zJu_9-0MBu z&qZ+1{WpXHQ?^4pPy-`Ke%M=mE^#)sBuO=YWfq9zW@ys zP{IBRL{P#53xp6r0QXC9Kmju(ki!5gH1NL(BlHhJ{|p4N!vi7QkiZaGH1Wa)O{`GG z8TC`~KNP8XF-H!2jBr39`D^e*4k4rw$Ra1Kals5FOfkkKTa?hk8*4m~LjNBle3483 zZlRExZ>T9}uy)|P?;FD&BoRvoOGHveCJ%hkz&oLQa85ZBbnr$7t&Flt2Sudw$PG6{ zaZnQJ^iNL~8NF~s1%u_vQiD9Trti`56qI&3U_Q#%2E@ZGE^2p)Uz8P9Zc{| z{S3n|p7!*SFFt?Vd#|0s$_cicZ(jYz*kO@P_SI#XCAQgOnO)XdWuL89T5Fpn*4SyI zy%yVNwe7Z8ZlPti9A}RuH`;Q<{Z`sFkwrJ!W2@!XUSio5SKV^E$+uj2^&R)sbB7HV z-hu-*xZGfaU1uF#2MhM#cDoI?-F^3^SmS^~)7_+S-YW%@=F4>7_X7e9hK4?x&CTxbC0@R{GqT%ZYDiU*iGx zS*Dv#*KTCb-PTyRyJa`=w+r4jae|>WTJpOiSDahNgEm;($JdpbaIL>tC*8$|PW{-b zwM{zay%A=ba<$h)xAmi)Rr}huM~B^8&Xtz8aH+i|e%Y@F_FP!LYqt4jUU$}qm6hUQ zrI&RQi6^0M9--%vZ_=R?o}0Z0uRt|KDiJ6|t?$UrH25GCSkM@h;7#UXMLg7g66{y50Pa`u|`&iuX@*$-w?$IzEGHulK;~W5jBauFJ5ndmjBG5{R)`Kh73}K|AQqH1JlYG zdXSATq@)usnFv@S@{74-U?b~C6I}kVmW%-3As1*p^8pZ<<5On#8e%>XdN6z-B#Jf> zq`pjU(VJyNp9<|K!2HF}l-#o=W7-jja)g2vl%NGQ z=s^*hP=zj(p$&EDLm?VbiB6QF6{V;?W=0Qx#6w~S{9CXr8d8ytl%yp!=}A$VQia}! zVeTmmBtxMyf8LBf{-8!oRhmsxht3miz{1-IZ; zK!+NSTd?5;fp|ee{;58C3}&DJh3jDvn^?t;00E6{Yzwv#P&V)Y2s0okutEU@DG-4O z1*{$`&U&+==ByWX%^5WmK!r0XG!!97YA6EXk29Edph-RL5o{_2DbSV(>|$s)#Ndx| z;9v$gJ?%k>KwK#Vbh*MMf?}Z?-G>Guw$#7@5qJ>XjcV@&KuBsJc)$bv4CYq;3n&mK zV24B~w6Zxn!wa5^SHm9k41r(+UZ0w?BRpcgwe<%PY%5&>4_Kt8KtKaVpbEw!zz6{) zLQyA6gc+FjR#KQNe55b~G4zZ*^bu{&=>O4;(fWfGA&3V90y=~HCISd-h{q9vJAu^# z0R{fR02`?Bf}#>35RV|hBXSmx0{DXmD46XdfKU$I{x}pouq_dSYX=~#_Y5J}fIsXY z0U}I5p45=S0hY@HyHeo@T)o8xHqZ+;JQo8kzzT|wa9;w?S-Ovitw5U#pE&!2u0Y1Y zC_xCH0Q=(wXAlDka>j}mJe3GQu%4K2p@5uC0KGu41D0DL=|nu28bAQDKN9hR8$W~x zyO==)Zb1cAZ@J8g=*IL8K!hW#V-uET#S!95XI<}lpr&X5f>mLJ#x_{LBlgEYf?SS8 zuLB1>_~#7hffAkZ)2!~HMp_e1g8z6-AZH=K!3Ly&fl4dj1%$ru85Gb022f!GL_h%$ z6u^T}Fd)D!AVQj7AO#7K;1MB^!UTE|fel=m8kwfT1ZE)a5X=D4kC;FUcpzbWW8e`a zzyJo0aDW!r76{LM0RwnI0w7?32oRS51LVwWl~>iyc$LDPIob^z1md|fcmxlG+l`0C z!x;kAFkd$+0U(GR1ubX+3MN1W8+RK88`uN}#L#XMY$5^}D6*FQ5%42y00<$Uz?xfd zh64nG1oy^43#NYE4Fm!O_vS$hUVwC^ubl1!_H_dgForSUo!ERHF)MnTv$V27w;|bV zY=>1=`J9zN0SyHTPHa~$qyOLq8+Zf;5~1#L%wV-d2!TH~FoO+;>!q(X5UH0$~H}ZQw|N z6)2D2F!1JZZu>;=uu3z0v^HW*8c(O{9(=f!O`@sAt=uuT0jhDAiuzk$P%H*ZZ5|*iv(7z=q4*3 zaDW<`4hXVt1N_Y&9&QO8Ed+>Q7mltMaz+YVjPk_b-d;fF%Ax3tZ3OwSqyj+-ib@Iy z!2c`@J`#cR5F`}ns!SeR@K>#*t z18yPY)J){sZvy~O3~o;f)`0|$0JnI6?a~bSP@os6pxLNl%WgpmC~>v=a2Th`z53QF`WD`!H%6d5WWLNKKa zPzQ;z9os4%bpHz&F(3p4Af`A75Wo~1PuBhr10vuP#X%edQpMN+2iO2Vf~96YELXlkqZW!C5o-?}vL&gi z9KQy8imQa{7XHR9|A{XNvoH}V6hu-b4RbO1vK?4~XWTN{Xp1o^Q!g9l zhbl8O=l}8>*yBBDDhD+)G|N($yh=1pGbq1-e%kVRb|y?t^EIQY23f{ru1%mW6OUjs zH`~!nR@1EBqfB%&ICH8ObU_zTK^Ly!IFGY9jgvWO;i9^E^k2ICY^FP{9v~^BTzE8hU{oy5SnGp%rvN8<4XV$blSe z!4LHF8jw>zof9Rqu5=6oJr$JB;-MEv@-roKK_xVz)Ds;1Kmz2G5srWru7L^?;Rqx^ z7cSx&5`ht@fDtZK7IYyIdci~mlsOHwOwiPO#@0jwZRW203OHz1*WtNNB{+Hj~>VYNl~B+P=MTUj}h(^P`R`?4YVCf zryXdNO&PVP@S{C?rVEY$se z0d4>VP~ZR#pbI8o0)C)Sb-_Rrp>*;CQ+ZXT$h1AOP72OI3N`_H;sH2&)kf8`6ZNcWT6-MfDx|2M4j_i18P_t#ycyjAI5uR$AHp%=74KI;=XgS0pg_B{nOK%6r>1L_v= zgVqexqVVAcoInYj;0A8M9{e>-d9JDO^$hgYSQYbQ!E+sovlm#lWnK1VVK!!6_7-@O zJJoWe^Z_5fU<$}U4W_^eJQihbR6Orh7rOu$p(jFxc4;39Q5|McEh=YumJD{*3Gjhw zYm_%N%4m_cJTDb%!FHfXlUQ(8XUTwSe>P~t_B@fPXsO_6aq2ys;bhl#ZH*-_MM`SV zwra1oZrQdo@fB{97B2m^aPiVH<+Y-6_6xoMZGpCMztb`QCUCpuHgsWA=iF9s-J>0N@*6RL0UYhvtm4yj zH=uZ60<;UE)*;>)AR$Ps=!`0+sDTaAY8@h=(+Hpif(W!CKKxKnm>O;;3N4N|~VOK@-=G1geY#!cGDrV3r4t#EfqO z+QA>X;Nk*7<2FG7o{J3>p!t^h1#kcer~s6=t$*3evQXd%1plrDIxdAJ00&;+@rdB$ z;P42#3kbv@88)>xa7(s6kd>g^jnEjt4zi01LV(gV*rwp{xuCY7Sa}l|@C8t<#dMDc zsKD(=tdtu%_9zPlZUG2hK+9eL2n{M8h_Ljux)&aB2LA7>SuyJ-;F!}&o+E$}5^fVV zpy#Ln1A5_;G2oaXF1Z4GjL8?FfZ+2cpyX^?o+n@({{OE9*r4fNpaqI`ffeAz3XKHb zjtWp<7ZR|>{6PYe3I*5zpC4f%rQi`>AooyU9wvZpXP}cyt{{o)uvszReDLi+3$-Ne zx}5s$>|g_wEQL3!q=AeGwE7H2j;~hB0DHmrZkzrv+vx6V?Hxnv5Cb;hPFW%0loHi!ta^$M3^$ujrGT72 zub^xj&GLJfHz5Sf8V4wC(gNYB-;M+}AQ6yG(aMdJ{XxZ=PYQa0l#c)fu8je9+Mw0} zrR8noAa0*A^73-;0wFJFHh|ltV0JN}+0NkY?*9$77n0C|YXjsjx$mvriYt)~svIzq z2xMCyd4LTPZURs*vV*zYtl0Qw_w{&S214zjS=z?l3*m6U%Isja?Ev_S@V|5`0%l;_ za*ulbf!-bpiwdK$BdVtz7pTiyG#j*Lh`LxY`4-mqpdi@Z0!lIaYoSIfvV+VY=3%rR zafR{f(nrkA5bDw6tEh4%(#a9XMr+iy^HLuX&+3~l+j;^9ZN=G9tQK7uFMXqEJ!gOb zw>G`WCBWEL{M3u;5lv#dYQ5Gk^-^UUqRQlHSKOhb)~BuZ&rP$C)0@x-3!Mqdw$_TI z^gO4wozCbsy1t#)GU;aJ*V+9X+B1`q2md{3Qy1Mo)@gNGyq!Ig-MumeW7+No!NEP-1)sS)!k?>dA$dIUXz`Q9C_Xoo-(---|NFQAD&n7d>wEzr1-pQ&%NUJ zvOy=;;P(|Y@ycOL{^U^}Somh;87Adj{^eml=4F27X};!d{^oH$=XHMPdA{d!p5<9y zpujuaAFA0Q+2ae7Xe+r3)LUtho=r{XVd7Wg1HR9no-jF6;w^XIuO2<+sWhp6ynmM7 zyS^+7-jYXNul~L4!Sj7FzHG5T;B`|UxFHW};T3A37FGdlOGoR~p6$aFF$+U1!`|V8 zvle_n2^8N4xBzR(2U6EvXY?KLfB#fs!9Jk^EUA1lpmH|utzI|#;T5hx4SLoI@&Ic= zUhAEHpeP=quGgZRlC}bYqfBd!;86;QKBVj^XR`0Cn=z)|L5HM347gsg&Vdbn!5_{+ z5d483@L&YrK?`<4qQElV6Y39>iVeho6~w@LN6hHSJ2&;=6_Vg{mEaG+7Jrxi;D_p< zlu|5@)u!sww0PjqiTHad>II50si;5!Yyuz@`19AIMWPp>Pz+qiu%W|;5D8-N$AdvR zf8|;{LJ{wUKNO*;@YwjUT)c=VQ>t9a@Ldi>IilsT;IBxCb1ZY}+^Ler8ye3Zc1y{q zT)T1?RRXa?%^w@5<)l1fsQ(Y&moH?#OmSk5r&ow4zlt6Eu-~gISid;=L$cb{thy#D~3KSZb&LIhJ$@xl?gEi}|4O%=G`PH&{}&IrfR@Qyz*4S63w z{%BD|Ll@~|+l&qsbrhBnQNu<#1YXz;J)sOWo>k^?<>Z?C>0?$BWMs7#n{?JWRylO} zm)Bkc(KFyWf>A*a4%9G`8AXMK0wEF39MKdH5cbkxTk$~1gA^C>un8N1%z(iyM6f{^ z3Vhuc!ayw$2K&@|Kz5i>js?S|EDD^^ukWwljTDEADJn`fmpr_V&^M-Mga zoXe+QM@1A$U=ZbMAP)n{Tr{|>tb6s=y|wc%L`ALh4WMsTtFsf=a@}*c^Xbf%+Hkjp zCp~`MwP%2Ju|g|P_G#;4+<*rzxL8NE)6OF{e}!|JJP(d7&}hl|w&RqeWR%i)514r6 zoOkZIPKijXwO3|qh4$xkvi&XUop+Pxb^k5xCxNWjZoBQ>(7bnBi=W*NuYEfXxzLl} zK6p1t!~cGFy7b^`{PWNY&I-+;Y|b}6<(-{&^u4L>Hur$HbBnpkqdRUqLV~aU^YFnJ z?k3WvKUVLi|K7bm_T=A=J^g%@|Nr(w34H#iKjaKga_dvuI#@wIyP?Z3&D&c%*0GLw zSkQvgL5c<|c)<=D?t>rBT8DKumV65Ejo>+Pg;=Sj{go0%wq5&(he?E@d-D8 z8cOi-MJjHwZ1HKER*ILvqFt_hvTKLO+DOMb?k99&li$tofrT^$FfRS5MG~g4g()Oq z690N|f)k#w$ge%bO=?gA8Ky9W8+;=rRk^|xCOL&CoY5@@R0|vJC@$C41&(;5M=wT4 z%2v9PCt{;uD5!-!YZO1R1wurLWiD1nldT!lm0mqmOyp^v8H1}67`Ow%=vT4`L} zE5-Fj2lDBBtDL4bx0#bojBOpeBTH5K=sV;D5-nT!!W9-l2rOhp4NedyRche`F2o^` zpNNAyO?OGExXDde+(+b0_etKFWuQajrm@Nqic?xMbKP*FLMQslTS#k;;;g0iZkfwC zt&zsGs z0d?nKgLAxs#|_akd#2kSM6SUFIe3-}dC1381sSKRvh%81`GjXb`-iTk<*O|fsS}iG z(thZnnOIQk7S8rePy!83ZYwBU)6)&>%oRQnj2bKabSpjP=N1!~!9Ya98zMwtARCAo zLKK26BJh9*f#_61N+MBgNvQ~0h{kVnz@$@s&L=b|7DJAf5;;x;TtNwHn1olsdNwikr5<`1Xl}o-+x-r+FXK@OKIEW> z)qbL@I8Eqqhg8kjrIH$CGY|@9K!SCMVFD1U)4kXg0>aqABL0Yg7)Z2<9`OoB;03}X zVAPP^Tn#60m=crT0Sw?Mi*vv6#~Tt$rRYQikL&2gWo;=yc9iD}@O;7_hp7+Jdi1mj z_JkUAiG?^w__Y+iiW1P%H#cRtv}xsVR193%{RL?Un{hGg4m78aNVKYn$N zbF3@`ljYnyQVTD7TzTTjxpq_v?CS=T+eO?L_Bc=lH4kS}FEv!rv(ctnxMD{sN z&_MGGi3bs0!0?AWVnbu2WzIYtk$yZ|Xwe?5=3VnPf&mU_`6y2NI6wUe z7faMcOof6fNEIxo7A`mt#*_qKr(pM1hShkAY4}y2xP#L;in=9)*>;L|m|&`iRZG|q z%p{TFxNqdB6NN~3a-=OC*lUQbzD3VUVh5}ex5P6jn*@+Yx zjcynxqR5OoXo^{ZiXO?BSr>Lbz>rGd1KehP`j&lnX*vBtg#ywGO8J?lnI7=d4qM1n zm=%90@r61wj3$LW21b?3D2LcqhrG9jTgjMRxnWDp%0;uH3fn*ZkK|TC^UM|hk;pI0@#E37m-e= zo1Unc7s-rV=bY-)ks|exK8Rpfk$_(rVIh@HCV8FOGCtFpHz8=C3_2ECD3B>Z4LEQT zx)NTdK^53jo|^R#u&EV#@J!_4PXBSzp0^2~{U@AiNS|DZk#m@wvAAv7XpLQ&Ru#Dg z0_v9Uc%3PEi+*BP4f>;G5jsavnhQY$QXpne@f2bp1|CD6<+L74LKWjMP+QTBeNk^c zNTQjDn~aH~iP@X|_nSdjiufs+`$?DuD1$VrgEm@+1nQaE@(_@i67Jzdb{ePpfv0OS z7Y@av%_C-4<7ECIdK5x%13?X}unt5(1c`VbQlJ^-u&9mtF~3j*#h_T|1to|DSw(Pj zI+2%$Q(n|CWYq8oj?xXRAQiLuioiHv<4|;Ju@Clu544I8^(LZZprwULivDMZylIgu zYM(;roG_Y-GODI>#-=y=oc};N5EKM(%X2=|usNj~8@z#df3qKtFahG1WRE}v*X0iz zfCG;}C>+sUK(G{czyq9NGt*i$=RgCqpd>l)2FDQ`TA+TF!w>K!UkkwxxORHTrW4l@ zV=$#(%yyo~mq=T&6i@B>~+N(IIqQ1$Z_Zg063V~=kqshvcZTY6nszjK^qkr-c zsWAg=AOkO(+%5ZR&{^Z;Jq#bgX2s6O)!P?7`Z zkOK9}4;)}+o)c`KHxSSfp`!DPuK6<^T4#DNm6XIwznZHN`<{l`rSb_|78|A*JFG9d zu}65UMEJ4&ho5gZvj2VJ40GqF>evvSRy8eP8;~-oZV?DHOARfs2@)p-skUkp(*kpf z97q-jkm0zr<_|zpY(z-E0t6s`&Y1^1wN~RjCpBxKl9$TX!3x#$&E_j=u@sNvq^>?=r3L9VtqHqN6 z$;Oj&*Cd z+$Wme2N6J!D*v~TF)$+vZ1TK?014Fa0#t*-kPry*PzWjf0vD1k98+vBpt24T!aP8v zyy9|2(7v80GBqb`-~TT{%D2dt}PONwBb zqFgMd)|k6tJeK^Kre&Kn&Ds)ejTOHS-mQ4G6#9GP2e#R&|^ zxm%GA9IOy5oM0@*i9Eb)dd9|kygMq%s#M9A%%Bz}OLp9adF;uD49a~xwzoT`fsD3; zjK#&=OaH9gu@=n8ftbd%=z-gL%a$Ap@uSIo*~uFD%LbgK!i>zNyt{ z${^dwar_PE_&{~X!|hYi7G2TGcF`KW(Hz~;9{tfE9nvB_(j;xsKhr*a5mgtR(k0!} zF747hk(AiX$y%#zu}j6F4A2r=$P8@C(um4lT+Ygj$jrRRUCPd}JhG77ea$0AJqbfY zNt8u7)l^;8R=tx?jny(~ls=i0QGG#IjY402K@5?X>+p#G%gg)h%Qzj(SA5U|EzaP~ z!2iFT6|LON4gJh%++vbEAUsUZK-!C8rh3_2(`?Ph-u%|ROR@8L%m@9&<~*6`9GU72 z%LU3SS7t{H70D9a4(|%s^PJ1;V9SrhlpDH&{Cv}h&7R+U(2Q-&z-rLFo6Ow&wv(++ z>P)wee4RfP(XvAi@(kK>+zn$B4@^8i2y33NyUlH#*rPnL;q2I{tedMW*$a)=CyLaU zZ6}#+M@Z9sD=FO6Tv-O2QTcq@2ASHQ+|8`5*e3eg4gAxxEzpJ>jTC&{Mm@I?%Z5PKyB#f1@=0R)cWIGSLo{_qQl^$tbwSf4Y$ zknj~@Gul|I&yOU)stwG}9ncC4-vlk+Y75u(?U8Vs&KDerISQQ{Om}`=6024Yr&kVk z@Yk!c3Eavqrx6HLzyR1qt{ro(=>Y^2(Bfji22|q@p>PWr;Bfx%DhJ0I4{-*i*E8`O z6FHCqOfm~aFyx*iug#Ie4I>!e1gQB{;00+?EQsK%Ey_-gyFD$}k1f=-eb@QD&KSPk zb+X}f^xcNo!45I13=jxMun8D&1aiJ6GrJI+(G52{6gv9|+La$W>~J_d5dXIzT`e#H zvm_F1U}ROZsNfqeQK}>=QxhxWuavWLO!5l`LIgnIWhlGEk2_$dJ#^~r&pGYK!_45h z8|4o^&he?mrGDj-#&(TkSFmo)uI zQ+n7;uHc_e%+Vd&Q$F29IN`yI-&p?2+P&M>x!FvOS18K>O+k7j&6??N>o#~v-v4G3`yAVLo+f+`;o3Xl5dSaK4VTkcK(ia>S0!nFTO@(xO3 zBvJM`MUVoW8>fgjs1dQe6?D($4ZuJ1sy5Hwp1#w$sm1XA!1PVm_FdFNpV#?*ydAER zxhU)-5uPZ(cXiSWxA5`hFnM}j4kJPjn?MabfCDkR8ZJx`R8ugQ>lA}32KPd)4`H-N zn*&m^BqCE~Q@ia&F#Ij!GA^$h*DUj_SNJx)-v7+*bFIY=?)VW->XBdJm0k2{Y)T%O zO%Y17iU{}CDN))1Vgb5WcWVlctJ}h6ze3{~;T|Df7$9kz}?If+>@x&5t={mJI20QqYz}b$+?xsi)95o?>qK z;^YrTuwliHC0o|)S+r>vu45IC9zB1(sC1#S$)7%Y@w%zy+t=@3z<~u1CS2I?S%K@y zl^gtUibRS|@QKwJapcFQBu%nZ$ zi#fXN@+YsoAk=U}4mWTuZy2>}LWD4#>CbgsHk+x^?xKKtBLPdV@O)60dzLnxks*4f0+zaCm` zA~l@YryqOl!Ka-s6GE>e%-DmGjLt@j&!`#`ys^My)HSoe8IO4ljDBVeHU&l2vwDW}9{PS!kn`c3S^xtF`u8Y_rvNTV~tw_FHhn zZD(0<$^DjFbfs135fQNz>y}3l5+@LUjEzSeO-qEVt52M8;t7EBU}zi`JALsgP-PsI zKbuVb5w#%mTb0ySle7<3n~0qCK%ssUiJ}IZ6q&km3<|b63+ZWxnqEhC`DK`6F3TAa zsUhnTHbU{|j6`sjg5G=|h13%)u6WD`fiv2OQx`QuI8^vv>(OD_u3AlE9&5zHRRDvG zRpY5>MbK7UL*{T-nTw037q_HDxk`GXOM7m*>lV42L?3CnAv+La!=JyY02(33I=Vuo zpeU*$Q-la++BQ^U^lV|+8mdxM?3lgaV7I$d{gxx{}k$$D4+WB$gkF%)u6Vv zn5x>m90c*2C- zPBAvi5JWnKU3Q5z{(wfIW_e}1As-hl@tf#69W{-nFa?1BKIJWUINLMI4%Qw~+ zLc74uSYb(oLdp>@2*ra4ti$4y%E1F5?1KM8Kp=uYpg{v5#IJ7A(1Jg-Py{v<;~iRf zNByD!1W54Z8;R-#iA)qD;Lwn83cTULaww`DjxB;Ynh0xvm`IOwj);w%M8?1;y6pvr zaZIEeHGt)|*I7x82?+%oTHud$h@oC6NCXSDBZUZ1!wv^PNC;XWymFx6eA5Af6o?=O zHt?VvA!ykYU&fCjSl}Gdh(-$D@P-hagMR#=!7OO-i-wGHA-%}kF3VE9%eZPaGjxaz zTjab3>JWSMiJ;XSNkK>^C2ZYG+}AEyt0d;iLuljVSmJSuwzV&cc{vtC9)SWN=&}Vw zm;p5~Km`&MG&@pYMJOa7oe4jcv|;2A;i**8L@+ZGvF8yx zmdT;^Q)VS&pRg?C7P&Fx1=8Wc88*O%86<)S{`lpCfWV4J5P=9(00J9E`iK@tR6D2i zhe&6DSBbL1ADh^VD@UeMf8;2nlpy3!j37qQre_l`Ox4;&b!@7lufI2b=JmA6L5<-m` z@PM-rTC66Dkq}7i7-qnr!D1Oggcmp$BZ?u2U|T3O?FE%0qGeubop#8mt&=J}bSKv0 zSs(6ARkj(VFg_QgPYkC`LZB4k+CH3S4hay>vwQPG62lgs1{kyhu3>@EiRI`$c)_fF zYHHaT;d&ae%zC!)oMZpSmVkP-O6~Bkqb+@D>Lg|{B!aSl$*DBb8tlraO|YT2yxIvm z*tKAuBvlo?n z$10aSR@0M`)izM9^Lb%%V@Jcd4kbNq;f#PMT;U11pQ40(9sple%9=!WA>ExY)HYj@ z&nC2k?M)Lk7_NsHl+~gouB6f}Tsv#__Jvqi&}F?PTX~^*lxXf2oZH;y3ekDbeV&(R zaVh3Gw>i;ep059A*_=y1XL{3}{&c7V9bHjBdb2P>b(!D1<~_H1LfEC4KB7CEd!FI) z%qi*v1A0dBrkZ`athtZZglYc?v-f5TYct;#%__f+`Uu`;IU@_{gC~694S#sVCtmT3 zx0XV;{e;#+iNZjaRMXoo^(_=RQwZ@mp+I`FHHCqYqE^_ClC-e)S!# zLV`rT*g`F5<(2JwcxznV9OpbyJTLNTJH?V#EjH;+Z~ek__NJjy>$q? z|0)>&V>gRSJ5mcj;9DxUGeFzuk=N=P1|&1mW4;AZf(Z1%w17U=dmGp}IG72Az5xO< z^oLuJ0>D8fF`xz-v#jeVLpJ0AH-4^ zHzd5g6I?7v{;)+^Fo#3L4VLJcCmwak)>W>1sj`= z2=MNgsA^9 z=z0N((iy_47ns=^`{^z>H(WK`Xx}v`d%t%StrI(sRGD(1(85&VDG&M(NJ( zloLneE&B5<56h-LY5^Yb$9P$kUN}v{&>1!`6nX)gH3R}4AWjG&qk6$l{Y3u=YPiRb z#12i+1cZo&JoF$wM1+Pwvb1D~J7Wdl;yJGlJ6166wig2(eB)bCvbum0Bh1Ov&k#i3y8I4#I*-_yZp0(I-GSP3ea} zP=YC_2p^~gh6v9sQPDDeQEp&}T6lsw{e(DZ(~7u(6iKt>=)_RchpoG9WRYN`efqG1cWe9E%AwnNR~IxYI!Che=2R$WVe;7?Ux11t0KJCC~$yFx4q| z1v%h?jOBtq_=Jcs)kSc@)rb^nH4E?bhjFM=F35vCP+3_R3p%aST2R?8IE#VPL4#Y; zZ{1nyXt+gbAtKx!EKr_1nba%zm~_?9ZCnj8HJ)w^ReMv3d7b}=dSzO1REkvX9#dV_ zMxqL-@K=r@jey01myn@Pr~*BZ1GW7Gy2FA`_yo0;13mZyPk0QbeF@c21CO18E5L#z zpq`MmHz&Z@xaERcSd)Fw*eb}_JTMPi{e!rbgN{`KqqzblAOvBRRVUEZKxv42aDvKJ z0=KQ)DNq6~Knn`=#Fyh)*3FKuvo*2^gd<>#O#sS32!v25sKQ}dsYTa6z*v^8g5QK0Th}`2^^V6gfEABb`5Q!;6(^ z)Yfg`voIFO6N_@#tiJi1oH+vhe2DhNg7%$)gq>d{kb}+j0V4K+HN^rXRsxVn0w5M* zAg*806%77Uydw=WWJjXtw5a_U35@=W$>MYyM_;KIdqTXJ+09a7Jf& z9%pH$=WCwlXl`eBR%d4B25x}nRXFH(4(ETSW_un7gGOj-zGrTR=(Av*E(|5=<7JLE zjJ3QODNr$1ID!tO1~#ZwTFXQeHjI@vp_cwN6qdC2In<7>>A%nmf&dSj-f0}nX!pSo z7Ut=Wz8%b(N})b#v2dawl_DoaYNzgoZXo{%_;hNdj=u6Fmh+@)tUiuei9(u?U4eiia-Pi#7Czur7;Ds3OX$qD`QeP3Rl4xP|%jhi~YDWD)Fm zkOC*AhAOfH3rPgM{+mtEO|aN3Fd_5?(Kwt#&ZjdlVXFfCJWZFY-9H8 z;XbKU1PkZ_obh4z)?uMu?dZ7kJUcgQo5acD!on5NqG&=#JFs!1x7 z?Cq!`BG4Hkh!@BP3+|#9-U$RWOawFxk+Hy;K%j?S;3gvQq$Cd>vN!|y-Wj=8B`1gS zv0#KE4~2DbhFfR{BIpHu=yJ^x3${)}D7Q?&p#mzWqEMJCe`v98AcA#x^Tn_but;z! z2nE6Fo1fv#zESH2r*AXwn>9B>BA|yBJC1Jvmf@HZDM-w3c%}4l#0k0^EI>Y>a z$iQZUZfNhfMrNEcY_VVkR5$D=N#-*wFDbBVu%L$!8E|TF1~G7T%dBiEIG+|v1U7(# zZs_y@cZN+!W*N3`(WHi6_?gxgaWglLn}rK!ID#%X0#?wHytoCx)UV2r*A4;T;X-TI`r@Pi{bgLSa?wW)Z0Z{ggP>YUf=a%hXJqla#w2YomQ z3+#ES)-6_ee4e%MDrp_5 zTNbKcd&5W6a!5!Rjt5|Vd_-;cVrd({SDB@^d`*l8Aeey}`0arpd(TJIM@T5X?)$Vi zI21p9>x=J#T8BWaeAxFv^^wpcwaK|>{G-49Zw(Pd(R<*}Kx**nu4k6JhzC3?eniy= zXW&3;czx%uzH(@t-dC38Z-?Bq7wL$8*afKTH$&*-pYJz+GaP<1%m)?A2kG$s^dEnK zQn7zBL!K9Zn|c3#^tYEj!hbUa2zu10(Yxi(S-E%yZ^bJ|&7Z-61rH`%*pQmOh~+Z+ z>s1lrMTq{Wm7C~MAxMW1^-0u-l3}@C5b1S$=+dIfTLQaHB#E+DNQ2#Y-c0FiX3LQY zWiniMR3|l}6kj%EDv)4Nm^Nu*EDF?VN}Ed8;d}~l)4Fx>)_vQgFy26sKFiL`sg!C? zdUoehT*vfc&yO&fvJ}g==~KWOC*E3D4yWOb275U+Ta)AAs$u1RbmkZ`XO1WT?iIY2 zbmX7$;-Oy2mon?kw^&N0?6+>@iJrk~l`GYA?B26U1`ZySWy#5EWj@-qTA#kv(x20l zUM^IqTaW*GZDPghk#<(0z=Piu>bv&y+Zl=9bc@j~^Y6o>eJ4?M0}fmf%5HUUx*|_n(Uf!Z;#}@9|inlJ*^0 zo`m$7SY~_@X6fL9iEwvjl2Mw;=6LfF`e%BO0$3=U^+gFMgFUkMqmC6)d1#J%HVJBw zSBC#mW1Ch^sGpBawhAJvKYCcFjigeui(2$RH=T6;=u_QV<&@LSH$z2L6SD)=G*DE~ zMw@K3%+~ZxwarQ^ZL`W+>+MkAc02B};bI$ZxaEF(?y}id>#V!yj_Yl^)>0!cxb!NE zuejNEb8NE8I+X9c;)3h$wdvZsuDa@?`>?|GN{nv2(K=jHIo~+ePCV6x=@_!tP7E={ z`og<#x$F|`Z@(z(t8m0Gzsz#OE_XXJ%_YZN@WBw*+%CU0lMM6FMHgMK(Mgl5bkgM- zn-)F3Mh9#>!bUBfV`=^S4cFfso3XK58*8lBUzbfb*kF6jb=qEwtv1_T>%9NH zcE)%kd#v4K+wGX!V}Jec;AwB|w%u#@4ff%MC!6=+iPOy%TY?iF_T2vx{&vV;7tVOb znhTCM-S$l?dEk4y z-L>bK+upk8qHi93^K_e?eCCkfeLeDNJ8yj3kOw|?;S;H$LT6*EZ07ou>2 zE7YPBo%O*B4pEC|9AX(g7?Y?VgozZK;t1bJL?fPXg*A*~3HeAtDr%60F>#2-yc87< zVi1Bbw|L4UmgABZbfX2SD{BJ{K1O4rIQu$IH5Yvna&cfgBAbk{0uqeS&(kT z!=9|br#ZDqPJM_l9_@6DKWWkneQbiD{A}ny>q*Xbc#s|qwIDjxsWE?2bT*q1h%+pj z5q|m;q3VQ7NIyzXR_NoOFeK+YouLnNcB!BA_-8p->dq6+lpYrBXG`nGQ4h{kA2ns^ z3?;hL+0e8XBHds+>=_EXF%_lpXed-m3eQlW6rCgO=RF^zPKr8}6+Z1oRMjcelUCHM z1)b+wxysXz{#2)HU1~lh0@t)Im7yTb=ugeL&YZUNold1GNg;CAj@~pLU22Cpld4n3 z(v%to&4^H2%9g4^@TU9ZD?qzS*Tmw~Anw#6I?sC984`A$(_PsBD^Q+(e^0&YK{V#w6EZ_kX zxWEQJFoF}T-~}_d!47^fg#Y^`wG1mE^(==!#yK@$HIRc5{xFC`EaDN9xWpztF^W^H z;uSMkAI2Id8*p%j3@5~$-((<-=gWq4vbe`S{xOh)EaV{*xyVM&Z%G0Hgc;Cd20RD^ zJ=Ve1^=^1N8P147)_V&D*r5gb-Gl-*;g3LIAOvja@00)O`v@M~cgIJ5Go0fr=Q-24 z&Lob@$ot+pu1oTjV6mEe69&A7gA-MD-UO@i{DSH3PW&!_PCQTVu2itYO_W%j@k}ePMoP zEfb;81a842Ag}t>v%d98Pe?ad@d7HmfSwM?`T{p!9n-tM_rCu<@PqGcj25uk+c3@fv4hV)|-Fyl5k)Yq0;M1U>2(DlXe&7kZAPcf!1FqnN zl^_g`U=7Bg4%(pHv|tbJAP@$j5Dp;`7NHT!Ao1{CeKkbKESvxF!~jO26i(sdDIt9^ z!Z#?8{IP}=QlS@qAsE)#I^-8yXyMi=#6yIk8m=K54q2gK zKWIVKG$JSx*ey`qn1uom=tF!30u?;iC6)sz0$#8&SRi27CQt(#oPo}5f)v<+6ex%k zPyrsUS0M0MfqkNU*@52Of*6Q_&OL$@u)z^Lf+!Roe-Xjx1;P;!fjOk2dPUeS*a6^; z-h4emHxNNL@K?yGm*C;oBPOChBmz%d%^BW;9L5(A+}aUz909Zd1BAi>xML^=*Ywyl?2Bp4AefIpmp0wm-^lmnZIiCTQadsR&d1sDOO69({I1RMYk zut5tD00yuD3PivLNL%FrfS3P0L`{rgJ?_^LjG=rHfI++*5h#EH0Kplc00C@(9c+LE z@K?S~0Gla53(P<~aN0aDz&fs%LloK!`GYx>!!~*zG3pl&06%qErdWXC;$d1Kp-R~V4lGQ zP}_PfM-E~?45Wr@dr(v?86wF&; z2G|Uc00vM&JoMuPpq}W3fIn=&$HiA-@&I@O*r$yd1`t6A!~>Uw0KNG`1hB!a2_3hQ zK)0%;7_z~R1{gI6 zKtYzn0fYj_i5m*A!2w|83-FwhekOo{sFuc?krwI%M5G-kK&$;Er#W;~1>mNscA z+LzFUKnwrSgUm4i8RN)!YG4;k|(EX&$KJ*KF9y_h`eUM1Gowt1P7%^Dj# z+6I)XxYn(=u~|7>9=(M^Anc~T<)f=2nAIX(AlTdtumTQvn|@Nm8EgQgmO}`j0Nvi# z3&;cxP#qiS=?gpr5WJ$nQo%YrsMPYns{I$F&e!HT8r4a`ZYHF2I$G-O7b^tadTkq< z#e=@_DI4r&FC2iijYQ;PWa?RMu!+HO^4A%}p>%c|r|l-1z5pxmz%I-i4zNO_f$Mq^ zfdu~;YW+DGJ2tC3k|T?5U)0c_-JWmKF@T){;4Lt!z?rR*W}UBWVfvx3{SMq>24Md3 z8vHtBNzAWaj_LglFad{O{|?{(I$=C;p7|EA13&Qh9WZeKupM$F1Ya-)2j2k~VE-*} z)KKf^9ia%1FbS8i37;?ur?3jIFbjiV4#waMn{W)%pbECI4HKa_h{HSVFc0^z5C1R_ z2Qd#noC7A|4Ii-x&fozvAqA7~I|U;@N`Mqku>?dw6<@IxXE7FUu@-kR7k{xAhcOtB zu^5*z8K1Ekr!g9@u^Njp6~8eYv#}hv@f_DN9lLQH=dm8|F(3D_AOA5R2eKd!G9dqF zaRfv_0wl5`FES%HvLiq8B44o-YcU~LvL#<~6(6!8_apeKSv)GR19gdf&4YT8GAU>9 ze3`N;ud*ty9xJ~xEXT4e&oV97vMrOcIOVb~?{d_rGB48uEdR1E|FSsA@_Lc-4yQl} zSO7COvok+4G)J>EhX4&6Gcmt%13`y2qv9=N^EPj@KXfxIXY)7LmtJ)8d^tuFwpVpH z8!ErE{&4^WRKPrQKn2({KHsxG=QBU=vp?fA1>`{Q9qbwb8hFvizR*EBsxGz8f5SCjNZ&vQiIG>91^R*#r5=I;^*8b?ocbnNA;#@8c6 zjpx>vV|tr>0iq?klfBm05k%^IbwfI}?tLA>S9)DK9l?L)t$)?*eDQ#G5Lhh+Sh%`w zfYC$Z`hzb1*Ad(TV!u}+*tO^CX?)qiw=L}>cq|W0uEssWBZxul+F7&Kw19_bclUwI&Hw@ zSv7=70SPo34}@%O>m)Tet9*q*JjS&LQ`A#Wn$1PP5rkVeP(gNv!VHK392Q#%1zVU3 z+btx*w@u^>{2{2N9?Y$8fD=I|BtqGV9W@YUX#;`C%GZ(!+a~xKxYgc0241nX0FQNp z(D_4`Q3KJkSs>8%qmChyj?kP~THOzp`i5(FfL8DQ_3+(0@^a7hn zLEm<{V;A0@Z9>@@=nP2i>RuijFu*Mw0S_q1l7{Y;$Ja>O0lELafMbUOy`9;gAGn2+ z-SQ?by-~w0I5?Tl7@ZkeDVZ~CM-ajK0$vvGbVnCN(#jVK zuz@l{HVQ2H?D~U@p}7?6PCZ2&#!+~H!!gNp1U905Hzcp{K%(myB zc%+Mg9lUG0)!8$y7{y1}Ca~G=2I%l5F1w0>F?MxDb3m&*w>-CcSkroOzxs7sz;Z)? zS)(=_*N=_%{-pHED22)kF$CF|BqAmhn@zVw0+B+*qeL8!*p!pPhKj=@5sfx>{1|d%$&)Ep z_D6(`WzCx>Q!~pMw9#8FE@uvWiy$=|KwAGmGs=$xgbK51*XA(50EYk;DB#W=07C2l zw{sg9aC|m}9HE&v=JCj1i%>KFHn(n+8tKD4x&<~`uJWdC^z^xmcOJbzdh}TJimdQR zC@C{ZPz%8W#jPVmq*FPQS)ou?dqj#rTA*TsTSDStoe)A)9@xNQxn4tx}BC^mSkzQz_1vYLO@R0}~Nel-n z0%5}r9(efCs0|`gAR-BfK!F}0h~Oa}DOhPiiVzf>L5xi>0*nY6SsIB4DO`L3gLSM7 zgg-WBTC$hF_)AhHYU~I^j1GxVFuVVUtaOlw7dCi=h$$P3hXf!d=w+oD?(!#uP3Zb> z$462+u`wWS0g4AAyaZx~4eWSCNs#EdWda^vpoX9`cKnnLj)>Zi!RvJ0wKQIN^~~4G zTqVsXJ6b>?q8HY|p|#gys}0%;h~vP30D#jifB|mn&Dz)opupPXmJ7BrYEWoFjCe3` zY7=rf8`hs0W>B&*@F=6FoOsGZkKcW%Stqi1{1MonTO`VElZfI;thBw7c@I~UtU)+ctF`A%pD6^vm@M#r*7u8-ySrMx&I#g@Ffp@ z^zv=v09y3Rw_W`9EwgvBa`IiTc;i=%-2MFZ-=F{f{r?|;zTyY@%vV4ILW_L?Y#;n2 z1G9LLr+x+TM>`m(KnovU5Q7=i;08Ac8`>QZgyu^i2bWht$cX2G=1C7D0s;Ub`2+<7 z0RI3i00000e*%vI00{p8{|OvOu%N+%2oow?$grWqhY%x5oJg^v#fum-YTU@NqsNaR zLy8>v4+zPVC{wCj$+D%(moQ_>oJq5$&6_xL>fFh*r_Y~2g9;r=w5ZXeNRujE%CxD| zr%$I}^NA0ZJw{YX0g=g{1!y|I@>fQSi zM8XbZWwa4_3*sieh!ZQe+V*A;fignkSWLOH<;xX~DU5=-v**t%SIjK;(*;d72C0Bv z&3f!UnG!I_mM!-1KPd#ewcgFU_uIl6fe&o#ySVY=$dfBy&b+zv=g^}|pH98H_3PNP zYv0cOvcG@dyNmxHPoAK^^Wn>@U(a4Hae}?#_bMtszRdddFTQX8m6iXs70pKyfI{uk z&^Nj{lpuc{ed8d5d#U!1T@K+@5Fh^>=7t>y9VVbdeh_q+ZHfF-#!2O*NE$};DD<5^ z^rSZsZvV6x&p+{?C!;|3l%8{5lBrnNv((ws|yL2m#i3R zT2wRtU@H)|+!90#up?O^REZ3A$&e@lo%4?-2Wc@7x==w2E?j(a*T^9@b?T5Tr~YH0 zKu->2r+|nyL|{j0J=Bg*{|aWz z!I=@clpLf^#|E*IFhr0T)JRa_nOm|;Bk$ahHq{8Da#4Z|ZPAqije3waA1RvdMMVI! zU67S6vy9IS`GUr5jv>)7Docc5poRbV=y7#Mi98au$Z9_1o0Y0Sb>UBlno&*oeCi+5&ch3-dwhtSXws$l z{X?Dzd1gvr)KS6FSggB6&=RKr1rEkI+&f%M^%8TT0ZHwDYJCu|!Vn zd67*T1YQDR1UDlBt(jHiZ=q_%R1b2EZY;AKTOEl-ts}yM1Vf`mg@{(ys#SFvKysM9gw)R)DfY-zj^L6YA!0;=2eRIg z$nqg3b+C*V!q$dpcq6P_i9!`3HIK+bW56}YF5U}~N)-1WXS-^@X3UbZ!iC5!dFeX~ za$iG41rgFLNR}63TY=>5P6PS!Cg#Je`|9M6Oy)>gt2i+@cIE%YVYx((SAw}=Sp*8& zoRC3U5h)A}#Jm5XtW8clkQJx-&=_H5DL(8FMlXb(5fOAv8f=ld5kwZ;m`IcoBEy9o zSt4un&3qAk6Gz*OBXd4TkO?Abj!?QF{2YiYI2_oF=<*t&BuI;If>2T$@5Ts$WppKC z>IfDj)mS?9KXPi8u@*!DVugyEb24gQe`IaLUIHJZW=lDLoX7Rr>G+2rw*}l zMbJHv^(D^Q@J@+2oR*F*Dr9oowhEjXl3Uvr0=(RFY`i7X<(;_OAb-ngDfW1?e21jg z1c@4z1i9w$wkO#h2(mMBh#)Sy#0vj8IFy{a5PXHy;TKW)MJm1! zS#+AeF#BwC#iK1mt2Qs2Hse7SUXU;jHYemo2$}`5B8{bm-3M9Qt9jGrk4&2-)%NA4 zE-}QCcTFK9FZMn zglhoq2;ox#^?zI`=mxp#LYS?Qk9(!(9Kk$FG#?Spmj!)J*~Z^t-nEc>q}&2wxIhB0 z63>^nAW8p6s2@T&iRVTl)~^ii732Hsgi#{jw@ClUSI-c9seA2>7RViu7kP@@RQ>HP zNDvLN@0hsVC^rwv)u7V-jr2b(wg(j9R}rj)FUFS;uw)QZmk_FeZ&r~fWp@zsuwG`S z5Z_P^ji(diG!$2}TuSkO6+tT?I3CjwGypbtDM3%IRuExT4Fd=hX25(4A%h-a4m39q zvVbV}H*gp+f?jbxGDmq7 zfqVqf4hE!4e#V2-(Q8}*g(`zNH*+rwF@+8hMn{+uC`S+|1!(^OdkgVVqrim;VNo&? zfMU2CrKA^77&a}`2(UzSB;kAu!8Mb!Xa@hWBb^`+f@Vk@#D)T)ZUvDDaJF>sbw(NZ zhtshRK!_DXV>F6L5T(}=TQ(6_C=iCG5ZaJIs6avB6flAFKB~e&3K1pd&_!&(0Gl!l zJ~$q@vV90Kie-T~T$6C5l@*C)|n9dB@lc z3N@k>@s9E5gy1L=633Am;ep*)r2inC10j{F$v6!YfjF9G(*UF`5e--xe*$4|3AzzE zR1K5Y5NYv8ZAlR5fDPu5CD`zl4Dpy%N=`aj5gJJlDEN*gY7r=9ha7Q*-*=`60i_Z_ zU>%`SZW^cXwWXtn5Q_f_eixyKLa~?*v0jM~;wd5x+N-v^|5`VbZR5AFGgr6;J5xTw&h5|+9cMRFBvR+O!p5TE)F zVq>1O`VXyG4WRR$KT)d#!J_{FI%wvk5z!^d^f#>c`VZIRG|)<SP-V^5H)#O@_G=mKp>kys0~4{_evJOkv}g5`#ps8c{cUIdlafBPB}^WNQ!@qYL~3lmpSY|DayXniRhh zw^FgHQ_*q90ks~{qc+is2d7YCs}i4;vlWqK2646oVF!%zvj`D+f*TWhb!Zc_vOkj; ze7hC1D-hGLV+$K}44M(_auAD)5v>?$l-P0N^;7uywwVO&5=1{&ck$?XH!70JK@P)h1TM)#szHfoQd+VM!bP%RG zrwH+(kjfBBMG7M85ye{&bSNIG8=)>L64;9o9DEVy(2C&^c`Wz83NdxMY7qU~5Io!x z^s6{e;U}D1r9*5H*t-E0VV;rKsUmR>EH`&Gj1cQ85Cta?s$f}`LBTr_GUt@U%kjKR z1{%HF5iKOeGdvNW>V^%Wz#UPU1yQ&?;XBHK3?qoQz64o56T=|^#q`J#{yGwhGJw{3 z#Tox$ZxBSJGm*gx!3~nEwjZIlR1rQmD!|DR#C2s&a|V|zOvxU>#|I(GIkCj3)C^X$ ze^CL*Jpm1G*v2y9H0Vka5M&9eV8{Qk#Uqi$nrs~I%M`La5-ldjr|B>e!6&sW5hHhF z!~4rkg35cr$qr%6AJMMRoXrejgqqqAY1|RD`i%q;5727OHv!5+n-EeQ63Pp=+RPdy z8h%GO%w*A?qhJY2OBO!)&M;9gkC3pR!L?ty%=~;3^2;D4;>wJko|5*CZ7EsRQFtQ621(l${J&`=F5O%XE_%nbjL zQ#@N#(YsMvK@2=?!9_8lZV}TffhiLm5#jNe=A06Bvo$v1I2dgnslzh`Z4tOB)HE@$ zU^EiaED){$a2U~{E@8<70en-fyCVD%R^1bzV-9?s%d+(e37wmUufA)FSvzC|5yPOmX z=cPpft|<*c8eW@4zFD%%!Urh=t+@haKZ*gKG2diF>9sWm=^l&5Kq z;lodRS<-r$H>qA6UPM-i7{Ll#h@U6Rk3FAmS{^H0>+@gS@vAm#knPBOC2(=y2 zsDCc!@c}X|k@mA}(&;M`v$a*>WFKE|YK!h^fE8)51#juzoYe0%8uhvU%X37RpgdKkPT;{p~G%m@$#;m6ALoYn> zog1$r2;;a@Ji7)em^h=allq z<#ZIAglKTo3Z8?8PLJrYBU1YyX30M-Eq}&eL<*4FO9v#h&m7I$GF^??98T?wJ%I=# z*LfY>^Aspuk0lPzP_;Ivw*Dvia)@i1k5kaW8(YXW@Edj&dEe|g%w$894~b-m->&c3}5C8 zKE5*DEOsBfFq?+@!{nQTU_mLJ=1+*o7qawE-2#r1%{__8@r*%-Q%r2*7~IN2ZYc-vK(p>s(R{tpF6Ytbk2|3AGo-_V ze{ayB^yNl0qbtbf-UuGU7%sYc2 z*ZECOCU#GMeoSKy9FX60$2>XEVK|xw-u}Bk?5DiI09SgJuJw!;(;T_Kp-)KxOdt5K zdZRV$f1DgDGH2hE5=q(B;>Y~922prm)A_^3a48biym7J7Z$Acda%U?{*+ zON_bJXy33E{D_O=`J&gd5A_n;-tBug%_7gFDiSN2{n<`_y+spGDfaDJ!F|Vn&m?!c zhPl7UrpSvLYlo948`vI7K0PRYNwje{TC=X`u`lJU_BtcTeR@+$#~CBB%JpL$-M^sw zS56u}M%>M*Df4{WJ-!F?Oc(i>?N?Trbe_>YV`<=b{BH?eBNTFQQ~EgCRN5Cd!Ml2I zs|6m>w+7#UI;Vv2=qYaZFmwD&k2Wz;Sh!SvN;t$4XG(aK#(pq@>R9b!0`_b_I1#`6 z=SPX=U#8#>N{+LSncCR?Dim50=ZaHo@YDuMtDtjL@E>+Ga;yV>h))+d-&7?|G?b=> zZDl_8i8)1rVt~N*A~`8asx|#{R0Y;dht2(~?@0ERc?$7_>mT5;R2&WM@pusdL@Q6b zao{B0U{Rf>z?CvKD_D~)Mn}F~8&8XgjHI+u)@BH*2e-M@8N{gDBJJy7$|XCT;>0-; zqb$S};%waX$t@K)mJFAVq^O7_$`moL91M+(yxn70Y>}?GKe`|RrL;d02!yoBLXOf7 zRaeXBi8~c!GQH_v@;KXQ84Z$nwSU!SbM~r;6`QvT8MPoGqZ$U!?yJRqb?R}FcH2J5 z-)p(~|6FIICPWEYt-2?vY{ESqz27_ly6T@ka3#0eMlVH3+s6{8gUiG26z1&{iJjkV zCbARAh({fkez&9NTnu}f{`mUlX@)Y*Gp9@~savOPBhzQjxmKn#=6O#;{B2)(3L)}_ zg9a_+3!h)#x|YPzgu9hh$9B3^UdzU@$ken_A{*-;ln+e*O9Y?f%HfNNy|aUmXC zjawgHV;m#v$ltgQ36kB~?NGf78yP-gPcpw`iMK^62_>E@S_u@BjD+SV`s+_Zxtp>4M3Rto}QgJ??BcW;_V?Q8E zFn)p;9ITZG3e4wfwGzp@)g}(Uc;w%KgUZH$C*?H1axDxWh|4ZPy+6elEdF$9OI>OA z`xIX&Ebl67CniEv`IU2*X;xBptU8?E6| zsTI{pHF~c(T+iiH*U5WqR_tz);FY6nEBS+Twl1UTgGmGTGk*BI2kVEatAt=xg!R>( zS;ARx!HXPyTkLN5;C)=LSXq3Qe4RMT8PfDJnB#F3#bPWX7oNRP zfUi^WzB=5LuS9Ung)+;W>`mRfx=12V)yJ%J0lAT_Cty$NLd5$0?1u&$eV@25uuY24 zw$Vu!P3r>VeXg+%1zg@h;vDNO%ipQ!w9}X|5gVJfETx@)o`UQ+)3F2MhN}@c(GphE zeIw-_tM4>eAZ$8kAL6^OCWIrI+ijP-_IgRyS2_PN(z7l9euTaF-q^=#ne2Rb0ER0P zcO;i{s@su3(|2aX!c=+Tt$)Bj23T2S-?@&28M(H4Jew$tm*Cf;h29NL5#xIZj ziaU=Q@7irp-F<|V$wPcTTWfW}m=6dNh=HC*7}863e&Uq9NPAlJlsEM3vsPL_?%=Wg zkg3tA9{sOr#Ls;YsSLYgpYJPJsEfa3EjLZevTw)=ldLpyiePc!&5xcU@T+#!KZ4*w z$j(7Flwoqq=$8sfuf3`;LzDfJ&*lAqd$DGCOd3m_h_H?VQo``72-{@=X4_p`I@t3^ z&1sF+uzRBU>cSV5X48*rCB~y(5iLT7??x<-#{A5^antm{PkG(#lCBp?#)BtrwArLI zWmn$eUwhg_W)vR#t&*Ew#J-w%m_q7PVt@;H!Dj&W-hH)S@G_t`5^B&gx!j{R^C55j zo3A*}#-*CIP}AA8$L^nX4ECyYKW96#iRjyW*ASe^&cZKFk93>T;jFn^VPg#t+c_kH z#?pwErqCkD(49lHL$dg_1Gl_Q&>Hdxd25WAWWmzCoSXi_x?x#%nSl+_flu5r8> zR@P~pn4VE4JWR;08Ls{0Jn)8t-0zRuXPNpJ75+Rmy9`rOgXVn!fp7)sljW}E;#WQ` zPg{PvyFUN6{-W=_UE9KC+MjQ`yR$&mWEVB-hxLE=zi&)i-@*uTJTh8~n02g(tC z=Y3&g>b4hIdMmr+-*D_*I++QNy4C*6%J@W>CsSJ8L-oVfPx2f-qIo+E00MYpa zj+hu73@hl<^ znKstUugVG>+Hg*5IF}ckyGU{+e2CW&i?<%m-vbwzfD5j{g?_??|H4H`ltr187c2uEeXKaOSOCeY>Z zwB}mF-Xj|Y3QJ&#H&wA2H16mwB1aIF`I|MK9JXy0iEmh?HaL>N76@1^D% zq2`vV=3ev(1C@VV@hK6lD&>%7vs)&2`zZ=b-G7bM&nw?EsPq{^J=j`3WH>L&LLC^- z4jle;&6~ttp&l`z9vNTyY)zeL8!L+H@i!Ft+2f4u@<%qqqkhC=x1Fj4B=kwCNVgQ! zgjI>ylh$06SN;wpBi1_EA)Z{!AL6=QkB!Bs9)VJtXvspBM9!jZq4FEVfOimUw01!> z*8hzW;A2JOr2an`!5!KE7bDPUuJ|8}z(=6^|6l|zI*e4^l^m|(Piu;ml&_dHFDvWI z{s$xA^Rs#Q7#GGww4N`H+UmE2r;7Wb7h~>i6aQ(3a3Gttdto_q5dPJ62sn81aKV0E z1Lp^Yb;VM-aR+<%*~DRz08^|hb|D_S9}4c9K`mV2G4pQk3*P>{5w5wnLQFD2ok@OU z+0)EdOvjnBAyCekO7I7FBg2G`43e(}odraY@J$@{q_qn4u*t;OultWb&SJ+X9x0Qr z{d(C>7E>$j@*l{WJtfWnZyeJ>SHE?IT(ODx`G5i{vVLwOO1O(%?WYw4u|OVdGnl-9 z<;xYVJCZ}d8+W7;Es06xf(Q`u-b{-E2_Y;9Wu842oqzub4MA-9Z~(w-+TTXu%KFj! z;x?HB3CyxGRKf44@$l8RWrIq!Iu@t~@sw~-XcvVh#|rgsCJ8$=Q|5VMexC4}6>bfX z%AWEYf%vaf;dJp|a~MaY=0eW2vy+u0Qs?zl#B5t#bbhMxW})>Bv-dRG=Wq40a4klv zi^iN$kU)teqg_}M4qsM2zG&TCV)D>cmbR9f$B|0BZQW5-5l(?ybx9)MaZN?8$8l|q zW3G8!{fFb@w~e1Ld_U@27srpQKOEHkXy~~<{_%c*fdA+FE-KIZCXFKvec=hq#8*Ba zeKd)9pTjw`-$eP$r-;vx8M`a5(PVSKRyBCKsWdLO-~daY&ZY7`yN`n+PVZY@tGHLy z>dOk4T&^m<7rl5npuRFMZ216LAgffN2Jwt!s%(HiUa)z7pBI%1n~F^lEQ1;E+g5vs@-7t09M53+w3oihLxAxoSb~z5{*Zpz(72E|W4!DVUL~`)%COhvpF3h^VM-EO z=D(Typ^+9L~GH3x0b1q`RnocNG;Qoc{wsL zJ&4#M@bir@pFltW7bk3h+{Q`{9(O=NIcNj7}l3gQ0 z!&6Pv;^{kj5PX=XFEIk_VS_{X%8fBNSzgW1AaO#edw-ZJkrSFkG*+p?9kBmfPKUEX za5U$Te&2BdjpRvC8sF-TaXW>k0#z_uqsG|mTGpHyHgR&pUSy3j)STCpnfL;uR8!*f zlC#OVVGo=G(yxdDAQkHIrBexRgG5hn)Y++UK15l=p|Jo+3jcx_%E$5iB?pL+CWJ7i zNIV;}j7KKOj*6N80@d&WEz*^NQ`hXFWq38Z!uXn%h^-7<12eK-Uc;Z6bd{YoW9?I^+dAP5P4XhA-Yiu?zjn2dmG42s>F zac(9GDCPK4gcKp$2KvZU-Vw#P;FCHMDc|El@*AtvKA7pEe(ux@n@m0tbW}`XVr2~M zMKW4&E=@eCpkCE?bz4~JcfK2<#n*6B(f@-^A>)W4vZzxMX#(D39CD$h;s|!*=NTs& zsqGCgN;MvX5tMNV8zT=0ra+vzEt+SnGKm!V;X&zUco~Sh@=5g9-OK&^@+RV=T&2sA z;;7;J3cOA>dHjIhME&hY?v5&hYi;0V%QGm2m5aEMm{G#zl5y*Dy{5g}&>-_^C!52G zzSW?8ivAL`T0u~m#mg>vqO^?EzfP$N{Y~d!5xU&k0G9||j8pjlWr#rBE5DLZ$=e!Zo{RI^P+_l z#xVslNCuDPk&7uLEYd}4{w0)ZG&q3WvsaOQb{}LzWDG`MvHJWHDgr0jYkrIW97F@c zypgAHP+^;gJjDH^YaL=G$`&Y_e!<864D%NGnQds09BT>5C)DuBwm;vM2CM*I-wgkekrnfWJF^=){xzv zHG?j6lFdgZ@!a3Ta(O>cxK`{!U~&cwe@KQNmhG(GyrUF@7AkhklA=X&u#H}@` zF7+_ejYm)tPbc*9^y|ZdcKxeGqZHI#br<#AbpGXUe7w(k^ENv*y^4E#+)HC2q!<1v zL@LzwO(0`;;*glI%SZZcXOZtMfO+@3=NpEIZtj4QH*v!o7_3N*7ga!&>&AaIW<)iD z&EYZgZBadwJa*jzO^D?u>^l-E-UaC( z7EDg)XC{_HeC_mo6@|riOou#2oX#GGu0;0i{em^rks9%vJU}g!S@qF>YtIgOFAQaA zH`v$;HT0+@FY0U1130r$m<)KgAwJ}sN;ZfMLIC;BA=+sQ*>wdfqFqT~gfkKZmi7dV zrU0Fqmkt(!%->NHPt&K||3(6mb^xedg{hV*uM$FDumhc!vA)=0Jg&NtN<_0+-qhGS z*wv;Ficy&dSL0yVL+>1S7LRcsl5Z4wC<(COB3#d$UsXWnGdcQag3a*pB$VPT9h4dT z;bI2~j1FGigbJzx8ifHQ{tEE-G;NrDU}QTZoP%sR*V!4d|N@%>FKg8?}Q zFYZHuH(ZcFX@upxyp3F&U=paC% z8u)hR#A0Hosw`D!4(wIBVf6J#O4WC{fR?aW^GosvYNH#fy^uuFAmgM$L)q>IT*RgP z&O+U@dtm$$8P9_=Lz5c_Abr2d@ugvLCIB{-2P_OI0~GR-+z#!f`Ai_?N^<50DY`=f z59JOFro%VtR|fAkk`NL{Axov{f}(&)|KO&WK$zegB$FCg;CGS)LP2+>(DxXt9jkVZT$<#SCK3Pm!jP7sp|iP2BW2&UpO zpfv!|R>c1eHO-IHi9z6xvWr4uxe4r^0 zgM|XH#p>--9TSwl!$rrqqllWcv7Z5yNkp?Z6zT5#)nGoH5#+mepf4It1Oe}2cp#A( zNdyk@mS%wYSMN0YLh=|LbJH}^!F<@2VLh_&<$=w4sJlid(7EtRe7m4E^R+*UjVII_ zcNWFrpH2f4{AEve&`5Tm6prT)j{M*nD3U4G4wT&h0HyfJCAnZQX`Th(BjWZ(8ZhCB z#SiDJ1w%;b`EV@bw64kPC2fdVi@Fk$=u1`Qs>BZf@@(8lEY}zIad;RgNc{)`ohSa$ zSb(uN=e>y_-A?)vpf+s|Nb?ln&KBePzy1(FWC1B}6)P`JEFmgIg@B!LONoS*KzUf^ z67CR9no^8NDMgIVfBA37AW5PRCrATbGZjRGDstEIKa?tn4B$kVO4JcIaLAq?Tuu>5 zs5pB~Elk9}SwsDP6!^YpMsn=&z+~>@RRt`ADjVbDT~&x2%(r;}NNWaBQxq;M8OgbD zraf`To28i4)%O{@!05Xh}NF7@gwus!V9R@G)ghxcZ7&N~#;Ew5t)|0m7iVk9Z;N+{LZVHc!5x zS*!q?>Lx;Ih&l%f54)WZM($MJii@2Z{@bnPf))d)2PCvfHRZAlkwpIpZ8Ix3^ zc|%P?Z-HIjbUOb`h9)wZRwSh9LC=xyfK76!0c5vS?p~39b^~~i&G8^lA?FNE)R5mb z6nX}2ojA%EBI<875Y8a_d4BFq=|UcifvSwU)C_lWgK7(baXcehB<2_x#_q-yB|p;w z3@&Tlhoj$jbdhc6I;~1PV(sXj>-EL%EAwb*)q?DI0w0KtaAU|ActH)EB(xkPI}ec7 zzClDnJUzZ=(kmMuMrw?HnVXrd9T*}9lkW1&=vI1yB}*CfwjYBvK*~yLZ_bC)!+!vV zh_(ff%#`9k1{x~s@MfQf@OS@510kk=O|vcK^Hp1^`^i7zkIfg6vHG4{T%Hf{&5Xj2 zTd@+v;ATIg_Ot(OE7^J(Ti)PmRWp>Z^vroVHfO#y^Y@rk5>{!F8}giiVN6DkTxETQ7v(v_ zqfTn27%z$=zw!5+NizHZgRGTDWfz4wIq!r49$LuK9oQJ@!AC2F4t+7Mdsp1^B!O{4 zM6|!Dj7WW+u+3-^57zQRatzO)abP7(;CD^tTOedhs<2|1`1~V%Dfi|K=`wW4h>^0a zh^ix7Yu}oN^q=*iHPy@+`HR0mbk0Zawmj}iqRcq`zIp@d^I=?Az5_q-{1|Bd2qYSl zVuHJWA9Ju;0()nqn;2kLxk)svXU6o$qu!@ef-%msjSw5xK==3dvUpGP~hs%K3BHk;VQg_6921i+5h->{~ zwl^T)@RbJEKut;+A^Cw7yY*#g6Uunljlbd7Fsv9~mlncU&m0Bz1_+t6pVjww4!jrM ze#7KK$#_G&a5%!#L<~cMuX+Fts@I(3W(&w=f>QM|i3w>Qz5AZ#f%^Uxen`O@q+p$L za<6kUQ6Us_4E!dB=(d#-VWYer11LYLH!cfVIgL?Ph6s@ywpcb-?2kt6UVCZ&d-5fyX_}PJRYAC~kIb z%sWyYC8}m4l&&16_;GSqo|JOGR-15ScwQW{Ivnv0j-*ZCtdS74tki5v7NG)K99kel9a|- z=&a9^iq3`-%VCrGAR<@sSY_{pfS#)z$gBq?HO<*`wO=!HEZFYX4vNtC6yI#?NoSw9 zlhO^$YXw%GaW8Eg_29Q;7I9AY(V|AUZ|r;5vZs(^h3W%5tmJ4>(&7JrX5fXbgEY z87SJ~Ci#Zq9D4E2@$LyJym9yU@;YF53fNE2<6_?~2m^9<5boe48H_7vOD+9e3nG_Z zxOY$f>lA{j`-BUVg&apThuxjMy!*%ekH&yhwCylk9r*7(0P&q9!v@msNjYxx^al}y zq0~<1K;GL#l1bR}Q9nzSRMPXm;w@+gX*GJ)bgx5l=D|RSI;pkB+`d*m>C#Ar#n%I! zBH7^6y_K)u^-5p~i#<2OtMBbF$s_e@jXcu`Tn*ATi}TIOSRFRaV;Z!fav6ra=6-KAo_atAn*hQkJ)uq+# z@vf8v6AilxIz#6_2BEpllSE{g591iadmaOfW$vf-e_Y}&8zYpIb}Zk!d~u~;{XQz( z>WNwt{eVvv;c9S<`={h5z3;i=E=LOJ30l)1mD6}g?+H~F3y&|!xSv(c)d_NVSsf-+ zuOUV1;OLT1rcClve6>pST!k`_NT?|$1nmpO7AMl>cJT7>si=*=9qCwCYp!FJ6Je;N zH9j3Ud&kKKcK%TpV|OoJjQ2??P91Y3~n6ctj6%1*JWy>$DU?GyMN*sRh+T3 z&2x%>(SmSQ5NM9eLtANE~ zjqnu4fFyFD9?=)Og0bNmFQF}UjALU_6edR_QDkW^En=_Os_obwBl(~+*zVXRb#RkFlq2WXZG+4t2i=tCbA zGBo<;iEtVX>P$SBvEJfltDKTa$Ab1!GYqzIAttJZX8thR_kUvq=~b(#11xUeHpM*B ze?~PY+%?n+h5UF_!rpZ*rmbfAiq*Iv%GT3lKU(J}HO_MV6=n7!05O=t8jmGI@+k8vxr!LQv^{M$~ck-=ey zS>DjGUn+S1j8KJgUjH=Sk+=kb%l>Exih&JC)aDD|Ml!F`W8!f-+b=ZM+LOCuF+d;RA zCzG#_fXU3#d~1STs*VHA%4NK3bXG_@<*04_dcH_p)12*l21<%(tZk? zn$;E)dMWgwRagAEBe~DPSHF*kyNKo*y~0){A^spu`53mz!r>+^gQj>^(Tjm_ianjj z=i5qvC8a5z8f;a56Bqk#_H@}uRYX=(BK0>pwh22gTV<}lOwwE|;6__GgsA7kkvOiI z<17vwVI_zyidj&htoZ_(Qz4i;y`-$wiX_#-u*NiZ?s-ahgO)=m%Q4zdO(?XIVNY=; zGtFC}k!O!)r3j4kZr(!4{(-5$2ea}20z(5PKZ_OIyzIV@)4*f@ZcCL!t3Q>ISmCt0 zdVijN$H^%(*fg$X7fXhD?UT-05yn1yzilLRVxs(E-bV3od>*3KsDfu9&`uy;J{V93 zRkfJy-U^~?LVZk`*tSr$%;$S1#gT;AP znMKJsCL#9Ey}&$|?{-#sxgR}) z3i^(9G>%MtR_E9gT8Z$qJ_$|jiE~V%{_~z7EHT!2?)oa!NJziSs%^hFwEBCXILy%zJk52h6D+Hn{_1ydt~@(3=LvD4aGnV-ON5xi zn9xKMG|c#)`HnB5YqY{otrC9o^O=JC56Z0h^zpFtI6svazFGbw&N6dTTARd<_fd4x zf6Gt<*le*kiSW0mF(Q&ktbwcN12N`(i*EffVKfVJ&5gGe&T|R{ZprVvseCOcqtWE2 zbh5En)Q#A0qx1(C-3Tw(kt$o*ufE_r;8a7(l$HPh)10jRQP6UiB5;f8gb_7|MOVlQ zc0j;84d9@9QU)*N8urUwPk7zHV19J&^K$V0*G^xJd=*rR+5oPo69|_c*;YfDT9Z|4 zPK>Fg1IYsksx2T7NTNGph(T7q$E}1gVkkyQF}9Ka7hAjkWB5{Z&!0xg&@bRX^WprP z4s~=<3ebq2DXKY_ibcjV)k-E}r8_=|nt*{TqlUNa!{VJ!it`h1aAl+U5-OA!^yW*W zc$72kKc*@@zzZNNFJyl>DP_gb)fbYkr@3Va)zthBlgnXCs{wNkl!rc#VGU)Q-0L)~ z_bX!n*b8Zk$7^t@TK^Sn;|o&5L^>hu z!>Aa05S@M<-p^XJWQk&jA9Qf!d`2}k%P-r`XkDXU2a9CQ9jY!qOT&NG9aVyJFpd!G z9IX^n`Z)M_&|fC*ZzncUa>kd8hOnH?JK=?GL}7GN%wqv+@go~LNmSJBlAdes(Lo>;;Q>#Y^WgUMZ z#x6+BLe_hMtOpo`P#-)0f{84(%en`US<2{}*RPS%YAX^nf0M=vD3abnv?dB-5y@k7 zUrLdLv=Lw_KkZL{DHf=}3I>HuqNQ7n@L0c>x#e}ycpBz0q+u-+XkY*nwkp)LGL#C% z7oD3diPmab#Y^#;Oo<;MgN%yJWn{x?8ZD4=?qe%wgoMM$gCO0EV}i~i;=`XAYr|;) zATAB@T-FFu|L7tgx8&)3u>Nq`IiB9%3Dho(eU0gJ$&FeGvaR!s5U2OcfQWv7M~2sg z9>D^`xKraZ^PIc+hqk>wY13!C1u)4v%5p`YuaknD6A5_FEXpK>i5N7j;P3r>GQ(j& zyFj&d#@B~8LE8)7uQy=IAx6yLVV9{fl;gjNPfMB>&sMv zMIym$&=J|mub8h!Yhhnc&mR8#;+mcrK9OYl#6N%CHT@bZHWt8ztIj)j>M14|YrZos zKGfBkG}ehkIes(N`#1mEtwkB%#8A*AkItkZe;#r-RoFPLQptPl! z=tcC+B4Zj-r$oJ2WI$z%hjrCV;5GP=Zn=M!7QM`Zu{Xnh0w8@Vs^eLU zHwj=5Hw|(cpcCWAYL;CA0lP_<+kWQup!si} zt!w=d!Dn8`VN$MfX7FGd@|!bgDUx|ZK?wu?nY`DX7MxPDWwLguzdoI2zCU8M8>vAX zScR6E4*;#vT1#&wydD0R6fpK}=HJ@S5zD;8wM49qTKvtyE7V9Y>c2_U{*SdQX7KOG z%{(RB*hAu5YVbvl%?};x?zV3|S3CilrZYA+=dBwHC$??I-MiE_!;)Jsk=DNx>_Iew zJCV#|s#gEy*tMQmPv_WVc6@53)*Cyq8X>j$Ex9>+wMO=^aw}!`Ibjo-wuWk1+j#rIhH5bS6c;;M_?)%TaH9&6|iK#9l7M zViWKgZxGxRNkFltgZE4pkR?mj?nsQkRleg>eEoP+if8l*`>S`7QmM;3Bo1kWq64Q+ zc>F7lB?&+*V9&^c#CIUYmRe&i+fB_-5|?^P$ANM>StPuDL;k{+Twzbl1=?hf_wz1M zeTGnRaqo>eIXK(M$eTm+iF1{hvk4bnJ3Bbo+gS+QjLzS9(~GjtaTdbL@h>mTLPoJp>$Ud)R6JDz(6b09ecVkoi;QNPRsT9p+Y;k4*qY7EXb3 zri^}iczovp#V{Zxo#l(1<^#BpAU|-~C(yvnVcsWqQiTO150=Ux=&96kVpvRIl{*bH zSm@*!JNr1$$HVIY5h{61fZvGYP?yjxR!IVK|S@O1z&rxn?uv?Px z8=qKgub+$Hoo_z>g-qd^AOE+=yvE}D3+eMq*Ee#U$KrzJ>VuJ%5JZsCfaGa~b%ncjubx z$DH^3pF_M@9tAkX__6uU;VE7eW2HKFdvZSX+${*Hk^=bN2UL|2Qnp{HE(Qn*=kL^= z2~8sf$OFZq(lDz+ffB+O5=$r!yFh7La`vcS{kegiegP7X0_8@LCzHQ=!w8=IK2}UZ zNs$MI4Q5k~{wiHQSNwkV3girr3d$REew=ivt{A9Ep32xCq=Nyc*aoU^2I&_+79tDI zuSxyN5p3KK7SRhf^$j+wzQD1$GV@Kt@AN7S)A)WuX1#f(Azfr646=QM3Zc7(ji%Yz z(nO9Wt-WX>fdz>bpNk&7+1)s^cps7q65st0qUQg0Qz*n+{d#39Ni^-3FRhfApLRe} znr-M+pknAZ-O!owAQs=>Yat;%;~Dd-0G~4H0x-50gF2*F4{P)Zz@mgK>uEOlj z$R%9MKfK27P}h|%=Y9B5ZgAmNc`~%3o;*^d@ ze`0|MTEV;FP*hA3>ND-jflzS!v;lG{g<8+)d?1Fq@}~FjZ{AJBf1t?Gi4cgWQu~V_ zfv^ZnA2;QS;vd3_f0~@Sqw)Vv4+2=+_%T=Hp)Yc}_`av{{>$`> zOu9%rfxnZqM2EhhpHa^<>7u$sFkMS8m`pAe^TK;TQAc?Zc}h{8N>RJhpwnvjQ_@{6 zSA2gQWE2h|#Y0IHIuuWYFVy8Yvkem?#)lWVo$vG~jJ%vEUSiFqGi@*3xEmI)1805t=z ziJMmUG_!dY8XZS71wCn;`dU1eC|Wf$-kK&@yM~{*&GLNf3IBa@^26-se49_yajOi* z%w@eKidNj`=Z)yz7%ri3s+QFGOn0Vq;OWm>@x$0`YD<=s+egc&J9vxF$z9uK0A{t8 z`E_IK^4D7OorIG=(q~(m^k5RN#gOfmE?5K2>0jB)LrVAQhR6=+Y2z2}>)g|S&kyak z=-FS^g#5X=JXTM(*vyw|YuP7tsZQ>z`SbVg_xBUY#smK)h_RjV@AJ@-7bs}Wl5{gZ z5)u;Ginf&!MYiW`eVKwE39J-&4HLb!i8kIRv z$5+|8_!c*uT5q2rxe8CWW%M&~`ivj?#H+U!+3LF4PDVjQts}2ObA!rC65i}@DeVkg zx|n`HuUUr2FpRHNN?5j^`J_AcZT)pb42bHT@25EnxD|!PNNor_*~1!6$+d#T#Wr!>+20s1co+7jj&NNB2f`U9^IKa4hNpm4sNkH(Br9E1y&pt?nxA zZnkixU5UZ%So-#*R$Jm=ITbz`RtD;cbXGR zPdbjMHTxqIn^_fUuJ~@>NVK%O9Srg)4W*2 z7cag7Jwxok1~~-=*(?+8(6_J3EN41$g}^{c#~(JM z4_Kpp$a4*)pxp%`o-8>oRdVR7cwJ50whZVjG=N8gBHJ&)>|JG2n6){zZs@Cv1ZN@< zY%R*H9f*LFp|OX|_#VqE6}9`_4EASs6cHDw*c&v523>^`262>aa=&Y$0Ug$qH_$RD zBZ^e{mIPZCg*ZG>&9`CtBKmYr%~mWcc~Tz1T3q`^U$doPu@y1gP&?@z&{DX;ffVl7 z$P_}h6glv2gA9TRKE4tU-Ig$AqkxeARjuOMb0Vc)m3`yI_Lk|kf=E)!FiYicpg8_Q zbg^{G*osFFubylyrvptYRk-y!}Z>^bz#yHbv;NoKucI#iv6 z47T@?T?i}iVyLxh!?H?8mXe(KAY0V(C$F7~oUHmiuC)q2pJBhm%LF#OYK?yeu&_Jh zKBlXhvF2mN_;{0yhz3q#<8f21x%8%k{YpNuBfGw1j7dtPF%*80WO6i{p4be3N5DFz z$dZgs3dwFI$_i&_ z45A&{;(Zs&W~a~?Ya+IdRtjU?>=1zEw#~<5sOId5@y-?L3IXaor{Q`upH`2j1f6ij z5a)T`ta0VeYlip{0UBig#vj`7zvisJBoU9bt(aQNR6+z z76@EXCw)E2{JnchC~HMw6G}yfhZC>T(J}7);#Vpew^2+!HHSM5l1zQ*ecUkZ)C)3V z2t}FmAQv7kCPT>xe)e7Uu`^{T7Z|+bA05;9;}M6<5JGC;Q0F`TR~+|z#R8@*`B4s* zxC4ng>evtJ)l!HHXE4$KqUf5+r1`n@YwEXp{5MxnTjlFSgKZY?-`^VXvklNTUwo5lSs<~&_j2uO_VJ^wEL{r~e zGJWi*Zs!I4#J6W;=>b$AYl%g%_8BzIE}NW^QS)7J&ZXu~B>Ef^VP{_!#`s~dN}C1o zeNy_UeH2G53B~^)B}ER)2^TcmxJeXHA$|vFoRiUmp+V#!MGo-~zCfjUL7{r8>}l8j z+k*7%MrH?KO@pj&Jc)MV${B|~Vbt_*W5pHup2GVyZ`pKh2hwl_%*xYKxl~0#AoY`K@;8d>{X(fduRqKBtqT*h{t$D}5G!ISc% zG3TNlQ=mbo9C+Y?eiZ9BorsQj5EPCw)|TJBK_mN^YnCwvc5*sXq%9fpjxLxaWYv|f zms$@r@NVrM9r|woQP2Z7)WCnf{5e=^@cDlLL=`L6JF!__6uj#H*UO*(86bMH8JhE7 z0HT~@25;^GqK#S@vy~PT1+PP^Fo|mH)&^3QYfBazUG4#*gSDkgtzKxjv?_IFE1mZM z(Kq)m@Yi}_jLK>E08!KGW}dg0h4q5HHt90HXV$`FtpYT+LR?iMv^$+AMuQQzZem{p)BteCMpbORP0Tb1rcz8#Z`4>GOV7t0S?m%1<)8t4(btp;b`^Jqc;bm%M3R`z z$iqkobSw}mDB_MZ(o{#^`~0B++fke}W~VC>azS~kA)G4$uu!fZ1x-EyO8>!dzVT{R z*+)MP$0(B7zQ2~v>Hak6CCuVF6U<4{4`Wi2W8ct*@AbkYEDb5hxnH1SK)qg#X+YfA zpKTe(zoPfu)C-3m-BaB81;%V~HM=OK*2OAWv@C!1e~kub8;?k1UAhtrqMp8IbBEda z&1JyOSPfN}rTx-n6-fOCS^U3K?Bu3 zqOzJ6onyin@qK~y4&umX^lIy?j`{a*(D(Rt?5-x2d+Fl$)IAC=Oa|@|bDykLek9@j z3}>c@+EdE1mU*kY_=@UngaFn)jC0dJD}+yq-Y1AcX;#U;Mw)6;#E^PSmbJ1zMUl-f&O}Sv-WL%%Zwi=>- ziK})qnOrJGil8&Lku%?@4{3~FH0Xa>_8t|&HLZj&Q_;MEdlTOtTp#ni?tmqub-y9n zf++5edfA8yh0n8rv?N9Ah_P-j85Hjs73?JXuxn5vt;AK9Oj_*8mm9PTUv$0x7Rjhk z>>Hel;GWlAz|s5!A8B1%+IqMLHM_s`(H4OHW8DeeTVDn<2u^d0_8!2am-op$((1}I$ufA;Q5eZ2m=ROz9EQrS7)qmFv_|&r)9b1zP=W;rdE;Pg8Mrut zHlUuft`e|ZQ7{!21Ha#bw+ik~lC-sdW9QHzU1#2!jrs*dPH2mfXC0s;QB;fyI%GCq zC6%*&2C*-aar{1mA-p<6W|CJJMT)wrEVKjYK)Qs{6SZN~#sjkSmX>)76BPOaZ1^4{ z(0yI30@~RG{Y?Qb;uxg|D+z#`mM>-Nt5iuXR$v15Ghs$Wk%Eo^+bBy`8FdE}uToJh z+>0-eXDnU`Cp%J+MbTYsWp4|a zPv5CQpK)eivzxb9f9tZmw3ld)bQrz$)7PF0<9xE$AJ_ zQMl?WA|{<=tT%)ys+Ccunbc2No+^TWgvZpf42$PUTVla)mNTjkj$Q|eq8h>+ry19i z58Jl~VnUNT+h}IXPUmQn0;2WXn=k%j&j&kX7TmCV66AWQO z&o|Qt!l4wC?+P)6#D@WWgDyy1-M)04aNh0vRc5qqMKi-@290PF+90RCQsEW#RZWb6 zmJEF9+8glemt7^Y<)7r|GzjcmC+eVKUFru1R>7a$7+Hpe%Fj*rJY7CkGwXoDa5Gv; zn3NZH32^4_`1d{)SJ8(D$+g60S=M}pjPOgW;r7!LN#qJ-NCNaG=12lCC(kFkjka_SvMx#&V$ z7rQ^$MgUB3C#DNYl33?Ea&Khkj$Ao}Q&HD0d`}O0K^jz-IPxj}#DKMDw_(P-VyHa% zcF!UZg#RMVXFYViw4-3z7x0&8jWXst}^fY?MfB=IFq zmELa(OQPqS$`qev@iYuF(UZ>{U3u|8{f=#ne*^WvdfJ$Sf^V^$wo30^cjVc77Q^&b zVuEmTgT#Jj?QQlJ5>|qgY^%TByJoNXwiNo%Lk;+?%tWgro%}?}=5Fz3m2B9v@8OWf z9lY+|RenzRjnxC>{XzH0{WOrZ6pY^`5A5`UbK{A|MTrUTcg$m+zGH0tJ(`?>z$Bk7 z2t}I5-249b8N~r2oWl8iD5P|S>WH#2MR+cJ zUzXb%8$RAj_l-Ejg+m|vJP>=T3ygssNZUPR6UYSffI?FrH-4QrCRXK)AR|8l0$)nC z4L+1@wU@f&6Ho_&2`{&Hr3;}))AGQkq<(nRC#yR0$N^1?)nC1be&lyVLVS-}eP=pu2%qoWqU$k;@FJHLh_%272Tnucu8m{fIf_LSU$Y zUrZs5>4617PG#hwRl1=yE};yL>||3!Q5Re`0ikU!{?zio6loY2!U58T4Fnh6`Z z2pc629~TQx{fLQ>3@4CBM@4xylVE$7{$!CnVpS|+T{mLWC1QJqY`TtkHzDLmn5>c9 zNJPO)*c*BxMsm0fd{1W`ea3O<7UtdAWanoGWjX%KXT!*lZ(~?O8}e{ z4kIvx;~nCYvlCN31Vk?ch-M+g`D9x<1nKMCV3xgXeDMD3nRF>be0 z7n`?f{>t^8TSoX>y~y>LhXB0-#$hzpnVuOo#E2b8whOPkApFn|)=cNyPmkl|=af@a z1N9MeAMk(D1LQ!&k0qa<p21Q-)?!MlMrEDN>0)#*XWyPPwMy9>>pIa{C{J&R?c3Q>3jTAEvGA zrER*VZ6~JnoJReeP5X73c7RR(hT`jq-q$nNuNR45ukwwL>%YEUO}(Q?r$hOO&YsT6 zfKg|Zj?<9jU7t>Hl@3rMAmRw-&NN~-1bGsIvH?LohoHSeKpViiKt^OvB2$PX+6p?O zTZR`RmFp^lk1|uBft*J?Q^YM(EGbjGA@lKE=F_W8Ny;o~@hn;WEIGF+b*Ci>}ts(dGT&~Aeu2%@cmNE}(iV#rBsZ`& ziU?Q}X9kE`8;XAnkYZdFuZowf>zCwZ=WS9Ffhvl2=1P8Dl^jr(9*LKp=$D?kmAXaKI!LVV z&wZi%yFQ-IJ3kk#_&Dy*edj%4f(J^=oiD?APQ32VeTC7q%4Rt78T0)Kf>u9<{)i*e zWkP9H8>)6Df+#ZI3^!EoPL~-Erl~g8?9bQTpZkUzYkx1b`Qp;4HPxx}BZFe35`&g$ z*8Yei^zy75cV;TxX|tOfotL(C&X8BVIFskc+omt=>w?!#Jzq==etmv*DPezdyc-#@ zOPBm}1Xi`+flex>CyFX{^i3EiT%J(Q=0-5x8+$`~#h=_PZ$)j+dV3`>qh52085(Di zp;UY`u_AE`p6mtS09gXpno@`#LIL~}lFh%yR!5|XzDlNFd8fU}EeE5RE!`m*dC z9$zvEYU;da*3f#BzY+J!X*P=IO#u65f=OI3@l&&${LLimnjMxGS555Z-ePxa>k@rH zZG`0Eke<5x@MZpsG#^T`Z3%hxF(SZTGtm@Lq@AfF9==MkAPO`4Lws=hd4KMU$nIAA zRxJwTAly#aq}%bxmOdMUkf-koRQZiLi|cgy-<32O&8U>NQPx?Ob&*M_)X(WmxueD2kmIs3^7fhXh*9~Bz49-54y&Jej8AFZP`Pe+ZAXP z*0x35LlfUb(a+-9r!>G-OAQw2d$)U(;*N<`IV3o!$7{<+RP|v*5^KNWi!|Ay79FRe z<;gh53O$gGlh}LmU8maU#{k78y*dSv=Dx7(4g!xdKQ{E(-1 zJ<;FOpwJ_bbQor#l1Vwe4YNld6X7#4c2nu5q8a!1wSP51vSAeTn3UCqQi!1LW;<4I zY~5Q!1zQO9A@Q=XGF^b5)>k%keD9Sa18n$;KRz35bSNVDq6BR-nFzXLF6mvYODIu?)Q}||0mE&+ z-dolxU+r{}49=UC{5HuN6?YGX?SPYXP_-f-ky5nS$on+BPl;>{N@F1c?-8WKd2;x& zL*W@F&Z8$5{SAuA#vvzJ4eR+Tld@)63@-63%!LdNpxYpO_+{?w}z-N*~} zj#Y5T(^S7uY1IPF_<`?ylU&+QCh>XS9)0(J6%BpztUy_MMWW=clK?%RRoihc;eldT z5kCE{LX#WJ%}@)`wnC+k%~W5X)K`M-$|<|*JKZE*LKa2!{BzI5bkaMeoH}}1pBzhQ z7o|v!mlVwSp>#vPoZnZn_B~0LV2+-Ku8O)tYh#RY{Lzst>L|`)B~8xR;LmGJIohBc zp-|WilEJSg{uZm?p7>xpqXS)P(|UMT6)|lS$5PikjKJ*Bxz*AZEQN4C%V>yq;d0KV zw<>UwdA7I@34H}SwW-mcdwnQ?UZlQ(10HHb9EogT>Xt4AD3tuggF>0S=#{4$Wp+M}!Ib@+$nKV7LDWcqi z8KZ!ItklaI?#i9{t~oBrLmCO4Hyj=agfGI-JXXwjKLzRvRGAj zlnk!M6Gj|IThezH*$km6zl3aC085Rf%?Tv5I^Q|-r}jMNWU1}&Rs0P4db6pVb377xr*FY~`_sTvG_JMftoGaOFZYnEALk%#Mn2Q? zgJdLou|(_D^tZdSiR|-Vk*znysJEB%$h(Vgo(Mq8<5ti_=XT2zRROXr>V@gz1xoP3 zsUy9q_G&ACgY=?C0w4liZ_*&hsk!A478nKPf1kAM2mh6{{$^|4H|+N78F7CUUHO_A z|4?)Zt_-H#!}0vF&Ht(BdanlHS&99n=<=0Vd$l+qoC7PlS9C4zDBdfwENJFl)rl0} zE4rBP91kLG78+f!l!gauf6vGJVX_=5i+u>}2qJoZnpMX?R}=Af!@e>2e_ z(xMWK^^|W&sFLB+_Vt zv{>;cQ_TZBXF%(r8t`{P20RRL7DmrI!(?%}S!pNV`POya>i~tO6y}*lHuKgZ9=9;7 zMoMDVPee+SzF&tc1XO86sfg^XN2`yU5Nh7ZzRz}7{weg$<)zaOv()jZ?nb;x3t5;q zCPdcAW*^jLnuw-&^qk&qHD)mB(=WMPNv#z4mTDjLI5ORnl#&Ti8*99s5hn6;I};|y z@!rh=g1($ZK_3F7)jTw26Hnk_9?nDj#ny`3d|yzMB(L&MwiXUEyk;|rs-)qbt!0x1 z8;|vDCAHcs?-Msss2Hko?9-kZ5`$F@>)?)y*zH5UR#WqL;?=&-NBdP58!T<3FpiE> z0)2$z{OjIHcg^IWa>((!*<&{JcZ>7R;O|yL*WKcr2V{70Z9{k zP%LxUO>VwG>EMKyci1b|eD(YbG~W8CKiE*_NU|n)Xxdt^cxholkH33+ z@A#V}7Waw9B;I0PM&7eyJ3%?z6WqvVq1U=XS}#>U$+w=o()345Wjvj}=1@5lGKp6e znIUSv;+_*#Jud09CiGjJV3Cp;ee@CcgR|rJP2_FdxY9L^(6Ucv9FEkFH``9j{%HG7 zYcdi9m&0MtODfmn%uDLWbPQA}$CCqj8X`<1ZLW6mM2U@lUcG*Osj!Myb*?v4VROCz zdtdWJVrJ#n_3t(;-kXE27dPSE-O4u#M?<2&Z;t!J*(Y|9>ZRknjY~t>PXk)8zdYyW zWvVItZXf|!)GVd3y<8%*zLS3Wb>nPrpDg4~wVYQ$_4a1X-AVbJNa6RDd>g93b8<{{ z-Tkzz7W7qFau9VNZ<-E1h~SwU0kI}JmQOvN+kr0>4*`;&N%Vk~J)*Tzkyv(;HcKq? zpHc$jB|nRxm@D&`Z$QYSCa}`}JP4G;%K(sp3SA78hd~NmDtA$RUGl;0&_fp^B7SBJ zzdhTK1RQ_j@)-^WuE@|_djj%a5R)7Xti3-Yn{40HEZA@uZWp$uCrQSR*MsRwfMAsC z(ghyfp+#b>WG0(*(4>E41<<9|wOSGq@)Wz^c=T}$hW5BVMIo&5Ny8+iL0?m_{i4Zy z?#tr(C>xk2bYwXz_rW^5`l_r(T8t_e5?-n21c}Bf-+0fHtsJrqW=s?cVnz8r7(+}X z(rX>b+6q@mG$S7Pk3K=uXJLTKraW^r&CC*0_u(l(s3GEI zT<;koQ|z=P)fUk#4`G1C$#ZSIb@^TNfv|{^EH>4ArI!QaaSbQgeBt>j=1LPub0;}s z!})5?0~2XiC%KaN1?quH-!pue{pFs;%0~};AM%fZKDH>(%2k>y&_6BE9WKzR9hfX} zJ1u;NU#Q!wG*yvwT4bSGs6Rb0Rnu@a^4gzvvy7 z@=OQiS=sA3X=&onnF+o#Xyga3_Y4NWfRcz%9F2k*?{4DoU1w#=VwkxU)!a~6O;yH2 zZp)X0b0t^h)n(zu*5=CdbI45$+?stn8;pwi1*ZVK=2LDnC)`&ncOrE?#dsg#$*%^9 zYwP3mcpP(;7k}!XH_Qx|_z)K?{&G8ST*fbT=~e!5lyu(on4a6MJLAWxPj>UK4V=$w z%1c*s(;TJEr5=TA)wfsEk6o^RyLz=J@`5hf7Ww&n$ZnwB90~1O9}gtIAH16xh!%j* zD)`ff#o!@*JE-4;1WHk_W`((QGLsGjzgSrDe5{MlWy7x;1FQuNO*4Hc;+L^`458ee zp?`dLsNzEnp~H2hmnBtGyi5)!DcNvVD6ta%Iz{VT8l8iUBAk#&wU(yKW6MSg zQxV!`_ocn1!Qc11+}oKxoTa7bk0g-Dvdfq1f)7Y7{t5%jK6oPcVE~Y0Tk#{-xeo(> zYL@_Nr~BFk8o;(1#1t1aBgB$(zi#KM*Gu`9H$Is4Ursld*fy z=E=B<=>Exsx;*#kcdeHnPA7HEi%+LsIq#oNzYF9(n=y(1a5ii4g7o>Eb?yGy=vWi? z`GVv0hx0`cmXD~){$3RRgt!M5&&9GIna#yY5NpZBYMAJ+i#3=$&*gf|OPkA$1oMB? zE?en=JXhOU@qfZVZUq06g4$o=UQ1cD*AhSR4X$^|0#>i)>dyZP1FdxurG+me4*FP2 zZ~hJgqw>7BC*NP%-k#2wm)@Q&$oD(tATHVv-=d9Y5mf?EFf3&*JY8{mKTHOfFk%HHQ zajV}jkjpix%FfX54KBwe_b;55Nt(UBxq(#b?7k}o5G7aV|J$vY|Iaby4!xAm3hS3e z|GiGD)^sr-{dS(>?a0kx-sWg#tz3M?w1iGxmemq%!?@B0GVkNPR`*B6f#>=_;ag9t zX$g_ORQSnoOUsvzMRe&a=l!f?&y&SKbsp4zjVb0Q#Xn=J$%(XJgt^NIGyFZKUW^;k z%Yo7w3J6ZN2I>1TEzwa5EeHp#g$cFvsDz7c22F&EpKY&2O4?^B!({);>@|MR@5l5K z_F3)En9}UXY{aewUqptX(i_i0b)s!V?;g7|FLPfY%cK9ds%ZlAH8pBRf9&(5kTxcNf+3U(t$|OnKbjOjum9cnB% zy&bPp*3cjSPiD6+K0c6~)%dqDwU4Ka?^7okHO$hOnCT?5sbr$jtjt$i*54qj0 z9)El4tc5qg43~z9J!UNy${iEhcbrg``937ECAS#WHcXKJa?&a7_}d7JAvbJ#_-ZY3 zk~6rOdd8yEUtsJ*=#A4t#+dXdU#Db(;DTcyGR0wu9f@Dp`LNB zRG!B*a8)bwZ2ixeN?d<<^LErf)MP|5-cz_?D=&9skykjn_-ePTm*;w~YFh2X!{u4p z--w34#ubYI z!k{IvCZM84i)?x}stq(ji>(n-FTFE;p+z)V_g==X@Zb+jDhQmHeI29?2mX9v2)tzb z28uaA*_;pb#NI_lqJ0OtwTnna>bA?!tNjEu2{NPy|LU3ZM59yqsedw7{U2T%=49<^n%FqQmQcuQ& znFrV0psWg*BoKPfEKn9faNiSxEHYRnK~_E z6(PQ&nC&_~p?KD09=#1mKL7GFC}dOJItX|{NHDG{p40?SF!ae-Ya~8={lR767=@M*Zi3;y-z-s#$N8e zMR`Qg4mm5qrr0y2H=gMhKP!iY7n!gs&kpFdzwQ&T8t0i*1|-=V!z!YTNKj>;jb+Rw>Wx`czBo!O{U6 z71{M8+PIFHR&hI;q9QkSB~IB_5&M5K`|HHr4o(^(wVsA`)!%lbg+I$C0L`edh6@(A}`7HFml$z7&Kpz;ob(7zqq=|Gj7YXxh`kBh`C z$Vj`Q2e0+CgLcX;D6(QD`khM`7CXO^c$iVES6w%IPd^>cJfTzDeLKoC8s>1{jv6>3 zp5C{k#smFV1ebjQg~qt`!T)GSD`Ik0HaHAsMRXbjMiOv<6F!?b7T2u>2IXT==V!LtF8t{x2!~c}9q0<$qjyo!Dge?sUT`&a?QB&-+PU zsAouA)%*M9=VYO7rR8E?<~xn7cj$LBO81}lN((79{g|jIc{_#0oWCx;Hdz1ue_eY0 zub+1}8{UEj$L6ffL&u$tMI&dcdaHOz9q7mCTaia+4b2{yn1mhzLlSF!;DJv&tP>Ko zBdNyR^367gYA)1*$yEJi&r6r~x&sS#|Wfu+ns^iox2#3pJOKf6~n)Il*>(wVxNqiiJM z49qdC;q-8@j-+2i7+6sN_=3EDUB`tsd`8Glm}tx*bw;utNB@|`MC~zn--jjX3FQeR zOeRMQDu_;hOql+p$8KGxI4D?yGpq&`oQXxFIUv#6l(j8K4nd!mz@ioUCgFT@yejp| zOg2+;Lrj)I>5e>LsIaUBdG(yH>I55}E`%YB@Fi)t1o&MA)a)kEE@Pswtq?m~r zqXp>LXxwtKv`pg?$)gHseCXYJFba%%7WGHWlV%3V?GSOGq!}m6Ms=v^k!F6ov{134 zy0j~=^n4bhIuls$ap zOPg5yRUrLzWZzW;PbvM1`1l;IqcU4x%gW0ofcz9>-rUJBbbv{Wl3f=~l3?P<(d#V9 zEj%H4=?C)b#ZqQ(Di0*&qQC!?Uez(HkgKL89-1+33?1rYTuO418P7_wAH=xS{HXTz zt}^@~CVS)PFn9;aJt~6n(V#Xj{!L6@!FA%SVB!c!Yfs`eomQRH-R%ok87q#gQ1Oaa zzJ^oc&1mB}xXrhbJ74^7PSdTNdngw$u=mv2M+neWp0CR~?mRx3`$$9Ua#MLM`EXuX zOf}D{=a*3}-ZTDZ;Wk3^$GnqiqwBQb^AyQjuOAx1_nuhAG_KA!>ht})T2D2H4dj~T zP|3cHX5l@92rIZGUp!}clKk6KdB?pkO5nNH-T zD_~pDfC{CWb=> zHZAO1Oh~WK0Y1IzwYtN!)&b`7GgMjnD3%4{7u5c)|9ll2+Oy|3#oshb_Uad=Sn! zzpqO<{Ta|_&&R-DSL`4lh@q&eH~{xIt7Lc*%Oodfh(!xo*V0nmI%2614pI>=l0%u3 zd}R^kYUGM+~^r|Ev)iP+3gMHG6E)= zZAmO12BqnND3)LrdT{V7Lr~#nI8*mU?^}5z`8pfF6s-qDM#!w*RI{9(Vv=cTw{1Q@P3~d54H(>;f1;9|p-6Y`S0oxI|LR zTh-e_l-?FEB?zPmIxoxe1R?g`jm!aNk6$)?KmGbixMJ4(^EC50XaCbNPPqTd2WD7M zid(F-jBh#~W1)%dXR!tX_-^ z>Yvz@Txs+oXD(Uj&;2l7pq=*3n5f(_$6*1sG-AuXEvu+O$6%qtyE%pimlF)SPE;tp zV&;wr@+&?X4=Rg=3jFftVH#U|x9=v1`8rI(`U7!`2U8V4y`UlSd`!h^7RA^bMJ>-^ z3T}fexc?4DMAd7!QT`Rnj~2yC6)e?;@5u|Fc7*hg=3|VA?p+_@JS~?H<)k7p&KD&? zTwPqiywE8koW1NVY7icV-VGfNneZt)l2i1ZCAcyLwaFBLtjy0ib;b_%!sk~40%GnB) zYfs^kmrBrb%3al&V4!NzmBDlKk&#^&;3SGJPeR=o)I;228>qNRvJ~ak!xUx6 z5FAD%Fc4bSs9%@xi7-`9+}rw&F;G6JNNkBXWvwfPS@A}OGCYn-`ct3GN8Wu0RJU$N z-#J>vz$12EV!m#g%}(B-vPvwAu!VE_?W4!$E@~J2Nv1`kkuAsz_+mu??#DF?{?iMr zHA`>56sR$4aMGCXI!0>?SA&GY-t!|W;nJ@xZ$*LbK%nLx&EAO*Lbw5jrkE(7lnpf$ zyhVJ@$rznJ5gyv$qi{9#Lil9eCs={!zSzH=!306v`Z2^t2ZXL>#E>AcZH@<(Hy)h{ zY3Vut<+-Pvp~|T-So0+i)cqNa9|uPacrZ<2(FtBT2LwQ17iRFbJmh&Ez)qyZ1GdEi z4={9?&N*J@mkr3hw9M>!$_wM;@5zX}B?$t0JQXbs+Y{ zmEI)$ei#S`Bw!h%3E<5DO=r)DKwz&ZB?l3p9r=!)qmTtup%R2;h1rLi4FrN|FKnuhl3u2)UrKJzuJ`WKZ(`14NW0VIo z`B8>%IKXrN$zX(W-3xc)>K)@~@hT*Kp4$|3}4-5 zG9ab2?t!bq?e=L>;lCiN@b(Cvl~DAR@H@XJk`B)X%k?4U1acF6Su)`1bI8w+ufo6r zg5=<_obdf^Ml5#nu6Lnq?cq35k;#ZJgeZQ<13TPuzIN|0Fg?U8;US!i2Nw~>f#Mwm zwz8@Na40^I){z&~fse!h;!BC>PJaNY;R*4^x3d3CsRKluKjYO4=XwZU5s4{dgcB)J z#*boo33}o3hk(E_G%jGw%r{zMfL^dK_8|`jYOp8*7S11yD&?4J=-3+rl&*pA)$KEx zZh2lB5duzi>cMyDk;rsHxBPf=DYhAMXQg1ktRFIyL&nY$i`{NldO|p~LFq9A@u?$W zo&gTLys^ubRQrJImq4-}WE`C>PLIOmlF*leGW)_n{XHNy3y!1!FRJ4k$UfrRrPUVA0KA;k_?UFIk_hD zZ@9sn#Ahjp6cSZ3DTw@$iX^QM@Cm#VsK@X()q@C7{P^{N(L^s9xDP)fh0i;=ek%2q zBDkae9l0wooRbh{_*EMv1;_CHNS9hvU+l^bq$`p1ygLmq8}bXA{HHGY&)oFuVDRm% zz`W!$l8@F**g>e?X&dbTx@AO39x!Q_`YkX%;-fE9yA)heNxD}b&`6-WAS6oyKS_Fz z*+9f+>GcI{Af;p@!2uQ&O(QbINK+tb08z+?0JsG~*kdpPgcW-TskYKDOkAd z<#<5_0hSG9ok-Zz7nV6>I2pnpwJc8a@aWmx+yJAjyk^vk|eJrD_vQR%^9Q!8R2C?EbX0_G3d2a2z1+F&Nv*S7!px3P>jAd|^vt3fV~V z#s=309M+if*UL`VD4{esW=DM{iwQxgbA(&uC`00K!7}dk;)ncaZeLwB@k&BTCmy(! zTR}Lj8rcu?9~jh@^$O@=QMLkgdSgPzK+{Y53Nf}gcJC(HOUkC*CVlUMlR08;mB!ifimidc6-r7Bx{8h^=}84Lon6e_!9{>VHCe+DssRF~on z1){rCQKQOqjDIp+Xg3iY=*0d_$)s3@1T@rPQT{CBpp#OH);}{0BgUxk%$c_ra<$uy z$&YV0BxE4P|Ba0Z#Q&CHuZP;Zd0sr#M5Ft018zJ+4<>)D+YnLkHP{c?+lz|ZU2#q5 zAEe@^0z1rc#60wO)2Kr-whqfeCGtQlI;DM6*Ec{nV#~{3+njumMGl z0c^u|GI%c>T$FnMzf4(ACRO8(800r(3Bc3OP$pq*B07W(F`{%>caWEFSWtmwrLrhn zn#j`kARR>z)z3p^(Htk5LpX+Mgi-|4D%u~4o+6irNZXSy6Nh)!yDX{+RzCyf%Jt~{ z4#b1RY>D8~Cdl|`cWw{3ioAIK(sS{%`q3Ov9SR{$B*MJ`@?%DDq{adZI|-#k{87Hi zw>SP!k@jcCyS4^qSn>e4y|{FlpSL%YN)~Oo3Jp95+DMElOe?JB!DDSWYh_J=MCeE#rsxUE!DV-D)w zl7BYKe?C)+LQwK$n(pHSmG@l6;bcKGa56BrXAsMYprp}$|DAdP2@I>a&j-^__Y{M( zCccO?HuX1?lcxaDkAl7}zA5f?n^dJ7YlawF% zFWDPD{7`cNit(004F|sugXg)4Up=9?-Ul-v8cv$YFQ}K%pW0cyUIwKtyX7UJEzSl``^bSFV3o0nBejKU zxJkBx*A&>`R01(m3;eD=10BP6`9b#mLD3GfKLuZ7`)gx{a~kB!-8Q6s+i6V9Y+NiR z4Jz@6TYJSN5 z#R$+YzESyxg$29^y9AfN0lFf7_NxIYPk|aWV2}qGD}iKV{UkU{qZZnSAoiKZb`{(A zK`6gQJb+kkpd9{lfM6d@DzhWv=gzMr?_zNC7=F{ruMPFz2{J&r_n!A5e!eEb$q(S} z4T0(#drF2M5@|#}X$Q>ozasgm?4APP=fDpeaLg6qq21v#762j1L-Y-d#|w~VA5tE! z!zPGGP3IrB+>0#Mxgx=&)JMF?B`^z;kmJ!YTlub7D@4-^;Ay>g-hUPTN~Bk^tbi3G z5eYnd4n9FyMU_JBxm_1ihZuPP@TY*5qzp;giQ69Gz93j#0&tyL1o5AtqReppnndM4 zrTTb+J>L?RAakb=}wNhSqB_+sh{8bsODHhs2Gn+-8^O4R`rfU+c}#(v244W`yo`T;lfo z+uJG6+nKMobFH@v$fesK$lGPQyH&!a7G8k;;(`(7Ru6nhGqCb3kD&} ztC<7Cu3!>gvxS*M<36}|N%X7PBhw)c_#J2b?6LVMg3yEL_1wu$SC&R;z;)26sYR*j zH#6i+=-G#b`sYs9&a&sW%k8m8q`zj~eq1+y&1(K5#p&_ZSoZT;@{p@fd$ZNHTR#>X zZN`OLBU#`6xN$wPF3vSy`f=-iak%j<_wCZ%mz&Ge-&;#dNY4konR|4rs6q#AU-Onx zq%f(t_WVn#?Chi)sK)Q^q3IaJjg54*3rd_T%j zVkfQAeF?kjc!q0r0#E1kAl7W4a^U(I3T5B>s6ZEO4Xa>I>>5$XfMp#}ZD(2A=ZWQ9 zs}Hh&ay(MxtB!`}@q30CM{TEby(k-D8nA~(j#p?h3t)CIJoj(-eEcm=>(PrcA^Fwl z=SXh=!%?HKOMQ1FhFJRqDnU_Ql_iGHNt`8vophq9Zt5F@P-2d9L}rGDcMER2Zm^ zpX%GtM2k#YcJ4d9>Z;&=Z(u*cy=M@bcWbWmi8~Xb;-Dxk`sVYgku!sH{|x_Iul~9C zbT|BN=_$`jhVs&fXgoIWpc+3#4Ffqhag4liHcysi*;_0PTPSNTM8hyR5)r}jIu8q@ zgztjzB9=~PIAAaT4_jv$)K<7QTAUDU2e$&jrBK{05Zozl#k~}_VnGw!3lw*4@nXfH zK=I-&MT%R2LQ4g5IcMgZJ6HZ@@*^`llkELI>sibA*KVdQ<;t_yO3AG(9p*E?p}CN+ zb^AphM$L8#opsjP#E7O01<!_S;`znU%r9pXZ%p)bDCf z2LbV)R=Vu({`qFdq_|86u;SnOy~>G0`Zbe3V(?!zAq(>t`yD15@I~9;4!V36{_E$L zXtYbfS9fvBpzX|eE`bKgs%!pc*{{M`c3wY`{c}X{S6Xgg-{1ORvw1eWZ#Bni;(5>w zA+*2oU1-hu!7z1Tf8kif>E+46%52BKNJ@hrNCt55PkT}UooM;b4`WfnMG%Gsr~Hhd zUKBNK>yknOMkF_a===KtjWLl~9zekr9aGDwAtS*UF~_RG%4Vn{M$;c%@j^zy-gaNW z0EQ~KkX9+PCGOu>>}Dr{3SC1FHG;?O1p$TxVMAipXk_0N~2brBJ4^GVeySH^TfQ z3>u5M_H6c221TBE`TBp%3WD5xlK--~z=%WiVmJ&-2_0RO9{rgcF(fG?7yT?_$fboc zFf6C9G%A$P$Vke8#{>`@YLw+=W`xHGLHWR%CW^YTNN@S?S>p->cJ!&CN6ccP>Js`b zjBAH&j|JXOs^eoBj?vsaUcPiyap6)8vva5*gE@y*fpda7MHEaL!6w2&OEq@KOh(Va zf)jOVt>)~FJip_$SQOU6S5pZ11_^wMxqtkqtLI zvJKNp#}20GEhJRbl6;`uMJx9MI|1&o`Pn z3mlNH8kqEa-t!Fn6=nIIL%VgG{Ye{!@7L2YocEEnQz084zg~@*^!=!O5q9?S*}r|0 z{u2>C=Q=2$UxU+Ygi=tlXri${e<#94qlUm{`_fTiJeaawt3pFa`EAUhn?hUQ-5+UN zAl`I@mBSmQ-J5$^WI7s~J|J)Y&yM;7%@{AVvyW@ZtscsDag z1yd9S|EWU@&i`T1!FgzBr~H4BzIcH3|3&)jk}gv##vj_*{}HWy+t zciLlzCo%7)j{Q4b9t=97Mi}?6I7;P{E^s)g4g;D8LI&@H|5Cql6n9%RIOoX?Y&wVt zlTTz!CL=kD&L&o|1;v)Ot?+q+cDGx896fAOeww;&Q5hmJ^CNVa_nMGb#!DuQ*&xH! z`aF~zmqLEW^gW`ZPL;asy=_`l^-l)$;-#+SP^UIbQ8kxqoBv=V_GK9(6BnTXp7!!P zE(tll9a3$)E%{B_5h`=vyH6x)^pE{kV2IueT|z9!sx%7R=VEgqe}7ZtW1}Niw~6qhwXJlpajH58j2;_wg~4>rWdYurLO zXHVp&r(iGL=sUmO@}J`m-WZ+avk=`a&rk|BAWwIw>e7!Wu2j_%o*Llhv~XNIT2fb=C~gvb2{>H8nP|ES`BBYmmI-;Rn4{)_ab)Fkp3mHyE+ekvRP zTDVdQ9isWf-qV3HO~C&~SDaekcg->PvTjcNp@Wgytk`~;+5!>$3oudZx6Fx;#4S#@ zuUgkHNNqa2=2KdXao)`OV2$r{P)chX7w-A6E2f5IHnM= zDmd52NAObLs-2EvR-Q1>C6TWdl&!(vWyz^OLRDFIsYoo2bFBYog!O8ig+8lE`C5cx z%r%P0VN5BA*+ECulPwFx6i!6J1*-(u@W{{{hVD?ZL0JYNxAm7FBIOm-Yv1Aw2_>{4%*m~}W~bda7Rc$aJb+r9jG|C5M+->F|@Ngis6 z#3{Y{_rvEN1dC|KG;QVyawHX+qJ`MQ z@LN3f!~~}52*pats5U`*h6=osjP$-dn!cA#D6YA0oESS{x4cZrT4`*LVpr6L!6;g0 zrz`PVheag_$`Tn%V#{iCn1NKvbcNesyhiftArhi$G?;gpKhnzz$#vG?L|dol zFDl%UshTe&WlijoKSM&^29wa^tJ5m}3+6=MX`ULL9EP9z=Z`f&r#7~uI>^LTQ!K4?(loGr5~x!T7T zL~rqzSkn}42jxEQSuNU3sIKdwQtn!squaN#KfTVvoC~@MGB20~WsocP&3Uc`4lf;> zs$g*LG&sdh_CwKGh3Xa1p|HRu&aM_vWvG(JGD4}~uMCS>PiH#+!Olbp;(n(-=j7=L z{e;9}rWG<;>8hy1omi6>OP`KN^MT&+GA?eZv%k$Hh1PnNf>(~|zWAlGqyn0HC@Djv z-j6rHQ8kaE5I%xzBn4aW2!@rPZcNb<$v2Nz*QU`F6>0ElKiA9wU8fn419tmpGj5iA zH5V;X*&0LV9D1t09SFKxGz7N`oM*} z3r_}~GFLN}{wlEBrI`H9n$53fLO_NxGr=K8v#FI6F9u3rZx|<6AoD+fsLr|M}pv>vbV!{pRYRdE29tfIH2qWF!S0^@oQM0apv1J;8oUw zAmf{avq@c7D6cEY6ay6fH)sfmMvA zPwc#Bsrg(bbQDhcp_(mOC$3XNXYl3MPgwT*eLG9F%Qy2=H%uI<$VSqr;26Jf=AZW; z*dPD(h;`^1YEiwD$4Sn}cHLxseYB6}?|4TXsGNFbqOKwAhd7Nx{`{bhS_q3Edqtmp z!Q^MIQZL@}EXL2<;0&K;Vb7Bs5JXh)E928l2YaZFkNNI)77B!;TkcaJZ2D9bz05|GSeEa#gb%Y zXfQ#uOIV4CGDOdBE0bVQ$L*<=SFQz7sS%kO(90s>8VA7R0V{oy?lJ^6rnPH^nMzfV z3e^8OJGp^F1~v?-Etw*>=m|z75e7UI88U@y$(WXeJ|Q)+U`pDtKGQ*NtW{<(nQ{VQo@2s zSol)!90tuAyEeyV`I~vzD~iceGs%{|N)>?w7<*zv1e=2LwO7m*E-Z>5uH6VYtE1VY zn-}y_d34*QjQZf(7_t%vO5aYS6C>cRmU%q~@HX+l5>(*gA#@f4))h#ma0+>Xd2qZ% zO<$S8j$hr1`si{nT)I+)bOPNJ#wbZ3D=3%X(g&38!)>C0p0mXpOglzbq%o)Gpa<|< z6bQ&TW&4q8=rkHMH?X7xJV^lD*j?>-xV)pND(ULDp~MroL3~_51{;MwD*qQXXV4l^ zwiK0_6w7>#V+36eI<3^Ml?0>?u4qbUfxZ9`VBT+Gd{FRoCh>Rz(8S_!gGE_W$MOBp z4Jw#z2dO{sekSX0C-n#ER1@9X9a%1tb`lI};-(;h>n^bX&%h9W5x}aB%U|jZ*I=FX zcB8(7R#a_10f!T9NBw�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

{M62|}MO@H!T-S|LLS(TSNWG_q%ana)hm!*l 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 z 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⁣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
BktRo2pn= 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 M*wDfNrRN&^KY%6{O#lD@ literal 0 HcmV?d00001 diff --git a/docs/user/dashboard/images/dashboard_drilldownOnDataTable_8.3.gif b/docs/user/dashboard/images/dashboard_drilldownOnDataTable_8.3.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a50761f7bc2482975969f1f8b247e0931eec96f GIT binary patch literal 594583 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

wy#3S=+g&qXQLZi_ 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 z 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 z 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�dvwW|6fuVI65ktR7>Oa8gPo z=l*d^#u^6>d1#Ior<0!VxmZuZIENT{f`8`d)m5#^@#u|2uf1h&{cDai%#xNhj>3q# zgx9Q^n57+FfE&Vw>~S_POyBMYpg!y1hQz@6Vj?H}81)I;jnFu>c~qONf61Cdb+)x) zpliL8Blp_(@^E;kGCjP#>s{vL%1kA{#n71^hq_}R`R&;C8e3v|G(+apvQhV+lPO64 z_joqQe*Od?auk_@9W^=_gMtH*!jJqJvL4U(%rZ%^&i>RHbV@x%n)Q8ebBt=8-8iFu zNO-0zV0bcWW=6fsJba3coy9lPj}l5TJH|a5u`BW+kUc!0(!4_MSUNogbI@LS2!=s5GB@mC2VmuQS0crZ>^djW#nrGo@Nyx5lfCiy4u1phJndwJPWBpH*;Qg}Ra*NOmnBZv~eGqQx=}&0W1W zpEeT+H>`-i)b%r@Sh^Qq`~U^kI@f!|ded%H0YxJhRQ^zqdkP3D;SD|FpJyc({GrA> ztf+$h+Eq)%fEH)$mRI~8lib=l-abLh%Uz22EW{%i&ssc|T7 zrRMj468uRL!!V&3P9eg)O0i8--CL)$ZGsoM?eUXogAw;^j&Wn#sBd$Ic_*-Mxbp25 zuMb17+giuix{wHcBFW%u%3ZN(RD5@uiIX)MWdi99YFeMy-_~{?rXeL!^gCG$Vw1qV zDxjWsY^3}i<;%8u%7&2$!~XH6c?|tG-Hh|xov%Lh#H{JMlm{FmYXQT|;#~()U4&kg zbH$ejw1<(181Gz^85E(O^FE&rLMLfav()T14ppyKB$e!yjsjaM!rPN6O3G)xQ?zWd*$u$6%;}2qsY%`GJO^bNeMx8*`A)VQ zB%3I!`y|HmL`6O27k018Y|E1)$_3SL_`w}7BiVg{c}I91M_~NmjLtfU!OMW1@AoB} z#~^(6N^nU80{)`#?MC_1T>9Kd_MD6To6tv5TMTX!6q#EbnJ+mDSU1R`H$N=lnhD~H zZ*W`)Y_x7DWyBtfZqDg3d8KY&CjuxIuJXZm)>;NKQ(|H`7O}7zV@~Wm2$A_4AquVA z0xeTjQ7b8#TmQi?-*9f9gN;%OzTC{4<*Q;Vh<rPxV_?i68IvHxXLqx`C2OIK`r*?VF2w432RX0clfN><%frE zF%yNH->R_9Ih0e>PwO%3i{%~wouBB@V(PxFW=J0AkHiAH0Uy5K|Zt8wkn&QPWvpeRSV+9)kz|s$!388B@|Aw z$pz^yqrW_n#4irp<}0!Y57*~b84qDsk2A2AR9ffvua8^K=E@mD6Ft~Q6jGG~C7}Wz zJP35!TyGAUKcMeXbvbO;i+d(tFKINI1?PSCbb)0&ttKYlWi+sT?igYiOj6)GTW|B5 z*id3k`S!WnW>tCoq1k4qEtvKo>!gKaV=R@2b^|kwbE_$U8D)?ys@A;UPQcM;Rhvt9 z$QrA|TWRf6!>>g<-5(1Sx(>Drt*#wSdaI5nn-P|@u|k0LRmEj^)s6WO>rx#|u_A+8~NKFNgCH+^k!W?l6Auk0NnoEJRPD>zgr9Q6Op-ce&b zV#w7O{w>ZUHFLxNTlTKOYW-jA-QV`S|DC=2mp$*t|IOb0%bo}Ovc7KokM_Ld z#aiRPBTRp9m^UW=mk3i=`(O6F|7@85N8#+hHq6IA|4W4FANFooi`P(`7Vr*Hpf!OL zs(OzbgnD_UEHU&vJ0bSQ&?z<;KS=`|jy-P-5$cq>j|Gul25gB=2;WbIP{nD-^Ak-= z(gecK&*qB>^9Jo`4|$aWB6;fP^2G5%<|33pFSL?+84C9z zp;6(GBr6&x2FbomQigP>qPs>UQMaX8I>Ln9Rwm-Bc5t$X$Xrpb|4N%`N`y<$p*TBH z`D_X)nueKFy{e$9(0fWcY%m5F>MyBW8M(N4Ks1Y$Q~@ud6>o(ZRKuhKbtD~94u!Bl zDmsYh%FEg|$gFFqr_oLL%CQsKsu7RSVlQM4A`{#}AVAv$l4N1XYXg4_2_ZT%uRhbRfu;vc{f1&lW}>5zS46O5@Q@_945{ zD)TYn9c_uCDV#7591&R>2~bfgRu7;EJgfARs6?p>Vls zN`MHEBiqdc1MwPo5$9Xh*%0+{RI`|f`D=%XNjxmRG0z-mRi)&KAfjU&cFLc+86TX) z>t%{>D@Wp|;Ni&ldRWs`l7luw274MR3Fo%<~hA*i3$yC4=G_0gu~ED^8T?C+~~Au_Bq{Mh0tdH zD#-8Lnj_v=F>ciB6jP#4b%pRsqMikn7>K^Vkv@q+b`jMM4fw|J3mF4dwyBce1Q+SM z+fak#vnSetktg(Q&b$qJNdPUT8p}xuLeG#G#4F5SrVxW#j8Ec?bE5uY2(IN%x)=Su z7|7nr?j^KgY+7OM#`iR)sB|;O!f)S^vsil|2uKe=1%t|iYz`@(R#bbiuUZ3~tirKK zQ^h3SfEg&!!jaohh|mIPD?V@mH7ily72X4wHVVR_OGe^z!~Nt~L6k}+1!5ciQrtu) z;krRaWTXy-49F+ph;_6QgRRVb%0W?v1llxXvS4ZXT}oiPkpwlJv;dh@EIe8&B@!C0 zuk18cco3MeAq-!EB?#>QjH2|?3Q(P_i+hAm3|=~vMOs#8b>`V+cV$l2>r@{$U5$ghg0_EqT-;5MWE3rr#mCqH+@0KV>|5C4!1C{ACQ8#?W zQ>Yo8*F57&`TT)}-k)@;7P*O>T=3V~IQm?q`Ue9xqvH?ePBI1~Nu{>YM?&%Li|O!a zlG#$mUy=mn&9Rb;rw%m@a4Iwh2BYhYyxB}Xr)z{O^Oo8oO_OqV%#JG86}s%5$niYM zOtail+P$$+Q>$3XU#M>)G~Ej~cv5GECMPw+HSOBildHy~C%2%SmJv!~tOdq5g9r8w zchoc1B18)03aqOg)0Wha_Gb$?8aO0I?p01FuUj_WG0FTGn~v8?=sc&h6q=0G_Y3$a z#$s_U8P<_4FigyVd1d3lgc~6Pll7tH_4A#R$M036B-YS_xY1fy&!|ay(Y4TYFeGsL zvkrQ3VnFgS8JlNeJLuazprE&U@t$EnVoy$E*asoVAB|G`8U4@ZVOmAeH~DC9srv|X z?cY{TkPK3BF}>!y&yoSWLMHhdNF{@50tQr3gsjIsppB{Yanb&P4A4x#%5CJ%5HoJt zZ+O7Z_pfqZxg23_h9=Aw6uYgSkDOO8Vx0Z)YhODT;A>w*_`F};A(ACgwY;Q46# z6UF-&ijPxW3M^4Fp%yB@s3J#-lH_?hPLyXtHJC$J_$bW>}l zGZlELeFXNo+(t4I&t@6>@Tddwb}v7nILn$+5|DVp?hW1GEBLZAT|G~ zJ;rqz=lvDpw9%Z+mrQ>g#HQSXF5691^{qRz(>~PVOGn43VoqQF79SD2urZILDdd0! zQEUcQy+0>I#SpApAE-@x-Ji`!QQkUHs8wsW&uvMuT#xH_I~PvqhTZp<*6_xo%kM91 z8d=beSHO8Bze+9_93vmZRKJPf&*-V-1dD#Py~YF!K7e6T%zGKXkN$bMI$kCIWp#R_ zhyK}l_Wn}-G!~?N(uSyR0a=CtY}%w+HvzTNZrq1t6xxBsz;ElJfw^_Q!uNq-XklIg|pFrcn6LPSKbe_<&Jpq`uC zIU>~Xn{8i2sJ%aqLrCo*QMIgLQy58OYNVsRe(Z3h)hnz7lqj39$Pn2mcYpa|RFc(} zsDZ<%V6G5<)MyJsr@2<*dj9tgZqbfgA#16`8NZ{KT4^k4W1Q<;_fv_vH4Kj|h((-4 zY3m}J)UewcLBB0xh16p2TY2x6V(&;k0N|zB9Rg49iFmldNS4IQ)ZokEAhd9zW$?RB zz-Jt0;whw9z&84%c&z$PtP~#${--!6ab{SA$>|kPmoApUlJLe)N|p|I4id`q1C;cL z8PH&qLgDGEuFbvSaXo0z?~HNZE{l*lFzmr4R@p@oASB*%o8iunmq_^HsU9uf+P`XbsU|d>=iJC1bqAyAoAwWlI*c zYr18)M8^l3kLn5eU@R9S#%A7;sW9iIn9qkR-eLd1P1Aej3bEuXSIi+rU32{->uJI|h-lqbP| zLoR&(pU6cZDn5%I47vF6zqvxFHOl`zuZ(8OY2+uR|5K3hzqmrI)Wo#@+r07#tPRVx zjKK;r$}E45X8pS$f6S!W@I_H;y?h$!-&ZJ?T(vr&zH_8mDp5 z1n!`j5@Tn1774m#Zg2%sFSHzx*2=b9UfI{WGAde+{-#|1d-BR?-uE*W)iONNu`>2y zbh@!R!grC=T%&?>$A*jgLDm^2?T^;YD5rvzk~4yZEOO=YH^<_e9CIgibX8BY9VAW1 z>TQ_I9e^ApBr68-ZGJ&;ddv&PuO1|%XY;;bU}s!<9v&Tx>cBm*lfZ{2aEWW#vXu^^ zep)*pqL5~T3{pzcIY?xvcdCveeg37If~-K_AkLSA$s_xgDsy_02LY>gR6uAY8iJf> z1vXSn&{m#;<6(!GIz{X_^{IU9g76}QUpLO{>&k4;e^!{Noi*lJt2KpR*SlSW4nNcMbCopbi=4`8UQ``g=bcZfS%0%8 zkP`)&cM?pDUQpx7a$bzkwQXE;R$;&0{ib_%f8rckC9naPvg5WIw7MRhrpfcJ1;&T~~Sgte;lp;Rr!a|5?nN@0;pj3yu4O=NnXi801q4UN+&SJie-6+d!W00GDzo|*cNpq1C+q7QULJKSWuU+U0= z@ddB{rzjgLqu*tpNg?{YY5!$!JoTAbH#m*W1i8;#IFP!Y+AsZbB8s`e2@ybhd2O^WC%X)Rf-+Oe$$9b zN_w7SU@^1{H1in5Lc8h<6qD4~egpiSJlwHB5u^x_1+MSAffbT=d_?fW*oi(=bDJ4Q znjjh`!L^EqmU4yJTuYO)GR84p9xJEZ3}s}`)yosYfZA8|5<0v9HN1YR7g?Hj2YyjNBotg~wFJVF%(wkB}G< z6KqZXkSv3@)BY#;KpP7L8Q=^($!jSj%IGqw+@20$I(*=bn4+YU9a2DPBbqo{sRWrS z3C3$FG;SppX}?FX>$7SRfmjdz8fCrv}^$I=X^e6JP}ysP9VCH-5L@bzMYrii22xK2pwh^RcQbd zUa|D5!?g~1p<)P-Y0&wrv3IQq#rs&6kV?!=8dF~$Eglca|MeXeRX4~6lwmk^Gl#=U z$YovcIqI8vmxM54VQbi@DS?VOuthQaT626|?t-6p-A#t!^Rscc#7?2~;IT`>xb|=E zw#xNdHb=`h-&ydNN43lpjhd||&MU9RzGGdp=sKuzh&)uiq+X@{9Nm7~@c^BWkY6s* z$2<^(I*+(aItFi+9*8_GOPel$&GBb=`ck*1D8sqO?iDH1+mBQ5)Xs>I^H=@v#gw>Z z8f8e{fnDv$#6^gPv9P1LEZzo{;T#=_g3FImC=Lm1Qg6gWgi(q&45(3pC1@GAkoBz% zv4a3IVKqJBTz2`mq=cc^xrP{`{q0!o6p}d3J>eSGK=OpmAW{kYdSp~sv7dzmtxF{W z4Y+;&NnTdy;`y~b!5mddYXDC3CJqf#9@fhy8^N=myl)Wv22F4X)h{k&9!MbmpAh8k z8c>K&P5^4j#Smd9OkQwr41TddBuG8AeAy;Xx(^8fjoJqb+y@f(LH&?zrYWj!Zpf2- z04T#>I56oupZEEv+9q8mud}~r?%~Rf=lX9KB>- z`hS)6nile!VC%p9czxvde(A@CC8gnKYI9#KJNjLeNc{cN+C5w@McT1EjYEo$_xBT# zbXYUPcv9yVKS&H9K`>GyN#&gJ&0ubT#>K~rFcmN5g%@hwH{vAQ!-N~O-wRAjKd)0+ z1yqFfTu?j>U%ODAP<#`7YwL)E+zdcrOlEgy_^ke#g*pIT^|R-(&!bTBm#}Ck?sI_V zougL1*EusDKl40FsXpP`Fx-4yM*MB`8=V)$!)FS@*X>x%B$7~C^zs1XL$T6?rM_+( zLu8)};6_mEE6(Rl6n(pVv;kr~ZoS!kWyg7;ZMd&Ka9?4f2oMCh!~hv-2{ljEMkE)} z2ZAoRiI4}o=L38{g3xS0F!KOnLy_gp?Zow#y~o|NGeJ=^ zqQbR8@YkHDK~Q6&mLMXCX|@VivxJZH{d`D!P>iVT5@Nj+qPC@D8>VtV5Gu%RsQW&Y zS3O8NER>zbT<8$jsZVsx*wu@lLNg4I@*#|O#@DelOdRSE6mv+UM-M(8>;rxbY18zD&JT#QPao*KbH6H$2|QOiUKCW)k~k7#s@Y&|5vNsjDX zij)Uphq?hyL6P0V)Xl9S15Ciw52XF6QAFDjliJi;B+&#{n0){p#rM%NGYp0#f`+Bh zZN0YKTqs1p-~B|5X|WF%RQnrb?@==ei)oIFzB;7t(2l)NjeRVoogl$auu%Wp91A}Z z0^tXri^n3v{84FOcSksu!<5yj>5Pf5|(ijB?Ks}Bod{W zDI$^+6_3K~mJ)AqEmWB)*XZIk+>^XR61Cl5>$D}!PA5rx!iL$tjgFFhWpG3-lC8p> zwAzyE)RJuFD1VWp%)})-m67+lr7YKldMu~7GbH&~zP3b8_J1IQ^@WC|rA9p9rHCus zs3t_pk%t!nSV_|gE2GNORk^>3nDmoxI`le>>diErt!Ni!2(DU_tL8efKJ+M zkwV;_$7huHx}Bu_CNIk#GnF|%HZOyrowR~Khxr#F+e*IqbS9{sG=?;tCxW=KKZB2q zB&Mw(fXhS#rgk7H^q!WNlrOw>2lO7~$(9qzlshYtk&LQ_NB!(n>J1qGSth`z-XDAEC&k*S~vjS+3jV}wJ3WDV-{~jF|eGee5e8VBHt&gf! z)@f9dup$5(KBFVpv4GgsG?*|FqA&tbU(1niKthSn#CekgFRt5=4k*gSMXF;BvZBw60C4tW1T^q^lK62uVot@E z0SqzdRzOZQ}&n z4&W-F)@Gp=z5{@~>WdLs6E`D6GFFRRSBEfd_KKAyUA}hHDo4Go22KHxwOxk}tP52O zV*4uXT3TjD(7^uIlZ36gmXwv#Yd@3txSsyF-YcX&=&BYCw~j~Q{iz@z^Ea#5QypSO z1O5~20~+};s_}6De@v49?v48IlVsxmi%D`?Oe?bc-_}WoF2=vDlSM{Ke@&7tc4LF# z|9z6gpww&L_zo*&!~2(Y5_b7IaXl8bPyC-RU(W1*UA|b^={jI+1^?$A*yZc){Yp0s z-rrE=gTec;2r4jm-)84uY{hLCq~_~SY?9X!Gj14-bX%NOz$Q+2x zWQ8G*UI!&h1eKA^F-w(@(H*HaY0ZDta-<=&*7xM5D>YeujWJ!TPAEjsfG94soEhf7 z%l3ZxM4+T`%)|6h^ruYFa#M8p4;#sCa0kBGx~8rw-#%X9SqH*I2Dl3`*z;TS0e53b zH}b8*c?%rlUbPgGYY?Z31P5kZB>=6xLa~M039~ZT))=AJ0KH z1T%=@=mhUx?v0&`;omB$&e@PQ1Kzx?vE>v4<7ag*(vB0X$i9JYtcDH4=rAEBQ?J#c~I@~xT(jJ+u$&nw)3 zH$$S+Q;E&j$WkH0qy2oHL=S*tz~KRzco43| zED16JHi3vij*?--UUvYLmjYaPV87}{VqdTUC@3p$UAb8tATv)*k-G8DLeFKkdY!N8F`amDd(eTl?eq4w@FMxMxn;;s}E5yVCp|p=S$IF{0v3?b- zv9wJAxqx{Cb<`QE;;FlLvR+qw1nA0cW-Cz#P*sCw(#uWKx6lg3t{BDxH?OE{Hksd$ z0beP1{vi6eRHPQW+wSi)p9lpTYO82VphdkxW)Uk-nrZ8IXv9lIAVttlV;oW=E5uE? zk!0$>oT$QP{@{IEp>o2a&CS(V8>UogL|l3n3d>f(s=srbx5QQfhL#c9pYsvl+TFFCXX zZvm}CI!iXykd&s@Q$t*6D75WDI%0uqq1M7(zhPs0BkTKAqB(|@8u_Zz#vN9*h%9v9 z3yAp-ydNk)6T&zCH@vSRH%}Y+VL5mgtN+4MQiD@tJ7k=AU=#N}t(IWTNZ-f%*?B&3v~BraeSFIJE`!hm%sS}+7t6YL^V~8jSIC{*qNv2~NGdG- zQlC1cxX*pfK5hoHPA-n`^ZqqSX4-RR9%M=h%sx!IO*UlTjhh!V?@alrN&NVFQx4h zLYL^rNj@97@q%neX1dKUkcDO8_N}(xkS+FLH`j(Loftu7dk2-9>r*C9%!F1)qJ3P9 z-B`fm^5k#C75AGY@i%S0GC0R;nF)6)ojGJYtueQ2G)_;Pu>^OlU&OR@9w?o+c(rWY zPquX5O`Q8YJ^h5kY3(83F$JMKZu+~B!BnUh!Bk$G0F>4-8s*Cf-Pb>kyITj(1NWmn zpLb%%_=np9PU2FecNr8_1e~vO9a?KU_iWt-#+PZXsi)Rhv&tVPe#BpAWfUEV5Myx8 z)uLpfc(bX#^DqFsWmM}&@)X++cDUZY$-Oy>mG>R4Mhb|pYG9!LuhAMfxc|VLe>C=w zb83Bu5Miro)!f=p6mt2@LjcV{BqmU&-%YJxFqn$VV{N#Ob|fBOGGEc%!E`VVmsMmJ zm8W(oT=|p=n{3DhKELy`lTFL7E z5WuVU`d!U`(OS0)KPjKh=IJ*rnd-KfbaY`t(XAJW?MC{9%zIv{SbuS%XpkE~cc_IcTHLi?m5{HI7~e-|m2=UY25PI9>7q)V-Dm#&N3o z{Y#=6GM0Nu+Abx9V#4Tmg}RR>Z3a>wBK~^8C~w*eQZl}DQP!Y#?5~xs1264`RYQNl zo7nIbS+x+Yucu9Y^JHwzYc9uCx-(|)Pg{0j@TSxXS#p8IPBv?1?%5!#S!=~8>&I`u z_c1KmANA9$zr+2M{nmp>Y;7m`ObLTG|6q^9Y@#A;_TgwMYnw$x=9vfa6(ME*u^|O>ACpetv$-^H5d*Wsh3W58ik@XW+M>axBw$x%3`)GA>tbov1Ganr$tb7m_7b z!61%d@TX4@E~uS;gzzvph(9(612<1%k`X{yZyF%Jg~VxHCm!CTDu`m3r>EMIWo)6! zf}b{82{n0@3=|yngE9>X?eE66bydPd92pXYvbYz^!4Z61*#Wg-MC=@hWO|+Xz8kpW zM?uq~`p+mNlxA!vH~!phyR61IbZ3>?e~SAGe1?&Q zD0E;lF~y+RPBL?w7CBdlWXo@*`f{R9Lz#(=LhexJSRBj-+|KiJdlem2Ih9WAj{M2& z6BHoO43avgi?Au?F850|)e?v^mz+5wcioW6!`d1sMJ|`o$J77{j1((a+cVRl7g8g$ z=SjF&%G)>M=np(9d^Sko4FSoxBwe8>lG12|OJTYMryXfg@{2)H%ZomT#~3(`#(4sq z1xMh^bvG9@ei#&&@ug{e&TJqr5_u0CSv7lX7Ob;^bvaZ0DA8H54~#{ZqKHJS(80fr zF=l$jvH37`zws(CIQ5LiN3}o#wQiw%#!?=ZCeqz_RCrsuMP(osj>8ntMfO}!?Gt?x z%YD)8dI$!Zt{)rzWQml@m4YYX3N(4IP(TPNW|soUT0zwoe!LiahwdSnGv~jLhN7F) z6;9YhSKEDZN|r(kAVhtazep&5_`7vj>F+LQS&F8Ax||i(f9c%)t+j3$`&(wd9(&zl|j^Tp^OUL?dGDWB?52gB21dDrWt zAh7D*fCN5n$k!#Gs!FzH=$aHk(k_aKz_Yws=zi36a$DkjJc5ihyh2RA2i(bPf+-fG zKtN*DDZ``;tf22>PJP|Va6bf{Sm(;(Z>%I@* z05P|F#n&|skl;z1rnW_J0bEe6&7e%Fw!?oRq&W;3cLPf0A{JhcMzS&)VuRV`?4X7r zywqvHEMEHxlZ%{=Nm=_UP$}`t^nveOVCx`mh!2CkPK?(hO`8Ll)NekLnFPt9g*a| z4N;LUE*5in9tGDf+X+G~5OPl?`jktOiNVFg>BJIf9-S)=y04nWY_YRVI1wS{TBw=d zmk4t(`gh(TsPK2(hJHdtL=az4zA26_PQW*Hlv-`Ow+*nihwm@Y``oVqv&^kp{zK<{}2IwkyKpYO=@TV6o-P9v8nvL8rh$BBzS z)~9_7KJ1~|=?I6;Q@wE`n5Tc7`6iO6^#_MO6w0v2IP)p~{VfMZ37Vsr=%Z=#6L8Bw zv>A!fr34^jPSyeM1_k*MY)O1j$A&RwFm<#KoYEt)enlwzt2Y8pzj4wW(M59M6JdJg zTm*MQ?=5;PsGUD`vJY{u8=g3#jort$c4mBFES60aDLc%>OYD!ez8KtId&%Cu4gPp} zF6g-Ln&FV7#Bg3f$RFYS8A^Rdq=QK8t+D*w8Bmb;HgU`r5TgOX>ZR1g#4N{JA*QXc zbcsBxA#(8!KYA&^huXqM43$3D3?|hzxCe#=d9i7~(GA5zd4&bjH5-F`4Bf)QhRMS% z418O|Vxae7;KO%s4LsuR*@B9^;N!4-48oRylH516#yx1wTH!xtkin)dzwdB787Z`; zBdUgRtM7rA?<3x8`2Mx3UK03|61iqd>dYmZG!#i-Pt?K~wG-?&c=&lZHEKmVstpMX zLJ|!*B(xl+I)%LVp2J>Y3L2Lcx>dENGWLQ8#;j|{?7PLl)IjTD9`Jbq_zjUWKing^ zBjEipqWfZ8@*I=7na)vYNP5F#5o2|6{orxY-MB@O?ui)R$EGqcV9S6$=7xN`3|SSA z{ZvSiW{UAR3;;Jd5cKL|av`6z;Dr?PlP@D{qJA?yp!R_{+f4`NamTNUgZ;K}pedXj z&{o1RCJIYL@as@Kf^ghS1LQQ*Al*Dcv@~kR+Bg>)2_ZC+QVW*2_X#&!0sZu`uenf~ z!SQ^!N$51-Gb4=U&A1WbC|!i)kB8*q%L?$~NupOQ+%(vVWt`>J z9K?U3(Tg?N#|P4dmH`fyiTq^H95*x3>->kx1fXJi6{SR21nAG7 zK#)!QJT%6_a3UdK!i;$MQ=U8Dw4Cm=HJ!StfV)~vKsbRonsYc&6u}qsR{{;ogyNxj z<_;gtwQ?}Tv(1f&271%p=oIjJ6!51P2(}jpuM~(p7W`G`7#tw6@^K@V^Qt#Xx?Fhn zA!lDAZAcQwb|3vY58YuaLzPzNCAW~kzvvq}-Yj$+*~QQOqbC0%F$LIkqn=SY{z8_6VwPRHtP75N>wJD*8*FYJ@R-RNIJVvjZ)h}*J=py1<@?3rUT)gSn z$%0r~QW_csTt`qYy}eBGFOCHr4yrLKO~l&Z1%Ohn^blMzeqH16C%iQJ96DCZ#MD|? z!>3_6z^pbmn-|wz8qEykCXm5tEtvQ6s@WRY;$qay@v4dVRbKjCGnRjgcL!h^Ur)cs z%~8xkKDm*^umvx#!pkZdAGbWbzUg|pv16ur`BfX=RtpEco^zuF@iclUT8x#rgt9yV z#xX?=O&bwH9fDculmpIsEqVH?U_?S`q(H~ZFP_$n4xR=WmdV|Ji(R$Z`knl3w{9n` zW9RS_*N{i_*m0H3L#LHmDrrII%vY`+vkp)|t0@<*(+Zy#6utY8c&A^7#Be*2iCS%+ zTAiyrL0?ZhkFm=_8=~1eFuQ73{cMMhS}@m#0vNbsW4G% z9$j|RWx%aqur$K361~F_^h-uk1RaeqDHA)}*w;p18F>&?Q#|9acql=^@g`;P2_PpB zD{%s#M}G_9T7f`o_4E7DM!ep3+_{=Q@DC=S<-LY@P^~5T8liTFJD)fz5?d`6P=|G~ z(Q5!r!J2acgZ9#ZBbAr=HoS#P823h1030H1Ce~&j*B5R44a0um51}i(zlYrkAwmTc z7cHG(C150eVDSm$wKjxtJ>=&F3J@Mf(ilFGkD-JH4u@cZqSl5VuZF=<0|}V?6S^a| z3BJDJBixRanVooVVa3{k9dai`Cy{v2F&+5$PiW7=C98yt&^U zBQXxB@xpiS1pO3d%70BjBg_<-URT6Dp0h>~|2(;iH+6NwexomE6!jTqE!zztU#~t7L`NXN6B^1yAwBDCS1r z%>B~g&A z1(cm~i_dS4evvCjM~B`lICO<#aVvHez?t?z1$^Z0+v7 z6rt2joVW0`iWB>3>B<2okY#x{UU*e+5%pHb0*J8;Cy?L(5CNjM_45AAAnF!V`Mw*% z3Pj(|9fYMctrVlb068{F)7Qd8}V9q+A3altyl#USxFtKMQ`LStlNQn9>_Ln#Q zr(XUZZy2`^>)3jSy1$9PwIyYbi9e}Kk^rFg!GEnRT0*n^poz!!LNsK6Z;^?s5{FNF zwi%Wn3BSBa6|;plsf-#&)RDSvkhcMExyA3VhI_Vy$F6;~;Z|9&mtEUymIORD7B0?s^K{g(CgR^!fVz?*97tpljCE>-zBY zpLVtt-y3J=9DkVPnp*1ywV%iVPQ(J{AnWEcw7WL_OLEPDGT}fN^7oyrRWlUkAlr^) zc=?#4;~-T;5yih>TA+ohqg9~EcE+>|lU&mm#PSmTbtfa5Gd2~KAv8(Q)GFJKQ)RG( zNv;RAA&HjKXoRVsVRte=ZFPoyb-wJQ{fzT>q*`9^RcHrUZbqpL(K`D_2RZX2Bjjm* zL{=8Io(l{6c~QKN>A7vVzYYr%1Cp84;>(*XiZWf~Neffslgmm9lhfymB%>o1ii?|n zv1pYWK?zuO8oI5Ht7NoX^ntCve^t142$n9_^xKkJ*9|i~X)@+5mz^|ZV`H2)&h_2P zHZ7Tr9oo9vSN!E5bB=A?`j3MQ7^AJqq-w8D>U^@G%ffh3%v96${QLO)I~)qz#b0Zz zi(XVl*cuCy@8seK;Jr0<8{S7uCcT7Dm6wCBU14i1>QJ_;0fSH7~tEt5ZZLOI0emM7Gvu zBfx@oj_H-w2lK?l1rjA2@G=w}&8yK(_co2~%MSt<)z1jhHF5&Pa}$!Dfl!#CVDMFT z(q;}WCE2WubD*2EH+f_0hge5be$}`dmlpA8A#BYV`L}1+k~t`R6k6Mf32pXCD)aY8 zQP3YAs@BoiAC90wF>y!m;f@cIWg51gnjPm=9qNkbFF3Q!vo9Zh4Stz_)=c2}IDalb z;Z3ltD*ZBkVt#AWB?(!&>NM@DScqO|HlZEo+H-Wi*_0iy!TSwujE-Zk>A+rjN^9}$ z6yGjg6>T=>DYWBYlE@f+b(ip_Dn%2l3EdC3f<)wN_BP z_<$aLkc{}2qzr13`7Vwr$ZJ~Y`Ldg21@vC(E4=nb9)dqV5;_G;{{@Y^#-#9(*1rM! zi(dufGNl&cN=DJx?&lKH3m0P9+z*jNNCf#tsYDo@U}J)|L)p*^303JLkb>$5K<$_R z7h`Yv7vA4+~W_G|dT1zB#Z(EIC3S=<_((%Yfpp%zMj zP>o(I15Sh%e~!9Rygn#*i9R^&RX}2m2lOJv4=@pLipx=5z`EiQ0Kd4@T;pGyTIuL% zFTM);L0>(r356f9rhL(SaX~TZ>zdNYqZT8FvRM|`yGMPA%n8BZ0F1e_MZ^mM`KFdW zPrL(DWX-y|ve&LFhb%_!M7R>IVpaNjc33H(@8D_-2Av_@nK&JLUFDKI9%6r|Ku zMwH!14o@VCf+9CJH;5>$WR$BoAO@8cF_M6B8>^a{n_fWO}tRh#=fOkMtd!Fgz#ON3)p^$9v>Mh0_$+mn*$3J^Ar5CH*{_6G%g`U1MVNwFyafIS!B?^+9cva4~q924H#K)D2 zRQ`Uf3?24zX+5iie`4xjI`UEM>;T~AS_}`|HpXT*O^e+;WOdh&is-Y#^v|BGCF28s z@!VbAr2ePN3FB!~uE4u#OT5;cRw0vcOP?7wc2s5eg!laV)v%h0k|;F}LnN6BGE=L3 z)tY{_;g?ISMfd>K;iN=%Y9QO;*fM>V>qdyneFcf?krNn@!nFrgWVLxW+%*Pn`P1Ro?LaDuku} zsOJrs8LvpB%rZ#+YM(i7?zCqVL%pDHW>;frz+c-5ms|&KPV+yhbbb8Sp6p1gvuAbo zm(Pa>sr-;Xts1UwNfbtf;TgU?KJ{lIv7B4acz#)k+@7zjy0M7bq4frh%IH&iAxFwtiD_q);}B0f*nU2qK? z80*jAS`y_5(vDBT-F+Ra^T6uHE2b~H5M!;ceEE=C9!YRkLRkRhh>F$hFSZ_O-RnA4 z8w@ht#sQfGqTS4dKgG$v&%hw3X17dj|cKNaXd)1YX{b?ALQ?)VIl4*^{SSE>69#fMlX~b89HO)PV*#K zMtK0UHg?zYPVn-&;MUMJT9ER!4|oT8Fc#P_?)B|3L{}Fn!_wbD4inZ%fn@9)8%uP3 zNSp)+cPb8-9Sp^9_LHR#BtujRvv)@&BO+ZRcB6}EObw($jSx5p-acey6OH87ixjS6 z5Y35XZHbh0WRSj%q$7xuKcZJOjv{*<1$LxY>x#l#jMAE*(;??ms3TRS4AQ1>5=b8 zR7e&-#us0PK~({!nB7Kw=Nqq-8s9KM*+iDm#h1{=O4;F;(4_0NUzvc$j}EoNYb=%+ z0VlrGO&rbPRWkA(ha?WCQ+a157KJA=dx~$}uVUa`OJdozaYajp7m~+- zlOHaUnwt|956Msck}$54`}~M6tEg_)$S;jk3|Ep-Q&XP(l4a?wuOP{%&6MyHJA-|a zG%&Pg#RkWTfv8nvZr&SjhbRJ_>N_2l(=c)6JT4Ln<@csQ3*B&LM4tL{BbODdbvi6V zuT@1{o8u0j_m~KNj|Y#xcycc&qtcMCGp(;;M)Efez#{XsKC}h=fH}giZ8W zy1M-4^x4kqv{+VIZ|(r&P15*YSy+QvOv72m7t*Xw+5B=@QDVdr%~BTKQV=%4wGQe3 zozKJmLqzT0oUO@NA)#WKL3rthV=zH#1{1uy3JJv2_5~BVAo!Y@-iOn#&UQSONi*5p zUl#<A=l5_@Ae8%gQaPn5H0IrNT&{5Oj8RmF${p(fsq*g|$yiHzZMl$ua6OE`pq zAwY0ZM_$pSIuEHf)8>5*NK@0GqN%ho)T5fe-Jg?tqgvEo%hj>z%sdX~=N4*QQ`1(t z9_W5IGs#9Y{Oi`&LXGbK*`7?u^x1_)cUmogu)ZqU@%yVEHG0ZiFpTIJqs9UW$BI0mG}es#`OSu5ZU@*f3?k4 z`t6zL@%s(ZS0f>rklx=9FbXc%pAVp4saG?@si2&4dUTblj0jzcm(#B&b1fV zNrm74I)Vu^Z4!D)(;ljON8G1>^<^@#F!saqxksH{2qjZre7wZTM~p_I)qYHPK2PSm zdinU;=6qeGA6&0yMZX38 z=wo;z<~WIV7{nv^3DfO*fqdHBu$UF}^ZK)nN>asuOejU$(t&mT+hHI`vb9Et#rDj0 z*d3Q@!M^f|M-Es2WyU0|NK)7?sirSK$>;E8z4n|QtR1)g73pZ(Tux>^oK>c2xGnT6 z9i3E+Gdk(e^qlT9`I_L+Ahwc1I8?W2fJ?LR#gV-K?zl>VTCCii&|GXM*XrHhHFE>? zk)@eM*U#QRzaH%Cd1isfA4~o1FD6`)0_{fh?E)@=)c8-={^+45SB8^X!G=j5XHuW0 z^<#o{=R!T6?~Khn)^8I_;CF1ZEoUa3qiE7;kN878^C$Oz&RCxdieJf}t^yH~6$7^v z@?j*mtjNyFVTNX}?5D;DuuRXD@g6mvd=v&k={)%z!k1B1!1C&E0eU)@OFLgiQqP;3 zqIgGEFqw#B^>hKwSc%1W4|Zi-U!iX&HsJX@7K4I|X#`B2OJ6XwT&D@Rh|?L-MWd`J z`jqJ4pgY45($zxFJvNmvi&RQ7?kMTB&r_j-KBirDe4`xCDy zu5uj2;dg9r_-7vX1j?D~ola)*M1Rl-za5)#>(I#G!l@J;pKLZ)E~74Dto&HE zPNVjEL^@RWu#b^k%HO&!JNQev)be*2dO%5q%=VYcb_#l(veb$k)SK)Wi=6qlLNS6k zZdE-kzyH)($rao8Yz&<0A{wJby~hYjTD-KsnS1c%BpLk}hQ zM8JF+@_83{h1`eaRN`YEtS1Fs(3spI=u9gGe*qM0q4RScfQ4YN%-2_ zYH6iewf(2ayidiq>ub7Q&q`Sfae|l)`EtX!N+p8Jh8Me0q-b$D;H^xP@TT-$5U^3x zRChUiAiEppXT%XjpAb5+%jJ4C$-Zu{_b6QUk>JjTBbr{*D#!QZVw-v>FcEt8JTipj zpUnwi*s-A#W%%~;yS(25;CGtv$7dmou&2$`KP1r~IkO;K$$Z765~t zn-#%NTlthfTpIQcq3ib8!KN89o`zZ)OnM6`!Z9CU2trk$#W8Ig>#0>e zpqh?0MGYwzku?}N-_m=ua<90r&1GMCV#tj5aTq*QwFs#_r4z4C$uaH~JnO>>GC@+dHVcbwRPqr6}VEtBWz6v@{-Ddz*@rPfl`axq^pXuc;cm z; zpmX+lQTceJog(2STyvb-`DIo4J!C|IE7>CSONXqH*qSEyAI-BbtNPTEqm@GSB`l2J zec$`|&~Lqlewfr$jGmFn3%;wjDcIkz`?)1j@0YHQau^vax;L77`%78!m_F1>EDA&+ zu(+obgvYTtHJFoTJ1mauG-DoP3dr49oxp4KQ1tP5Rneu|A9o=nh*D<{h$L_SaMpMx zcQ-zgq40pVGYV^i7t))B_3{zBt0n3N?Is7^R-@eU%Do#TlQ@g5^&!FNx&4f_(;8$t zKJd~N6mpjhAXMh~=n%9zuCebM^qh%11PBA6hY+m>{4TN5ZpM-@O=LS~T37acf-N&^h@q&MdO8^H^fGZ!mt7!u0^s;g&q3Hv8YT z<~-H!lvERK!+=&1ezC%YzYWkX-L&0gjPso?Zl8 zxA;B`*xo7}N0*de!z}VD?a#ufb(*OV?R>xL<3HNO7DrRuoNFr$(hJMOjq4`SU=Xla zvx<+J8dl76vqZz#$%n*8<(~uKPowgSbp7KQ$TCDdNdnw!Heyr)p)2W?iUO0!Ovh8> z6UZpat2}=JH5`z%Ml)0v(;>f$R3`f$!Gdh@9cCrhLSHG z<-Q}}mK34fSNa^>;5l3-BNZd{(*reSebXm^_M#~mlYBgum^@ebnzB01ae0z{u0g5R9rze0?i_1RyHW6RXT_skqR-DfIbsui6+^d zc}tK%y?_!c3Y=mF&`bhBMVV6$K9Dg2^YyGp269bV)czv+UtVz>;VHo4)NCuX>;0^d zTy9BT0vGGlCm?xq4ozroPWvA7_jv>13q17doU~k#Jzcz3k=&ePX~Ue{f=P)&VUIMb;UanAyi*>LNMXAP@mg-7^?H6K8x0Oi-Y(2ZI3d~J7iyh!3)C3 zogHW(2E^1M=Cv$+te{rGA{G`edRi!%CrCB)LKO^P!4(IJVNvL+5mVip6g1O51Inm% zE2zDYLG)@U;UZ*g6^FsZ;w=3&%u)n(A4;-^FQ~b*%c&Odjuv0#uR~$yrJpaU=cYn_o|Et} zs_hQo4ToXY(Ps9j>H%tgdqe1lJTSATNC^Ch+6$9=<$_4@}K-*eMOjA432=f?XU zj_sv5W5KG-)GDM0d}PX+WW6R7buPiX>a6A_1wkYLWix?9bBlEo4mK46c5@}+%ZC%? zx=z{vPY|s{3!_;Jb6^Xtix0Dl8S7?C_CgCsZ8Eh)>$6_HGirk zu^*Ze5BRmR66fS?ab<`KA4Eq2oPM1YXEL-prZ#T-fkZiqmk@DZbW?qw1XAb_zsd(F zn6-ICfPJc|;X9Q8U%d}Zjn3UKk-Mm9<%=UK{ebDXLg#oHvUczTo1p>KqDh-_XNynm zL17C(GzwsVa}bZ6-pxXmLp*bW8M(Rykdc=SUeG-hmYSN!d=Qno?@ay;SY*eBgAkXR zeqIK;$oTRb&*h$*+aJqL90{uoJ#1K|8a4D%wxzDV094D8lafue-+h90@N zNH%F8niaEGQWv>9s+wx(y{4s>b3Q;C0rhMYyBw=A4~CL{u%GrpofvfySW7b)o2Xl<(xYaNZc{!CA#1Qd2W^O10ZS3z&Mp{sW36hv{B|^5#Mm`~HK9b7?;% zFlsw(@JA8oEtU;$w>Nt=l5Pd|6z17^pIcFSVIXR-O?kI%>E$NcqkjJlR{C=S=#UbK zGYNWum8Iy3b@_wGf(}QK4$qVgn8XfnnPHVYYfvEC;1mWXf)HWhmNfS;g_ahnAwU^FDOLJRfA%FJ?+ zy-aLXR5QTF{mzS?(KIyvNA#Gec1CerxVbaQ%N;2k93q<$c8x8Z-j%6~XgLiOm;v=8 zpkWrHy{s)N-)MU^72*G;J$o<(oWRTo=+JvJLCx1Qt)XT0VOm*XW?Fpq_kRCRa_WUs zs><`WLrmY;>e=+&4y8!r@#gqb^Z1{SpMFuzolDMv4f=QoL>^j&-q6%H8vM@ zttjL>l@xu_0vmM}P%e3$9v_DAnIoL~1a?f`fsr(^Lv?;S&vVHjxHx~q_$kGB;iq}L z`y!gbM5pOz(RWqxkSYfL_QFLIwmLSvK@DPm*JAl#(5NTr==riG^@?>8$xAN41RdZ5 z0`X+i%48UcQ<4x*l(I@~j%+Zw&`;^bb9{%w)y4Uh>2v&Pz*_i|l+-qn0bCxr1+bzllHxZ&`8PUG*XrqYPPAmJ?waajMbWskCqcGy%1<2)*ew5S{k@@jvqM>6vLyCvc_e>asUdhwe<+7W?>W^^H^r{JHTai5;3$F$LQ%l&?9kB1MUa7 z<5EoCWg;Om+B;&uApiCq##+t(4j{k{%sG*fIqmVjgc9&=IWnvpUhKI@0WU0(U;tbX zf)6eQuP{CLJQkI0cqeGZ$Q>e5EO>#k5xp<`YiMtFfO0=XCTSG`yS)gg3aZXPVD40W znw@jZJOX340iLEOs@s=gm?u{J_npD#GI3dav^@1U2x=*j!u}`dngHFWee(W|Y|YJe zk)e7oJxru#6owEidab?odxQP^wfFQJ)EDT~&BtMVo0;_R0E4Uaj#?~Wbo3A;9tM_* zU*hCSTsFmPT|z_o*h6sftInm=rG~y3z;_1yVDyAvKy-2819e{nj7%M1ruLnohWo|+ zaD7wJC4KQKH}eUmnU$JnD~yP`%c*9ujV>&Pmh{YfJm2kgNtwQ>d2Mk9gRUa+VF3}b zsEW@HlSoFX&n2u+BqG4r&Nr~4^D1%j-)<69uH^H@m5tKCi~&s2Pi`Rk2Av%-zQNz0 z6>hQzR}AU@`(f_%I|0V6d9lj zY*FhoW!Dn7j@7SC5Z#uE!(b#7k=6(UZJj=b1$Ew|fHM-Q;J}cA5FJ3>)l>_&G#>V-STs=z&ldXTgJ$X*U>IXTTr4+#v$JXs$m3*s$oH^QYMC!F59(uRjIu!}Fm$2Woi+F_i zdw_lK%cl)Qz)zHCkn#MsTofiYmhIX+y+XuyqO4L@-5sSwa#;Jrs^*?jD5Xp?qsijF zY6hEOa!}{ucl8`TyH8~%pATkJrk{_OOqy5*?PR?0m`pRa`?8cXx$W-xob;=d-Yb`z z3OUbbN=BQ0?^!I74W~|Cpzaw=aD4 zQj=xv+-k)B*!nR}$jh>y?5lmj{o3VBQ?`)D0q2|MFQ1g}n5Z;cIH$z;F`J(PprmqU z*=Dg7u$K~E2T|{30$Tf)=42R9B1sF9&U2Mb(gGbaycWiZBW&u_c>HSU+9sykJ`%AkX?eI=my z&ftN@2I;J-b3vk~o^h^5iDp-r{1`QJ>mVN~_*j`4*+Myq9zY@H)IN*j%_e||pW!u@ z@6O6flbE)ktCCS>!e0H2TW^k&*d@S&=?H6M_dSE=>(sHVWR0Wt(5UK^vIobd#kzBp z;foS#e@<0MXwa9msy$u;zET~6-T88%IgQB?8;qLP+{lW6D~14s>2o40>x?(^z5N=K z&9KNB!E~K`No((EQNGu@IuRRC?u<1ota2cOs}u4EW?JHQf%=FN^-3j`%t>v-&cLaW zNy&oNqThJ@$T4EJYYarx8cmbGfUDtwXc?D{rb9Na|mS&tBch#1bQp~y!Gy96}m z1w=Gz&M^5LXd1CEoBp(t0h8^Rp{iQMkf9N;uf(Iui)e%bTY?A#>}5I6|C;~b@!?i?M+7Rp{KwL^K7`Q!&$Hkd$Az2pFc4C8LdF zeLM8FmGV%Am`^8Nm^i^VQSz$YX5ME^3kx4GP6L z*`VC(oK(8ZJ+@CLvY0z#f{__siTs#D;d2yfk_z^s`8bdhhSkV`bus8rZ1tX`yVmSS@ zUWAVMXF7{OS{{taVIaj>TB(6K0mdbo&%6BuQdLIzFKOhu7K$=V3q^_SSGAFEdF`0f zAbS?a)4nqm-qeW>3Y{bE34U5)cuZ;qBYfJTz>yMkFH#y^Lhe za*lRQRTFW-#D0T{5iI@Yu`ccCF7FCq^0fiyRsA9~!zu+PXWaxfK!B`w<)pkapY8a3 zL_r%H>9XUZsSU8&&al?(yR%W>y(FSkfNM(xQ*cY@W|<;vO6?~gxx-l>?+5Im6cPFLC~Q-fuNb66^XC}RoYh+#*}Ah zzje}PE=-eW=9ARYm~&-jV9@oE_##&ETed(bp4X{OZTT_Mv=PUQ&JKZ$;mZp$i>6dO zvdOWx&bE0dPMMC^Oo1#LJ{)(*I*9KPA@8i`KN0C^ z-3Y&7gkZwEdZ@bSlB&{uTLv*%&*clG%+)Dban^xNvk6O%dkQi~ZUXfXhe^V=lmdNCV2tf6Q19J#)uKDhVJ^RO%`8;QiI_1ohiHv&&JN=$=R4T<#lsKdzG{EXJhoUmiB|Ujoo{PHNQ4ihdXfj5`$f> z^O?+(mhJU&rC1$gB-Z)aXWQz7-CSwGZ`TieI`IjQd{j3#_n1Wt7=*G6vdzB!P*(4X zNg$AUa&Pn+x-#P|Obuu?`{p2Cce_}SdXG}Q0K<$+BuL}8>Byr5rJm9?3Gtr?&*6Tt zuU541<~+tRykW?Ul9S8v-HSA*?;*qFk!vZFb@+r5@a?2QSv(~1D|-(ewel4*v0hec zHp}i8xi0YNOQ_qMwqWPS@l@=^c+pTrYsxXO^SL6x!EJC>a0g{#P94xF*GScyGc1(Z zv?=!Z0RjX2*E>nD7l)gd&11-^EirtLbh5>6j7wi1A$9%@zg((5J?s0quNYCMd_cAn zMSJ_0!VAh9oH4^~d$g1cx+~1osq7xZ9f}*4A&K)h%3iSfAX4!$YW>L~j(21M13x&r z?aZrOeIDF>uE_5+B8PE?&`J@6tHXeJ4Qn;+;QdkfhdEG${7s9f?L+QuIf(Dr|9!X5 z*&y1hdw~e&ARMXSQwLh+GjQkcKG;)Y0q}8;B~)272N(i@(Ee};efaw7XF{8z9}FOD z7~-B$o%vDVJQn|m@g%hChYSLhED}nA&xFWRYtsEDTcw&TI#p*3d7L8z&BAN|y>}py z4h>^a7VlIR|54U-IAQjfGu9>UhkjfcLVuN`G=QiSRTZPpKPN*+ZjmiD5koxcNP6Zx z503D*LHoESyGaBgCcGFpx9EOT`FT*uhOP+4JuLft(MYo1jZ#c=B(Z_>h;=`ZU;rq# zHa^5(WW-YbMPMuwxU`)t8pH{KVFzH+w_%0S2@Q9}@+ihJvlc&;g6{Lqu^Z17ctxkO&dXqZ>|yX096JV&x}Ry2#N(2K3Vg z{q!POsMy4)04|)$uO5bcGsfv%WoP5le2$a?Psc}V6hd*pQ3KGfhJEny_HqElaELFviMbs@1~kZv*6Oq|I`{xiM*M~fq<0!FA4=qszn)WYvn^ion1} zQN-+hK({#WO*byx+)cP}rmw`&h!}=Ah{oLdam@{KOI#&m@%6M)VRF1l57qgQ;~3pu zFjL&6R@ys*lEEL9o?LH$`6G{}!iL^5ekPr6EMYsE!(StlEZLA~CK3>h$61ZQs5T41 z`2rv!xEOhxstJqIh|k9<>_XPsbFHeA)S7V~{$%ipBypg;glMH(^^3PwY=l~E*r&o0 zxh@I0bz4<2MD1P%jLhD+7~_H&NA(}(+N;2rVGYQMt@fR5#(shJ14_Ytul5sFwmWzZ zvZ0MYo!x&tSG}JCa#2i zh^zxpH$_wM0{a9pP;0`22pA}JBaTc#_;+fE@{nYGg1TWrDiDO3Hx+Rg->it_)dDx3 zI%H5n5hmu1y_}I@q!&IIiH669SnZlwV~cg>sOA%Zi-?V*cAWN@m`j4CnGP19QGzfx zMJpCaeiPK624NiN(j7HNb2Q;;S7$PP)f0P&mD*8G^qX0#DiSNwiG&ifFX~6o8O#mo z#!g9ASsG?^=~N*Ai-Bkd)r6$%>PFG!>2z=zBh!gvBxX3C%mvZ*IoFH?Az)`01w|<%ezs znVY>`%~>;gU5cU?jQut!j+Zy9r7T|jDK_v(JGmaqgR>#skrP(+QJ4uNc)4M?r_n&R zS+czu85Z#&F~N@uYjz3ZN~ZI!528?qh`}(-1(2|)qIp3)#Boe(0UmYrYi{a;$O}R^ z042ym7!G*=YFVSZclGU1^z8yeDJE$S}riUSwL< zaZ1+l3ss1F%}^*Wl+)^!MVGiT{2z3F&$1tZJh)sHoP^Aja(x-0bK4V@6D3@gesqbr z&s3)&M3VKgx=d8hnK4dQ3DbQUB1V>Po|Zza2~iBl9pZ|!Cu@lmjd>vBmQ)=PCxXr{ z&-JViq_QVe@=}tP5Ct5e&K)xq6SUTb8gUp}35p#??d4kD>h} zkOjpA92h*XZJA7MNAi9fkvHDH?$vzOjwHkWVzA~4=yIsTBkF_vVNc+5ln$7TX-u?p zIu#|fP~WJG4NPv2u5WSj53fW(Oe+j(JU*(R4Nm zTSsX+)HnN%&=^dl@-@>plUIV+>B^H0;Nx)PU7m~$Lp-NkG;z6xLaBF731b!&qfYO} zFbdr#-{GA^4II^unibnyYh54Z8#>nL7?yI!byBaD(g>^hqwyWAU-Q`}IYt>wEhel9 zE-PVB1jLB}hGw21gG@5@xJhbi5Le~uN}8TnVayj7iX0MVk&bxUZjqS65Tm6c#NFsn zwBw9~+2SIC1M*X^>SGoQ7tKiso-l-&feR*Ubk#+B>8BFc)qH@VcN&PUHNVL>RKCn= zza+O;wT-%<4B^c~4x&%_BbUX@M_JsBD1*SdbkfxSyB{V_Lo_NK*9bXPxgeZ=rn=>f z3tveidgtt_;C3K=f?XQxV|j9j=fuV#SWxdyXD>HWCUdgl4(UG$orsj=wL@YM?Njr( zd4X}`e%5P!_B#agkB`T##o2e!+&EV9h5@qQD-h_=Su42eb&*F}&e^T9$76^`2ZCn} zuP1uv83CVXZ7xKPW)gCggWZ{v4#B?^{(g$)AwY75hfn$k#Y;46=M6Ii$bzxJe*vwq zCg$-VeeaBy?G-V9gyi5kd^CZzdj7CN_q63fOG--fevhsbms%!{k!3RJ;us_XVIqa5 zGsPucpF~z&bUmDti&zsnc?FPR3z2!0ZCvKMqr>LIbD?q${P@Sdyd@L5O;904FvZG8TXGO%?L0dT%KyN-8kWhD*p%75uB_8KqnAm+bEk|o3ECAB^|l_ zCS@Xdwd#%FY%>2)_4!1MzGw`|;dKHaSARR<6oRXJga$*PB@l~t-{#ik!Dua>)j2}5 z0M!48qy!F4laP|X0;gwtVLL)@su&UsxF95?sN==6B9lbo&E6YJR}lboU7ZB+ZfTWj z!V~~hM&{dEQ^RMnqWf^~2%W-x1aC(G+Q8bBbJKE z50~heSW1URT9YQ{nCu%lnQz{m(XS@aR9R@>z+xS``dxFp6-sv)D6mbSQptWX=SA1A z#A5dR&>(Y=QreU9M(_N_^m3K^kJFWcV##M-0efM7rRcO(Dv*XV%2ps#X{Uc9OJGZO zKr8J-gzQ6TReHVlz2NcvM`XW_SAmtj58a)Ctxos7tJS3<0om~nkra{zZKqlb)C8wD|DUM1=`SFmiY!aG6Q)oV!wl|Rl z3&NB{YqeL;W8}z^T$`h zHP#E)wP19K+`kTe?a=36qlIQG+Y+6AS0`VmNlT@ooG}-N$iT@{{Sd-8ZiZUTd*e_L z>DxAf%>93NeqE_e(IfiPXa-o;E>`K+#&8DwLv&5Qo7HWz+vtKj^k>a3e{K!H&4*fW zhyLC~I>#%x`S8CS`v2AWRmk4=YkTfT(45MG6lmZ?7smw{nqEdcxu0?PbUSBNy`E!EW#HpakX0Uj@I7ba zP9K_UTd~e$4jUM)P;g{cUU}_N;{+$V4yq5|1^tE-U14Z>g&F~JSNJ@f^z26^&B3dy z!HLTMx)?n!&$0hUOmuQwSro&5QdO4ad{SLiQFBsL*Ku-EYrhNw<<`|$-K3PlzM$3? ziW1vmD_3^=XmIpDif1TwTsyxE{>a|*qa4a@Tjlkc+nZLfV}qzZVpDBJUt8~{%q3=5 z(0)F6+uh-p+Byl!aS#1lY{D1o0}?#`Kb4oYB=%n4&d9->D^FEhhzx$pe#*<>RbQV9 z)N49!xxp#sCDvFTRMt)W(RvxY>Y@2_Ul~7Aadh%xlC|>7$vAuG>E(1-GUC;Y;OgIt z(Zjl{Pm+I5ujXXYxvu9GN#PfxV3zvpMGcXEE=IX-mJE#CZk!MBg4&}@#~oZ&%|wic z!!2WzK+`kFrXA~g`7^&aJ;%BJeDPj&`}5WB@ZaXczhWZp+il%K`P-O3ijq`g7|Vyq z>hqjIUDcI2h|%(z1H1qxRH2KML$us*Kwb>C_uc-J&J1?1 z=s!Z8av=sw=A27QIqaR5rAIW)qiYFk= zq8*8$WPq?VXF3$GRz4gl0P{o_UBuR)+;7eENRH~FFJ*E70#nVX1v&a;4L_kVzVT=Z zhHa&+1$b97AZpIqYFUy@gnYM2PZ9@s1Y1++4Mq7udxK?)8R=g&H0jx*Wscj&ROOSm=1%906Lt0)U3>LxN zj!^hu;^i8LC5AE{5yi)tBpRJtMFuXmwQ(b<$s!TZ14pjOlktWPF+TF5n+;f|CAAT< zJo5G@wDHla^vZDY2dZCJ`huLc z515T)9Q`|_%0%rP{~J?={XpP6z3v|FQ2~%u>9NW+kq#&DOj7exMHVgwPBaa(L7-f7vE$-_ACM{F(mtj8)b9Or0s(Pf2|BQg~nrvEJZaoaG3lll@Kk)EY%Eu{8lo+CVdJ zbV`X;ct$kM*;mg1a~IMRXl8fkH7ln9lZbsNiwBjQL@TyUS{>ywwvsWdPi;5qa ztG@}9@>9SzST>Q+pWGTyFJ1Fum5WJCWr%%^jbg73p_K3KaUP#WLKM&h)luq{RLTgp z!(FkZ9A>DwusY#&S1LYp4%*GX=EEz0_qtv#k1;A3LR(R)fQ=NTxZ>mfVKM3Kk+KAZ z0AV{ODNRxV7&edYQE?qKQ|EM(BS&VeSYI0CxuKOG^{Gv)$(_sXE``P*QfRd-`OAKUY)B=;`~i-K^swZc>aZ&Ch7Qkj!V@P_UnM(O_iEIoy{IL)_&<# zv?fuJzA+QqdKNAoST4#<*Mp_!K=S#-PzFdu=UK$q9`L^ zSvr(mY*24lX&#|4mf?7ooy0;U!RS{0PDs0Jq9FY?S1w~^AL)gmN%s~Ve)oim*5wb# z-ac!-jF^$$yUX|Fz5Bc=-7^jibXm1Q--RpxI`rRAiMhPp6rMbxvlI1;MOlvP#veU! zbB`%N+QYo)808#GLy6yA7n&SfRPu6-Ay=d-xkc~8N4klQl43Rg22mQ5&d~QB{z-Kq z;+(utTTd|h3+6ZW@!XxNk7NIpoHoX{lwaee)4BBE&bV(*X?{t9{dAG5(|hRr{;iS< zF8?>-;*Ui2|F@$Q5Pe7Rdu|n+h7w(jGTBl-oy}_l@BC?H*7QZKU;8rI`rn;DI)%#V z>@TO5kZq=ln~c^Nzvuir|VPJg@x6)GUj} z_Lo3+`j4rZ%~piAKFZAgr5Bh`N^k3}hN2l(7r9T%lAU@Ms3XlNhfMw|CC@7Nh|$75 zATue@tKVd~fFct)OZHD$dpZ|o@Ezql%G@~041kg_sNgO0W^+Ncp;C=DV#vB zJ#Cr!D^i?S=J;t?K;%8uw#Ljj)6Vu3Nl?8mtv({diy^4owN9`QBfD4f!(HwWYiUA; zzL(OipeVxS>@VT+Uj+Ig+0b7C-E;8Y1Ul!%2$7L1Uswjl$n@y2@Zd$`j}T7&^qWN2 zOL$(XyMz-i@VsIj&U7Usu!{4)@=AKH-1UM2SNwG<4Np=T9@5>8cWj9kmuv5`Y5mQL zx$n=LRm)he-}RFKgWqey@3^2Fj(cE@O=&gc|IRC&vIR}B?#_gQsG?y$w>GPzZw#+D zW5`L)7ssd=Uxtf9^zs+tv7)MUBJo5p(r@;sFn)R zA;Dtf?0Vl@E!=0%-AHm9guD;(Au2~7WQGLgqcVpHmvVTBlXa1SOhH?ckPg|>>lGtq{nwrtU14tC-VHg@kNTd@3 zXyWJLfW#sc7VsdPaETzBDMAyO7{m)WkEFvX#!vwd5#*gmv1$}!8BGk4^qfcYCKls3 zfQKnIJf+zIkbZXv8_m6ah%`XcsIWk%Khmc)z6sTUpmtPP1w99C@8#s^cn)n#gA zZ^$!WUS4JoNX}EdTxl@Cz2eist}qzkYb5hh7amftz#Sxjr$x;?fe|LRFO2Q;C@BBu zZ1&$Y-#@ci_z(e>1iasDC>j?;5R{`+q8N|G#Xn-KYcmo{BV&)#?Zv1XNk#weG5dA7 zdN{KgH6h#;JDvYezuD(qJ}Uu2n*6w?%7s$&Sa!qvlp|S-{-QnsW4!9+TH}BE%{Ue% zk&d78#pmOR8y)9Lf>l?nKeT)9btEM$f0Oy((9}g1oCqeK-;k`=ItS zufjOD-9n)xfY`3*?0_IB(Bwy7_1P~WA{U)Eho9lI8QivUGbP$!GyOXt<@$8Df8RQ`0;uv|D}5Dxx6K<3xRu^iOY5&R z_8C?g!+04T2E66Q!ojZ;zQeFGuG@tO8DttDJcXW8?c{6eNe&{Er zqtP6W^O1W54O|+#$24_R3T-e%GYvx^aC%|*vgTMeUGE-0CqKr(rmD={j;*R3{?_T1 zMcJ~+HM+y@CTrT94=q^Q;WVF9viJIU!+`YRq0BHE{H;TmTc4LI;hT2NnyQGQY59ld zTeGj_(yR0%pX%7IvHvWy7vu7)`v^|+HEY%X`1Rp@jN`2Lx38FtN*bk*Xh4) z8+Oq&bxo;1g)`2F0N+GaM~L1ynU0bLVs7!32?d?G_nN=uGor;8Y>|agjL_#*$N5}3 z;o>hfIa-%X=Be=Ed!K!@o{iqBLSEMZ%wJ=qzn(-B0y*pFQ}0iIq=G4!3a_6B(JtrS z^8;dqvyrc5)JV(P0Ed zP%fGaYwR%2Cy=Oi?3wNKwUxUEfgK8@f(2Xxqe3kk^;6j!{v$1wI2W2wF5y$h8A6rwP4rE<3S*Nt_8( zzq>!2N}mom+uv$<*qwMtd%D~sd@rFbAL_QSh5D0{;9;wJtoYt!;p5kSt_bvZPwX%O z8LfE)Q{j=pkHxc%Vb32hkqB=;qGF+hC?ssd$R+^y)J;l+U-Fc>*JNRK^Wm6Z^1f2| z$wqcH(oqvlV6YiOeR?$*N?&hdM*Bbs-DhLKh{cLM7x*;&wy#9JRRJ(5e#LO2=FtC- zy|;{t@=@D(ff>4HXpqjKLmKIBq!C0qrIC{EW+>@KQjl(tl15TWL`52qJJB zI2yrhTE+f!e99%~z(=nNCOgjGI9g26s-0wxucY^lIADP^H8#{F1Z}RFpc$~-BCsFo|~jZD92J9)_!SFU1xH=CW52#%Mld5+BF{-$k2 zD9sj<{V4l$Hv3Vo5m%vIs`S3%(T@uK@e1AMk@wX;KPpYIEANJN-qa|2doSOmhukP{MZ~k522-$6r|qj4rgg9x~Bf{0S0u{AmwA!tSJ1j)T`Oh&Lb_S zJ|*naU{=-jLxJ`^Uw9~oKr49rdm&m70Vl`;lLn-44~T@krL;!c{c?r~TK71Jw-7rS zEeJPq^6~zqj8?Bku;f!uklJ+-7;xAlz99ix>J0>;qlaOkO##o4Vu|f^mbI^^P}CIW zyPI>^9isAq*BdkK?%HWMYKJ(6yohg5UMPe%|A;3uLPX(esqs{{XLrdq%b-ys@9JeW zB%2>$PND9{zLf-mW}19y3ihq3tT=9o=-XK$x0=;>BEZ)neiY6hHA__1N%XYe>b|Rc z(foAU)eBDB;E=cCNmk{^x)`%DW)_`;Q|VtX!g5blj$6y*Hic&l-YvP_&pI4~_nTcz z1mZO0qkgBNU6@z8UgwNK|DMVU3Yy|rgcRp7LnHb3A7W-Gc{7dMhPl+u~Y9D$p)$A8UnE#+)|(q|)EJS{S;c(pOdJ+`n3! zjBjcXwIe1`htFp3nwpx&9Zc9;KYYe%ZW;Vd+t`?S5}WPFS=Ij0)JLGBoqpfjseI*h z0I%!V;iccPq0;TGKr#}CGXuEevz)MCZ&dL?Sj^B8l5I<$D9~l#o98Nk3ayjS=Pv9?^0vOs&tB;RtArG!xsGzlz*Q9{%wV%Ia4AnViGwTz+z! zm*Yn2Z1b@J&%}1hLuDr7?b#mJ3EZ!T<>KW#x^KX<^(*;RZhn%+u(rTn4i6Z#^VH}R{{(_lgtpq%RM*`41yABxduBs}+$;`G^rcAYEZ>nj;^<3b-$l%|V{@Ks zeQ@6Su3p~R1k4{65XgD^1^VXtjga`IXVLAC&61nFH`v!-IkPTisMracVK?nbu!H?4 z!nORM%d>z-;6U(Z01!e6P|)W0)WQ_hj(9=uu65zmLB-=FtGj5$Z<1> zT!ENYFxXgLiId!9UP`9NU5zKR&<7IXCgCL5UM07XG{|QL|@uWKm5=v zd_+6k3{B3CBzz_)TxK@hcqrU8J=9%4!b>nbt{}`PGHjWKOm8b<@rzxseq?Q;?BpbS z9gWy$cn1`5zG$zBceoAcy|hUDJXx44)`Wyb+CMiK{j*ja#H0K#w4$Xb{+9CWZ>?Bg zT9Ydgf=3|N0GSF9N53OBA#l}ZNz0D`#5s#PbM$f6r2W+=5LSD^%vKYl?x@V#M z2bs+Q4BDP4tD4@;{6%Jy_Gi0mF#5U2&!YKPd;I2t@z7s$u}l5CcW^RWR*C%?>`JYx z|~=v(eY@fYB}|Cf(}k*vv=q) zBmMTepXIDnVvq}`nMy1)9@xaLsaIN^gX&Hrh#9@(ZP_cP!ZbRv(R&4v$ zw43}}E6&+-=D%O5+;7zQzROvdd&~L8*3@w>~Jnq9Vb&V@cPucMf(J>RX~g(R`B ztGMqUXo$Y<_mn)g*M9T#MmJ4d=PV>#_stg!;u-zZ1URahZV^JpTj$ap?A{kB`}~6{ znIH&2bP$Y2Z-UG@M1!fM5v;#UjUr$J282UHkWW6NDYrDB!qc0`u_iEMeM!s;C^gsd z&^YZ7^y1Lj2?dNg2@5^yOFb`*B$6BjJ+AA=;wg?oUHo)g$kR8~P!w=ORtT!+reeSW zMgzYT5Mv?@1V#2msMDL1Vr$0p+4YM{;L}QGrgu|cqOxd!QSm}-1{@>fXr4b+pk{ZK zfgADExtWDB*Notio4!Oa_eVwQC_;=!K+pF*@H!to*(3t&zCHGzzQZ1*S*hotr*MzaanQzRCRqy;S=q@%4_#ed6Vh?|p6y6#UQ z6I!ETm`)|%s9~}ljhdFKt4n^0&%@e2$VZwq9*}ZhL~VOR&xH3~z1K@7HQPPUe#l@(wz0Nl~v(6bZj)Q96&n0@h8HKGI=VN)M4J^m$+HF@Ook z=ogpSd0(fCY(r{aVK9G3X8TJkuGj*-#w(4_?Ec*2|ASW4pKYKm0=7z;GyM;($Q!pQ zBCGsp@-MA8*9I3XaaB*Pl|L-q?eQgkgi9I)eptCYZSKadzH2aAB|B>wT2FeEJi5HX z7D7GYuqR){3ffWfEFNxgRC-nkFBlLI7oZ#P9NgusO48%Md__Q@pOiY4b4LGBf3IpTc4>=DbW~|CL`~K2BK-Chv>^ctu>D= z0J1|j)r|3;zBA)UO^vv%jK5#*PB}<=Q!{|j zuq-~CB%RYt9b+Qq2Ka0$!pUsuUFDPla5CF2_fM@@Ww)uBbvf%n`J+Q>Xh*lQ?Qxmf zkIKL8@kNV63s|4D!JH{SJag{XqagJp%uS7j-ovJ z{Gz_OoX^n}y?yyNnQdL6{o`9atD-Lyna}ex{;9#}?K$&7@V)ELXw5r@TNwx8BG+F) z2`&BWeEV_R-m8X>I0ppY9mc~OjHq$FWe$^26JJNcwW1#Wh?ZJOYJGE;ctM2zv{tX|n^hiYX@;_(addgXcwXq~3I)M!ohX|luJXOxho2q@rK35% zyV7ZRdiKDQ03|5x%9F$YtP9e0$c^`44M2Y}yk823bmDH@$ITme%N5OqJ@A2R#bdZu zT!U-H&LW?lYJFN!?phwC6A-ZZK=muqfsuHYRgu=6~++e3lU>y0Nkmos_UKk8wE5aP3| zPhW2@@Jnw`iE(a^ammx}XTv_yc!Y#_G0vl*r_x?AIS-Y3e6j||q6VJL2U;Nc#xnT! zF$IAZyh+l7@|%Om1$`*bgGz{lY14h^(OC4-f|(acSr&qU^F$nF!4Gt7(Dj3JTpamq zLZCq*Ol2VhlIlWRAr6Re2PAY394hBUrm#gOMjfoYK(=0EPI?}ysP81JAGYQhrtjtd z=$zsSzrS`%SPnScY=P*BWVq!J$+phD+*4cO*>LBra8rT^hcZrQh$UPuM)unpN=Nj6 zVa^GU@Ft0TP7>hp8oUkPxQx-{o z7*%*4rOq2&QpQ)9r{j?#vP=WjviE6b%G%B3Twh-Nv9@CtT@6;2Op--U}6!m6{ z++Hwtz~-JnGPW!-*>;HhqB*7-_^-9)-z=J`B87jjXx?wOSNvLA+D|_J!=iyhg8!vOlUDR5VD*-wXui4T zOJ5{DE4)neP`wv6B6MfbtpARb`~eBRe9B?XJMrmH};ka4D+LQ}kpa*ZSi0 z;A{O0^*3;f1};T^c3r`KN>L!uKU*{fzCo%sG=|ki@G?#EKP{SHT~{S#|IVU;5Ljs6 ztS@nc!P{RA>S`=8mE>7cEdnO5@fmap`E4!rb&Q9#`4tw;DAULrkqiaEi5UzoX14&w zhZ33Z8D;e(=?${6r@Rw$GCG;@b2l1`*5Q#77I@bck=@qst}A}H6ovk;krFt`capg* zo&~ECmS(=InGAUijK3|KhM#N8#jt$16!nO? zg9NkgwcK@G{V7HNSX<87?{}VWRKAYX`*D@<24VkCDf%}^@Gpzz@GXh;Uy$HzEgoPZ zTU{t4X3Ehp5nf+i#B>MS??{P4Cq4!|QnHK(=kS;mPXPBWS!w)-B%rl2xMcvW&@GAS z*Q)ql0454v?m==G*W(`nz2^l;G!C(n{b;>h7mWdWu~U)a&dn}X<63wNz)FYZD#mxA z7cf^7?A3+dVM4uEqSU;6H5k$#1;qhGK>;p>p;Qjt4lMx{@S|vg(w6Zb>&U$|Zc4Uk zj+fiEA=Q^VubTHRcWVYYuKw0_bq68)*>!c$|BsQ9NqNqjliA;qlAF_I&;6UT&k>xr z@UAO3gly|~nWmWCcvqeQ{?Y$!(Qs+4N9F_R&hH>(|Aj?!5H2`Yfa5vTM|pV=Apy5& zB>ryEl%;zL!Xad#g=&QgZ<*9;qqW^7m@m#@4IawwVr*nmXfk4wXP{+jQ*bd5s|E7 z+CMb(Ze%`ff|JL8k`3MG{wb&S-@a7-%Bj^1sQl-?@2{82uld$v_m7uKJS$H5X8a?Z z^7X%)ZU608>t9zu|0iFq|NH@SeRcNQX!yC$Uk}*4FOx?0>L0;^zdv9zC>W~n2P{2I z?apjl-I}X0AC*h@fiF->p1>=hKe*j3P~_*>e+MDOmF~9-xtY#mziZ0 z#cj+;%zja&h@ZW=XuJML5c0oxz{tWhp)ZOZeXuH!5<~HF%XMKD{o*`m7ILp%uy996 z)UWQ869ZI_CeXUncIG8&Xbt}sENGY&7U;cOpg1(b8yf$3!2aD=>!zoCU;OGc=8s^( zKcnsc;j4wnG`AV8J5I;dIfa^sWNB`TM^JLQec_ zXoLqLLx~;F|7QiXHq%KaxxI;5PyA$0L)iIQjie-SR9C`LXdWyhR?-4$%x}its2kJlc`Yy|7s=R z@(4=3_Jh)h>*_t5w{$Ovl4^vtthuxw7=yT zW%tD*b&~0Q#ssUk+@pHaaeEt?FI^Vo8b|HBGOiB2b@J^YY&g%v{PBG;@iO-)$4f!kVjJ_hU z5=tKKg&)We#ROlHmXy(2yhA65Brkgf4-dIb{R|J0Xve^Sg}pF!b9dFeZxa^ z)MGiDMG10pr1??{ig$*3QnQ7R#_db>7ld-!40ko}C3?#Iw#I4JLHDs#@j>p}8Ny->qUKr=NW1EOs zk=QT};Oezj*uV)QQ}zBG;WJ*3yNJP1F=d3q3aL;2LS7(*boup397t+uL0?djp$tN{p^ns8s1DwhP) zf?S?1;%QyL3B#3fLi`INvkIm`U(=C5QD%5}DDTWfkzyD5s5EbljW>cL!I~vOT8}>` zN>PA9Ka_!n9X$IccL-y(V}%)l}$U(ux%Kf_~vw*qK;3 zQ~lY*c#TBqGHg~CGL95)UhO>}*K8O(k$EnjO|a)xpd!v8wCu`vJMkfziO_Dt1ruM$ z_^BI5TV7rQT$#cYbcJ^e!ruw!uY+`tc0*oB3w}325)|1p*?ZTXm-KcedjCycxyPaI zNTcwPh1CG&vB3_`P44n{(ayw2*xsV2#Bo+Pr-EvQlZT%_LHsXjim29)cA7u&9t!Z8 z6N}o&mW#@QpW&y^pE&>MNYw?SwL90PCaIPN92iFKcJVNT$6~3SNDqm3FxI_pLA3%i zFCvk;CLoOLQ}xiO@Q?Hmj*K~443;Td)p1L)yo?VUxOgH&_Dl-HAF6~%PNgJ9Lf)f5 z&-9EtejjE+)GsG07smNb8^|Y}5KK-NM6?R8Y<(z>(pVvpWr)5}0ReLytp{w9;%uxW zfw(k_3DKF+IPq5Bgr`3YhIyH*73(LB+pY%~SfEjUQ2-0m_A|kr=d#6flN&Es#3OlA zk|DMZ1|TE_dB+yf-pnh6X}i+IsI0*zZHB|Br;{_6i|H83p?wz*6Rg(m^RDF09 z!wDkQtI-D3YWJx^i%c}@Tts4*_br1i7)*SGz@};%@|QDIyeDV4Ry;t7oatN+Vx)0% zeiof~?xTEB%!&4DZZz}DmWui$YESv=X;#lSxCu4YftmfBNpF`j~$WH323Nb6TXpOevd^0?rdX6tjKT@LYMM{7GKK2-E z$dTa9eD}tNK$IybQaUe6Imk{Wy4%oBQ zS`!sEE971-tBq7*rtyI<1I)@$UV6dlYxmU6uOG4mZ6}s|jo^f|GPO0&dzFeI z+S{J=HFf-{)+MJb+8F4lZNCSh-EoHm>k9^e4PJJpj1M{dIC2|;G0|8PNhq5i5G%<^ zp@9Z|gdCoF{-qKV{FGZ>#heaYf{hduth}=-8xHAtX{XUA{%9Er;_XMp3hEJ8$_J5x z3I;SdG*PNYzvQ!lOA-hpF>VV&?-@zbgo5fM@SdBI2(0;%#@A&A@FJo!t-~mIZU>WL zE+GME-dGL!H3`_dCbc zVvy}=zT5$>o#DOThB~~y;_8>7ezUb1PsTu&PY~uZi`FifwTzMpcp`z&`Qw2$wQcyB ze^>T?H&%Rk==hZ&o=A259sG*ZV(<&;xhjo)x(8rD%w^Q51wXd^6i^)u=osFC! z+*o0VVUIX4`FhP5MuRw_rv^@~zh1u!J9EC&_=dN!A<*0!;F^1!A@BWB;6vDCgqVBY zy_+os^|tA>ckcIGFcRjdU=yDg=wLngfp_qslDD}{{0KgIZQ(1Ov;hrySkqX)<#hF>%7L(l`U2F#rq=UkB9i!9$!^pOl6U z0_vxkHyHy_yaM5_IYvt$) z7@a`j&$!?9@V*Yx^fw2g^!YHJ;xg;wv7^yH>oF0P1AjynohN2LWTHjy2_WJ2!m1T? zM0Ag?^YdT50 zW(r|1ICin82|)_-#&7|!z_CEh;kbVT$th;tV+7o#WwXhA=H$#}Y0?2xz}7{zx$4 zL_gtF!SRd5rE1v1`?Np|)Wd^A>%irpcV$UWyzphp%-sS79M5qLJtFe9h&5pO zfDlh)kuRuiXe4?jF>cdIn}{)~UvLGTDXq4cy3z>lyC<(bjOKU>2V-gKSr&b>BV?qGtXM1105Fe@6V(ISX$hUFFl z!qm1zNn!!Nd~wL*MW;t8=bQk?jALp2(isc<9VnyBT_gl)Sc-Rw6Bc3(x4^D) z29g|w_n?i~>BNQR1q;!Zb8%}X2Vzl^E^#n^u9sx!mw84C0WbFG$9O#y#ub`+(Xv*=OtM?AuIGVRv85%7z?h~l#v^4{XFl+J#Q59b4dIq(bFxb$f+&ic^wurd=l9^(gsR)F) zNsAbviBlr%Wpz-7X6kf;>Wf#4%+*%rMf0kKk+SO%r}#iNNn*yOH}N`G@l`A6p%OW~ z6&(*;0r~QZAkjH1GbcObxnH7Fx*bHdrU2Sj{cWjw@3J}~DgHqCHBUtR5eB2I((8ug z*Ow#0*GsQUk6$B*2$y-k1}F<4J+H|~uEAgxauT3e=c;g<1`g&|W82f&^wbbz3NXE_ zy=N%!GTqNVIG;+Hp3<<+)vXSKDZtWR_hhDyBZg1&0w<2FUJ*8fy^2`RfA9VTR0^x0 zUc{c~Y*Ja`UIPg}i>!SEaWb}0WrJ%ywPK}vwJ@bw6g33~dl!DAqGXk1PZjet%B=>@ zC=1w40=IO*2uz2gGQw7{*%+TBarv^59MO-VwaK|Tk0jd1`~&DI6Udf02@kQwTe676 zR8HqKjNYtSpvR)O_vKbW)#7RuL7}qib9@n(D)T5j+9ePJGwDZb|5wdM9SDB4O5iVw zb;f0&6cdzwYaxT^HVl_)w=)Qy4|Q}FrOpR7qv!akhIkrWK1Pqy3#i+J5?!n_JlqZ} znfU4BM~N*_+VKmj(m#MEW0*}Asgh#onnfsspHmVkgVA9RSvx;SgakcqO_I-EBYZq0 z=FnKqaF}?#$%i?OF;MaBaU$=yJ*9))n-M8o!K->TOo2qcF2o016o%d2(%onsoc$*? zp@`2g*?2V-%fRH^_YLa_+3wpJydhoY!sw_Ew&S8&?z!dZWu>jwX8=#K2=w0*U^gPY z!t5rbB_=S!^MZf+u5jBw$X?jwM>H!D+|0yf&yh+vU$cHl{{0@4lpu}v{wdUaYh zgSgV$S!swdJ^S$pTw+H-uOiG}wu3g#%!Q#PfHTf4Wk`KKh;W`*OBuqQ-C!Hr<2H{L zL7K>-@tg?aOfy`;%8jnp0g5}Yu(W#nz5)&j?uWn%ipw^zS2V>%Rhm3%JqNpoSQBNv z@X13>d^MLr{;%3JCDDf9)xKk<{s-cyXU?H9V7CFx0o2wVvtB_w+!Zr_@>d{?j%Hzf zJSWoOb_gi%8=-rub1YFnwz_?6x|gc{t!=R+03|CFN-9 zoSek2{H=TyCq7%Pawn(Vc9(h%=h=hzUyC!#NUh-8LoBHA9E&kE{0Dp=CU(zwOJ=3+U4mkm8d=_?_7H2 zx5Nsz!)aJzdB0TNDf%jIsp0!luJ=-F6`d5&t|jL~#mA-cq7Qb_YU}CCgj1tgMKFS0ArT+z76Je7QlfvevosHHU5+ zdu8wDAUG;vXiado>;S@(Nu)GMhq^0|ckodh*^a9|IYW9~Dbsd^(s19E>TmgFXs zfWX!VDtZ;}+X$LF-u&FL;nlT)q38m2aU_oLH&QIva&!^r2ZNu=Y!TE7IIe7APH*9Z zndkcCOcFtPxm%xRl(0;9NP>2J=_ReOx_oE#?P`g=stGZ9f(L;2|8CL1ZC`}Hwrl?{ zmcv3c)M1pOJiku!Ffn4tp6!TNYS-I6V{!aPizfG3aZ}ZYX6Mnk&a;GS#dgE()gKiC zPLCs=$DQ&C3fh|n1;tR_W}R=FmHAN-$6n8uiH9_OmQyXdc#{1t61mIX=zwA?phW%8 za@Z_vdh7CE=PEzTVVwXs(#RbUvW4=P%Fb86Py+j6x0wwmy9@R9pQ>MIOG>zOxWTBz zZ(Uof*Wl+Wd4|{G5_jh+cNR_Q9>5Rfrgie>m+z~#E?2nPD zO`}gN_0#tq$_kRU+)9l!=HB{pw_PI=MH+6*@u#V{JI%w{qV?!~tAAHMl}^FC)&n7k z68mYPl0*o`@Upp zm6^J` z5^Jn^Q7rr4<*-BaPUser1%eUA!)(gS7}41ce{Rq>U)8_){_UIFfauw^o8K_@jfsfl zy(-?GkJof3)8C%y@Xnqge~f2S*HT@XO}1r!GG{z*t!HJLFweVSDebAWgd^71OQ10^#plJWj~# zj}r03EXYI?LUe?*;B`K#?wrSrnED-PeVB_~&m3RuVzjagJ<8}2oBb}iXhyid3{KhL zu58x5mS%c_Gru93<4+G|B3>l)nf>6PA)qRvo^twH7IyEx64^Vh>c`!Y1WXs9(r(7~LQG5_z6N?-LeP4X<8_f)4*g3O zJ@{!}+fiyw>`OLl#nDGgM=x5&UUGO2j~ZXXPxG)!xFQtC%y!}&kzI0Q;tMP&YAW1v%Y4MP5ds0jb(D*lT7dk)yO?x zjwU*Wm%}op9_PUzrR>rY@N<=u{Kp+w1Xsh8;ld{cpq~-Mspt(nAkkeptQ{VgO+V=O!U`(j)3hYY62 zV?~!H=?j!U?#!XTo|Cnhfb2FW+Y-_>p}qDRytner!v$~S z`=-;(=*nrEXZ^6>Yu`=fPnUNnfoGdfkn28OU!J`|z~M@(VKo_#)TJ&>op;lDgb|A{ zA&DwCs>8>tSJP3{%fa5mI(4tEo@jwhnNF&mQI-uUd#z!h-(~_ zxPMk6`XV+vK&pe3ZfLb0U~8ai?4j)Ran)>gS|4`b@c`_Qci*foHmHw2%vFDiBjL4tI95^1V9Rv zZ(MgiDrB=zy*6-BcBqd|uzZICYemwRqD)PY*8HLxRjVsFg_073yrE9}JyySqFbf~@ z6=t%htD;7jlVyQvPK5TZpwP80-)LmVpe=cNjI6A_blixxO}DFRqQ2u>y8-x;nabzT z#P;LoDq)c&<(H?8P8HuBC$t+3cpnG8`MT%zMx^U?+hofpyTy~CrcZ9`PnB>f^_|79 z^YLDvi*T<<8x1bdbBK-&##ja+mtQ%x81ZD_&m5t+Bu@2ByVt}@(&VC!Xv-ylYl1&A zi$O#*${e3gTHnG;r4Q{OJw6{h{D-+_y-I`3u9|oY&ln~7<&>OKrvp_MtAiNlh+K@63Js7s!QY=gaFlc8#Ylp2sQtrm)4%P_rk3WKdc!*p7mt+4ij z=MUXOOwZ|4&caX%!p2>!hAc4oTY{gKkvH+Fp(H9=mxSYRN4zyPAMci1pa)H$Y9e_# zn{Clhlt%P>Mn*@5#KIOLWqTu_EtGAi()0pREIg(u3^>^fQQ2OSxeHNf1kuI%(FJJH zxTeuXHqpgi?5C&E@MhRL!I%bpr!BYW#`9v z)=v)#75)tHRs_bnr#VcfnNOkwZ=)(n0L`7#LRynWypdTIfmbaF0owpS1ArfTM#f@V zAbQ4gZ)7p945e;`ta5<4L`G^xq8_}*0-9OPoSx*JKBt$yJe$r&nuWBTDV7hkdIl}O zNbp+(8kD4g7J*i&X<}R`=3JSWLYZUb06i`gzt#-Z$+WPj%pM`A%elFvGr)>E-3>;a zWAzN#DlpqY0?p4B#jqxOMhM+Y2-V*?C+;(<2K<-q$feF%vqC8SiaDO%$o?j|u~F$7 z(43t`l(@j`@I|1T1eyjHN*r|ts-2&CK5&dVKeStwWC<;M5{Mt2@x?n=BOj>a+^dEaE2OAro~Olk1e7JbD18;H73zQ z^8uUN00&TR(S<@>x2kw%t|6%4T`O{EelG74O16pLyE6sA4l3X>4Z$1waoe1!71_`P z<^E;nhN7F_EQ&})p%thY&nL&~Gpbd7{_Aa2;hF-sz+C@Hw4-fbH!hSIm~b(Ma8cZ3 zX*F{ZzK^eo53(DyoMlO#=Q1;!3-w(@UdCksM`r%RwxWEpV*i8kh~csTCAV_YmqO7M z4*40F7!|L}0jI6V<`U@HTt&$yD47Q7384k!25w!pC>>12s?NC%66guMs8%%zfRX1` zlbOff`5ADZJkZ_qQ6ArBrT|waVpM`eQ-aB4l>jtb81zznDNTk8Rm{1tYgm=J94H`> zvzt+5o{#ipF^$QtfJ3o(!64n-8Q`XobKRCb%UpI@0RUG3^$vuI2pgir>Vh5$S5CBzWB@;_MUQD5CP4%svA97o@>gPN?4S=W*KmY+Ci~#60!R&Cx zvi~Y4aU_^_t|()w$xA@Edcf1~Cj5~a<4TXbD=@$eQTj0=widWqg}Yfc5xZv-WPgPV zT6@4mhk<*@ApwXwXDx((ls&w8PY6Z1q-31s*0MFafXPE&y zh5!wO*Idr|F$Nuh!vbeW+YuE|BWGa zy{bm$kKLrwZd*MXEFxd5we(gM8fo%uun8jlq78_Ojev*Vl0k)lx1k3FmPY=pr5 za`kUWofDFud2Palxb5jujXzHZe_|#o_3~FqR?qqG;n|~A7e2Ks1#3j=g^fRyhN3_!0wRI%@zWvG_QYSG|oN1i(ceL`9)TeRM z1CE)vi&i>}n45lD`8l`$Jz5FFw)u&ffOQPFxBi^l-#GZSpY4CPj(}mWh~A}QgmzCK zi*;U|9elld%6XU9-rl}L>b!Bii9=rf6bK}O5C+B*n%yCFTJVEo(6>H^5@@2)m}BU| z=k}Y&>FMxP48+WrlI6vhNJz=nuLH98L6ozFKjoo%bTgph+&>sIM1P;*rjaJ zcyuJg*8KHC+sWi=Rog-PVwFIbAJI*xMpyObJ*UM!)^f5SaHh#w5@wdcWwC9=cc@V3 z!7$qMNN0JbQz12Gky%poE6K3#GxH-U(&Kp-4Ps3Cn4u?AA#7?R)pPZ_HQOvilH&M{ z#%0AWm46@rQTb5R{Xy=sv-%(8WYl%6zyGkiVL>Fof<3+dv6%fa@N}s!s`FUft>)h$ z0RNVJ<0Md$+~w!E&>EBx1GONbi(YJqN3n-USUGdFsVnv0BrFt_ilzKY2v!Wf(|DU{ z&2ja;WwZKfuj4G<<9pYp+Qd|k7Ju&@0?_yHCj#)Vcx4R^+y_A}EM&kOIW}}PcwSotJj4S> z>hMSUQDS|ueE~-RMuYSi2^28Yhbk>`gBLJoQ+Ce_QCpBqS_gb?Ppc1;HI7K=Qz_vQS{ohaqvaklD&Z|v z9JhOPoVhSo!rweR?&x!z^_hGF(x>>&HS;*zsGL@K{`cH|ttqmhIN?2ToO?c2Dt49u zlbEp_PQO0E8M&To41~|^y)@?8`4ZV`;p#bPzvuQxCxs+;bNk3cF6M?JI?2Z-L}=4V zM>2toowI^k732}{gTf_5i1Po$OcZL}lgZRjOWCu|mq30un=~>D<%44;ZXUxi6FP>i z4HcD%%(}8g@2h-Jtc_K%_4{@pkx7l*Vi1K#gwq(98b9owJj;=yB(AK@)w%CVIJ7C_ zGv9C%@+|)fRT@|6!MD&}Or`u?8Tb!|1Wm7@Rg)r*Oy`Gm!zoAFDlEDCDr8c>*5}{6 zx{wipj<5`H^>Tf+(%YpnUFaq9KOmBd{{k|FNl25Jx}!N1NE&h-&CxVhRXI8-8-84E zYI^(D!8Ppp@(Rlt^{6O^Yut0A6^{AVFzskeY@d)Y1-tggodA2!Ki_h+^qi`4 z1>RtOK{wRz0fgIAP`&zuvpbJ~a!?a_jJXO-S?H&iJB$?XSS6@z>7#M1jWi!KBb!<1 zqv1G=avL+J>^mQzia(4u{kBR7xab$$JB;y*wE)W}Qy0Y5rIf0yvlw2C=-*)`#w?j9 zsz*%*j?(&6Hh4n3$E?)qZIA5XP<&F@TZ%0SfUC+XNPGc_1tN*0gb;$F@EHYf!3}8% zYmFf7^Ed-ePc|XD1%Rs!fCqAoc3TbvXX_&c;RN~rc<@y)O=5xq8k8qrV@*n*51$Y2 zWAQ#-)%ei-p5?#|n~nO3YP;SHkx661F)Jcm$Pch+1VvMkKb5cSMoP`C2U24L9-$ic zVmby|eGs%JjHR9pLE)`{`2uM5g%_T41YryWZj%9fkSGFsvDqX-$(HkhZZ_T6!R(Ii zo2`g0T|G_88X=bR5;ICQfmmhKLE6O2NMh7Txdj@*$gvW$WsVZL($E8xbDw1mC<5Uc zc`%+r2Y^VQzr@KoBvAP?#wBd7hj8J02;O-<3O1-2kKXwKIw)ujMZY^&o;rweRsy9b zJQ&fPD+0*Yjlg0f-Bth%G-pCU>4kHJExJ#l<|WW+y6dB`xq?GIyHUGd1d*{+0ZGm! zP{hy>!I6^(z){a7JEIy5i+lj#ayM$ZE+UCtK9c8~<&P{2QrJpd$2jSaQMB`#aj`(5 zz*kqBVh61_DH_3^Zw!&SNC5A@R|5$_G(bKZAp+riAjHBSD1auqbQ6E>qLp)CGv5Oj z3Mfv=%X>U!JtVV!0IsonC>*a5v4F2P?;*e@cv^z6TKvPrLlCzxsijcGM8nx*CD8Q( zgNmF$NEF@IGni0BSn*~jGGx}|z^kbnTf^~8pQ#&_qNSHm^P``8`}37}&x;OJv3UD;C%*&<@@tYJ|mh0dU_&LVY%50*cUA z?=HCDIT+&pbRKax+;KkAmJ5pTK)?%6-mP-Z4YuVSRARk=2310^^_sW8DM7lgXBGi* zVbMntK1g`ZZ%s4c#?9p9QvwjEdG=V(m&-Zuh9Bt$#SGioO@Y`Mfi&*GGq4yXE{{K4 zSdi(7s}9~oAx}>W!2~G9sDK9mA(bsBl@Y=dXC{z4#HvEm5)(>6c1b~UNlDiNDYp`+ z8t?=E&f&mDKteD^V)=QebaQj>Cr=v{8AE1hGQT$*1ZTEE9@4&zf)VM4db#8e#8KWC zCP1$m|0z%V{m(O!-+anAJASjDXC%iSZcBnyhmAg^e8!$5Q#?&lhXZ)5OT&6d#))8#`*#Dmuq?rs1f z>d`4JJZpm~#CgwnA=5=NPYRW~LJjby#Pcw&5aMjMJ{1)uC}k?8H&{>=kz`>k(;t*e zSR(PUoIE=ylnd$gr8!~H-Q|8lM`{;`#&0hfjovC3YM8_^5!dBq8A8JGrM>+hZUE2I zjN3yW(Q>NUA|HvfqrcP^W45Hp49McPTl@wwwdqa}dXW{Ynce&56?#bV8E%u5apmq? zU0+=1{S}O$~wepr-(@;mWk zl0i)R#+u1DJUfI)c#*~hS1~RlCMqEhFJ%`R9NZJ0AuXcdJKWwBJvN84jYxv%bqMmM zPS!j={{G)G6GV~6sUwnSg7tGhp$^Ix_~Z+#Db--2M?z8{KYZB&ia{#3HkS%akBF8L zG`2B`kii?sk*Okp^AJ_|w=HCNL^D89L9LLl;vy_-{|{;R8P$Z=F8UrqOQ=a`p-Doo zihy*bO7FcYy$MQ_Dv(e^C-g2LAkupW6{*sz6j6FnKtM%$PS#p`zxzFV+;jIm<9_8s z#^6iFlR4+}|FH#Q)1o+IWkXyrnWPRem~7G_Xi3_C?EnJwco$;1Fre*+PcpJ~gCRv( zVD@8BpKX#4*T)%5?B9#UJuXggufkrSwd1(IokHYod%M>l5aV9C&|N+~@shvWuPLG~ zar8ylH{kL-^Vv65+-pmGC6h|+f3;sb^96ftv$?D3ilW`>M{hn^{@s4f69}u=SChRh zUESmr*@j!u(pJuUGN=g?Y)Et_(<|kSBCGNE(t+zCh7S|DH-FzoyLbKyVS0w^A$DQj z?5L;JsO?wqANAteuO1a=w|%PB79U*ki_$q&-EG_DtJ3XdiWWE-;&|d*-9z)!Lb#T{ zmHEJY>@?uh3tI0t{3^nod9VSgKcfQjzW}aNr84ub-qzxm%vtT~;`jMf3B8*rN+dr- z*uB{1OwgOt{y}W>$y$8)ms+0OujW?@8cIz?$}gP+%4`M&{e~T=p)P~GHrFk4-hZ$M ze#1^50vbL-s=JfFm_JK9`x-BPcxL7QD&lN3$pp8eB|~xOnZx%wK@y`FayxJs!IEyw{^bv@6UrVaDM=82ehJu16Wtx-MusfS#wl#ogto`LARC3h(chFbZ>n^) zxgaUFO=r6Y>Qg41EyT57<>LHx*?9SifPdzME9#D-)D@Eqf#J8zrg(zmFkf@Azu39g zONepn#o%m#h7WQ39x(unx=Tt*Z=4)PNXy5NE_J9s3bgYC)j9M@V2B!<4AFiZpI9ff z&@ZM2Sb!$yc#}S~C{yUG3FDV;4;jU#64^Y#PeO-zPplmXG z$Ga^bTACOts=(%BS+2yyFcxDzi&^*IdFV&09cSpnE_WHNV9~5OkBoR3ZL=XQs;@t< z^h;`DUsWX%Be!(rAWz22ea9_)I)=uXtw^NM-Jh7rrs-AIpirUEXsJHYO5`oZH3m=P zpA??XB}LjsXnibz$yrXZob;r^*N~So-m{?!Y_oCS+Htax;RInxtEzI>-=J}RyJr22 zSnq%{d9KQ*bY0F!vo?If(D5OxOG4SkgflK>DU2Syf)>~YWQCp>skb=u+H&P4CqH#k zE$COZBU&dja@}men(iwa@`Ei3GaBCfc6qYW3z@;*CVZK<73;!Xsc!2q-&$aG;Knp! zv3wKWO1>AXK=*{qHbD$ARx0RIS_xiHF~0q}9H`+`nLL;B5WeUx__V0g^w_txev0M5 zm5e|B%SVTXJi$9^usOXnxmT~>@x9JHss!IC5Wc-I(hMfp_}cxefoTzsGyE_Ie4R+c zwq)}v6kGHa-)_H$d2h?4nGe#ml*zGzR7O9{0TW>Vyyws!iZtk2M_Wr&0}zknjF|0W zsun6AaUMtBi8rRXLm1B1Q?D9u^_6kPe?XE>I1+z@(UUxj{r8-+vAEh6_hYm)HJ6$) zJ9IU2pVPJM+g1h^HSOgSAhak{m`*#BK=@!Ai)J;N%pSH(yqn3+q?h|MhkEzxT$Uta z&)zWS`<2s;7z4Zic7w#JzV^Xx_9#?xyNICEv0WkO14yP)p?KbaTiR%hUeYIgi*X#! z?tGeA`#F+@Vk#vKmJhwf~w^@ z$Q!Ns`%FF`_lv};fgkA@FM=fBINxi}cXRsCI9UgZOy!6x@U?3owrMhG^rVYK>KC>T z0L=_uJVn``zdya;R*@is9(c4g-;W%4E7{wqnL;-(Hb3;ppXEEsRH_j0hD4h6Db!+~ zJ)YXtKacBBK;bFJctm@&jG%3P8!55a9c;o_?pM0j1={BfX5;J$<7rs=MSNBB?Tp_09w$5hN@F45D~7KT$^c^@B)+-HA`t}FivW!<5i-2I07&-dL7h&?-)F(O< zVZZNvOc3vv)w#6QTWbz)2h2U0xcqW?^XDDa4XHs0Mt}@^Hl)*Yk~wj;Esez-pnHD3 zss(?O#a=8-^qhWpcy$njwdut6V9)Tyj*fHR+R%RU5_=SI6WKkzy7*S%l9h}6%#Wys z`ug|Pd*z5wycC+R7_$d}hO{QuM^i*>wk0x6q`8tg}(Fep8xh0f?O~6P8_E1<6OGYaM zN-N(e{Az)%`Xrg7kUB#l1{ejUfukbs##WLTAB4F=hgfZ6RN z#Ih0G20|$7z`srLG^T;NN2rIkf#LE@ZS+io9J+(^8WBM1`7^2s2`f4j`pA@{!x@_W z4$&fqa@38XazSJ=2>g*dMxQ@BMj- zwD%~caS*}S3i%EUvT8MLY7_K{k?dU{#nQtjClj!fzSuhS$Q53d|y^6u&WtROqLh*lllPq zG*B#dlDG#5@t(}8o+I7Mf+~UiGJ(`RZGnAhU=U1$ULiH938^lWN2-_3w4NJ=wE<`^ z=2B7TaUWwEGQrm>sP8-hbniu)&Ju~`fv*^{aTm|ZW_cP4fuuz-m>39^k=UXfp{8AQ ztmjKkNESXdvVt&QJq4MPmVvD!rwc5Ctv(6F zOdyNw1=Xoa#Y=VklnzAO8CM<*!up#$C$hYyye^Xjf@Op>NYr!a<@TZ>dVz>*K8-Iq z^$!k#+YAhbPMG{EF@VWvlcFTht8pY}Zr(wRmL0gIGf4LDrv$H#P2v zTerEQ-2-!L$)*B`r-+@XNozon5SunufUk^Qg5FZMq$F%^xs|ED1rf<|BeV_J5}81=*)sP?G4BGN?0as0k?2sRBt3+S?7WIud=JM<3+mqZjuK% zFce6W{_rWn9~`>*ejGGIjb3xW8*F?1yFYE7B1TaBhEGATi7d5BzfRcQ9IbcFgQC?% z@VBH84QuAar~C0kFo^dkW86Z(2aqVb3j(ruJGe6x{Ie_K*jkNH;6dxF*@c zBbyU%gsf}cD^uBwz>a&;lt%nqVP%)9v|Cgy_+IPQOug1jpWNOi>`R#Mb+3MITw@mR ztdiGyoj>a{{;g|#|MU3a)%bU}_7fQuPmYODQI(B&*ny^$ ziH%rC#CWggPS6#N3ROq*VeijKO1u`!pOHEUhHb!a3M(FFew0|2C=~!d?}DtfC2xrg zcM5lS+p&x*SKFUb5(_|1I!%f737i-;);&76m_L&0<*xhz%W6WOTMjxg=8)RT75tjB z?E+WsWDgECx6Wt`eiwJ3;59qdlbY1ucVeN6OlT=gAXWm81rT9)-kvxmI8OGF;TPe< zNJ~t8-ILYALH;Gt+Cpm!iy7dPon-tl@ccp^gN6U3HH((eu(k@Jl8~PS5d^&=^iWXn z3Qouj7<%AsxYnAbKI)s_4#t;Q24H&n^b`9QDtl>aq`>fuPo%eaATwuqDSc`)ru_@U zpu9eiT{5yQODzv;O>A{RrIow{y6eku*$S8f5__t}l|$zJ)mUxGJjJr89zMt#1)W_W zjy@5$t=xGV1UnfVsw$@KUAgy1t~2~i%x;=N0RiJTBn9t5V$#UfiF zO!K-&>Iy+>-Af4>B>j6*ljQlIDOd;6=!GN9Z4S$;c&1Ea@>D@l?Udor}ckYY-_SoydfU|n`ct5F3drp&V?iC-Z!h|470-@)Sy^1$%NEmb^4FyS4w)K3EdYLytO+B4`ixUQJcvd5kvE^~ zn1*bKam_&yBfsr8n8GxKDIkSach~%=yp`cLX~^tM+a+OLPjaDz^uk^d?ZzuTkQuBC z4A8nmM+IBBb(`ibEL+s`;0w?Z$po!W^!~Bs_6QZTKsc!U;0c*4>2V?u6+<9($Z%;L zboUos=`75)FUIrFwXH{t;laLWI8`cz{qW{e&qWnhNOtAoi|O~eiLhV$-%iah+n!za z_l|ONcT#SAM@3wc+fnuDT!D$c*WOlbxb>|Yb2)xT)vM#`>H3}`_od^9X{zDNcoFgs z*h2Xw*-NxMWgLV;j~Bf47Ce-E1JEPiPL^*XyU}91VbD+i^|**sk6f!=E{GBvWmA4d z1;!Fma+pr8%13}`Z`&_St|_7+oVbj|)cV7C%1kx>EX`Hnun`$Y4zuY^wKUM)^^>{V zTN+t+X=78(X12BRz%JXPs+!xXC}xsCY6)Qm)wDhT+xO3FR<&cd+%8^4oMZ`=agULc z_p8}bb4s_;xOoZD^fv-W934hdRV~^GP*6*Uqa?YP+@AeLXItc7!}&!%Dx9?xR-?LT z_z;o<*12J(43Bts&sY)Y-(9zUg$pget;hPv-3*$-9nobh>QTFq2+lsBh9)0Y_55pI zgfQL*!B1r(@^3tg$X~Q76()uSJRTSHr#F-@;xzg}XZq~U^LKAO`3Fp&o^3EDsA8pm zpIWh>kUx==zWGt@F7lS-R_;DzJz-)#=verP*4RzI3tEZ?*w2#Ifk$xm+FY4SHQ;On?(@uYoDW6 zkSZQU?LvM=m(8@hIUXP1gxZQ!6*7igdKMZJy4q1r=hV3sw&r+_Q87^Ux;IR4@ef6Z z4=H)UbHtd2nxi&F&@F*Omv^vW+0o@GJ$*kXv27nOqkGUx zyQwm=VsQsA0VEgD3RDNjkX9I7$xqg*X)ouFPaF+D5a+JtP4LiJH`RJ+qV->ej^O^p zdls1|s^vn23Q=%oVC;CYn&s&83H~G_-^Dfw&vY~ASAx6@u5Va?Z=RIS`C2^f{C#TS zQD1qg6B$DB$1=uJ!OzNf`MG$dr(&Srm*~TyKaXDgoTD#xxab!{c>j6$i4{dAcDCw! zeQok3G+91MH=>)CyvU2M<;*r-WZvH{QTp`EE?JQ-U^8hWaK}E)!1!FV#n_j@Au7)` z+96e+YiK)Mo6dOyO(jexfkCh>t`|U-*pu?(j00WDN;zMNP5QxicU1Oo{%s3sal!)lLWS zn*GgwEZ42_DkGv^ihOWr+hN=g6cqbRr7qcRwx?*?J=o6nq*#L(4LqjrWVR zLh$o4*9qC0L-QyQIr`|Lr`F)s=X}Bxy!m#cDiDkKH7`=nc&s4b9Gc<*moMS5d>SD& zDamnfAYoU|g=t%j6P(cZbE+y~Cs9v$-nu_AK8rjImPJpjhh8eS`NNeW9zORBtzp03 zkvs&h;jN1?D6yqoJn4&kHy&%TxvmyF)nB4k@^l5yj-mgw$)uw>H(Zk0&&m z+gWpjOG;oYXoLO|FtER|oN$lZgh64}`b%7@rwgkk-bIR=0!L*WKlPn2Z1Hysx79c# zb(QAN--Vi%QN$C_iW;mNy&8YUhPEoA0x0H?b>rm0FE#EV&- z{bm62T+XiI1rsa*g29r4QcO_JFrjo_`2!mFyS9r>V)ixARCfFyh{TC6ubLl>xLa77 zT5bvxwUU%LdgWh!t~jXAm@Iwzyf#X7&D^AOdCo*J?kp+O)1*s?;kI&t@0U;+3bw31 z`%d8i>eB}&Y@RI7f)B`U6K4GBxfBEmr>s53!yC>MPU|@0u)lVNF^LMS5jzKZAMjzMNhZQOt=AC@iHe|*;5b2{*LRW=Pvd6E% zpTmnD-Bkhzriu#d#b|sJ68ur0Lb;*hl^zyV!BR}XP_2@SEi6kUZz!bbDW$kY14N1` zGW|Nr8pPWlO~D-<9A9mWA7Z9umpX{F!T894s)rvV;sFPI8j9JCJYBTSczK`%s}-g`KI4Sgvp z!3j};jrpJ<(F&WA2rdzJF2kn?IriYC3JG_A>85ge%l@412BJqsj?!H5xpV=j6 z*p(1BexQk;mI04kaf#yDVpClQdM~=d{oApstrLi8pYS{jgj5!R7hI`q4ev8~BuS6l zKo}F>v)o_OW56D4QDDYm*hdSqX@bz9W4EcVTT;*Y!HI;)P05{8knh@#26>cIOY0&(*ECB?NC?fjn=Zhuq=)0MwXuE>?6 zKux14lE)+*ks|V<6blTK1=}&)5oMFXG$KX#<6**4$t2N2(fPTFyfPqh%UFrgQsD@o zg6{pdBEZxq)D{w55l9GWL{vXN8i7D}>H>Qa2r8VyEu#oV_lk8Gm@+|@i6tFKc zD~qf*{<&zrf)Z$93Ghb)xQqn6aSpFoARW6XbG1*A9O71#PvrL`H|`QetrAI*@m{=> zIo7{lp*Mhy=II%kWIP-ijKGtLekY1Tq_|iL0ikF?~yw$gtuj>y=^~E=&Zf_LVGt)`&*Uv_pb51H0}La?foY0!+q@| zpYbDRofAvdH9~d9MTn-8#@?z1D+M=p$J4*#!03@9TRn zfyy}0>uNQRLxMfO%gie;n(4v;r3hU?@Q& z6rn0o_`U%??kRE|9zmPoMU@Un&H((}fKLk#mW=nuZDz~O03%3VY8NYo=i{Cko3 ztaW&J$wndvNN`~oF?f#28IR04Os^XsR*s@{CLqv7L3mJLJY$WAMxZki%X>&La#p*4 z7VeBE#bof9XrA#1b=N&it{G3X`V(Xqj|?eeqJ^jK5=Q6@usXoQsziPwuA3%C;=|wo ze)llOI=q!+Jl07RSm+a>|EJbnq}Xp1qb`bs0!3+x$Ek}?3!dk~Lo(`yLy3@(GZK(4 zfD??gq($ben6c{Oa}Lddg%+MP&jJsSp-1?jNt8`#qa-JQwhdL)jAUxVSIi$@6`dE9 zO3`4CkmQ*PBI02vM?vb4kTw9`)B>X_7{-H-d(28XiSH?h%6Mo_%VUOjginCP4;fp^ zuEu8r;xoYTVXMZp3jkU;peNn3c5G?dbb*Tp#lMTpIIv`pFv$_bA2JG~lvrXc$B!|h zWvRnU*s@3{4g1i&EOPxIryIb)W5D2HLa=L@iTnRKhfIeA@$o0|LAs0l3zn=%K<1bU z1JW>^)BG_Jm?z83*I_n3GK`T2)gP=K*bU%oGfeI_rARG{0;QHIRvst;ZPQQ?`AyV_J!6-bA~Jvr|ak(Bfz!Mc&IZnbZ7-qj$g|Oz-vQ^ zXyHBzS#uAM$QUzi1Yq!oZzdx%DDbVDS3d{Q+B!9_RvA6=sYb0Im`!dx1}%g=rv;`{ z%rezY6AkniILrpnnz6$0A4i5cMSjM%^v^-9P0FuH@Q1#HPCkA~0m!K~i*`p6TaO!{ z6L=tz`Ev2F3Kr)xUNdCWR4%9y&MxW!Gr6i)g6ffkaF>JFlCS}S3?1>b7Y)w@zWPgd=3`HaQ>NZ2+ubkRS z)obiu9&bI=BUf#)@0B1ngF9+IN_(8R9YT$Evz7~`Mmu>(gbfitjv}@=ii8!%$5r={7P_5r$7I2cnbQ4)nDz%9+76AFV}5peDsCJ|(u%<# z@&4}s;=X7)L4CulW46IWO4%?OG!7ufaB)A4$kN~FO(*ypAU66BR4$cs$gbCsOGeDQ zur~BT0H0N0a=F24Y%JyG7TJmADC>`arUUvTs+G(996|-PW}JR-EMF{39$R z=*Ktd59AY!H206J9`(Qado%3RDX4`B@Num3kNIrR-_iXuS(O$)rpM#|6kS3e-u?$$ zfAaM&RPM*>KLD}JPq)d@%E!1SdeDBwS6tEMWp~d7PV(S>^y9Iy&AS8cRV0A(;VNoF zP?SEbab<8d{NJ#3(oO3qX@?L0fvt07n65=}g>Bm4uys=lW-QHmu@nDa0I|<|9`?kN z<6S!|;zYw&AyPNao0wl(wz|ke+8Eqp){NKoY(IESl2d`bbXyq=!n_6Pgf_!lxL$Gq zbrwO43og1}GYph>CMC4X^_d^$!o8+DnaB%TdNUIiLae@)OK?!e{qhAV4j>j;4{*+j zSLWkIN08b(zx2|s*eh#DU(0)y74?x<@lm4dH|+wb$)0Q`TOgm}L>HEizvAUKgKKdk z4j|TgL)q$@)!9PmT-SceM+f)xYPPE}bC?yVZ(t0nG9B5L;%Hj%ZDFdx^^&XIOOQ>~ zFJHcRav0?8dy?NY+3xV!sI-9pnZ~U9mYUn|2cHJJt`Z0ByRJ`s+~0k1Wth4jg@_mO z1Br{no*hH})kKf;Bh4?e-#_*eyQV%Fl1P+#Oi;fdf4r-W~CJ~9L z%F%DG)ip2}pPKOa&5kw-u%w>KjTJ;TP9Gm*M|D5-tXdi(CkDiiWTRz+$UU|!gXUKl z?!B@#Bs{lDUJoQo(-MokYz=7i49fD|AXa;%`QE;+x?_PJxQM( zlEF+cpJYk7%uAF%0oFIsyR_^T?%tX*X!84_N<5TG zG5q?)`!IkKzw2=0Bym6-EshB&nX)Webw6I`iPSQxxos}`nZdH3u$rZYY&w-6?=w>u~asHj`Ar6Amx zK!4g=yYdN#&GK!^o)wnS{+v@yR@_%zN*m0+m~*tg{B9>^&I36>D8csjO67RW#=XJ9Cs~)j`qX-3{1@aGo(FK+l|SqfA>wSU;9sK3|GSLH+TOAh(lEzB~sh zG}gSYSQ@`f?F$!XC4nQ`>X_u6>O-(x!mJG3JweX&XW|-)qm22 zUP20*=^FVOD!G>;44Ac~R4O;usL;>+IJ-~N{6@D~momLIQc&r41*iUd9uixlsz6$K z@iBJA8jr}t__a!B2QUO`20*EbRD0x48f^T31Bh`&mn!>i+VNp?Us0LLeTQ%(0x=ig z#=E)SLmrSVP5+-!xwf(Dr+yX0Ows{j#W&>C+gN<{24Q7t#ai0p~Odh{XD6Z+43CDx|`b=XHrMBW9L9TMwRhe~d%@Rditx z7?LO11Xj7H51z8TW`|h-QIGYQi1wkK;tc^$$lU=j2DWv)fZ_ zat*?qRc5$G+Jzg#1cURPU{d-{?ss3;|8#u7kMQ?DL}xSIO(ssd$ka<@sC*ope}87F zlC1l=m3#H~a>k}lCXu3bQx|*95!MUTugadGk+u*U*rGz?QDf1;oR-1m(ypKw4j{($ zlBFwt09%Xts}G(n8^79qMA<$wcIexAxpI`)+Vx#zQ;f*t%X`Q@gyrJha|mM6viFer zw0lwQ({P7f{~wgTJ0>XAUsPSV=E-{v`PdjKPD5%mE1!Fc3w87csW@Y;Nzjkv+^bC< ztWNt!lkpSbgwNuekNylkx-rRV{cOM6(?0Gu{)#)wN2ZbJojrbA&dzb9Vr9c8K?&B6jNOMm_EMuv6tp zMl{{F2y4}t_al=6Y*#ioF?BNT#;8p8e!ka(bHyO!$%hSJLw z{)#_6R5V9Ax1F+#dPINl1Z>H*e_X{T{-!{AMMnL2A*J{B!mZ=M=~zU-2XOGE!!!<+ z8{`NHu`%D-63?6_cmih=@>4FDxc3QO4pS>|QT~&w>aL0rz-bh&wY#I&)K-`feXl$xB240KwhI;rGwNq_ZMI z6v8!~gEb@!blSL7B_faLBZ)FR;S#Kt@3^%5z(zw>!~G}}ZIrk^&8Z*XhdF0eg+Kw@ zsC)ilFhI1PjRyw+a^?iS#mytJ%MNv7^H~V@l0e|ja5(hQQ9NwuEHu0U9giJCB%YzY z(UB=_oEX!X8I_o?JXSpk#y<|O?YSd8tFK%M#ZvC?i#>Jym8gRWh5} z8;s$~W?iI7Q#?l~Mx>~?AWUDSX`Cap8AKkuNo^8M7muNp&er?u!QF7G(PFywV*2Cr z)F=2E=4$DdkPO%M3|CN^&N)I8nto9PkUz?JV}oFagWVl6eK<)^Ub7Ypu};Ftwh0+0 z%6(eu*eK6&F!$Z>uPx+``NFfH7#C=2y8>O2nMi&1J$pqkN_+C%z2$#jLHpl2j3DN} zR?txYKPYJLzbR@Cwjd7%Nti)d{XySWkYd&lE zE}NJxP&ONGO$Jnw!audUnPw=qi+;##j9WpIBZiXjV)2A^Geq>wI5M5L{kG&PP`qVw z_J>*9c|HR>rMY(BI2`g{oVu*!0Gb&b3#5;CcZ$##r`u|Nl%%f<3s&?k0m%j%Sp8cWJ)lza*mrxF{? zRYFf=Qr%3fqa#EVzrwK(lcmVV?zhNI%Kbc*^<}!PYZt+OtEKBiD%e!@$3-rU8|n7S znVjqL!P)Bi3vZjDx?uOo#aOjpsiV$hvma&SI}b5JU3Fic?@KrLUf=}j+2^00y#F)t zoe`w?LZ@n@CiR41xZ%i}1+)#Ib5lk`B(fze1?sL6P z82MFtUyY0=WM7tdC3dVu^z=sVd@!^J`(^p1;0r{T!4-S3+8fr(uGifF+dIBL!>w@7 z=}N)>S#XDeq{16}t~c7%az*l|Wfg#p zz=f*V);gS%eeK8CtvA;8kfjjXSOQmfW*{?D@j&X;>qMyD2(wj#O42)Bc(4o_z8*x&9mopCBjg{zhLnx<*-^~sDP7aVF0*NPcAAa2l%$#z<7Q&whYfkR zwxK$rL(YmOARmj13JTl+|Is#j|BM#0di^02GW+N_t#KyGs0;E(3N;|x#7eW#-OxZa+8U{;+ z2Z?OThZJK+%^vnScKuQ{8TTJ3=;G%#VF%5rrc6%mHWZ%5@&weJrqfNa7b1pB5bN4OznsSzYl}S(}DtmvN!B04PZr7%u z6HSVM_36Rw;1&8C-bo@1(7#>j4E4FQvsL&a3?)}%Hdpg4y6h1}rRgBv)s<-NsSEELFDE#Sx)Ha&QByDtq=<5t6`?`qVK2 zmoA}XwJXKS9Et;@RbW$J?CIYfMw5}He<*183T3%}DCma2r}lrRprLxUmHk9dsZ)aH zjg`{j;xG-SEL?}t{7=WiSdDM%2#$jO)4BTFStZ|gsXp1SYn^dI*f~U3F37qieXS zUF85+k5;@|gXW&~eYGN%H;lJ!Y%qo2d3x786=ByZ+%_OFemCZwGC9kogfsA_-oucT zk3jYr_ZIDmRtLu3zxjQyy4VOt#Ic8m?BUDGlW@a<)g*(_wR+=3Qqi1I?jrSmDwAEL zQ#<2!p1lgzY|`{lBe9bfrJDthNS0?(sEbqs7gH3_o`mA(iP%^cLD+H6{ssyQd0X3s zSbh?am&LVlC7(~#{K}&2;Ud?*+9}9t0b&roq-QC}58LjWtMM9T6BE_5+!@7Mz*4iyiueA(DDV*Cyg=3jTyu&X8-i_xIBr=nW}{;HCWgeaETwxP)I|!@<|5 zt-ay{ep9&DSR^?c`Refw$BS>Ke^2et z(d-)oR+$tr8x@%{5!bp7vYjudYkVKncOUo!N`Ic=_|u-GI&vAJwsKHY+WoUz?eX#D zR}3N3d#WBKX-@PSl`LCAnBy@7UvguEJzz-ZmSQ?9dhrgnc$CckXWnDX4%Wsu^hMK4 zl5_j@$0Zk`O$8j)p~2dd3YVdEhPLdt>K&dwW*dqAqTGYMA0Kw-1%3Sr@0`GcqkFYi z?2xzT?148w5aev_c8dad(ffu4x$Z_!cn)5DIm9+B^IdN*Gs}}yPJP5wC@KZ>H!jRzu(+En12-Trm>TMC3jN*03ge0J ziVidf!fjya`Mc-{RhB4!^fU(jD?KO?n-z5D13LDM8Am~n;V9@f=B%uk;d)$$k-1=( zS+nu3QKm`J0u$jWRbD@se<#|tjZwFSZVT*8U=!W78bbE!F|`C6OJ-Ey5L|eYocSkZ z9ypGpfyuAT!DBZLU<$81qcV8@oL0m`7Ao*VIs7dUo<~a>JQV)=Eav@j!s;2*xg1{p32@!MsG_^u%-cQjFWR=={<53z^5LBlaryM zy8iq0Yyx2UpP*S0*Ux`Lv*7>Ks|oaq3IA`QS);t0n*TWSHhmwd_-c@w--oLo=&@Hd2AyX=SBHNXCiPtVoQjWi zzGP*2@c*V)pH1DTROb0FXx2u##%=dsXWsuaG#mD3!N`nA?UlgO#fB7&9wO$JC|0hW z)_TFAF*zOU^I`Le;W~F>Mum+_s^CG)8$JHdF1(c49YyC!*}@bt8F@6_)Oz;5Qfb`E zLBb2;vcdYlc4WazlDqcNPv7ho$N$fI^}j>2SVlf>qI|Z>irxivuo@3h;P=-`R|Mg5 zc2`n-5O*L=RedELzb-pA;+;Ub6~HyQcE+*tFTMI72lS~sBJD4|Ix+uuv(|2aLI;Ece3*Q@_pGXE>!FzlX6`4PKhwi!AMrfDoYn03P$fjd<{ zaSrJI&j~q_ZtrHH5jU6nC*)}f5?c`)zh-n*1b^ckQ1{<|1ss}Zx4%UkalF3i=OB*nHr z@<8H+`|KL~Ik0WvV;tFW!fHazc2C8=Vk2I~Z)Z0qUY~rlroKK{-RbGvwa@JCr%>N7 zBD`3Ne${*b<7Xj|*uv;kqVRk)HMy9BPD3OVo2A768S>6!6aibyih!ma$KQ9RdeK7t z^=xTcx*l_I>-~a)&}m(yB+m!%q~f4#%h7w|Q5&fE*-J$7>vz_9PlNfdqOS~vVs!Ir zX`^&Ma2Q$x9Y!g`@?I?yVi#@YM;V?$y-lt0vR}8aLO$Ylkc*({g+!cPhs1~eQ3!qi zF2T@h$?bg{_*dwp&}EEIwc!?L(G2GGk@xr4SUG_M z6u7TDSw0)eBB4I!kC;AG))8y9ZXqJXe_*1%UQljuiHviq%yT$(c*z5_`?7#RGpv$i4u$7vtA$B~`j^Ry%N1o~WrrMKTSX7_2{?hmxL^S#-&`lV1C5m&ZbhbvF^Mo#Z1f zp)8(=i1pn>(F1>5X4dsj*0vdV)>~MpV+X{)@p?p92ocCDF10ISno1rqEK{wWixrH! zKXbe!p&j+0(!;%i7$$Jta$XX*UN;n285+2oGoM&y!_I8ixcJ@FL^{az(Cu57io{aU z{hsuVTjFQYq=rH*W$o->3{hX z!x}L2Zs;&lf&gXfLik81k36U+c~92qa*w~jsM#7Z& z&?B}a$Fpb`4LKrCH+)j;kRsmCWD>n0IbwD~jtu)rQa9#5tinhA9Pcj6P?~@SV)-v} z+mjT|G8?#xIqu9`W;MKOpS9bd#wg>VCTemT4xYZF*no%!PnvKq8VT9NK939s7kAL% z7s@H!&B%3y@m+bufZNw+slS)@-%hNLchaIdoUF;l16;%A0}zRx!^U-Q z&V#ojeIY%X)PR4hn2+r$OJ7VSCpMLE|6>H|K4LEuAKTLo%K3<-XfBie#|SLfZvK}M z_+J(Cw(;f~zp?Ls8G(&^LUqwv`?mjK1ZIxyJ4#P-JT{cg;W*pL6YDeJV@c5BDf@hAi>=sxVyW1VZlPs;7$k-2u^U9 z0)i8&EARh3eR{fQb)T6vH*;IpzxA!X_h;|t8DWgzv>!jsn2}N@_!9Xgy7V|=s6;PE zZ@L&A?LTAhauf*^Zq$Ah6dVK!;-3LpFb*-B(QsX1UpR)#~+(lw8v zqxt`5*L?0>wEDkdZ@FK=!rblG6Q}fHh{eZ`>}{bdWB2$^rdAf5`&O#rMc)(` zh9>VEzEk~b*lQc|lw?$@hvf%A7ry`Vm*g>x>#L7gYS`v< z&14LZTvZdX%`wdN)No#)#cN8Cn*M*waEhYg-LyQ|FE0pVJE$m0vp#_Rk0k)x|Isxc zIlXz*II%$q`p?hj@BH=uNd@`;+9ZE)K|5Qe_b;CAPG_xg-~XN3A&Ac5(BtsqSap8lP`vf&};uWg@YrvLJE|GW}7UTP8VL(X4?ES8X46OtW1 zE&t44?Hh$Jb|=Ts;?+Cvw0D0t+IWcm<>_Lgo+0`Pzjk<>iMMCJdq>-;etxtm>G3a~ zE^=$)FHaZoj|T^X?5}0|dBs`~=WXBrWoyD>Mmdbe{l8p67JI~Mkj}^RF82O4$={|V z?wDW1C+k7I<^`|Be9Tv}bbtTS3~hpR{cK9}r;K z+1jTlN2lEw{}lvS#|a-sA_rf{bG(%E5u)dPd||5{NDt0sn~Y1$pXH<6Z>*pBN+!n7 z_=&}zq0rKPmuHXotz7*aX_6zxGmpWidOz=j1g!%zRo(|x?zO8?8#E&ud*ck~5`Df-7G&)g~Z=VljaH+{H1 zMSg+!1t{2x-AMXEz)pLwB#AIc83pd%b5HrU#3H46B+B89^qTr)Ne`hnJeYnQ_ewsa z6O;uHVNopvFie+`I`?Cvvyw@3-E{HJl+X+@DlTF5;#su9pYd4^0>Orieg3}zK{CG; z>!lN)uKdq1v;VYZY3>~6*ZB`&Apc~L`0a3PYUP|g5aU2JK7&EOr$+H$=o4OVWW&ic zl0+<1r0V5tK9~q*m)OGLFB=QPwOTZysGc276LPr1rE>i-sQ>_j-x$E({Rr!g+s+Z5 zU3(q+T7!;VkEe15CRXp~cKi8YHoC(X(#{gMy70wub2L}wOYL75J)i5nx&xHm^|KKM z$7JHK)Q>97V!n;by#q1Z@<)ePXOf0Hk7vn;r|)(n^Ech;{-ibSPv>bS6MDA^Xv~%C zSLJoymD#j>dA7r)?@-7QnoNUG=^%05s>IM;Px@FFGqVIAVRw=A& zJM#98WBi+=$jcE&x{9BuPoj<*j2447^M{-O5%uHmao&BNzpE&Y>5-S`_`ERaY1gvF zCCv2&D!(+@grG6}+h^jLeu>|itL^v;3Jjj~Zs%&b$Krr@$4o_6cAgMbBl}FIbo;k4 z0hSJZfal6*1NKx$ zw}QLA+M^QK-P5$)So)7FymMzpf812BO7n-2uSBfHlb^gfPPq5iazE-lZ#K4Z zy}|1g45apvF}iQ}KT8?bk}qa?sLzT22qe5y&g`NV4j{w(t)HCt<>c!_MVsI!hpPRv1j^A~b%jpGjl{+e)r(=^~BrxErbIZo}+SrJwIV(4<2`zzT+ zHTGWke3$#X4xWXf)VACIcqQiU&gUE?<+g2o5RVPP-w=ogFPyh}GoriOJ zH`ZN^ZzVAfI;|q4O06g;6^#tWa*E2{c@c1DNFXWS`sNTT>qS~p8C^S$dJ8P*T z=97)b6u|-`x5eJhqlE&Ub%N+4lHd$PY>9~sA&Z4QAvBZB6GnAsO1qoF zN|BBxNPF9qdsbbpVp&N?dUnBfgg+W^0P7;#i4VmGW6MT5Yhk7a3mZ7cKuH^BoGXXR z8B!xCi$xQ?-DQNe<&<={&$V5fp%t%bVZxTfuZHG7M_9#HJf2j7*o!n7k6*GAb*9b5 zG&jXrZ5tUf84UUdsR=JB#}HB$4UZ+bJ&U3#;Ve^@Z!Jht z|0wL&@g@ZtBZ=N2w9F05F9-NnMaCjS+!<0sOBn~Io|;H)e$l~=;xw?tvwWGvQor(4 zD^glHRF<6Svka9>Waj*;x)yyMz6$IoOTxiVd#Tf9Yof!5nZxcxhErN~8Rx9LQ@wIm z@<3H;%47=voH5(wsWn4-(|0JPF?2WPitl2QDb6~I`F#^lVNI2nz>TsMHot`CKCBP?_r3kAKfsNB_F#Pgy6{$Z%kt-8}|!i76y4c zscz}g?maQhP{AgV#`q9u@@#XnLR!n_JELKy%15hUse(14FE2e9ltB@~GX-J(FIyQH zEF*vvXuBVU#0b?>S{YaqF6-yXvky zyA|4t=c8iCV|Ee5CKiI_f}%|WO`4qQGuS91%UVQHA$w6yH{;l-#rGcM4yY%b3dyDewJ~>WCIMhColR%(RX~_ zK5dfY^WQU4bS|&}Su{tnEfb@08rZ77^;aV8-&#_~C`|_^(bsPVEoBMZAsYeNRD(eH+Le&i+H{(qs zMq9OOV(Txx)x$pQVKQOz<0R>I5Aw-Qg?)Piu1r-D1aqfagftzS#aOD5{5 zK3uEZK89NCyM}=Z`Ht%Sw2RS)2VKg{$%j)tW&{lY6nrCfJhZ<(2q^473kH&T1_}rH zvIOFrXi}~|vu|e%q!12zsu%R!Gl(T4h;80sEP?ww)RR5K2JHsOK^DBM<10uZNYU+^ z&xb~=5v<=sf$K^9yW5i@@PoW3IPn^|TTVBV9t`bs;@t6vo`n!V{3&`|i4sG$*U8X+ zn-iPh5TN>>nuskj^T^CI;A#Xu3-rfZ_hY*V#Fz`(P9or$mrxP5M;h#1BRHqY#ez^n zkHf40frLazka~vg$`EKhAp(w&v2_j9aI25N=k-D)gvZS@m}R_}ufw*k!^SVf_dXAI z_!9Oh_U2qSmK7~byI^0 z1egJc?l?3JP^mN~;4Fp!5{U*jH^O0(@`zI=#vpPsAYlkq5W;SE`H1(L%sepyWkGae z2wXZ8|Me%ORRw7K8ff52QEnWHR9<^jyr7Mwd(xU%b3u4_#V9P`&PeH4ou1U%oMa*t z>$C~v+fSn6OMap6F^Z@Ve3qKbv5+j?7l?+Mf&^^KW=06;r6`I70a-vFZ(fuJMSN=X zAxMm$-S94MNFiuU;O)hY*b6(X2l3njW#m(FH#l@|fsXU~R;?sCnqqt(;%9<`z27^K zy^qA(Ohs`{V+W_XLLwXsKmOh$DzC$IU%(<40W<8A2f{#s76~4OiUj*?lh?rL*5{7_ z=zCKkF+`cMCgBwCL*11~oW00zgtAasL4K_u2}mk2bEvNuopTEdF)p_~10f%eC%`Eq z&D5)qlEkkd(aFhk9yOgD{L;l3uPqYX56h$oO0WB=&V!w!OdN~P5JVFg>IU&of%}9^ z`ZEoH=10IYh)g=jQ^L*#3HgMSgVwyGg}nWGd^lyk+J4?|{e0A5{F}^tzvPT7D+Zy3 zd=x5@pOghHX~G!Z1vqWOtC8eCaKf5o-6r-EDWuKEJ;9$?!Nx5TP2{ofmb3g8)%Rf z^hKYXi3A{Yz&}av^0tzBml7$oFHU4g#gz^?;7u%K%mq&SqocWWmU8e5gO_eyKh*2( z?2z>#n2H<%{bd%P&tCX^ztYZbNf5$*AaUq$Wv8iAo7_f{HYp@|UyWNl|#jaN0<4P&eN5H@-mF zNDBHio+meo;z_<_XDf#{inBABFf_^dh*_C8DU69zD11^`5>>u$8YKSw+DA;w@NPV^J4#oqAOk1?dW)iM|0BrYystyq_~HPz$e^Mm^k#s(XklSU zRdak=Fa~O7FMhV39>?q5I^>j2BES2gDy$9E(?&w0fNLT3aa^-vmYV!s6>}=WkhLkB zdu#Md9waFooKZgpvT+AYQ&To-C58)O2a>f$cvFP`?4)q&7|3>kzb^@Az&`;nO(taR zC${Z6)srNG=H5q|E0d%aJ|CTCrqhG1tP}m#)(0+!5d=o$Y|_{8bdyZA*D~sZ8VYvn z+bK|6(xrj#vzv8wzFy%bbVq;DNp2E6k`T!0gKEAK8}Bo@=##P)kbc>(rP(i!FOWRc zt7IggfZeE;BdC}IBTlSukg3-lr(XiOI21OuP?OuBb_<<#l7PSR#T2sO3uVE&wx=;5 z-V7gd$ccA7=e$Wp3|+i%+8mZa&5o{E9H1HI&`m=k8!St5NTi#s%1gwx1woIK!PQr^ zL?4qfbZzigyt5%bnbI^qJV1TC+u6Xvd1DQzI!kp>A~DCV5-l0-#4qfGQ=LT+ID+88 z_2D3wnCwKlb3Li-R;75K8W9Ei;J0@W8DK%`WO1Td#xA}PB^bpEL2&$!Oy^-PKuU0* zDtKiGcc_X_bDZf+iZ{)dSnOq+PvFbnMU;AKxEy_)%ylh4?2iX!$d;jj%fdl`h)xXvMJpOyX-2UjJ_R@oXxFc#7hf zm#lLtt$2z~jW^jN1tAl=I`$DmL+#NhYq0zw+OaHtEbcp=^Rc*&SdT^go@krA6 zB)az+kI)0g!RH(eN$g3Ki3<}wN%!XSd`5hl}D^>D9 z!Mqx%v|0;vuG)Bi{SDSUU>jwW#N}sH(zNXQPrHpKw5g`gnd}O*(}}3lzMVYDU%vYv z^ZSXg}vtVr+>8Y^r%Ek4Rem>*dH+=9=?wd)I0ggPH z#a+||TB3G=xuOEQMfbo(8b(5S3h&zO#XZ!em#@)%?3OmhIdZFfq6e3@1DCjx%yJ4Q zdf$-u=Pq|NERS=tPyAV~BU+gjXEV2m%vllb!-~DvNn%1&V0rOiFEP%}#&T@pt|E=} z^1-V#?}=MvS>M%whL0=JM^_J4crIyIY2PD#IKV&Oex)*^pz+YT%h_W2ttGJN;Cx-f zk6YuKT3K0HBa&Dr@mm|zS*OTb$MRdJT3x4|Sf`s<=YQO$bdxPbz?W0TB9jy?X zRC@5r29d^)-A+6tFcLClfd=(;{RSpLA%_%cFutppaM#~Q# z9<&h89nYRYJO*@~IIw3N*h-yT83je9CvL(SuyTSDt}sio)u!FPiHH3ZAX=1~FK!m$ zy7z{Zv@bOMWDkV@6fo8JMx|b>>$=KePoN`#pn5ax$Z~)nG3_gHVcnKkZXS`4iD3;r z;Rn_IAJ5d=CfWcRhZ7rdD{!B}($-TWy}L#u5+}e0JwSmpwiHd;%avHx7*&T0l@`9a z=k(G1ExAhAHn|Ck@C4`?e8-)4%|?FjQE`uWJ^f=XDCP@sj20V;2r01^>6KqV$5&9f zTQdR&vN(6zfv(1NhL7{gaC=t8xkoX-=@bHiv!I^ge*&efo{CH{<9_jDCn>)^;!0i_=*UgE`{`U&as=qe zhYSi_4*!bxv|fA-HvP=e@vor3AL}W0%lYnP@!v&laPVj6Z%}YOv3XfP_gB1UN$-og;qiA-dze%lZGbd4fbj1K@IOpkNXrLmNu}FINcFz~A%AJ;pH9<`2jt#RwroU7@cP$Pu7lD!oDDLd$A`Zq58A zas)`J6(jZY=2e`mC}wGrmQLhW{0Ge2r-|~Sv!$uVVP1^M`l2G+=?ZGB$Pr+#9w_U* zl^0XEBc1k#Y|ow6CzS2PUhqc3khe!68;(vpJD?x+L^M6-Os@!{#K|z)qas>EKP~b!Bn^HCbM>qWhQ6 zK(m!}_*wY_`)CsEsNs{F$<_I|cb@dcw;F@ci-}Od-iz|`uFwVJ zl0qnkz(vy}n%l*x6c&RW(Qv7g0#KWS{I{!yF5d6B38h=U8Gp>eKkJNr-s2Hjk{ra4<~d1E48x)V)&8Mb+x9RQxKYk_z@f8 zhTs>0x`>g?iNyg^?<6ylpYdz(v2VFAfksqk)jx@)+(R2rA72gR=$a>KXDkrS9;rN$ z(>^opjBDQMHr*0amH(sAA=N1KO!YUK+N%`lHOZ&#oYoi9UXbPx?gwbYOA@F1w#M8} zrPWWT2~$Je4wLuja-ovP(o^pqFmO`#af?5WQ!5|ESV#mv<+j%l$yf4Cl*qV=3&5UQ z)qZpnhBc|P)C3!8O5n6KMu3>q#0oVOZ&Lj~LS@;;mGKjMrIW`U!=zZ%#IDHF?ahkA zEPB?p5doHDjC7dJD+Pr3PZ(tj9kE%JI8=T#)Tc7nLg_VQpg*b=MSkFhL}S)7?)0M$ zmc8VR)Hq^11n|jmJ?C{$yU$Tl{?h87lE|XJTm-4GR1g$3XV>aCqG@+h2&Vu?+q^8H z%AF>}y{w_BNiNoy9#;4cZiwHoqwMermjr5lsX7EaMv@qM%w;+m|975K75s`DCVSg!&yx|*Yo<@RAS_A1o^#_t? zIEa+0sd^f)<`TadSndRQl(y0T_Bv#mzy}M{erOMi8wKzxkb8i@&+-n^a0)&>Kq0))t8Ki_s^pklp88Z~3k$6o5 z%PSwSU-Q3zA(h2XT|;pIJuo4v%sPGoa!!X-M}cwN;0#6|NB8K?XOBEftCP_w-#0`h zdgGco#5yU?KgXU6pP5BUv4sempYbh{VOCEL{#E(5(R}#;qF`G>NZ2{vZc6Kx8#iy-(NRW7o3 zeFrxAEHP*a1OHhyQJrule4zo-d=H`ao>UiWD#|@K7vsL03RQYh!kn8Co`O}D(oBjI zH)GL0D)=J->qP}~X`tG5#Sc%~&y}}q)=TtWvs^X;b|hGbiEij)akZC~R%|v$cQU$YQimu$K5F z0v?83)W%I0gm#Okuw0408lGqw6q-1T^Lf~$M=ok7-rGigiZvWToV*%MN0oha= zi1?e;+NLMhYEQX?zL~6?+igEI%2*W<)I>B-2`>2+CEMuv`4w~=(})&yL%(;)d^_#v zd(sTgyr2h_6fULvUpX zvP^hGuM28}X4Fzi8*jBWmEO}V?9){a3mOygbvWetMDeDqJ#nd%Bi=eem+UCUg$`rk z*LFuzIc|_lP6iSc6rwTWc;GAJ$O%TEU|PC%1D%jA$0xdkPf~Vh0g#Tp0x1m3CJ46k zFK)0aGND2k`^@((?zW{gfh&B!03;#c(n5gvMQw3W6>%-lyjKJ9o%|S{ z^Gi^y71igJ6DA`Z?fTQRUNLKUTnBq0E>aA>u!dbuPv}WbKFRaOv<_1MskP<_U^B); zHnT`ObkLfos*7nQc8jED#?70yZ(A*BAPMdp#9QjHG(h>@?gI zQTbBfKtmjob#ih>H!=|lzj8-(zcut`6wE)@K-o2*ov;UV4SR?OyId-~#|_W{`gmG^ z5#orR!xKzB4^X4Wf21e0&mb_J#My=ue&0r~K_n17I%2B9Z47&GMIA9sd9W6)2~DMf zCQ;CFZ-AncfH88kb3tr7c+gWtoZdC`@-^(JaFS=`RBtLUNQwQboJ<9p$rLM|gkAg9 zoV~dlAjKFAwP+0WazRHFFd$H4upl;O&qyX)V)VeIN6)kicR`LrWZ+_qM`I5QDWD$; zri3Y$X*W;o8gM@&&U6yv)HtBxnlJ}WD9eL&YK-Mu5hrVmH;IA?r6(-s2~4R#n&Sh{ zE6~H{uzp8GPF)ciqF~k-2VV^1K2Bn(?EsUZ=;a_gl1P8$?l?6lA%$>cBTFj z=As@z!9cL3;b+U>j%E^~rxD}I|AYr&MK+a2PztvDe&s?t^p5I-&hYb;M&T5ZbSHVr z6qS7^DbJ*;B>d;sDJMxOlR6*<<`lh!6lGjHIm#6J-Be}$6s>*s5y!MwQ_*emX?j+a z_9I+Mx5*N)RN0Xf1Kbn|)^sDU6t&irR~kvQjHzn%_#v<~S&fW{$dDirl8Aj0WfovK zR>nsqXN%diL$p)^X?#mBGR2IHFkF&YR+2&`E15{}t8~hT05B{w3(*a%!X=~8Wq9Br zM1$ZXjI&$3vfGsKJCyK;;o04|If#OgepXOFWzIlmP9G~M{}zW&%|}trzr-!Lh7sN>6`)xc+`|fX_HzlT3W-E>uUJ8=j(>dyRBeSci-mNH zh115_&%rsbc?sb>g)Ef?%vnVoi+Kn~fyYqG2`$iVH&DR4STL(t_#o@$VzI+D5R-&|6A~#yBc#x%fSE6H3s^?v5kX35bR{D0a)cCISJyn?* zTd9RXnWbo%w0FtvWSRY4nIoXw+MrC!x>!{>18XV=4P11_Q|{MRESpspbXTr)ko79W zT`BRUQ(Hw0VzDCbt|Ea7mLv*GF@U9c!!oj9S#7ZY90A@{tiplWk>$^O%8T17tEphM zO4(?E6>?6(H3n79-c>DGRc&om9g9_8+bT=jGUS{p%c8&|1(jV{)v0%tm<&}4XHNtx ztEWY4W(;b6de_Wn)!c%r73wp_=&LCp_-6$*^P<_`7X2_2MeV6-#11OXcxn$PD{gpT zf>fXEML#)3eR44PbjJq!I0`&f{&dJwYc~q~lLb6;th?o@v-7UI0>E%pYKg?^4-M*2 ze2Q-i>e?5}Nyn;=4C*NE>q|w+h7GD}Za>kmm*U(5y8v~YS;d>9^#a}%#~vb>h@M*e z1R#eY;GqC8MGu19VNOADQzx?o?|^-9Ecy0Y*gjUDannmGU}*wSq^d#f4p>=-qcT>k z*^VQrQc89YoPuK-W@kxM0V?a7pp}g;7qf2HFsfS#U-~qqCN#SpWKFGMK&wg+aIAOK zH8RTeLD@AAQUvNe7*kRNVrv*vlXX-!RVarTVg-N)$Cgxh{g*qS`WhC8VR14wPz;LO zw}v$(+F%O7Uv;c{SBK7Vh#|m(UkL@AtzmGqwq`_Er5<9u9cxwR!B=0ycnAMf=k0zx zM1k3kF0+O;0|%x;(e&y7Nn(Uw+j06FTfGl4Hles;^zG_vX!cNC8N?cf+8tKRJ!T~w znV{iq*0rW4pj1I|8>3q=QNLC~aeWH_GEm%GIOaPk0t7l7XO4VUiX*} z$lOhefNKq-Qi`Cm4!vXyI91p3(B0Kn*HQ%{&`bE@4+W4xaShsWcJMki?=d&30KQP% zZku*C8iG=k&gASY>Icljg5JZm-jpiX4ZKf^reFGHjkHleM73Yuwm+`2)gOv`2=Dam z#umKmqq_(083JYxG2DFGt3+!Rmr!%YLgWq`xe9tIY}!mT8mij}{kz-z*RUE5aoIR} z03GNURaGd4Xz4aB@9J<0?twCJyc(rOU8fGODuClsmpuZG`L(^Rl80~xjt5X}R|f&R zq}o&0u=WozO5wm#=pf0%*Dga`uC+!-ypB{5L7#DN)f$@b8d`K6PSqOL(jgk$aOB}0 zbF&T*F`i_8a#}C zQXNen8xD+VlHnn=d%(0W7$INInts6RH^PNO2WPrrN=E%NqTgj=`ma<6Vn>0%oUcI- zz^?9r*2-2fIA$q)>>d3;8=x(d1LURBq@7<(1+{j1rx#GLIH*ysK`Qq8gj(~m0xxcKAjUCIB@!JUE?A41%P6_P6Q9(bk4Yz zVbf~Ph;KrNdj}2|N@wd>W90)Lhd!=<9ZuE*HWyD*Y0TKeJ#dD;Pts<#Gyroa=5tp< zhby#;?P&He;oHMnuO1vI#zSatJUd0-4gS`_AVuJ8J7&+*R2Yq!YS;>&98#D1xue?V zPV?=ShcJM%t!t?@SZraM4Rn?;PE`Hnx~&QZ8-TB2_`+ z(Dd%x-EE64X~;IbtEQH}yn`<|KVZ65eG!A>(X|tD+%9rG4B?6ozXjI-95wta;HBOw7JslTZfa>4p<{tNUZ}H*nEvHXxUV4PVboVKJ4ANZ$$&IJ$%CsJH+Ve zmU}>QnK?U29rD!Q1B#vvdnzU}@Cz zEH$MsWo=58rc-ybpXVKa(r_Q*ys6aMYv__QwNS%pc3{VupOx zcb|T(G`6YtI4P5UB$dspuc<5%ZEyCXJ1BbmWTCth@<>7BL>?!a?a}dxA{y2%QQ1`s zJ6ropthG zm~Fpx@n|8gYLD*Z=n-}%RqbVvai*RjQ#g1WH?_h=a{cu*S?%QE@e~CJTV^AxI6Ost z1zWa11opsmqu^$v6)u1?RRh?}BMghXl1B{RZMBRyx{mJq32E1H!029(&l$xrLB4*D zUOoN>RSg680dam60Rnh->qkM+Qy`pwA=-8E^4En#*To_HLR#{-tbhKFasEOz+9L{3 z?$>Yi_zP9U@7I!-THo`h9540qFAcgbjecFeMO;c6lFdOc&E8$fAxO0JSQx)t*&=Mz zP*4OWubd^XU4e{@Q3suw*Uhky=O)?S2c#Yji~&wg3L7bJThm<}QXGINJPGNph?|68 zshT1r%a9u_qT7tqFf4l1iuBtzuiYSFvu!S}c6h+7wg1_4ie#jiUX$y)_pD%?TV z+9zpUS6;gCw9j4lNnI?~k>}lL7N1{JVcy!57od~e+Qdp>gk(64{BoLvKTxL!_(3C_ zJ>0$kF$bPR4k0We+MZ;0Jjwoq+ytyELPYJrp5*~CTOz8=o z{B2_$F(uZ3E+`FCbSydCP6n}_peFh?KI}dX|c3%}hLJ6N4G%+(5E2VOoFV5`$$Qvt> zE;X1v(5{v;H2HXS@=LsMyCLqG;m>M)^;7E?42-p#WE6rTZ_b94=3&osTsv%BWE|Kf zQ;a8{ZVf50&j@-?T$Q6r1CC=A~_al$A)*PKJCA1S^LcI*Ep)g0O2a z#&YY;PhTPom#&T*$AY|7*xcCc*Lp(v#dk=L9JfYN$+gd4QA`RV9wMLi;ynlZ|HfJ1 z>ubREV0_V7#Z%ljzQ_AG-jwzGbvVAiz+R2-xK*^Pztf*_hUt=!zUL2Crg2nMO5dNn zt-aahmB#6D5XAXlXfF+5Z-PtXkBD-~5Q?de#`vG$Rf1{lK_3X6vgV~DZ5Ip5(Vt-) zDA7=G;K||AK2QYb`D=l8cuZV>e~2;lw%(3nx3$^?(DsXzhEaK1#nKVk4DZldN?*u4 zldh$Z!BQW*DJO`j4S-}2)&_7&3woWy)r2=wT-3`1@s(*rFJvd46m>X{Ju#$n#$!kn zwLWG*SU$$U8VOPJXWd(N$2KF7E(RldLLGMtT>;~di?Tby1f47 zzXbL)4nq12i~~`1^wvNAVpX8=V@mUUAH|+`lka;v>$xc$yXk4_Aw$;sP2c=ai~dTH zsF!(~q5G|QhH09YMV3wTtwoN@Pp=PoK3BIN3S6EKGFt@+-dR@W-NV2I4^q~wFMZy7 z&mr;)P)Dsxm}#$_lU2f2I2$5cPy4gCFHS|0Jg{JfQRPqfv*`@Hj|?i@A3v$}6XfXAbF{0A* z2LyzaMKC=z!Bz8=CMko4vYVOUy}6O5_*q5E>#Hels|T!37-PF$D{Qm9;3hfWd?H<9 z0*>{ReJVZRq-6G<_|+aMj;KbI=5m2vg{K^c#gvxH%zN@sX>smHvoJnQV@D9V{EHx- zV43wi=YIFvZ>ij|8&xYbbHXVTmJ-Xsp z&O;`_&JjK?>uRi&2L(nZg>DC|P&_u3U2Q5?$+DLXhW$(*#4bZneZIothVD!yG)b|x zXr}Yg1x!YvA}T@8Q&MNNEM-t}<-+Aj64p~HWFmRvqAawEd8kcc=XKv>!+wW;zfpo+ zp}bBkO9^%4-r6xB&osTn9CYDRD&O4}C5aw9+7GepFz3a++d|_Gj z(pob(Nvm95z}fWzrd31LTKHDGO0mjXv${pQuA#ch+!qwf*{Ai>_cNS43sMGNK{hk4{ z&w>S|4oljA?T4uW{qJGThQhNj%fPG9h@hWM11Zed$#>do0gBdn#DpxDGmBMgf?0#b zmJ-@NX`J1S%=?Y8_BBOIdk@9QYD)I{!c$lqRP~B=7nx4&9_UPOLQBOps_9eF#SR|( zJqq=>w8!<+ey2KpM!&?|pl7F{in z`WKyEk4xL@5u)g6OasR|` z6G0iwqQVj+6KE%7N@E#u)NNnv?f zsFq zkX(N%aK=H~%|JCRu?Y1e*d-Y}TRol)I2QR<;DB}KczKh}WadB+cTE)?I zuZk~F=X8F3!2YJ6m&VD{aQP?yc4C`=Utwsd(el2p&=*NU)BKaWEs5Hj(Pzuf>D&}M zyh5CVYU&q28PZ+n6E^=}{X4lrt~(I&nu*A`b0hZ4y(d2%lY7Wu{uRFahvF?id>Aib zpVF6^JBNlFxeRFie;=|*Oni%GjjJepqYakH8eVyHZy9=1;2bWhx##EciF@F^&#sus zvA}cX_%}W8#nk075GK{667X=zx}irWp+U(GW*5hVaeT+dG4#^m;d7s`tL?(?L#)43 z@#|m7pL%_SS<9sQ>+dlA8lEM_#By1D6J{1b!|9>8{)v14GZe#-?dW_pd*=}sd}7CN z{7pgz;+Pq2(?}Z6FGuq9By6?93m?HJZ|@Pe_}g6LDewt5%P+}64!JX6s~RCy&2Uwr zgJxTW_=i6dh3=XYpHlqM<;cAL;I8DH3Y&Oh>3e<#wDK2Z&~!T0UsQGFgF^iqF)3ZX z`e%HFCUoc1cNfxs^~XWO#X%Lul_0e)UTFtV5(7*qdNA(7SEvP&q+EeLaeCQ#6*~9V> z3HB9;xQGn+-@t{DcQ3)c05+ovkco5{IxSHOPW^^#2sx0i#1dpG8&4}>Fn+^hHsVi% zS7wAuWImS2A(yp0&$ly@_`-Z+d8D!Yd;Y)D@81;2^gEfYW?s$sM=7*eIam2}<$s*X zA>qPG1H2vODI5z07O*n$Hh1HtLI*_dC8ZFTK`Z9&RduvS<(s+ybeBu!$tNZe;h5}i z$6M+*hmdD-tD}|;+hf{eCadGENVsr;OuR2MRn_YBKk2u?n>nqe9wcbtZ~85hoSKWo zoc-$l7hL$?XLA3B3#+{Hc0s1!^Ns(83u_Dn{VVC500RCdilqhljf)*l(gUKu^7($5b|Km(<%S~}3lBFU1 zZ~8r)8_6}uvg!ISxbR!lX^I#mrp#1ZR8(g(UY5*DDLR7b3Ks`kx2sPQ&j-rXZ~U0+2A~E6P4a3p*=%D1cS$OGY(4tE&7@=|;KC+%_K|6cwdZ^c z^i`~Om)9kEx~a6SHkS zJ2B%{XGX_ASKM&rND$^=4>_CI7?J<3H0XXG|D6Rg8>PW~yr`_yto7n@1_c;$DXFc( zsmh-5cn_Q>2z=uPF+=YVSbP_+Ho1VtDtxe~TIq_~9VGT;9B%-!s|8pUnp5$iS+5l`o_ zX4Q3~vexk85x;Ib<%hb+#>Ejr_DdHa{t^*ZFfZzuXg*a z{vkt?GU?}L)NQ0bSS}|DG_vRZ!=_mI+_T1C6-gBCU&DxX>-lJI`i_iNmeVm!6=f)q5uel9zrET27CpIka@{SC|S`@ zM5Pe{=_tUF%pmyic{8g0enFCrWgyVkF`SZ#k)T*lhA6H+Qd+i{YHnCwAn7bZb$p#5 zH??1Iu|CG_sVU8OPX$Wp&1j+JB4M+}M*qoRy3!5_BnwhPyZD-09($k5s5G>B?J!QRV zo;aVF5*A2{ijH4hhCoOuyEx031>cYKLbGlDQvDG#oksnRr4=zV%{W`*^F+f31|jvlrl z@vM`<1_=en9A#|TavBA(Td#k!46Sp_N7?2uQolMh;upP}(s@zrGD**>7#}#z8TP)E z<&ULOd?Lt_-nMLlI$J^aphN3e%O8Z#b_-Qyvh;88fYsdRJ2+cvkVRT!|1pbaEo%mr$WY;M$L6)mTYq6XfyJ;fzGee5A`%GK021TA_cU#R?X0owwMs;(Y8F;p%5UTb}) z*>#BL)G{(%l8l4?5(_etN1rg-&irD&1dB8%9jIkj6U<9i%8pTF1hsWL=Er4f_nDU z4!!p8S8)}zN!r9CG<-i0iTLvD#c5x%TO_N1@nmOq^2kYbFvKSjb3D(rFeZd zw>`cY#Ja#u(toy1_k(>@tWe>7)UtU5^1=FszmOKU&6mzHm%%J1b3P&U+>HAg(%a zp<%)bl%;ACd^$F1|6C|ZXVoPaWZwPM*$TvB{cd|Bt6FWU>u>W^7Npo5USu5#x?fmJQyyxVA|%GM%f`RhkWMK`5G0Ys!dKEp z$6yR}BgVj5pSXTKPy0!?SZ`izKR{}HjrjFglxKf)##eF)A{Lyj7f;bC8OOllVJzza zifnWZoC$bbdF%F=*wBP5l{q`KBzm&L6Myv>o zguN|tr@J`*1yQ8erMvv@30(bnH|7|-w9g*zO{WutH_Vu?{ zkjGY4lt*O#*DFft`0*jSge9OP;_95sqa+IP5b7l_RNeK>-j(i8GG*Yy?kmI{dgbr! z(-#k!2*RGmcUSk!ew_-Q3vfTwJ+EFK&uwfk>=xf+xNjV`AHlG1M?rw~2S4Ir-<1!6 z9j^&p(*v2L(Jll1$!}cfZ#-m%0_XWWusnn86@qAoeYjYBAIW`Q3k5d`1xzvr3g38$ zX0V?I1d4llf?B*@3WvDqeiY33sA%aSfb;Q*CtU%S?bBY1bdyl6*JgUd6j-u;~>hcLhQtUE5wBOF#6c2`U_28;7f&3;Zb9e30>+KLy zHs#I{LP=fZq5O@4QZ)pfm zOSn%S*c;s`8e`oNogqq#H`=p>a`j7?XK~DSL5$WJVfmzOiK4k|A}dXLblN(wS{Jlj z5i@D&gH{+RJB2fwL6wdf!!KxkCloJr9X8?-d}rylkq}UYXHYtbvST}2O}0W8?7EayC+klF!LuQ7U;zr zA5P2##{_8L3X+k0a?HZe08~w7Rnli$5T(R185|fL0-leUn-k}k z$GegTua^pam9LR<6n9$5mFT}} zFma)$9Om{C*yRe~NWZp96^4A#XUh~xB310l+i)>U z%-vNC$zwi+4!Pr)rk3r1MYHZyOg-ZOpFJvFD~m|;IB0=u=H~2a5+>MHh3sXEs#W{$ zX7%tXTPuP2!EtKJPBcRvSu5TyEmgUSUery_3uV<&5H9@teo^o>O}Qm_iY5FXFNj%9 zpI;4LoZDMlC2~29N+Az*Q5j}AA*hVteX$z+h$MdBY|Rz(x&@=?kr>T_aRePMBA>On8Avw+(PDmuJL({`_}Q!f8s$;7Xo3XuD zavkbo#_j@nP?~;X@epr?22$3z7$3HG+vEki*SbU?^q9rDaVJS^SoG-lA=2@XfLnIK zkN4=$dYvqO_K5jpF4;}~N^whv=aAbgAKvu^k&+0nuZ+bUpwwrg-{y6N!UAmL1ya^U z^wF^QimXw5;|0)WDBxAJW{pwu1N$)Wv8mGgaqauQd&bInVz!14prAD=uchnqQljw; zP78J_3-uZC66<#iWJ>>%7mBpPC)S_`$auQ*3Jp2&lD$d|tQQP=S&~Zwhc?6e1Mn&K zK=Q+ao?hA+!(!J%wiPX8xe{5X=9M7ASAHt6_IMMIr`+ z5JtXT_X^PW8J>=+>-RDt4oOfAHvq|OEQd4O$29z%noq~v5yyWhHu`G$TJ;Xi)5X+Q z&Bm}mra9_{UrxtRfYSnbHTPOQ$l75G zmcxH|XG9^!?&&A6Gf7Q=W2vh%ta+0#>r&6yKmEZ^G{0^i&^?{7bnsf}FeKK$QHz~4A%m9$>d@_eMni@)pe zXI1z}aU;hb=!QPJ4`sl4bF*1JE0Sg3@wJNICRQX|6O&evq^9BvxLT8TZ^SGF{o-DW zq;az&mW!U1#N?TM$^=Uo`eU?}^TAdmZdOc$oNbr64H4QHJHFjuoXbQI&PkQytKgBM zSK%pE@tCMFcXTd$-7~pXMElf$QUC6sgk5Q0D5|7oyei z={ejDxs4EtaWw!T);#k&LyJRTXmKpaY;^SxHI7_#H zc005iaagg8SxG!hgu5*KyI*y7*$H=ji}#4aaF{%>BP9H&mbmjDjw>E;f)tP^a(IlZ_8w8` z=?4y>?Dj$3Icp@1y}5tJBYKRk2aHZpG6WsI9Z=>HBMd@1#7|?C_Nq%_9*-C!n8YLH z5^AfU!>?Z|`q*<$Un**w z`@|aktSUfbUt#=+1q_~D0_A7eXdP`V8SZf>U}ZruC4;<&?Ku3^Z4`nR#v+Sz`4GmQm=H~ zqNCkDc{z!$mP>f-49zYgphg0^VRYgy5xLCBIqN$=*1J)-Jr}%+(|BQVb)W>h8^kA( zN2LWo-2`J|f#C$|?ot2b&aA)BRN^*A;j)>!&)h|D^!Z`w^TYM$Lqg+&Mf5|$w+EN5 z2WOjysDTH2qDPmDhtP|M@J%iUipLm%hq$T7c*aL(qNkATr_}5RC%LC&l&9#A)5N={ zM7d`ln`isY$25T_JCw&Tl*ba3ry8GUuc=3OxhE?WE?1P3j_j9?i~EAPhuG?SYsRO9 zJ+*F|*I>rS;i>xp&@+VC!+{e(9c00c^*@+l5MVwKwEw2g+U9ime<0^xT`sqJLlDV? zGg@j$2Ewr5j62j6@`R#r`QX=J(MTj?@#V7U;p`~Jl9>!fGbHPaCek?_j{jpA`gav5 zo>qIbp>(eJpJ6Di)W4Wvf0@=Wxe@>0sI$%0n_a$;2>)h={d*Xi^}Y3D7@ERr@n6Hx ze>ofey9)HTv*Ew1K>wFv=s#7Ue-A_dWm@Zay7|Z1@J|)!pJC|#jT!bYXTyI`XSe?+ zGfY3|cG^Mz$BtqBjv}or`J})!hU0f3W)_O^Z){i%2Eqc!x5$hjSTfmYh$lrup$n~B zpr8!=pFAc79Z`xHxQUd#L2wh9O;jA4kW@?|@%-?iK#KiWN+Ay8 zo9{eUXty-N97$izG7+xArgKbWK^O*QL)hkI#SgG;(@`BQtua~aq3C}E`RZs*gwoFw z$VC0Jmf?je5yxmmOEokqh0Qcpjv62cZcc?O1=GxhHsSjtzDy+D=F=x2E1wG%6W>+| zPv!9_bljyqF%+JqNl!=LA(K}MPBraB(1Vun=Aw>-|3vgc3w@92yvcjH6h^wB{@!wk z)_Ntd{T^`H{MMGvBnqqao4MhZfBanVQ!;+-5ELCbLTu9`T4fIhS;3$5J$Bxh)Q;h6 z=3>!gO@;!J`d5^~j`5dj;n|{B=H9OXo^`{h4(5&(Y>R7lJ<)Ll*At3k?O$@Bk6KS9 zY{=Ai*QS5V?5;bam%Fe+6M#G{g$*Vvo3}#Wy_y9*Kl49|%JDnW<^lMYT{owuty%=* z=@Pia)5#K^_Oirj-Gwp*pk(&rx)NHBAj6aIC+l~)g|Z@QyIqc-Y`u;@h@?-2-Q$+$ z`huJ=anqU&|GfFzLat(~oJdpPyED4-?k+=K)+NLePxl+7>v=xvc9tIRDf6W-tlJtS zDs?xMaE*6j0P%i8am<^Ztn#KNEI3h0j5Tb3V3olp&@_Ytup=V{zqStgy2Obhb{U*S zrYi(t$_vLJXOEOITneHz>HGCX&Q-L57}3R4aOkWi1k#dptB$z{4tYkI`@6)hyCe5! zEC#%3uw6mKyC$C!Mg>19EozLqK_4KU4xC^9XwsnoSK9ZenU$1`>&FUtLxV`S0)-A? z@JO3NBvNqR0p@W>M6S_VJBtP~Aq=-Vp}Zqo=kK5IVgi|@X$!=J(1Kv0uUY&;6%z_y zL#WYb2ThhBl&Z)j@S4T)RcJ+Hg$)Y7TY@7gWI-fAqK7g8n#7bB#*^03LW#)k>P$#( zQlQL|sXtz#uXoI;bsZQ4(LE6yGB=uL@Vay@G;Nli@nISs@m%%H)k=+H85(oTXkCdc z@n%TT1}6o`RY*Kv{Pd+k3)CW~p5viIEM z;983s!{7|^LDU8k`Cs$heGTa$QIEutRpKe<^QC0;6JwOW#nP5GSV6U#37_ZA1^$tc zV`;>c)yyMJM-wgLu~L>zP--t}tx81}Cd4Ah`PzT4{J6rzLw|57_pjFwY~k)0HC@1;Anxl1i}x`ak7F zp2_Nb6n#L{qD8b)NgEh>f#_vINFcRJewtZuzu_F>p~OmisycrL5^@x%87m<`ddUv5 zC^ST?kdW`{>bQR(+8EM>OyKr>nPPJws0Pdy1U~C$=xmkTQ0{s_7vuPv4+qZ`?3i0X zB?&*!bcbBG@O`*uO72tG5*@7Vq;T}q**UgD@x zX28OBKFeqqiR_g^ma;xcA|!5)axE}OKVos_sE<0cHpS=`SsYF-@agTPfKk-|ZH3y~T9z*gU>~&q1#Ln;gal@oz2J|8EW8=mX zMk1hbLF@YDsf-wxhT(eq$s2)`HPVY?t|`%XakpINDuI*KVNad<+-3SbA;y*Ikafly z&MQ+sqTLB~2<^hkHTbX9ax>{w*L)0LjAcTeM@)iQJ>?<|nWWpMDi~Pv&{_7?Jk%v^ zy^AWdUuP6AR>q9=>jbIaPG|+l#?9w-YjZP>4P77y#TaOq+vvPgGIe*Z$n!=52+Y6Fju7oFUs6%+vDd4`~i=iG?;^$o#Y^Z72A`P2Po? zadCL=v9)96ES%GW&_T-EP220(Qhj|1mW-!L>-DAlr>L=z892!U+(ps&N?3S=%aSXfxbI;uN6c zYicP%kJNv?9kIukI-Pf#H)!9a1ot|jeCF_IMRXo?h2&%onT?gzbnf|+Pds)h(^Q{; zWZKNfJQn(5Em66EvPr<=zA01VGk(_fnewu2Sz!?+)M2foll!U$amPWVK-FXBG9s1N zx~ht@%OHz6t!pB(4SBiR#REG9&dVyx?)Fad@y1hK+{&2=9mc$Ux`tzB4YgNogO|Vm z>9JEd5R~pO0#_$Fa4;rWDOwR#O#X}uA)g`5>yyFW^oV6xxavS(QPAmMaLFL$fI6_Xq%QG;{(67@O` zlUl>Jkn91RI+E>>N=TOF-EJ3`78c_*}f7o&9lz z{RI|W>6eH>CcY5Z0RTncFNy)|!^9svH-X+ARdX zUio@71=|l3hb9GmOmAIGiDi~NEtf*>V$FZ51^K%Y%PAro9eRZ<5iNr#m1-73p;_E5 zQas~AiIhzB{anK?w*yYlLo%p|(uLhwKZk>{P-?5%6j2jrwNR(GgdgcSGz9zAJQ8_+ z_G^43YUj|-Nr^bMix77b3_6IoiVb7E3-6a8?EDexoD96m^$HJF8a@PW$A*OTTK`rf z+FS_NNsfFJGWlE*xUocdV`3=E8FevZ1_y5285*?%4m3+b>N|`&objHMh+gT5JP3+D z%Z+{*j-Drp22t`Deu}9bj%+lJIbrrcJFtUqC8RNR13t!VUxivhs^3V&Ze01C`Nraw z5{`=lPB~+VmIHwN$t=nizF%0 z-%|WaLw}6$gh~?lFB?KHr;O*4%BUsBNfNk*(dRg)j*$46hS_D%5WwcAkS_D*!V&O^ zrST-h7UST%Q72d|r`7sd$f>KG)uh&O;dkeysSKpFmg4)nCB{Cb_st}eeNOM^Lgik> z*|<*POvo4(N+#uUnhwJcY)Noe&#aA2Yb+IAF~jemG5rmC${aw==oQQAQb^4S%j&JQ z>fs{m8_8;6HqWLZC#TBpxe65y%kCw~gb~kjFLrN@O}(Pdp8JG9$R$QIlHIMBH9V4& zi<$){9sy{>bEM9FP|x*0$S~WF!A-+UFipgH&TU1_7!}KFVz#<#u&ebR3t zPGoq-Jr0v))4)qy%yhRmPSr|F zwv#l&J=4r_H;oJZVbotg>QJ@$q{sP1w7B`h`R0^S+(rWZ8&f% z+>LGJ9zr?Y8o0Mx*(!S_eQ7umWWoy7qFvS`*d??uLv(@~F%J$SBi!-EXwVUe!9cp&ajA4{iaIwv zaFv$~28v~|Xz;`XGH=R)TX~!U*NAiEOfh7Dt83YQXT(`WGARfv+drfd`r=B$;_ncs z88r>Y{@<$%5pdbyE&~}l8$v(;_y|LU(z@^VXzC%q8#5EFf6urZhJ7~^K{OXcMNNGu8nn80)FM6bpB57 z7{_B9Ywx_W=seN<`rCuG`c~?+z2jRvlQCN7_RFvHmtXJ|tqK91k37Fdcsf_;x*zGf z7w9^VPCBPoJD1D5w#RZTAcv@UJ?WW&66KdH+{v_r`Vm`+_Ng5b0w%I#=)yzr**alu5S!uOXdCOWYC1N8lR|MsCrKe_t*g6RYFjksg1 z`ypC1)$&FAVX9|?qEoURT(2S9wO1oqIPwtKxNHoh|#tSsv3a z`He2B9LukLTBZ}efZ^BiyOOmiCzr*AM1IqAd6yWM#aMU863d}rWd(Oh5%iaN+W`oq z6)B+r*^F92JQT+(flB&s%%bJyxM$r9S(*Swl6YRG;quYzDH;gLiW5Nwk@2}cUPcU- zY0hsIF<93H=yFJ(LT!%#_{L_1p?K*&Ccr%7) zi4JKap7Ww)oo9g_%|C~Kn$Qbg4%0P7+pc-HdHAm3wU4c;;NR!~U!%pn=PwjuyAq!e zbLCnEJBUyc9#y_o{dxxUY`#c*?5p^8c`$uc*#E?@gQksISFifLBu0p24~M#RW25|{ z&_mzqh7yWoC@>IvbmfG>g(4hfuny1$l<(OAs2a9ZRBK^Op5Poo1((#gui^+@pZP+! zB8WR&Lt)|k+t7ajsF;BZ2p}uUUIMHt%y5ImZ~86q1cZCR4D=EQ8HX%L;pO@>Xy0n! z4;q5T0knzwc^K)Os6Q(vG-NSw4*eg$aTX4Vat(%Wl1gpwEGF2_r37{oc)g%ghr@F_AB z#KkFx3drLyO;4OC)Z8L{Hjo^f7ZlXsG3(dZQ5)0I_ygU!6h=%k>*x2VORVXeCpahw zAW#bgK+fz58y}6CV+DS~Oof!%Dwg!`79_s(ALWp~L@|T!M}$)FXIorOXv0?|-auOu zC`nDgg*8OO^aE#I9s$V}Y>jb^uo|mNEKT{pL&7WP91wMQ+*CnrKz|_;Z$5wp)a46=!e6RZX}$r z`fjWQepMqBRM*smNxk)y*@h!Gfn4l zgsbTmOsEKpoybi!A(hIq=s4 zCfp!QbX)`aIhg}1zBsZEXGB(Qt%~&P&UM!BVCKmyy`K!51Vc0P^n}-OA9{2oP&ntP zYL@AhRmL8rJJ&edpX=05lKboj(>#XeXBiHm`lNSma)R`?c?W6OyO(ll9@dUymfR zUAtb^KJ@6n4B!sD|I(u~Vm6_B^ZR}nIb6L~0`YJ1X;nL1vPclD?liC8{8;zl9G@n3 z#al8Tc)fOD?Pv0bey!`a9WA0i&mR=y0bM#zO>C4t&%NK*e{NY~1?IRU5I#UFm^gX% zNJ~-?K8}O)T(`3>Y%+G8w}-u6m+!tFX>JzGcJbSnRlgm5B~o5LhypQgWxQQ-d{$cH z067Q~c-*yv-Y%nkemXONPGAlE?W=t3XRCeo4qHLLb3MVZ3HCUA_l-D1kf#hwL+foGk%1exF8PyAw7fv6aQfne_Cw3M@nBq zaIY^Z7}@Lq2pH_cuK^~^3KBsx zCHdOdr$^eghV&S!<&LiIKH1aZ&wVx|qWDKmgEp%izTomXrGzL2?VJkGA6E4;@ zEJF}3fe9{y6D~0{ECKdIw-^?$7M`&cmX;D8of2M@5*F_omINDK#~IO}7SZGy(PA2r z+YMJ-qlHKX){PD9L@wIzfv zu;&oC`G^8j16Zd9z}QCZxJDgPgYAY!0hpt9S^$?zQR_=l_nd&C5&(>R)NxAGJ9YFi zcFZAX33ZXRm+%*OaE*5Gz8buQD^6|BuLRR8j+=c-7VJ_e|v4&T% z?w>w;q!5vt1$){7VWz?0F5@8dz>zLd;E2J&z@orDsKFpzaCVv~uF@!o5B&{sJQo)b z<}!Zc5cvKW{{jnk;2KX51Gc{udAgKxdEv##E>9ja1z}Z5@IkiU2u>sG?F|7$z>cn99ZZwn9MXd8dxe? z4g^|v8mK0fBnJYiCVGGzoW(bV4K7`E8e9Pm5)BN91qKPD3r;(oWZarDE}1-jlr$xo zJn5EXyPN?{0w(b7^Rw|!Bmfjh9+GVuTn3Z_Nt*+~KMl?z2t^?e$pL^+)dfQkgrX&e z+>?YxA_k+ChhPDN7Lw1BVbWe3$YPp?lBvm}5QG|rgX~@gW3h!s6NIX4g{GBE^V%5lJchBd< z&0HLTd#H)bV;8q;h_(ViaN9zDtVD&tAWxRTIfxh?6L~wQtlR zuaA<+04btdAD@I^V}byIf$5op8JmM&(?DY7K*|$CvTUjB9i@mpqp;|LQ7~ygKcO5O zg3B;La1euYY(b(CgTsA1%NQ_qkW@*?G8kG+ewxvoeHK+>B2A>iXT<tH9=OOk@5&gYD=`uHTz3LC0J9?^GdcVam}yR*tD+LkF(kusw*}-4XHyMxqXq!0 zhz2`Q$id(n;tZRuDBu(pjG_iCJpQ4^XAPaJ5x`nyAHt_TXr95#l8wSswHv;#zxq`%e%u3`DmTg(8-3HT`{pRkJ$9I!l5A%bg)mC3p~z7Y5u>L z&@v$DiL|TZ!Q1zl^tULTv*myBDF0WU{jWw&HiOo^<4J9)0m`pTZpY;C0LFd1g z&_93i{Hu|Z-RyL|`+pHv{k?=ne2>o&{0}9~@xfHcyD#}pDEZ$!%A%5;zj%~?DQT#8 zfjEAT+d%exHT}PpG|__p^DG=iG|PKSe(XPuoMY3y6hl&V!&KA1 z^K2fCF;K%AXFtPn;mPQONBI;T@BVk5ZF|~}u!}N1_z+jQ8|DDT+>G;M#6EbG!7CE^ z(Ui0wjT{HXW18G(@4vifabXl0DRIL`Wfj31$K}MWAo!DthK019(vlqwv+|C6_`J%7 zQTWrE{snI8l8E!;le!8lP1@{9F}lj)Hc}7EigDxiqlRqwu@4^Qj+<3P5PRuaYgjNH zO~Y~1Nmb%}TS{5k;ezx*I}oPzAoB74c9-Kl^y0KsJwORC2C-t~2%9q<&<-G5A^ZnUfy?71C_IaIljRUqQ7#AS=stRFe&KEAkc3Z0juN zV5mG18#-?<4Uw+m5p5QcwHa|*lzqLNyxw@Zn3gtsKI$pf=51?0IC?x;P!+J6oe9b2 zcvwjD@;Vr@u;F=Htryt8Q3*Nke7rT`;<-C#^zrUIvMC4M_6J~tAr$|5#)AxqPGmPC*{Yh~;0O@xAdHQpYhzyet{@iC6Rq7fPN=8ve z&8>Z52@!Pv8eOvAy3j_$y@c+z;vVq&mmvD3U%0r;-?gz^ESDWLw~G8gqlfnQl(i|FC!x^~Gdpm=5( z>QRZ%@E^q5$3uQihDcr#k~R)cbX~(G=1FP&fjk>o(_wT!?kcUy9v0A4K+$R1I?M&b znxrSPL6gln+K?&lhG)2g(0Vvlr4S#E(y`AFrbeSFtQ5CWpu?H{r^$$rDbX+f^XJtR zzL^=jD1QtB-k?V=K4eAf;Bhi`6LrwI*Y#ZbyCaog{F9hN_-s%LqA4osv#|C3RM?`S zsVGGmN0_8TUYcczNaBYwceXk;7)>WqLybe1yCTX;nflYf@FY)>W8##O*|pTltZLnF zpoz%Q3+?fYgMUMD;t92U?!#OzWmSgQ8v%E`6lX3=qT@F&+Km|6`I#?`Wi}49KOTaI zf!2vO+A9010i)7kQHfT1D%3B!Y(`elyPC^VT+NeC29Z$t-!H-&%das_l;7x< zUuo4^2(M~L`b~=gV`{@}_q8#R6^2yO%cC0icHx~B#vEhIlkWHbd#SaPU&nnK(28sWsp*( zX6ncCE~y7bPbN!UTr%PoCgX?t)R`rr`1>BEcm1eZRPB%YaUFm(&RA+%WX4f?1GsbKUx2B^CUb3jgLSl(n>!o9zVmHQ|l$50e zyh^q9-}?d)4H?2DO{L|~Qz?*%Loc2bbxAd*PazvszpWpBOMX@eYWit>H*!>&8Czs` zmtX%geO4c4F5GkBDmzbU46rwoqf*ReMw?CVddGL9nFg`2}O^ypv;pZ93d7Sq0J2kei z+gplrrT(R)S?yFY4teZ2|H!j1Zx^(lT;rQr2RdKAoTE{BZo4@>c0_1j<*|3n0)EO5 zGZJ3JyYP_;7+b19tFs8KbIIF=v&M`%R*C_tsL`d*Ex93gj!jux?61bVpxy6 ze6h8ExPF*Fp~`gtdH5Q)?TT@@PX~B91hD^{@jv#`Vg5|IgTtbP|EKs{3ZbHCo@Y@zSWMr#Z`j-BJZhvuk0pz>?>y11=mvfj-Q z-_e1mnhV9nXX&AR?`|@ms|TCqA*HntzMW)?hdkTv&%U^>c5o^BzSn+V3iO=@TxS+d zddd70i@k=}ETvWLJNnF+O?~^4f6y0yW23h2hYrA#uvT;O{p9RlDdze6!CRh+r-8#~ z*x7+xRcS_8NYK?R=`%I58f${8o6@1NN(qaqtFd~hu_ml4dW!4MB_lmk7Hu_#GB&et zdq3}kVBcgvAeFI!nxLI)$O=S=YfDIFqrahAaPA-V$b%3c*ihC5^#E#DHPcYP(9l$n zcqr3gXfb(cbV+DLsHE(pk7S;cNHPbisCy};d$p)xDWy{8uoGkx4}lAFy;xY}y|hA0 zSmS3UCsX~lB8xBIeCdBET^L%PDhG5G*yOl`bIb>}97;zd$rTKGceI4FsCfwQ+h$03 zykRMkrZ{0PQBpj($6*SXe2#!6_c0r`CNBzEhOsItqTzhhw+|H!B8^0Rj66~H*P*7} zdhq-}3RGdUw_}@6u}hX1hc&4=TCw>)eX_kB_Q4;Luw3%%bGDA3^WnJHM{Sff=I}-~ z3!qlx4l8gt`7Dxw8ORkJ_*fLU3H!C*+5Skv*ji1~nZ-B8F(QFnw~57jr6f8Eq-KW+ z7sV-VMd=oIqvVHB><0xG%NiD7U>H>a6T9LV&5RSzpw4^|`Y|iEq;QRKcH;W&8rf`X?Hs=1?!;Q)U8GKBR_lpwJ34dNB=ZREv%qmLyRRYvOQqfD^YF39@rja62;i z36~s0oqSOwG>{TTcdH)enruH567`f4)2i-uBoV8gn&g%${xy{|EHz^}HS35iZP`1U zE3H61&5Jrl$t`)mbiC9QCEtFXBTfHh-efLF&e@2AOH| znN?3QA#C!jO5Op>;&PJy$IIzf5_;Doe#>TAKLfKJLV0LQqu$+Y#(LAgnueKz%69i&1R&VCH|Jo)eMZqrpzUj5<#UEIyT5v!7(Oz&ZXu~Z-$Ge zS;=F7ccmN6W8}{N%5BW-p2Idu_h5_o5R=b8%EcjNBQQ!Ql#?UkUVtT$_raec{E^JX z8nrNFz%s4pK@)s|Q^=Qu^Z?LP2@e)ZGmZx%)WJ&ebSqR{Ft{Z~-n&GR5iB$`FO<^o zSu3J{-ix)sq9ZgDmwIsfMC-BeC;F08rbyMD869u>5?NTvrhYI;8#EA3cu?@#62qHH zC!v}oonk5D5{+_I0H!PpXm>x4Or^qW)7{+_EKIb3t-%g20n&o~mj`Nce?&L|Ti* z5qn@uXgPywW$Uo%7FQimtfFy0;%iEs!(1(YnAPcMg#Z=}Exy3`-1n6JFy$6b+*d66VSW2iv`PCx@ic!AbxW4u%Tk97Sr zIMWYLjUJDRl1P*6YLW@U53}@?pDRs{t?cFzz#!^o-G?UZg2qf2@x;LDJX3L`rs6D< zNZn;iVR!FzF^LA4mJs7Q%XWuosb+@6S`_NiSPLtd*6LgHl+Q_~Tq%;g#lVr|mP2zn z>DKU4?yBH)&&==&5B91UydU)#?Q0sQ48hR|=>ea2Ysz+;3)adw?*(C7Ij{hMqMbjbz1bG$9En*`npKVVvIG9EclN$RY6F2FIuz@x^@4iaO5_% z=PvB-P3a0daZfaF{neg+ikDq`3cH$NN%ud*C&@ zwl}+<7}SL%t7J4AAT%3kc4}s*sCvpOpEeqM4u%f&Yg8o7H)%?z*H~EQ+_#5{+!{U2 zIghrxP+KarerI05rk4JoomHueqjN61i%Puwz z4IEl^tXb8(jVe1OI27t@jL;FHCA~}D>djRyoE|MBKH$Hm4PhSg z^(kW(Zc>ITOBa#ntF-)U#034T-`CLYGORw~l*&YU%R-N~)AWphARmt9FcPH1*=HMpVsEbR zV}>*{eXA|KFbwjp#mVD_E3dy5--d5^=YJs4qd7n# zST3nqDtusSLpTOupiD>*m%S*Kvki^sJ!@;0k}`&q$`KtM_)0pkN1N+L!zvj#=oxsv z4#yhTF0#h}DhZ*@K4Ti%_2_g}<%{l+KX) z{gAd&T?DK}boinj!?rjp{ovL8J&_%Mx`=Yi0T@s6$>UtTbOx#VU3wF_Xe>D`q$Ig5 zL2C;6UF4y7IWm58hhPIeH~~VsYI1Hp?Ky!D*g>OJf$LU{m|s>AGL5G_ldd(_dyxg<5?>ao8VVNSyyR9?3butwTnKe=b2#io(WoiggK`x`S?t6 z{6Xz@p9vSQ_9q=)+I2klrYa0=-Xv4r6pY2DlO|Nmbfma+_N}sdY>=JbSSK8iIWA-d z(UfAD3732c57DgoT(b^LRSsrABFj?Nho)mop0bDO6NkZjhw)wqu?$D9L5HG7N6Aq~ zSoH^q8wag#V~+5nMO8|f0DFLGN?oNHZ+Ohs{#MFs*%` zk}GPKw=Xp_sDVD2vL?oSvp&}T>G+$(ma{E{7AtR4G|K77@I90gJG&Fv{%m8lA?f-I z{V+%~TgWyPBPZUnQ@M0rV*Ha89tO6Dnyhc@tvF@&-ty4+=T(TuBQo1p9b41I)$`U> z9bO6RRd$=F-IU(tlI*IeGK)xO7k0?|$w}!HR(p#&(SqNP`Ol6i3rmPW5fM@mzlJ@R z6Cx-D0;jQKYAcPy*G|8I9#fq?S`$1&Yq`} z(pv;l)l`#IWLUPcpk!cc#iq|D1B8#iNW^2&%i6}~G^D_$Hh&LMwoLxynWU>Lm~=Pf zo8ezBkSVp6F7^6##3_x}maYtjV=3f{)=+JQ<9!%a_t%zhOr~?cMN?|8H0(~e-v#ro zuiRNI)f!C|fwa?YkH@L3F80?~A8bB&l+|n}4~)hWBZ-VA8*5Jvhckt8#X9THPN&O_ zHU}H)FD{qc0|JaA3OBa5NAuM-yjk2HTP+jWAwM_Yy0B`;)!L^r3BDMlJ zOWRVTA1+PPUO_XQnt?wihTsHgC5h%{h(4II5eV!-q|-!}47M*v=K@soT5~t$AS86K zC(<>@g9IDX6lK0jLo$73U$%naWk z%2>-6$Yx54OXFe2&XDf@QJPil!DW$#Yww6-CFN3?nbYtQzHHa_5KZ9aOZ8+KZI>Yumh0{Y;5^ZQgy);f2kL{p)gXG0 z7pE4dP{#FxM_Kj7DA9<}Qa{}4gGV`QN|=05XIr&kk{9v8qb!L3;ciwGiKVW^lAh#l z4k{~edN!|E_efeSMumR1sOf{zJd_(?f3a+sA#XozSap7}0=7@$Sht-tX|^=}bcUOB zRCSD1T+?|CH3ZJK@u)@$nPOR9qrztCMkk zI5;{V_%ka9Rg$ID-yVc1m*bJrwe%eqIq#>omODTKtcyjsmPR0$RD-U4=VJXtsCJ2)DAQ1yIj( zNGDj?h0B1ZZVjiJ;PBpsT}bIBJQAb;FEd;~T|8mY=mUd`y1Zn5+4ik&BV%=~x%Sm) zWY<2H@EwJ!?;{>BN_x8NsM6T;NW}=I=w%1O7L}pzE^*= zpN)seucDL6HDc7DhPZ}hE+epR$RuKvczzDf`kHlMthyKXY3PTgZm=q2mV#3Fadw#P zKSSW zS=o5KXm0(=C+MTFwu|)8+JRAR9W%0a$b8W{6mw~fODs38q*JPO4z61^IMu3tSx@eb zMc>`)C&$&>kW6VtJ>j!)Uq9Ipd)@84$+Yq0BKbeOy=PF9f4jCD(rKY1odD8%?+}VK zDNzs*1VfQtLPvTDy#-K2MY@2ECelHAFG1-dQdFvR0Ts#4|5?x4YpuQCclPYrGkfy& z{*bvd$$jN_o#%0UFI8YHj?@r2B7}{ zpd4!+B_|Ki$)Sp&4qq6RVIF!iTJNHmrp&`>4F@c>JKLJ94WsuCv;G#eE&782BIhus z%Mu_{ddw)XIWCC-kEgpR1Ct-dqUh0}Si)^&c3uPcvM#}x=rl#14Pewpf9DV_2Ya3d zCXK4O8%pXz0|Xi>O%%w(9;|mqUIx^x8eRn%biowQVRdPop0Pq&kb%Uwl!tf^Jy{$a z=pL+{{01l_^l6@gH5Qz1=dR8DX;CJo`*lV~f=3dPXHp;zoR_hSyomqEvCL8(#Ch-T z##6mQn;6u0DImAS?}hm9%G?|&G#NIXrgvVY4)j#C#e7gH zJlBo@cslF1f_MmZD6bzUbek*OfqRNWY$Zo_*IB>YZiLOz3DDbv!2q6LU~|ZW#iw|CimMmc2U~NZv^a|F66H&n1w5U-I`ayV6!sb1V_eOZ7i4 z$pj!sF96&M@R$5TzqVK_4n!luxLJc#Pav`=T%2VRv{R`0aZ1T`4lsZSg`?OxT^Cb4 zJvluqnGQ!oIImzM!)~h~!{+-^ywkO4q|^-Hzn1T+ zdI$NnPTlk(RHweA4;ewp#;8|UDjCZnZMmd`E*;Eb)k)nwulrh;EoAuQB;Wt*NRIe5 z?E+Tw?_){wI?H{J8P-jc)FUq~SS(i1rKA~8Y!NMN{+udTxiI@EONAAxC3U#-B&- zu$~!xNq%CgaP1!)<~0`v#1pT)$0j}}R4$)M%lCibFb!|3YJAXfc^dO%%k z6IWkWm0GLBXN0i~UlDrZVH)P5fbUo@EBrSObA(kL|I6LIINnmgG;CgMd;67jE3xcZ ze&v(f!cR7fdtH>kFz{h_Omy!@+v2z?xpe!x zK9O$syXf-3ku+}H@aXhCO zxHgI`DA}E(XC6szh|#9^lG5!NS$#g}&};mmtms_ZFW>1wHMEj;h?%IQh4Vr?AQV^Z z|C-X_Lg4F>w_fJZ$o8~asmC&PVS1UEZnfdP5FQgY`)G^+@nU00EvB*9D@JIboKG=M+_@Jv&j*%^D2{i{ z=YcC)rwLsYL+t@KsaZ)6{JHJ+LYt4*yTL?$_gXSs`tjp(WEr}n@n zTb`pJ1o*X;ODzcJ*eWYOZNFx#bjqFO7&rml!&K}5<;ShD6krxKi?Q)~1=^4+!+HvW zhok00Sr7TqK&GBks=Ieq;}6m+D>HetB~7%+Q!q>I92-Q0AppeE=G4zM0Z}$ya-w-8 z`msV_bue0PjlyIFLY28?l-{5Xow|VWT%g~x=W9XM0P!?zQ@H4rx6lB1(Yf_IA)l@Z zP6y{}gv7k;;OS9LqaA(YKYjyp+a4LKZe=ihFGC)#!N9s#rLY1;jF7 z86WKx8xK@Y06_fXqZ_nitN^c3Ua@lm=_MsBEn1EvS~!LFUMj&cxZuD64euQXKb9>| zK6pu-Zu`$XEu~@2!W%d5x1PQWpwLsNp-9*#cE2&ZI1yx(?xrv-jB<2iNayP=$0=+cYxRb@&fb z7q*shdv)o}UQK9=tc~|DFj%I^d1+C7?<=Dd1Dwu3IE&4gmu9Uwmg3ZKIGd zU8o;L))NN=Jx4rbrYpsN$c()8Yaf>{dS3Yfl9Ap`pZ+N-Ib;^VCZ&|1z?YsqY0pFB zjThtgB~bIOC|xyL!I8G|6ufe)EFLjhdbk_9y!m7exStTZ3lz?fR+|O+CiaV$7Gyr` z*Jy#?AoKSwLU`wX;~%hUkw(sn*T9o4jQF@ej?@HAIC0yKm2Qv%SwQh(#Pl zMiJGODd(|s-_*P3nrZg}9#uv@{4^ko0&+r`=b-3}$!7ZND3N&X}3AoW?Cb)7?~ zZQ(if8MEPe=;_OaaYTpxZekY?i-&L2SZX5RjtkSgM6e_XJKZcxh-QB9s+Y3 zL-O18wk|*3#4|5>zO0kKU1-uoZ`CO0a`pX{%j062zkvv%;1cVWd!``cI6sYO+>FIu z9EHVq-(da8w9C`x$-njnMPdr#X?I__c1!}lhov{f8{egxJ`9&ET3XUMXwB+8sVvG3 zQ7SS%e)p&RT=&Vd1fBD=?VH5SuMGUckBJvIDF!1788h=LqmBNg=GJ{D;V?gHDxFTg zzdV~HUj88x0W2{4~#4>EgFg3?qnde}2<6u8$ z|1B6h&=V6Nd-bXTKLW^cg`TJC1|lk#%c`DViY5Nz3V*RV3uH6;3@?k#jaQtH*Eo+y zvEa0oaK}wtC$6|_&0I#!IAAl*w2I5*9B0asaI*?$VV!_xiLrJ|uxU=X4Ue%uParlW zm?+U}ZYm%RaDNo(l{XWL&84QVB>5{P1+p;4xUz;=Cxta9MKnvSp}04%B>#iM6yje% zB3cfU_?43R=ac^(CeKkyNpp*O5Xx=)G3iNjiVzQiw4U_IjVm4EygXJeWDzVoN505T zeLbIAeV$qlPh-BBT0jbupVKT9$46;twT7nUmFRY|qz5Gn=W1yY1k+<0qTLd&KcZ{I z1P@{q*J8BgXM%WEeWbN$`LZ*3v}j}m+1wv7R7z!Rn`gjT!{+AU1!x5doDtrSqLhHh z08pFFAYyyT_shZfJXl&THSb5bNPikoI?GGP6F3bWKS2}#s0UXBOHedD2Z)_b{Ye1? zj)(*ecBy}>@FY1sMNrNhGt^>Nl#I{_3jlQi34=pYZ5~kJRumZp5Jm?G96>CDKuuD7 z7NBTK0XCL~#`Q=_EoaI~EX92R%Kc)fcqm2t3Z)SNk#fM2fu~Ml&XKV~xZ{N+!oyob~&!c@6!4*#}@1_1IVqD@p*C@WD9&kk;* zyU0Ryd+0_Ni3Gv8shQZ5=RH;k~Lhr{HG zT_!3R%JX4EjarE01}F;cps_+JLI6kgqFLw)dhb6m@CcfKLmKp~0?;Ppr-(JYlNBlD zjKAr7L~5acAOe(~Qc#r`x~I>LDIcT(rwXaVatA`0%TM{}49!=NBPRzP3*KmoNSlfs~6 zFw}!U;RJxB5D=4qV)+AWTUsj_0^ER+BKo0$+ycd$6_}z_;l~$X4J4(86wG$TRD(cq zoQ=7^4f=5)KRXTmfrShzE5Jv{P0%3RgDNu$YBYwDs|8|3i^34Vx1ML-8F_4~Ouiya zn}PQH>I8Kbp?&_id{@M5!r%=*h7wm>xi<2+r`D>3R@Vfp-T2VijuosTWlTV;)T5p> z!&y6}ib_@}k;>%bxZvQQG})}7zf9$X&%@`UtG7ARVUspi1Y9s)F=7^r*T6&qaH zF`!j=%kq;zP6qnXo&LvHAHseUhsirJ(4YmdE`YU>7Hr8zVTFP;A}zlGpc$w<8Dzlw z*;fTCuy;%pTBtmpTxu;TXuSyKiZc0+7y~I3r1Aif`4ch4dD9qximt%-C${fT!{48? z^X<01FA;3H`12mX(FIiN0*`TI9d`awMS^b%3_t2ZTy)WLbYFhtq|1*(2&G=}>ZVNY zW`Es1-rdc;+dV+m!zb3$tJNdu)zcH(Q+$r(hI4QxM@x(KdRX@=MD!}M#6F4ZRa@%S zxcCnlWS=e-4ieF4P|#=8-e(ad%ulWe~7fGz1NdP zt$y*?eu&e68^?f0`+%2&kj+&nmSfOgZ7}f8U~t4>Xu)7m0p#I26*ig0O{Q~AN;tk< z__8-5Ieo~2_+Th~X~_Ggc_zoO((#~IdioiG<_}&?EC%>=X}I8GxR7I{SZ$>A&PaL0 zNJYU&Q3OzYWsu5(;r%1}aiGR59Wr+|E%YW$l&nTxZ1O{njAk+_!7iYj6lfq~Y^Y#t zq8(RY`lHg3@s(X#84+TDk?9i8j&7S-#c@Mb@zBQFJia}3mi2D^;3;+w@>U| zjP;9+r_3|VrPF&(#m&@>zvqozy0~&GHqn&K{uezlkv_3yOn^ob`qK%rF$D5)0#yeA z@rE#v4m2y~{8B)F+^(|V#d$6!!ugl=@9tz{D9s-%rC7|E9QMPnTLj8CW6;Pk`oABf zGA3w=KR!@Xe^jEL+ESZh`mA`tpyc|Crm@!7zbw$hN;B|isD2$e?Im4P1UOKx~x_kQC2y@h%DbpWmSG_+7y@3nHfJ0Fh zgAqVyEMf!m!G?3OuK-lwy-@P`!&5a#UIy4z9n_Z&R0e!%ih(&7&$xQe3Ko-_qoB@M zpeyyPb;cMY=OioLTWNOsQ?+^%?A+juNgf9yl^83QI-d-OIhiIcqV*g$faCA$X)WSs zxC+V&+G5G#HwTo4a{QzzzWrHP8cOvGtuHQ6Oc%$SP0deg_tdhc@KC+WW2KzUVx{{K z&bd$kpBWmPY0rQucYVTS05_x{f~Zd$#pIz_$|gLh2|&dZg)qRZ=4Gr3Nqq`MuU@-0 z(j+U z1%Y}dy+4Aec=DGCwV z3iBBW}(ij)k*wt*u5Oy469w;$MJT^9$}Qwmy?f&Hfou_z6z>0{oT}0F)vN z^_Bv9BS8=OHP8TSG`7(M<7+g#30DDjxuFhiUOl7R(vG~vTB3t{4z{aycERpjKU|Is zx~0-Znf@F^02oU)9*QMe$;Z4wJO`Uznhr2lJRv&-63IZDvPVSPgEAOxPNN*12M-RUVRsGHH^d7EAuhTqtZXA*@{rPblS( zl`9SP-~XcN$4$KV=M2Ht5Q4mxcmekwd#K=zNxiT#0SjG|2Jf_Pe}teaYtrwkk^U9=cl;lG*L>$P>^Hy`J1 z(ywA0FAadk}*zQ9YKezrVO+@Uf|!9CFEP?g-~OVHmZLFuWbl^C%2_Qu^@^J^u; z&7bn%({EmAE?WGz<@={o@1>R?((+yPtRt$))NMN1FO@e{%#GI7ujl?T$Anoi-t<{( zK*sn}Tm320MSBw+X2d8vRmwG4v~$Zw_D@Zr$I5>_b${}WX6KMkUN zjpb3UAC%d_EBjieTC1=oUc0BJVm^W@yD=p7wU@z{RAbuVX({I;L!q(<{zf7pAc^Kx zxAYs=+1pNzMkU>?CG^i61L}u4UzNXj#Xs{pW1R1~+D8+WorYsmHCIrz?phyXt{$^1 zSk_pRl5={L$gwXgYk=Ix$(qe`y*bi15Pf%Y(>TeCCZEALux>y{hiPW?`~3MJpV6%} zS@|$8qg&(tn})LH*^b`tMnb-qli-ixKjlSNPP=tf97!@rYv(Z&>F>pv*pwB)VXDmXW@sC;G@xcX3W*?-hw+&*k$MsYdB z{_oGbF`&-39dxlgn;0B}WvD|Ud+_;cQtU#d`jf@FGspDNx=^Py*-oX2Om*h_&NFy{s&{|DYSH8BRtvZwIKH;YInaMp}Bk5E%C)>&^_*wDv%Y*>$##2po%>@KPNqBr1r|WZ(!N}H;Srn_X`oH@x_Efk%^}IAoR`!mzz|`| z=UOyjwN!(zpkni6T9#ftoRt5PLH790=-53npVL72!Gnk1aPM|u#3S;%ExGKtR7;ns&2=+7nenOuLfODT zk3J_$?kn>1w~}FtR|fu|M3$@4^6=`_qeVpIY3}5)@pn%pHZHF~CHq)4JIQnz5 z-VoVE4+!4L1?0~s(VrgBAUQ~l?AjQxSQh}Q8w27#M?r^1Za_l2Kv&MS41(yyF||PU zcT>HTp=ey&5$d1iyZwCv=zj87&K}h8OShw9+MlnCuHG=QQ^U;@Kci+Vn#P_>KI_gH zJ!N?NI4Ds<_SM4oSj&bdKVC~ds?-R<_VTR~n4Io@lo@=tUG=tLUaeSTg7u;b}JK(7&_=_nIucnf|rjb$>XMGRryOv(cR5b1iRWY1l zz6&5C6-$1A0jO1V*=HepvzAsUqG}Vw2ar^g51jcuyA3_4t~2<}Cy58WphDN@(3=YB z$prrzVG_xucMGkc7QTOA$wo%4-42rf^*9Zoebd2#@!ES@uJ|Z--j!&$9!Dfy9p>+= zCv{_$@7H2RqD7bBtZ6ugp4w|s=IfZhg}j5bY`s~FAkywZJQk&Ey4Uh z1li|nX?$wQ7|MTC$||KTh~LS3yBFG%7rE6K?&d&=%1@M~g1;a9yUwuXA?TGRlDQzl z#2!!;FF(Jk^O+t)*@Z??O0Xg5I9ABA^ZT!WYk}=iXKl9#@o*ay^y)krdFTb0*LsR3 zhYhdrxqk-=#slHT0H7p%9}L6;54V4I@E#s$;<{7v1B*GLkU;)SviJcxZJ0`EQmw-Q z(iFSK>8+H27(ixzARY2w4yPbI4l)I3$=IZt5D@v=uY|Lq+b8cuAT0ZmfsA9 z>AnVX9wfk>$z!EduoSkm4pg5`siM67AZ`sjjKrwTE;rNTY*EI3W`dh8^&&Epjh1Xq zWd78egX_SYwtFyas2KmraJEMy%7bllNlg(3mK-AsH ztbQRczjIX&B=emw{Tg&l2^7g#3SY%o{sqf!)d3VPg6|uJNhtn$x}y(oa# z2d&1t)SW19>?j(X=S{u7NaMPMf(Y~xi+z{?xJZ^K0C70X8nObsrPc)yt%@rbd;=rR za^#O2dzH2C#+enoEnj-)Nq4h&o6Hz_p&x@f@6EE};vnPTO$m*2a!gZx-~{Fq1Y1^1 zC0bsD3m20aGF%W6pSyuBH&YabBsCAHcn{Lp4&o_orJ3?+Y-ziq4?w1bCP#BAPJ=p8 z>r`ns+@n89R0Z*(&27E3tH2V)oD@}?^A?ZK0TJ@XBCIG%>6$SnUIPm??84nG;8(z^y$k~?(7tGlngQheAY-pp^kh30K>MD2lk8A64$v&x{^Xtca2F#3$`-A{LMvk=lqxC( z;$jEA{7A;r4kR)Gy2A~W_-Ucs2cU&A8j0yx-TYSK+ZqJ|S;F_V$t(!w5DsHEyP(*v~1s%RXlVzUlny;wk+QXu=<1a>5tyDCXE zAEX%r)Q*YuI*5NOmO^#%zAeATvR1LL6lH6jrY;w6s06hQNTqm?LU6;0#>BO+;1FF3 ziN~Oqxny}tsw|kskD=u4ZV-NJmFF>y?`k1I>o|WQGFi7os;j_`uZGQHb!^z-@}a)z zO&GE8LuFKH)y)RALD7DzbmUMj7>Nff)V33P+lM~#nT5sKe0~0LTMdbUZGiPKN;vcM zSBriVDITWkz_;~thG!?Y6&>NC(54x##+th_n&l0aq@n)FMELedS=Ukl+zD-Z{jRQ~)< zE~V9VE3PZVrkk_8mQ%Z-XqQ@xm&))Y=Z%STQA%(M9V$A}41+`L=X)iYQp^p^rA_J* z!eMVXQvOifCGNeopa6uR$?ON&9LYg2|$14iFzq(lopJnIBXE zo2Y{nR&Z-4*qXXgSM6F{nRfy$rM+?hLnV*vJundWj8ePT`q}7#GG1Zu8>n3sUnK>v z6D`PZvBHa<3`r15-=2gZt+Bk7-1#u~mZbdx(Zx-mWjMO+NR-%-V{N$;OW8rKnXi%+ znq;$+feWDi+uLW?t++TpuSKO3?Uz9_mRb~=A;40iZAbE%9LRwMrFwKGY|xiKQE%?x|_7MR1)bIknnoriWmI4iK9X+K>nk*qIsUxHQr<>98_p{3xZ zmH9&D50=`t$;kn4J-homBPX1;+@IxYARHFBdG|6X>F?*eh7_1fag3qLidO08#aoln zRq8=4Fd@ez{vJLq$GeoB7%GLks#4INSR{E|#cyf{xGfI=pN*pcGq0+(J^DzM zcF#eidaX+srUqK$9fnFwK=u9KV!9Gt(a^i-M0X(`;)-;l2ii%&-bvBNX{`==8v}C- zg-TpHTA~Yc=bbe6oHQ?;PzYx&E@y2CXB`b^T~p_4_Re}f&iYZ#2AR%=h0aFR&euDg zjVGLS_8fmcco-&>!@xD=ioJT1>zk|6Jv&F(E&F?xKKHDAzPZz`yDFua2VeEU-!qxG zXSaOMe(&Dh%X=7vivyR7qlAm*1oXjH>I>nVw5>!eEo?UIyAN%Wd$o(l#FvZbF5ZnU zKFcn?dr)k!i`(pX1_{>y4c9U?10zDA&+T*ZYO8Vb!kTovslRu93^GQG2e@ zm##4gw^**tkXaV+RCbtB)t$$zi9T-O$_`1HZp4&Ax72F4v`)A53Ac=8x6D1atV=gM z!abYIJ#Dr$o;d|qk_@RP3-+lM|O!vo$?llh{r7wU6OU8`_N@78pSg;uuau*Br#loVo@GLBO z5tgC`OZgs4HHoGEf<^3OX^2=_8b3O2KYB?&22DRkGe4%ge$2jpSEBt`viw+!{Mc&z z*x&ncO!{$t@#ESjoizC&Y5aM({dpz*`855n>ib3;_zP%qL|Y#TWck0p?=M{A-+td; zsL5a4j9qN7yz2C1?orVu#=L6wcYwPCxT@0?3)0;A*fnY zpxGqtBVib2{*0Mq5Mt|5Fp|>zZqWA%7ai9i>$zO(q9B`^AlvsrcP4`x?g!cJ2i+wG zVQ7LKxPu)fgPk;koy~&p-3@l}4R(zVcFPKOFADak3HE#+>@^we{Uz9EKiHQTjHLvd>Bj-%PyT8Wge*4Oze3P46`2(3b|5_COo{I zMHyZ6>g2`G7@8zYp`_BaAfnkuNc3bPw)vLr-E&JU%$^pK+!UDNo1jx4ny>-U8VR+B zCuG(HdToY$dvWd`nrLZoUwtq%IDUJ=e84b|Q}F{}KAX}+&bn_%mj zh{3|}A@}bYfJ@E-pKK&NEdm$T{(R;eRhOJBqV(JytFdO5D&Sd|7frJXP|IM zqi=Xqba-=CcuP@uYfX6D`|$S3@QyE}yh=F9zt%+)(ajyvBN@@F8PR7J(SJ8$z&Bzr zI$|g*Vz?+`q$XnYeZ<&g#Q2wpiT#L4Vg!LEa*8|hgJk4K&B$r9$eFv5v%ZmY(UJ36 zkqbqUi#3s--bXG?MiM`NiCo@~{6dUep@~}Mj#`t9TGx#FY8LhFZq#?*sEz2T&8(=c zqNwefsGavwyOU8rzC`WqN9_}%4rrnexucIHqmP@YImzN5KKto~24R}6aBo8G?p{#@ zpBkcpLI+`%l}Y00xC~HoG!RBF=5~PW!BJe1@!CA#A;~KRZ@zXr2l}(fXkL`Cngj&bJ9C6Q6vBd_Dxq9!NQ}H_u#EZx`o@WyF87G@9 z5gTWcD_wC!$0bkVxzt);DxJ=qc9MC$kA|AP{OOs@_pv9omOs4izcr~S*3Xp~|Csm2 z@}*Ug$7h>&JM;Cfqdq|*4}|7QOutq9_@nrbG>Jjd=R(PUwUJa#8l00m+5BJ|T;V)-B=6opE( zgB81qwHf%&rQ#^Gs#XT6%{%YgQJdfwb(4@e%3^g6g-4UBC-7#0x8qMNpHX1E{Q8*` z$LbR3HPZb+j2=RM5T;peHz=KnTuC2?ngSh|F(94Cl|4X+N4)e$qgEfYV!od%L$1tr z5`|M23de2YRq}@Zi*_BB!NLF?&+YB(`G($hw@s4Kim<@P66>*q3+1-478~aO65^#g zGO_ecY*hTN3#XuBx^yDFOFmfw!fF}?VdRe?OL#};NP60!?`(kRrs?Zyn>4^$f#dVb zSSdRCDhEBdVihu;)dS!xm@*P)yhjB z@s=_p+LEeSACc@bh~gaw;i(E!lcq9}E~%ypzM&TRCYPs14PP-!wd>P&;-s~U6*nR z-QVT?{ovbD$CpVGJ$&o%ZxSK$W(wa*EL@-psa-F|SR8j&@^%HsXz8|^Ago+T8%yQB z@qvkjm(l1S+8S@r8;)sez2CnCK|Gb4gzQ+N-1(#|a5Z!-Q_YAeo&Jit0TZ2p18;#l z`CmLT*`mB$Pt{2b?3`s`+42C-pWyU?=}b%)t{q_fEi;d0Y6y=bCfvU%)RTNP`GBI^ z{aZm`BaYvI%Tdlz+crP;tELRq*Io-Zk%q<8Ac<*ymbKl-n`QXmtAg4grc88NK$9Fn z16$qgt;*uyYd5RP^E|d+R8_p(e)+nQ6!@+kAd37$TeErgIG)F2r@FoL_eA{DQ<2@; zhNEk{bwdKLcI(F!c3$f*=!$wbym5)gS5LaU`tgz@*kY@3B~f&*`D>o%Udv|1tG(7; z?cd@SN$*7W!#yr@OO2ZAzmB53FJ!k-ohWm9!PCp!LCvTt16@^eO6NDIeWg}>266s_ zQPaD~6hG|@F$*2*SNyza-os0s1I@~@S4ZIw58ma~{n`uqjNRAt2G<=; ze)+{Zr{8Yz6Z7EWS30_~0Qp8wD3?nOosR^1|HQ@n2f17DKLtaLwYmGqv#lO^D|pI8 zPybx-YWi{d2|Fl$wiGz$eP%v?$!FRL*&~iC+C&jMX0Ty@>>qdMW|b zh?PSND6zwTnfg~6&QOW~oQFWvZt_dQOHx4O!Ri4qU$Bq2zA~|Py^zlEUHiAcy(#+crHm<6^j9Sg zQ>`P&Dc=tDS9-lp!xUV>4jAak@LsiccyLSe!_a_2>tO~qy^LeSU{Gc8Ff(+ljO%P@ zP~-QMUkkh(31c17WIMtq_YG(_$I^QV(P!f=QWH(rI5xbbbMhlbuF4J%=Xm+^f6Rv} zvZUZ8l+7^D3PuHCYX!fBb|68(RYQr#Mzd;1NKHn#_zv+f7TH+;@%c-B1{^s#Pa~JJ(eo$35?xVe@?2`R z0K0P?Lv^sDDH)TA(SR)dk`JD!SYaG+YpQ@t_=_Roo=HhD++>rfq>Pa0c$I_pFHCpX znbTb5q*P?<=7H46)Yfi&8HpaHdCxID`awfEREytW!)@fFE&=)Zj<7a}ku^4AiqEE0 z$lz4KT=Bzn>7y2Ews4h>h@Yl1Qd`EZOWmC9N}E>bjF%Ph^OoIPwm8>^2X+Iai6TxPs^uyO`X&d-m#)fYm2A+1M(7nxjUb} z$yhZ_L`qyYR$U|%p0>`9R|hwZe%=c^Yg?hN2_3w?eDvh3ebb~SY;JVqv-or9c zo2WRpiU>dNMI!2w^^Mo)pPu)@M#NHWA1yMypJ){c_S>owb()=O9(d^~o_V8bk#pmG zKtqEQAFt-b%l>OI115F4Er}d+_a(e%J`<9 z>hCFhW<$B4$rh+7^!cMa_YDPG1S-H{Qa955xjr?!i_|*z@-Hv5=Sx%Bj)8aQW`tiv z2XEuby=RYJ{?yd%xM{uqdoIOLzBb8Z*OC3t{E#V$9zMS7qWWinkl9G882<3E{j)ef z(b(8D{=+By&!-hcQ}dw7p8wN7OPi)mt#jjh!EJv&A7nPQZ9HohPA z=g$`aO>@^j^l{e{YEM9Y|~>2W4i%lDy0@hs~O---Kd8+EI%w0T8um&W&Pa%GDV z9!W5eXj@w;Td0Sxs6>?3RilV-vY8k5{I$+DUo7VQOQk4-cC9;h)0I^h>B>&uz2%(z z-(p_L8HN6H@c6GfVVz?i=ASwt%UJ0kjzh=g!oa`SAe;YsA=TrYuSS{T|2x-ccZlBq zW$>8!FW0Eb=wF8G!LJwU^+sQ+dn$;3dgqqb6Zy$f;&Y47Mm6ML+LHh0I-%>xs>XkF zjdtX+@66Tyr?y0^x21Qyt!aO{B$|@@KL(Fn(Yyb~y!u|VLfENp{in8M%28B?c>MTB z+plA$Y$$V5=YMyNO1Ew8D?BB3ADu(y?Nq_`gHL0D0{>`B6gF2#+7kGJI!Rl?<63{G zYSq#k56&=wkjo8f4h}JnXtMr3q~U?3l=Z2KQGETPc|wZzi-Qh%)56H#%JtG5bkhUgM=t1{9M7K#qO*C3xc|Yz(GYD=9&em6E$nV?>GCT} zDO;o*_fP~OXJ`_j5jcXv#JN8Z(?AC%po&aSzUnKO5=A_3npmjpylMXak~DanZi_lw zUy=q7+J{v|D8OFp-N$_jJG*ZQdZIrXrY$|ab)h2n9h8?k7k}g~DxCai{@N*G(X#o3 z-J9gn}CkOEDp zeXMw^tx3t)prv}HLsnb=?6sViq2!N~k46djoKZ9^G!wNeRz9R@tEnhrCIh$@G*ea5 z1=PJwRZgz$E^7(Y&QOpCF3jevqCdgjc;lCiW{ADH6sVwsEQDXBF4*Gn2k*rN`jQp= z=VX3~Ta~HN5kPdKhV!;rlGWb*TTamuznx98{&Vp7lrZ{xCo>^Qa#vK*@XwFtjp{#p z?Pq&`_Pbz`7YBV;d@l}%1Zysi#uSNc3PhA-$MLl5z3`v&=6NF)L(cmxV{|k19cK?! z%kaPMWZbn~6{P@c{Hm{$#>;M6eG~AJ;r^9H4?X1mZIQJ`{q54P(oLO*N3+U29ZFwD z^d5|r6~??pOuaI@M~aQJX0wLLlg>_7qq^S?_$vtE>6yp{A0$sQ7ZXw$y7v>L(o3j9 zc%jL!yLlB0N)WJ|G|t}#NhsZ+A!3|CUqX7iI_;JNU9?gku2v`VI_`@q{ygi*cpW(+ zl`MT(*Dqu_=}SE1rTr`2caXepShF^n-Zw?9aH*5ws8*=i1-}X(s0(v0Uq>yMaA{EB zP(&d-5^{fVyFX?WZx?D**lRi)CP;e`K_NmqcCr;s*77&=a-!3rF-spH2q z^}r<1lBr{}n)l@mJMo4xB=w7bX-l4*lnecrwnQr9g|X}6<8Y4n+ZtjpNyL_p%!e|j zv~6M5w^J0VVZJ#;v>rNSlP2suzDjT0KIQaX9|JvI7_nAleA%I@x*3sd{fsq1tn0m} z1k-J~9ROhd#N^FO<2Rl^Q}c6d`f5K=L8)V6CHwq_UyVJiC~$|#d1c2qMaVxHesWv2 zekzl_nILKb5pxlmM)*0G)#P;0n92UHF|VVGv!te3ZN?if(%`X3Ts$QW9&da?Mn5f+ zv?X2C)!3x#OKWUr%|j;D{*OkNzN?(I5HhL*E3bdvwmJL%IC!vHp8T%{56uT<(yQhF z8azVI<@3L}>Z%(%8fjnat*ook-0EIqZaeRn%B)LwHC|`?bUq+&3C|1}Tj%y(JR18dAh~d5F!?AaclWD^?XQu}gM^%S1>ZzThyojCz5Msa-({Zu z8Y5*39%V^iEoW{Z78)Ip(IwO3kYo2JjA~`+0*i4Pe-EK_Hk%>0?)5*pb0GAP?1!DJ0%~N$FF#ETDOurVH;Yw z#kXAkHFzk!O+nM%ETSs9FVM%Loek4GFQK-Qisv?UfJ)`Z(wfBd^tX*u%2qibjEFK$z&Wd_hC)Gls7rfQV0$XF~z3A&f*I|?UyzDi-_ z8_yO;NUWT^P5srU@54hZB)!Oy%4w6HW#9)aW}}334A-_eHxV2sYQr+8`m;e(DaBAO zj@BFAfAxa&6^@9Y4{&Q?)1CtJW8-L3kbNAwhu+#>OXy1Tb-BLNQkbfB(xn(g2$|A_ z%AbFxk+BNn)%Amz#yG4;x#_ZBEeg|)S^lXg)hlf3;3rS$q$_CdxoTPyR$=ZyFJ~3W z3$=4gU?-jrSt<1Hck{LMeuSanabnXk_ce{<7*gQvtTHqSZSk=OMsDEGUtXBOvFq)0 zIcBKHA6t00dJD!JyzC7^npv z26ls@rJ&qbC?c5yt6>oNO0Wg$|6uGa+uBgKb&b1(7I!J`?k>TdqQ%{cySo?n0>Rzg z-HW%yi#x@wP;$~a=h}O1Ip;b*A<2ilV~ppyZzRn*q&)=pFei9@r!dQUH^nj+sYuWJ zQUqyh1P4`j)$cBQJZ}1zL9U4(`8?r`3lO5WoTH)K<-FkI*<4itK}zI-Hgw^(iGEJ_ zkx+*t#Y8%6Fd27g+zB*Y3bD(_)7_OX{pXACe*z?ofBa5S@T}eF zR6j;uLj5DE`{%`HQtgFz^5NxE!|rGz0p5YH*S2sV@^Mc}PI}(qY=I<1RF_R*vsk1S z`(8=FZU3(q-*1nbgWy-8A4I3MZGwFdAr}b@ethS<<3p|be_nhZ-~xqD%Kn{qC(Ctq zv#;HPH)mUIv0zM<&90~Gqp_+($5-!P52s(-Jjuv<{ZDUhx*o=U*tZ9QsUe~|I9%&L ztER{If}`PgIVRBeIG~WfR!#Vp%UYqv?nNMpqp+wMiMJ@&JCSsMf&F2|@GO`|5zOMa zzFF_a^RW!;CYXE~-~9vjH+K=ls7U)H^S7uD89!P1Z&6*=ijKD*PK;PDIU>4Vt`7Y{ zX7f3IX{PG^NNkWpw;4i~(`dA5lG#jqxUrqjR}}rSm&GtW?@9Wj0=sC9J#_1YucO*y zNbh2_9o!_5B9XCRzTxi+$sd*GzR{U^7vQG1ovj)LSvC1{qohTa|Fvr301w+jR!z25 z1=R^&e_njqd)1Py8VPm7xOQg}Ljjpz8m4*H%(Ee2|MO<<1zn1gCCe&@xMjyv2-yF> zt(yL@1ujP!FS>8P*sWeUlH%9V$C>V-ps7c=!nf;+b5#)x(H z#pMgvY`49pC@=MmsAO07^&+GQ!5y5b=r!rtdvAd*K)T7h3rpccPHl1ST`ET52Jfu_ z5^!uQL5{ziJwUx9utJ7CX6rokVC`~}`0P5#hXy;q79rN$WcV=pp`!NBi!acuZ4j^T z7;ThRg&LiU?&9TU4mfK*x}XiFvRcxw`+dLec_AD-j2E%;2*!T>{iF^b`TC128*+2V z%`08D@}3t3+dfFr_enhSrt7_yOc?zZ8p?*co((`8HiEf(5PkGN65rO3eI}L_k5Ig1 zZp4q`WEda7@Bv5;br@^7hz}ZsS&)$_f>5-_2XQ+u|GfBm)~yiR3sjj|6G4YkvLNK6 zOK*E?6gn`RDb$MCR%E}zi2i*&E~&YlTAdC4o9#i#3Z{NBdL19`=B1h{n{}3zVSM( z)*Oim;krcmjkRteHWG_j)6|Dv6v8HfVrt!R^sqAp=Ce#0c6jwEHIBvfNPR`8$Hv@1 zG)5wj;&}ZeRzjRR74Zs^DsMgejEnJ5E-bPt-w-mVb7~RMh30rhLMs!dcX{6ZlJ4{? zJ9swJ;%z>-pL!ahQQ`gmV#Xa>xdd{hs_*K}XONJ!&|UPGFoxy=n2tkfI|Mba#>zs_ zv?Z`-ZIybyyRqa7Ablu$sH{Zr_XF6VRI=4$&s8~_PqU! zZSgHyxeDSNmDqc(j3>xjvm|D!ghQ!^LZOPB7BK|^?Q zsVTjsnrlQ?8H-~fCHZSDOHU;*`ef0e&O#{;P6Z`!^*=D+R{5 zrDUG2Y=>HRqbby*fP4Je<#UfIBE37GZ+NvhHBMu8Yj+{7z29nTY{BA2U*ETNu0S!{ z>!PAhV?4Ic_Bhxztmz(dw0BR`uz0=|+Wu1ey(N2}$qO{Ee_yISRPN^B(LlRG;|0Ye)*9I?Z;0E$@W$#HXjqkA4IHp1A~cmVJpu&Yu7uyuz8N0m#6x_ z@6+2AXU;=)&wgCXcZ_^da!hU!GDMm3YLhIzjyTlUyEfz-C+@wpn^4??CF_8&1-{f| z<>aibUhA|Je5v+w);AW;Xr0l)(HFpUt9ufcKqAEa? zd=KO~qQH=p7FbyE0+#)_vI)eOC&{}9^8TDh?}^$a%^Yn8N!1+d#Y&QA%-q(1DH0T? zd^md$S}OJzPIWMI7H`?^t7B`9Ap|Ru+}gWRbQ}k>49WR{bT{GQqy+2GPSWEek5&+c zt)zwEQhLHY&r3tRXK@knoz6oscgm@^Q5WgxW`yBZ{ITpu*zZ@Z-1Wz5Cl=p}w)$td zxLQ9uSLu8q3aeD}9=x65A4VfWz4MR%}dMeWJ)k7S#KHqtG4CfNtiosXiEo<`k3 z-e-=Ab>D^0tseBZHox5pm;2wumlf@H);1S%*Jh308XQgBbJwPb9DkwHTb{bVtGDsL zv3P6n9kZ=v7{uZnxk$Kegy*%~)Nm80u<_aK2Y;(S^KHiL+Gn{8?gih3Ymgbqz9QLu z%T4d8w(CarWAAfSn$kxlJi^`$YZ)7FP)=}jx@h93?mb$Sr%C&)5i1K!!E8Q(u_ zfu19v%C7~ewC3JmHwq$CgTvN?p8fxwG7l-x^< z7ijbs+F-uSP=WT)(6 zMtFsS7{Op1B#=rE5H-h9UjZm6UMTU#bYTD+oAxjPHkjP~kP9|sk^;S#F;v4NOr-)C z1_&L=7&SlHKb|}yj2v2o4cQV3J*6Mg`^9(_Ly7}Gh9~kOKslkk_9Lf?Vb;tcWgZ|B zTSBimp@1$iNam2twlGtmd@VEW1A=UXmSeULLtab*^$UW}3*g4cF|@Z3Ukebl9?>ea zF;d6LTA^TTRAF8y(41tE%ET~polpkJp?i2DEuCPi@KI`wQ6V*FGe}3jAHpbz-@;F5 zpmmYo!YrJFTf>8cAP;g{@!)6yFCdtm0+=`*SYB0FODI@h9hloAzt?(ri2uy80EPq# zo)_{t3t$8aU|gYKA$75ra#(p|=y)f15(ukp8G1|yhU5qqGMfdk!BEU0KzwdVrAe;^ zFucYH+)(fkFPuI(^xPpP+m_x#ISduJ0OrUu>D4$K-3fwWfCtS%YwN(UIl<~X!LrRE zkj$Y;LCkS0NF-jcn7YZ3{#p@Tf?kEM1B`cBVzBTNMm!s$KQ31nU01J7Y)uO%o*aBj#@$_M#Lk5kZclvYV3t-p)C=6`K z0>;q$swv%;P$ZX_3}Q&Usxb0%Z~|gT0je1jR4yeFNUEyg@=z)f>X_;KKAYa~`UNoH zjF25CSQ0h_2_$sPC(JN%G>{n5pMv@v60Z{qn^QP=3s!&}BhngSry}H$4gg|<30y#+ z2IzAXz_pjdL0Y>4m()9e#5NDufkRl!xe(X}2nq<@;WE(G7&U+#jT<2NxuO`vfnex_ zQnrQY0HHsC%j3b9xk_8G5N)PmeL3?Anu8OX>l_ld6aTIYd~3ZvdSYZ$BY}5N)=oi% z{FZOorG4t27w#5_jjh5WI}g_hMF|Rij2s%s83r~+fD~C%SCDe&;Bq^qN8ie879iMp z{{a--lB30a&w>~@KQ!rH7sGPb+g)tIB0}Rx^%o^jp}`@cD*<4T=cxBRa>K;n1GZ52 zM}2*FyjE^7bM@H3K~<-_%42NE^8LtQ6!bv}he&f97B`gjRrCl-`YCIh4RVxZy1BdsGT5!Mq_3ssfJYCx-&0_okVdCsfK=<#tkTk$R&)9W?;8*PMjfVQbnl0rwjIG2uP5#!cqD$$z&p=Rm z)7b;C7)LFjxIvK-E$mjJ&D!S2Bv6*GJ)f+$NyexM3_{JJnVsDE*O0K7UEZET`$BzQa^sEpH0AQr{Z2 zr06%Sdx700THF9vOmI2bB#YYNj@=xp-_EkvUb_!e5bPN20yg5vs|iYHDYSKhyMQ{3 zpn&GK_<4-cXUQg_wjIH?NX^y&a~n`l!e&t6!Q(a;b_zp0R^9r^mgy2Pv*Y1GN_{*sv_sTld^}TqRke z-=*Q!6^R{6fhNhg-)V~4Ej0qHfzqHAYWP`2(0w_`x`d8X(&863Fz^fZC_-mZ^uU50qQ#|pL1&8{U=a8RNf*w=-Ra0+Z9vejlpHD5!y zJLzGQ?%Pr5H;9wsC2rlB@*+P2GMm|$8319X+H{4a1ARMUs`{A~+o!?L7?{=V5{v_y z#QigCG7n7N2cNEC=`-Lk>aeO%d&jy&q@A^DZZ{?G09$jy1=oawd2f{FnCS38 z0fK^M{A=*mz+AARR$Bw<8}jKBNgWan1M}5}&18)^eE>d0D&|FVnN%9M03N6b%VD_e(*~lL_vop=uLuuha?!57RwXqFe zaC}DHd&{Li%%8$Mo;>}5nV;EZGep<UU$+24lPnrmqC1aNNqG%Otbu+PMGfs!P}JwfTJT=dhX}rRX{T&Bm!Z`}KXv z4MYi%eWjr1RVpG^cif17fVO}s8T4h{1 zF-3&}2!1JCGg|*j);x7D#4-p;sfrbRpw|KS z3!v0xj<9a^mjmMB@4~{v_frRCsr%YQvx~?5M2%l;_mEk0AumzA*h8 z*chY{T08yw0}zEs-pmk)!aTmPCIPfRWM7*7?Yro!Ii4QB7*)OKKYXZ7ybzc=@f_Qk zq%3~DhCcH7NXyXXdz_Rps>+q`)ZsL+i{%@m;#kYioy@6;oQC81xaNH238}LMgt+EX zmPIwDLtDc`xwxj^jOQ9*N^EO~<}Zg|NagkNB)C}SYtWh|^Ct1)`$Y5?=G$STiozusTx&$*ya7p{Gg$F>%l>#K;p|FiLvmnjrS*>+joZa@;yeAR(RTeKp0y6H zz9WCG8N0YslKdI%sWUYH8>P*mmyNrN-S#nyo@C!%&pHV#@OH(|X6W@NvarL8s#{Og zNx#0^6O6ml_PYy($4%79_xY3eQ`e+!Kd5IP^#yPI(4PFwPiK`|rcM`0KlXfDADmU4 zW4V0-5RbUB{@TJA@c#5mVE9(#d^7N4=Q)_@rU$It0+wVf%}3>l4WYwZPOKPh$eWa2W4&=C;Jc{($|L=e8xIu&9+GVE>(w zC?yEKJtxy|`5VBH31I=}nRy_Lm7mB=v>%TR=+ zBei0=G@6nJd&@7Lq#4R3dS6ep!fPfSggr1JV1JX5N~XhD(w;!8rj=h0wdeZHA2()j zWWS$_b%B3+fAQsIHSF*?MW`is{At`7bo`S$j<0^F%?7rJ`K7IHci8%Pv}e8j%An4A zO?p(3jdgd?k1XT0TKmR!wpxq!C-`Nx#?nN8s%00Rx%T^f+ucln{!@d)L^87q3ke?o zN#MZZn?5CfAG4XTnnimw{|5K{Pg)9?`S?OEZKIr=W1H)p-|shmOr;x%x*J>1tqKc2 z*AmygPe6tzR1V`G!8KC$j(7`$-W;Bx5oS`~59^O*F<>QuRf+>A&2K4z7)}6?(zj=K z61V2Em&V0H_LIRjF*jky#^z?47lYBj9!*CA`px6%>)9lwSSeq@4^n{m!|_N(r{`r! zso!1V)2TSC55XqEUG>w^7QY!l>Zw*8U{-2woQA7gpOeCj9$uIxM(s{gv^Gv1ks>5m zQXPFq)$Kft5K7!QPGaRYFAIi3yt|o}{DiHpNDiA@KTbu!tU7Mx!WfyiF?^*lF7yeD zTAiLBlso|>QgU0M?ozzcMEcC-KA|(R2R{M*quN~@kvY}<3)dZ7>lXz6=K4|mtKqpB zf}{^>QfLqM?{&oeiNE6FM!ThG%7&)ijgSoGzM1D_H{cLQ<_v3D*ZtUXJ7pZpt)XN# zvDYGD%4+deSA-S2^@p`t?t7qpI2JWf-+bp2DR}sprq8Uvo2KuDCLwbthW#5v6U!|^ zlVe4LOOPD}q#@W#)HvX?NN1Muwn#Qfc-o1x*?hFjVt@5AjbR>rvPyABATY}h?B%zP z@ucyw{uI5Cd7KmN(rE=QuQ=$~sceXlv5n84(A%l(>CHZ=xtTgB`n_pWMv|B-L%0J< zy3ewxAH&r*O-sY|-s`x*5VY)6*!0><{@qG+*)3SBYdKhz(0-X{MMHQsPByE1-4AXh zaO{05UEd#~$oF+hkQU{4>t<9Dc1}Uo&fRUA^0uvO`o;nzjwJbM`QX@i{MmEU|AFLj zE0EUk(LPx_!22NQqQ`qb(3A9OKmPCo@kvpn;q!S{{-*Ec5MJQ(VHFwaV^j16&BNVy zt9<{vSyn^;)5A!zfTudvAD$cYV3LPVX9pylYD8;pydrQRnEuG-o3F`-Vi)3NC{rU}kH%10xxT0?NTllK4P1 zQgCk@{bSqE+HZiT_%I0IuQN=#pvo&{u!9!5JWNPAA0-(_300;eO=5@@1#Mu8lch7n z%5xQMdP|818XsnhQRC&&+$GG&Y|Xm03bMB=BKqtl!<~JV;J#-@_WN;6pb;z4m#gT_ z)bgn0345Hq<{s%e-(PHj5aM@us97=_)#u@t716|B-}kqKtEYl)XX$|Sf)EtDXw^Gv zM(JpItx@%~E_P}<=_fg@oyPR8y?rSEpYk2FVhFi+g`X%K5sHch%LFlWGQ^4xyc=0DrNuPF=NrFo-vra%X%s| zYy8ULFxg$g5^tkooV@t?C-#wG?9+5euWQELOPT04U%&DzY|!)C>QbppLo6Y>+0^2Z zjB~nB6aB}cxhiXEag>FGQq2-Z3mb(Gznbl#G)p;4Y?K^)G;$BH%eL1QXoo5^AnSy3 zNorfQcpuGT8m$Tii%MbdU!PQ+OyA@doV=^{(W1GC?hi(D-+-zkB>HP0zw&4+QKVN^Ng~?yECQ^S&Y0!rqKvDif?4X8J}g ztx}88SF6&}qcZI)lciwJ-(dfqGfiPZy{U-%=3)y6yARKQf&H7PYqUn3KlKW{Z|iEY zQ!(Kq?!SKD{twuHPXM?6GWvv`^4XxOm9i4V7p|?Mwz2g7u5t#a%A-L~udX%Zt>xEB zIw{cCgI2AcQ;UzjvwC0c!w_w}g zRZFDw-IOCf!k#-~W92h>_lB$-C*_jOQ(xTFFbX_~o2%LwB0!9SB>ga?up?z|<7>fW zr8`xB9$`**W6Tzr)r*GZn)SuclB-Pji=A?l@lSCr#wUpx9Nf_wp1oMJOUe=C*faLM z=~(pqLa|=JC}+YIxnvIA$YB2sr{cR$Lek~yP^pYb-RCoVmu1AsdC=O6>9<8&ZgtCx3 zfLd^>NXnMoE`NdiM}_2?O27Oa`EM$Nz|cccgdySm`68Gk z2JXq`qq#E39rm+)OXb((+gFPo!lcdjwf}L4rQWFcF!dMXeFO9l$p1JUf_BfFaQf#C zyX6Q59DbOF6mP~71=F7ib*VZ7GdPK+-*+_qxx*3_+p9KNM(#*q?itjt8-D$hy!)M+ zrxAJNvbgytdG|xp)d=D5n9{J5d@>k~`6mJFKbsM)Q$rEaM-+`rmihgYw;f1nVwtiiuLV5Q7mI zZDmw+kgHe*K;V3>!U*2G`a}lrE-59bgEE}029kX@CDz)!FeAASxSq|DX_ec-SK%&< z5DP$iip%jbrL#~H*gLk0SH(8Zb92JD{gEF6dZwEyMBB_VOI5H{bzR6N$!b-_%^09d;`W&+&0P3h3jx6Zco-|B&DFpUD6BjLCys&rR=x0?~JJqM*Mc{}>xPW;jK^ zR+Gnn|2iXAVljFP=k85+&gYnsufdHZ1t&h#H}-smfaPBzHcEBzB1R^e(kiAPAJ2LU zNO9bnP|6Fb!_*XIeSO?}IPa2D%$Q~85$6w0Vn6YW^MAR0XqNl^cvuI1ZT?}CQYNy4 z1{E7d_M%x5l;#@&gE!uf@ay6o<_jV$H^)FQpK35oMS&RCcwaYKJ^7CHrUBd|sbW?! z5rw9r)G!DiTE19%=dnPVoC^!9caA0snjD2feK0sIG2$(B0V>$yi29&`CK4fd-qv(n zBIeA3m4Rs-u}N)^<~1}%lXx7%%u9OL=7f7+R>_tRmWs*n9nrq334i?~DYapex4{b{ zfPP_=^cNeuoZl`+&pR1Pfh2l!h=U7G7a)F383TQSknFgFDvDw*i$5_+$xN9bnJ0yx z%WlYtq%IfZHxU&2j*0>djc%COK+&2ABB#j8)U0*kZhb^#d7Y1=u}Mm-em71N%O{Jh zd>tcuZNvn>6D#;TS+2`(oQKdw5m~}K-OC`J6j^-|(_;uX>fJaUeDaXiYH|*O_bgA* zlf2VCN64^SsVy-wZXZ+VpKPN1-Ko>XW)K2?x0U31`^jw`~*vRRWX95l-TD zT~X>pEx{A}HXbIcNX8O=(o14E?{y1}j@MKr*{zxU?hz<}(l{UKM^Dryrz8iS7fN>+ z@o2>wTSQ=Z$3g$+?#=J%fr8txO72v~tLhitJZy z44Y^;gmA%1GdSed#M~OCTpJ*d90$yx%~y8Aw-cACTVNW zq3=DG&CPP>E*E}u(`fRwFWu2|M}y(qMYp$s6!Y`RGu_eZ0BQjtu6x**d{Yft)M1g2 zO-*Z6H*<8oGd{T9$=siuzpYlW^;K_ zwZ#*_}(mj5>l-^*(3Blha zbVCJf1dV*xuk?xT9q;<+uVQ8JBU!!fR+802*nayLR;J4rY%)dyg|2EgFAqwY58k_x z5<89Gw6?$0J#wL`?tKp7W@Y)n_>Hmmtv<_Orp4yXqzUTb%uLuyKif5-yxDcj5MBqf zQOf;}@g@n?xC(B5bbq(W=x?hwh1RQ-Bm>JK^c8TMOs~NwHD75SquPn9slCUaS4J-u zl3yxMT|6bNruYO|7{PMR0qEy^*10yuLEqS~m+Urqj9A*SNb(=xBo3z0SLl_MIi9%e zckn|KCP3-UH^d};GL@`TSFvsYN;zLViRooh)ircz9uwTYvi&B%aZNF{{xRGpL z+yJOfm&A`c>q2?XW0+5_)jIrQ&6{`2YdS6S6TSuf$iR1V1~gmB{lT zG}Jmihtxq*=@!F=45{%oeKtoFTLe|9+qoD#3K*BfAQQ5R@+TMI-ysx9^r5oekM0L> zAz^f`?dgjS0FbyklU&o=#s*>x=L)D(-O!$>#-2g^9n3&#=gV$!mB`Kj21E1UYJExF z?>_!0Tz8WWdIwL)UCY}y2Q5S-Lbjg1K3?`S7AbURs1n@2v0?2oDn5%ZXpuG5CES&1 z%l^!`@j6MoZg!qbPfa-7XqjDW^n6E5cSv(J!{h{CnfTtH;A0j%R6#fB-Shb!p)gb) zN?K~lMHK~OFtqX3HOO3~(GM|epFau8`epr{#q7Gh;C%vMko;B!xz~T_z29JwVL@HO zkLg^ajwQf~w}I62_NqhYv}xd85>7Sv#(>Od<5k3MY=&6a^5tdp!>jk4&ePdUKEJcm zkG_$jJiLMksp$T^f~Saf zyPxHulb$x@GJzRpz#Z2>(A$tu*nl%?01BNqnXL1RmdF`UWU#=ieAl$* zfcm=4%dXM$j5~yLnWNk?B)urKTrxmr;XxZn^WqO73$kq~>75d34vUZ~BjYXqpttz;-9BqiMXk=F~~ayAru zyA985*+FVKlK3VpO;XS9(cA+3C`8~H756sM2r;U^BxFikB>gTj%i03W748ugMO+kC zh{PMC7FBWMJ=S85gB##O$CoV2kA4&sqvH=+*4X6~HflGY92In0s^iVdcsK z^wJU@HQye3slr@wb(xBRpq%06!vPf97|ub3QfC&2OhD6Yg`)>y6eHlBl~v;D|#o&ZWNXugA{a|NFU#gZ_R zoJ}}rn02vmZLsi5Eq{aQ-o*0(=E$iF*%Tii0h=jqg>3H_`Kc8Pl}Y5@P#vQ-icu>} z(9Dj@X>%D9aT}AE`}$|%{{sP6#f z^(O2j@G|hE)!n_*yyO6m9R#MxnI8O^0V{w5>_op9f4ik963ED zD_xM*4Z%drl3qMFE8QVlJRq732Tu2OQ7nKy8&@hDwOKr41yDvW?&*?E&7G4emwlp{ z`8isw{#fzz6ChD53w}7Kqa(YKKD)F-oOmg_Xe9@}!KEQu{3uMhU{6&=16yTST~1T8 z&qB(J>pjygr6BlSUKCay>!8Fzw8Tkt-rkDTd6v@26D3ni-gy@O4uKL}F#gU&-hQ+M z#c?~ow>&?f)onDVA0-w9g+a~>TSR`AQ_!{=*i@UisgM#8K&N)Q}74ID_s z4J2farF=ywFP%r1O{i9!@4W}g94y2LE@Vs2V>8dcmMel|D7x_moqB`Lvht6Pi@*~? zcXD~CJ_S5J`M?uOhDmz1?EFW1rEWJV2A_OBy%Ju%Vvf~(v6Flu!eV;3Qi&4@ZSxP) z8d}O%aSuV(Ry*%qni*8!%BrqQo#Y|m)iPIxGUv)NFIzSD?9Z@jWmwc@p$z5z**3lc zWuB`5N^lHKRz#Vne0gwXdH5s)E>3wYO2x$;>3v37rfo%%E#OUBd6p0GlRUsTjnF;D zPOODdaP|dxKP7W#2&0lX<61U$V`&vy$9hc4^QG_&jK6$nehAcexndvN(!FHYPtrs+EX2Zz z*NYzkU<5UBVzHz_by{B=QYURD^eWN0t1h4@s8Ad6a~c{XBms7Gci9&Ezv`i^v7fXX zJHajuF#3(KYpU>T7%G}fqWblAJ55r84MCGOT3?$)s+w>G8?e&qnHU>TPaC06YdBC_ zz$Q(5dJRt}4ZaO6FjqLbZKZ}LMB^^4);X=VU9I+Ot&Y#FPDE`kf=m-?tr0H%WxK3q z3au7vZ2`}1K}78#g6(1Y?Ge81Q911~UF~se?f$1k8z(po9Brxk9qGOunK>QVT^+e= z9UT$?*QPdq_ReDc&Qjmb@|@1fuFmSU&f4eBdZMmI!LH^hyk_67_M9&NV61?v_KL-t zD}2vR!R}%G?or?FamKDz!Or1%yoBfOIij8g!JZ}koIR5SAT{!_6xBb!QxmGz-_MU`p)-Ff_F%}oy%lt7VYU@~hV`FKxBohC zQ&LZh&c1L$nr;B>9Z?4WyBZyM{Q46a7@(fWC*Ms~B$jsf4n?vRZ8(-miDF5a5)8Mp zog}NC8btuJe`OLa_jm5O11|;k+-g7Fz~gv7!#Dzxdp7^$RI?_uz%#IEJwC{B8l^w{ z<5Vj%)^*mI$r~XUJrq0O9zHAx!-&xUMZJ1!6h@OyT7wcqY>x_)m18oJNIGvmmBQIf z9xLTJGT4@bcBD?q%L8l|E2?8`Z7b_5!Fn21HN8G3pa0c#JN?_Kre11sraMlWgA2($ z|69}TyqAbbmLNKvS|B@R1naPF(<${S@q4 zl4y%i39y$<7Qc=v0kcI4|5#x>QkM4Zjd&hw`T{u1iij&z-X!`iZa19IO_KX8#;6MGQtGIu2Hg zxaFb{RstMga4a-K-IC`#(+f|sYXrj4i;puPJ#VUI7TjvO?E}VSH6Bz>2@ddo*o}%^ z-(v=w){yuXe*g08mZBlc-Nw;bjo%}R+r&Q2<`DH0Fd8A=ia6~fb#@g2nZ&n{BV(yk zp%p<(y%fNs0!!mKqb31NC>;AS3WCk>m{-Gcv$F*GfuOl0pIV5FTfD^?r7TZoHjhzi zsPseZ_;+;#cuw$R6M4`!^+ZUgD0MdT_!=)PE^g-z9qW=5mSOehkRHFT zA5i&S%_Nf#Hn%uqoDwn3E_8SuzumVuH@ljl!5KCY1_ka{IXouTZM9eDYc2@wA4-vT z{rpdh!}7l+jEl7Q;q0+4U_==ghYyOuwz7tg;SM!4=#bO0=y6EX?c&z86V0k#&0`?p z_in2NtJ;nEeAz`k#!$jX6vA2(G1zP7rkV`>Kq#DmWmF-~oUr00;}coBPE4j0!xFOk zI&I&qamEH7Rqgudj33vGia=n8VA_=MLvgE!z)R(PAV62c;lTShgsF&}GgQ z%%~N3U%I$!@&p=#$Yz9ed@8bfE08RH>RjiWc`S`7yJQV_iCk@n#y7$&YL^<7gcT^J3YPRtAkticy12Ca}J!;AAik1hQ3)co#DN7Sw3YX z)2D@3yw4`coWGTQbQ6p}Y&TO{8cVw}E)Z!(t^BY(NHRVX-D(!i>hLY7s&JFY&!haa z!KPx@&mjj(dFa`0>!T81Kf zn_Z_!=1$)`mGBxhO({ItWCvpE9hkk$;wkM9dtwL|l93>qezplO4R9T_cDpd>nIl0I z0lU)2b0aQn@<&F_#s*K{^2FvZnv}Ai)fkT4zeT^+C)?Uf^7zH1Yxww<2Y(fh#5vcco)%w7t9%+T~ zowpY+0EdoKv^ltx)@Pj7+6>m;-_-@i!%x91^eIC}HO0a>F1pJ*> zB-K|^!`%$lPN1F3(%KB=8TjG7>333b5GFZfA} zO(E|*;#4_pU^NpJhAfn2;&mUbcXYVCZbhM<{OBjNA83ME`MHq!c_R3DNWkv`2|GBJ zq?72(lDtMeZSTWK9z^=^=%}MP$5f>$k)0mLd2xBf79qKe3?45ybB&7Rj-yDnZ>jCA zX|lVPS9k$}SseVgi2+FIz_-pK-W=GpfaoYrl(2Ns_vv)7mKS`So0+M+O{pdaX)-sd zD!djb>1k3LX=bkG4JqcamKn6LEmW} z(OizO88}=#;)j{!MY=fDfS1$^cGpj~-j@7G+!y4T)BE}~?b$ku*!x>5tZBR-O8`RK zm{fP~NB9AL{F&$tOxm1o55}4(Chw$=0#TB1=XJ4^u&}410Wj{lFkr1*aSnsE3hKn* zJfsG{Fj~NO8>}-qz*|0zqG)Uz%S>=TB^Z#w?d*kaO_G0y`Rb;xJ0eBmftEs!mTQdK z=!DYChKy8MfX2WA$Swf&7l1Dd28}^z3@Dg-l!H#7RsaeSAqYf{+DeW>)LBSti<(T^3RM6iId#@l5_v)pe^Dp)eF+mF5N& zGKG}VGN6jtf&}CX0ofoiV|3_SZlRhuCrLlr$iyUgqoqi zcoJEiCm)a6^05L?OeJvDCQuEl$?aZ=9~?<;N?F;7-FOVh{{=Y1s={*i`|RrX*hFgy zGMeKA_IApr7po+i%MBA&kFiw``&3tIR=XCfOfytZ%UA!}1CCTy&)e3FpwxV2sCFB! zUS_D-n5^!0s$P+=T_mhowXGgUsXfiE9TuoP)vLYgl;7*DnX;Ap5mURZSAD5hyEIvM zfKuJ>Q@f*AcT!n*zFL#WRgKD6@7k=Qnp|~G{=p?Uc)v&*7E6DJ6YFP_)W@raFj*{; zSgh^0BJOI9NP}2civb6VjUP=!2-X_6Lp2E18qmPvc)Ub-_DxN2+af1LO|ZdDa7m*4 zJ52{gRo3t#2*m=5Yt72f&8kE#>Vhqr`YrE$TXb?-^txIMa#~8 z0f&dUwx^A@3K|sLAs-c*a3}}@IS5F_gOSAPVAP2HL)tJYn%EfIC{5Z>D4O2Pw_&H_ z=vs(~=!@PpNhJ_4XNCQB`kM2e^jb$}9{r#|>Qc<3OBhe7Qpc-T&38W-u({ zH!PLg!}0Q&%@uQse+cG^KsC2V(_rMi--u4`AE%nZ`iSAnh%xb~snDpo!KkI*sCDj$ z3h$8e3s-P(9>;X9&A&O-e7eVMnTCYsN27L!)z8Ml48|k;#-nn_V{E(sIMotf#uJGr zl7%Kx4JIIlvqZG<;IrY(^@+Tfi2~xuLZQiGhybv9!k=n9)PAyheX{mtvYvRVu6ivwNz0eX93ms-JjzP-uGCVER9uYG+fhCaC|ue#nJ_f!c#+fQCW>LxKOC z`~M;Q{TpcKKhFKTBc7y^F~oBJLHJWQ>B>0Qo6P;^+%JFjEuQ?(x&MAi?w|F;hsox@ z)(;Fgw2*WE|EqTGv^xno_d9Cq!+=&crrIvFdIDfkNvm(Mw}+zM7Il~Xb?*O5>E5{i zH{tK^bN~O>`r&_ocK#v!{R_17581uO{BXHDmH$WS{``1z`WNBv&-$T2 z+UKhiKo*w9D=`>_$2tiENq}x!lno7T2p>j^@88e;5W?SI=l-1-rq-jKShoM|+>b!N z2RZlK>?O(mUAsQsOHuuM{a`~W{NAzxvVI_Zm=-niKqlrghdG#Iw=Rt?&4MGjLCdD8 zfUFA&1MVeJ9SILQg%zZw@}f@?De=WV&@#uO$;y?- zq8phj)++HLCr6?wrt&8h-tmMCrRk2gCzbKZ;ECgkhLaZCtk#9elZx0%9|q$pTsX$8 zdO|n5lJW!UiduV&uIlneTq5SC;RTk`(n@j)8HyH~SJu`2|j#J*lQhS&iZk|ET7%p9LM zR;W|oOHp*uqAO9H8+F=YxNw_Hrn}MSE3xiOCe@x+FU3ajU+MPCqp;hML?th#rjx{P zk(Bx#7-aNPFbyZmPH~BeVG3c*8;lWmrmoOJCdcaF$pKd-mN)1mTYpvKB^*FRz zr6{Rv+x6w}rMN6q{pxAZ=X+U8=+pmYx=NX_)+>C&`MY=7=;O(-;4kz&(m_DvZ(G+- zzBqG1_v!^7ZyRZ0MW~2StCi?vOCWplMBdMOgm5Hj11oG1p;YUJAE6e-H%QC^TCp;b z&>t~=rzP?v+fp1KZKI+oJ4FD(C>+6VvYqeUb|aeRQL#qc2DX^g6v=MCyzP27yfVjZ zN{>zIO z3u?T#NYWTh?Ld)DH3c8&UAq&CaYTtr?C@svhA=gD*xq_xwk;9)bDoQ@=jJ`(+ z-NFl$on~sKi3f#|(+96)Yb?A8h%>RUuk}*;l?Fjm+ghfLOMUt3bc3H%{F&W-NapeP zHSZk2D(#!MqPP0-r_KQdp{7T$(nb&@r?MN)V`ir0t87!yFu#WskEF7B92c;!iJqQ{ zuf|Za$OENCCh;-4B5t9UIFUF-yvR*%b7=_IobWisc6oNaTB$_kjkUDKVw|CbQyQnR zk}$?M<@1&zoZD(8K8?p20Th>fdNc+H33v@!94+2j`^prS7|G%Ur=nW%3ZUF~xgRf_ z;YGt%j>=gIciT$UZ6=Bs4f52wzbvbYeQh0=2Bu7F&m7@u#xp1U0N<47u+^~87!_T9K5l110 zcD_9l{X>FsV{CNZ?3kLQL2QHObKGz$>~Jfqq7BM;58i#|1%Zzbgw$`eTT1xpaW$6J zH-NfFdn{_`I)q2z?T^J9dYt1FC2|Jc`sOqG(Knf^S^9&zTut zSnQ;0DEVaLOD?Sobrmd2ow69i7>`fvWD8xq+I~u(hnjGvnqA&iQX+hj(poP`yr)r2 z4J#0Jnj~uZKYZO~R2%HNHEO(gLV~-yySuwP6lrl>(FU>fQPxbyuKG<7#8o8Y6rpld6<^N!Z!E#@1#RI1IvM~Dm;!Om3CxU8MD!T_UPLXyXl0_bHb}HCm32*R04JoIR@2a~0mQ2{GAO$NSjF*f#!)i2~AV0;BJ|TQl%dnb;Ef^iN#McELYd z+3BfK#|3V-F4DXWJqpqsT(Uh|?WDcroKdH@j~72n5^e*sFleW1r&G zkpu&$fkQ0C=NK0v3UKkjQHFsFC`-gHOYmKgQf`B;j^?SA?L0}jzXC;A$>^bs`u@nh`}BJnMsWlS zXY}6uw7Is0``{IjOzHdZ>JtVyu$jR3{tsYO0hoRMvE>!_M7nY-1ICcSCuJG`$ydJF zn!x68|DP>E=K}r%E&dk@K&JViTZ2zD-so?1d{6&;!aN8-nElio9$-5kaAZp; zsDLa$QUVe>)^Y2j#Ow|X?dIhAK8&G$8>)F5+HHZMB?##QLOM0ytDr)fIU#xnp=OE@ zEy6I<1BkU)xKmNYelg>5%sWtvVJ3ig|Wpx4%wJrV-%(f>Z zbfg{Ef&)I&bV;HSm_m-_4)(dQ1 zBC3-FVdRSxJw=jenN(*m zxFR{-=P=E0CH>P~dLR)rSO^+=m-5jE`YwbrkAUQQ1{xJk$%&I;-~&xD%1HCcfM#T5 zwq<0mWaQpuWfn1IaB8LM9zvPI8Do`zAKKzLdubEVvhb&`*nG=u>oXyBtZOi$-lJoN} zXM-qrPbq>fE8J+&M;gMAd(@VDypnr*m%9=Pj9Y>33K_sObFP^3UY_+ISMr|k^5BU7 zUb`b1=c9bgN6pMfZ_meE&BwkMSh@rJXS(=bWnwXmz432fgHgf6kHfVEGU4bn_)d&3 zkDCwx!2G*+qNQ{^h$lFPQJY37kyIjcz_9+GGVy<>i=*$O4P_coCK+wqOfI|OoZcj6 zwIh&azb|a{Df@4k_$z z*Zy=ryw)Xv!UI25JB_+*Zgi$rl@bBq3Qw-+njM5L@1W9}B)*KR$2PFo_3{xRL;+ zM%xFbI`$3Nr2X@_$;)&FNGEb_wtA_!jnY`yala{544E33bmeOUQwYE3mmTDR@p8)> z$UW;;$ecxNYr6?cdD`b?`N-~<7dxaEDn`9~rIU}<)C(*F&cX(cR5+$|%ky}+gp(P$ zf_mp9NVva6RARbr4a?M~c^pZoJ<7<+liW)xs-OgEfpTFk^~H+)X-6k50Yq~%6C6_SZmFDfxNJt0vQ<+`7mesYVvykC#Lg7d{0v|Q+a(S*O-Y= zLrxEnoanIqM5ZQ+w}P1SV{_i;G}I}1p-C-F_&7}qL%K+jSrw<{mf3r@ zem_(IXL8kji#|{%$$@;5)P;Gm#oekZ@RU4;?WvL>a{xDj&VqghuQL>>c>&;HZoH0} zh~ymjS^NWf!M%X_wwhF?;dBR+9%gX@6gx@T<}Ae0f>jr(*7w9zD4Jy7J1IGwA8Ddu zJ6rO~C_h>c74s6sc*u0hii3BtZ%DzI^Zc?%#R($L_lJTNq}XD4cAo?mv6be4Kb(|D z_DHcu&oK!tde&kmu*lX%W)k+LGRCxBiM{kzCYt}K!10eIG;vO9O-*WU=iW&q`kn#_ zAsv$mY_QPa2bs>(iuzveH#Ge@N&-^}7vG-Uo#cPA6x6Q*?5Emf`ZT2vu&I;A3r+)3 zoiJoj?CQUb4p^SnCJ(xlunj)ZIK9Pyd?N;-Q;#5ElFl#iIB4?QZC2RWx1beQ7P+V#VVTJ1Qe;jI_@tHOiR5jk= zyIBy(QOlv;8SjizdiptA(*6`G;fY+sf*Z%W8*QY0l( z(MObXi-&i6OKc2AD|*z86HrnNV#g^m2rWn!<1RMJ!;!0BP#m4#j7%iD!&Sv5!Z&i+ zRl9JVqm;TSbJzQa@zh}7E&e2kWPrk)qEdVfjQ+7hHm>~-o9B)(mRQU&X@?(X01NHf+Qj8{xN>z~!Vb;w6HkDHdA8Eu^E{xGORq)zZ>R3`QI!-~#L(x>-Ob>xIQ<(1nMnBbu zm6z(VQJLEcDn4?)S!!;-`CMeIB`_fMt$p>T#(T2LoNp1!X%sIv5Ubh(zN(;?_;+oD zTD29y%Ox0hb8Q?ltJ$Wqk$o<*mHj9yo4>T&YkhuJ{ikX>1(nsg%-@YUy*hSUe;Lna z`bxGc!?wHC7shjmzHYK$rMzBLfj^vIfXYmbGb2%F;hJgyqQtk3BiHlecbi%Wkyz4N zf=+f}1N#Lcy4>X#V!qG-nT9E`^Fh)gOE<%)2}PDt$d7)!UlfAHuVqH|t3P}{Qx|X? z#dE@uGinSrczjYIX*WripRtx(ehS~>eM=y~Kai}`U?3DGC%4|$Lf1-j#zhRDiX`)= ze;q`T{=Jmj+>gsm7cL|`lIeTQ<2i-Jaz0UwBy!v#B_KTHTtXLxM}Caj3G>2GXlWQ& z;XgrDUmg?)v&2y39smeAru|aZOd^OzLO;8LCnl2)r9p{xjkH_3Gc9@ZO-L|m-tA1{ z_aZvoi^Sm!qs)a!sqRyno%)lq3}a!N)?ONMkl0@A1RM8aaDMNhQeYiLIoUM{5jv%S zIYx{eNDsag%SCg~uIPRz zhbXd)3Of-!Xj_o2h}9(c3(`6CZD-3xspWYGqWWE7ku`T9 z+XA2qN37W;QsczI_X0aJoQ^e$ajxBzjfRv&I>Eh}i|A0bzF7J!B-|+m!QQqSyi+m$ z7_+^NFegh4dYaH=lUY+b-G>%fLNC7bY@Eipgn~<{@3v)Xyx0~@8*uD6X*38 zfC{@h!1c$mZTQ0vFA@31b;YB=vuNEZncF_FIsLApda0@P?U2ax#ebkqY5N`<0_%7` zT>gzZtzRDFqFwE0C^?SxdM|W5-_-s^od7--%`yeA2D{YW!KRagA%C8)p9})mH8zux z^M}sRFYYq@YFGpECK>F-zjA9wN#8W+HMQAJ_4$u@Qydx`cEfJJ!qP9YzDoED!S0?4 zKV3GgKNZJ+ecac8-LJu(Z>M4Q+R*%!)wI%kfq*|70Y5hZa3gN=Wq8V`A32cbq%h~##7k|P8y zUO_po5L&@d2?l!B9-#IzkcSgd$s12&1k4G=(>oyeqf5Dni!V9?5l01Edxv^@hkM@! zdmjW_qrN1H@W7F9Khy|+!Z5+QFsuTm2ybO)#_(*|zA}g=43i7_%{fqE1nAEg!6Aj1 zVF(I~h}4EgW*>yZIHOAJXtAg;QF>ioC!6yjk-tBPsK3R-xrOk$MwUf@73?CK4v6yU`gIGuj)>VwVVzk9>TCpKZNhW9 zVh0DY@IhESEbZB(-ac(B-a&DidlJN{xU(hEki9JLZU8Cg0L~fU!3c1<&?eO4&Gjyj zCV`9O4n&@eL%{@E{SDyDw|TrZGDilp!t!GoB@?h*QQ0<=0a7TLaA283U}g{YCmIlU z3XUmqTy}p*swVhx9tovi@GL}RtM+xghb88Pc=VNrz-9tRBF|QlKdd&%-$o*{fj7|_ zh28zNh%0`lg(M~yiaI@L)h(T`O=pERcFhok)E^^3B_eTwBygxQG3zfl2f{G|h4#=n zfQ32mg%?L~X`ZP0g5;HE)tj6zvGj>rX@FA^)U?OIP zj8Mv9K|)|9UNm9BtZZ13W#IqO{oiUncERDwKmg-ItU-U4^>p@%Zzf(br}qPHW+PN2eXP*04~%xevoHpY%alTiE72MQjV&t* zKUQ|VDG^F!Esd(Ii4v}sruj^)A9+NPbp*J{*O9@~_0rKA+p3a;=yt7YEqO7!P?fkM zYWEXskFVRY-o>l%lZ>*=hSgqpudFtcmuTh^BOR9UBYhKNeT_DAXbieOhb6<}1{i(~cm*uyk*iFMsz&dq#ayec zpR2`us0CKlf<)?cgu(bKbuYbP0v0goS{>I#9qI#!+OdSrqz=mjPhL3D#jX&xDqkMvoHin8sF;CT1i8>649}O8kHg&RUZHfI2k3aiIKobKo!F@imZjhk95S96r}%p2*6Z6qKxsVc?2}Wr@{5)51H82wejz z)V5`hx4~u*VL+51l|qE=m&UI2Jy$E|1$CK9GzUCO0!AC40N<5GbJ2vH&UH^UJ=0u#;wO6Nema{$#NfNcXf zX!J^t3!ZNi(f87EKP0OU$X@`*bFhcVJ%fqO#l$C>Zd=bmUSu;FY$jKjj_sP1uau0r zna{?>wxWrMeh*As057KTbBTJ|d||OnA(O3p7zJq(K%C9vqnCP^i;|Rkt)pU;$W#l3sWR?1e!iuw8q2 z3VQg1=r0u$W4=qQEP^WaK`Ab>f}w2a_XE5AiLm^f2-7S+OYRAHWYb3=%C=aWaVhhUWOn3jmtv)$O67D>@yxpTnf0|G*RAGTH}$2q`vB7mKWPwNcX0!I>a}S@JUY=t3dG~DX}4v!>K?hc0;(Ph~J5aiQJvlJE`-b6saKaYk>~7 zIh<_4#w+CnEb&?e%Oaa{Bhcsk9Lyk*Pcu+zMB7i2;%#dnXJAY?Y!7jRDHj_@c#;ya z*5ma%A@QC!lPfExHT6l)8^{F>aW8Et$#bCE6Oi`-U^D{^y;~5ZnxNL27$*hCsB}|P ziTrV8MCyV2X$orb#pB?d;)BQTr2+ME%IY}r!uru3tT0Y*SerMdTl<7!cBTap_+VD^ zY&huXnduYqJes1mjTLNSIxYu z-eRm0$vMqBDaBZ>BO@2M;16#gqg*HM=G&MjbYf`%Jld$$aTkbY6Xi(dZG~9dMvVca z;QH$pn2Tzq2)%@sj>APa7F7qJ4(?S?NB0BJ*6atS){+FQZg{(TY3m8#V1_rLg{bnG ziwhn(UzC`N2#n%x)O~`dmcJ@I`%`8_8tV}Nr``T&1{!`MNL~PFk&&BOfW2nG@rXUH zMs&-U1?=#fqP-h8!&o=2j5gBrrEBe`YrxX+rbre}_-DLo?Fu%oNi3?iqz)AJ-Ypns zHf&?dFlY@x70S!r)$YSM>EAB;bKB+nHhdfwh@FLcw#VEIEH2XdtfxKlK)bWvxN|Av&87KCdKZrIY}U;zvG?3h3Ap=<#jP%*GD zUm0mNy5#PoajQNo@94nmIM(b3i{rP}6T83R9fJk(;chjM67oITpx@73m|R9Ldndox zL8R*!L@?#o!)I)X7UUdBMh4iPsTb~p9PY5|bBgs7K;j1qYcC5A@Qeko7)+3D%M-wH zO?B3JRda#m>dAT0^&6XwFz<|N9W*6!eS>JiK6`CCcg4+-w0zmMd?|=20akl`MU;mn zwoZNM1E7*7NT>(?=mB9hVx`CSEAU@YB%7{mn6M=M!M5ZUy9T;18U2pHVfoF%9@MXV zj3H^q&1!i|UPl!-fRR&j-63c3gA%jv35Y^vimH5Ml83XBKkxzO$u(=%Kpr>n_P+2P zdz=PN>(-^5=uESu@Mnvorg)woC|J!K`Si&=T5pbkd$+7yvh|X}SAE%lv_sXj>&aau zlnX&ES@Fx()n+&>L0mbZE02MjpX{(8nWo=S)Il=2Z@7!+ovY;?ReyV2LV1Qal)g>h zk8#9ngv&I%&X9L{9+ePxe*e_y!%_EwIz5Yl4K<;X!N_>e$;fJHJt46CC-5KjjjjMf zw&(Gsm%W96ld&hnwwWFNWOM=aY^d|wF}E8{byLPTYvo7`uC1NXD(k; z0lVhUh{C)j5}CNjr4Ith)Y@stTJ&tt&l}p1ty=VJ=9$++R4Y?I%p)tkB6U^p34YM0RG?BNP7xXM+akHboZ%W zG&z57KNl&*QtUX-GFcJ>Gm?dg%?m(hrp)B>BdYY1Q!N;rm=c$Wv~nwaSisUF z!(_0bUn7ISP5mwfA!9|*=&|aLsRck}zUTLIq`^q^pxcykT65S1T||H|R28DB%Xvvb z5uOv`ndUQHRI2VJ(<}Xl?$O!n3IZS_Tf$ zI|yS*L%iKNeUvnydOcu?(-qw3F_$i+>k=jB!8UWMoZ|aisQX>H=C*OrjF?7OUb4RM zup(X(Buds8Pp=miFr-_@t95Dm(XnP-MtD$j83FyUW}IK7r``!PNS$Clb>h^zoyJkm z&$tt5*LJn!+Z`!6=l#A1k${85bp-#>WuU2JfAw9iE4%9m%|46U7>kAyp`9dX(QQiP z&*N2>8j8P1&8GIW%bbqEDup>%`{|~5T?lC3Y1#5)-+Hyn-^*=RI>BqhzDpq`(iHG~ zD{{_Jy5mt9WQN*@1wkD`G?=6gzjTPA#DJKyDdNy6LhcTL1Pe1E-`7w`XP zn*rc?_bcH2Rlu9ZfPm+RZ(0E`WX(XtYXEPvf+Q0D4%G>&Dgqfasr>OI2&@~Cz!)JJ zqly$r;IRRV7aZxu`jilOG@F3>v>#uap$TEZ-GDc0{d(S|8CabhhxzaaJC<)I?BQy7 zFSEHH&KMYR$fAN8ZYbVa>5vrg>TXM)M-t zn%4T;fr0!1Umdp{Z60U^RqTtXOz?ZBpG1d*qV1&nal_GD%(>>1gB6dDnyvi3H3= z&vI?9cE#J4xPRR09A7nKHV| z;dLuv-5W9+21Yptop{?$knoNCGf@(uPHEwpjESKmus0*Nj{oclANoj zprGey^5b6LnH=vm7sGPbWeSlrpXa9r&1hHBLoBr1h4 zYr~T|jIDz=`^h@vHu?=&sZ_knV=E`R_>C7vq)>U0yuMuhCZoC64hB_ZnGwI6enxI- zItZJbj^MX+JTY1OJeZ*TkZI{TnKF-z&Z#5+BLcB5ckA88D-{+H8QQgUvsENI{9p^k zy;gWbZujHZW|-@2W6*imD_%#`DVP=O%o73e=kuLRciDlx?}-RGCA?hMA2Vt-&N=La z(=YaGWE)m@Cd8w{36vh2D?veo{hOUDOMpv{Lg*f#DU zj-p4jX%oZtj)&F~+J}njgzDJavFVk1^VJKZ4Sm6}#X9G794i}$tn36nwp&!jS{nQI z=kCWQWW}Wz8`1qcP80phtV1qwvG;8QuijY%BKq$lQ3#KDSaPH`*_mTZuk>2-y5C$n z*@~{|%>9w8FDyD_y&Q~qQlk64xyR&d^1S<=G=6s>h&H ztd{;(t5mgZvF7A=jZ;tWm%SEiL7}x3GM$e7&);ReG8W6R$Gdbye^H-3bi+2)xig+} ztbRH@^!ysCE8O*WiJ1O9HNM2d@)hAM;wo$TQ4d&t;`shqJ*x#gE$EsjmHa08LCxg1 zoDt!>%^au4Zc2l9V=bZ%S?PW|L1~oD{TRx;RVAcw>F*Gc->oAd8t?a{-hJ&*<&R$% z*ncH1FVGmVM;=Am>ZF1t-*AzAZ#!lca>8?eOG=Ec5E* zpzGGO%_sZbzmEHD@Y&N0bm-&v3a4m+WV7}}gxX4$nqxZ&qs$T!8wa@eO}|~X8f6Yh5(>V-zge{S%QZ)TWsF9!*59lZbR*X%s@LDxFy}QAgvu- z6=ZgTkPthvkXp!Z!8Ap#Tvij*Z}tG>W3=uFTr};T?6v$5%81Z%?8kygr6b8?P2s8j zq_1emaG+PjPVD?z`Q3p@@`9+by(Dmzi74*r$ko_|_MwhKkR!s zp&=tULVjEHa~ES%vq}anXDgjUG-n8jg!;&$r3*Lla!2c*L%5SEiMe;sXfm=-=4d5@ zC7BQ~63(NXB)hh>Fc6I^){;>~oj@(Vjsr)D{DXrkn8sXtI?C~Aji5HD#PTuW17w$HOmj{8% zj(plEMF6Y9hk;19YdWXL;ouPkFIojJRmJe{+5Q8Okvnm)(a~XGyP^xLqC2gEqi%%k zXxLbN1hFcxN_bRFRH=#@Emc$rT1dQ$!5O#3*rW+mf2lv?j%GJ9e{oQ%KOfCq7)|>w zOI+PsqdA(ZD_(Mpl?4n>Vnj>SMg8&-yTnhqf;GBQSNw}%cS+3Hu1aL(4t80}Sji4r z*@Uvc+t~Q6auaW41uuGn_gHJORHe_WVpptrPWfO9Icr|Zua7E-%Bjh|a@`A(`a4NM z%PQH7xwdwyEWg@^JXE{vRJ*TVh}xmAofBVEB6L|JdcRNf^G=vzPRz(o%oaz6GOA6B zVl9gDSdvC)AGaHrPMlh(O*E>`uBi6&4t)wg$|oP^cSOleNPV;{<5{_@MZn26g!(nysg zK4~0_)WT|X!Je}yy*G`y`#wFxDYxiN@%$ay&KWf`qJcoBnL0P!UYnchhh5;(Q%9t0o?&o~ z7fq#U}VCua}hM{VP5HrItXTxxR!-!bJ$Q(oBsLzJcU4}6yk;Xr|f~?U40u3JeSo1d^f&Vvq z@BdQ9FB*=glp)8I|69iI1s0kbX%~;DbN+vBpuJcCTA^ppbY>s_RmOj@_ihe4s`Oqg zfU%~kZ(rmJp1>qLqysK?FaHYu%ibdq|ApUD^P}U%0=PMdD{Srh&(&N0?_PiHJsK7E zW$*ti;}awY|Fr<@JJrQW$EsdVlauwHknv74Tmf^-zGRmD zkMIA>-t+%(b@ac=_^*D{_=)sg&&`ue|Ca@z@%5AC`tPe>3})~C%L3p}lzZ7gJAG^M zclCBDn4D^VBNTTGiAo`|$0CCwK<}Wy&F0a)pOizasPAP1Z6xO%^Gg|D-Qckwjf&%+ z4YdEU_fVLM-B)lU*I!nzD|V7p`TwJg|5BIvr;PvqvH(ge_A;IR+XCpBm3%4V?^Tqk z7oHs2+B84Dl<`CH9S#cqZSM(hV#fW;-g7uCf!b77m_0ci{V#j(Q#!d+RqluBs&6GQ z<|>uCDTfz(k9=3-@9OQpEr5Yl-bvm;`l{p7@45rjnL%R&+tQ%Rk=}atL_)1bE~%iI zhG^yB&uYq#G6Ss(T7~H?Mv+CQvY$s*4kZ`!UpCN`_@mFdVU)k#e?`8FX8jt0t-34@ zE|GSLK45*Z_ke3nRgz#GQm%p_r$&pe)+kRZb&9jdNyACT>zM4B;_81}04x$T?ql2% zS8kL1{i^Ph!e^rH(~{eMJkw$rC-t+!G?VpnGB8Y@DIr9*n*}bBC*B1^0sl)$CJfm$ zS2D5+pqT}XhF_{R$1Gu0$kR|$;9dCBZ;7`Wx-I5j6brAV0tR7hae^yw?A{vz0QT0E zz;v+SCXA5WTOj&Rj+#J%$g|f*tOB<8ZlXc%-CnlJr?$0xYjMHv-5KI-yH!=)ZQBV7 zKZTA8b+B(G=0}oS8qEFBth%g_Xlu@ocEKc3!RlvVEbI{i)z$C$lCjeM{5(=|T+gJ$Q>>nYd@5QW3f zJ;nxe27jd%nK#rG(~k6<0{u||@zt^f(xp}KiZ>-985GNi_61Cp%||6*#I!>i3qi+~ zN0Ymi!pp1;A)?*HU_*_yrc?+8(o!K=mP?XIYm)Mc%0I$Dgfdj8oSL29VK}Y_(dT!4 zp+8U;zy+JpNC+1cB&3D7{kHt{aS#H90V`B+L>3nMn@|#5OWd~+lDJW>Vdni?7-A#Q z#6J@vJR3JLqrDZ3yeGp2AHzX;5&g92IB^=L)MoXwvUE1Jq@V9c9< zd3_QL7n!N@LKPV?F5{HOKD*kmC9?Y zWzZiK!xJ8xK+vzEdy@Aaz>l3Es%hO31_}PLh+6K<>NoTc=U3PtZ-*p%bx{RjIAf=- zYLsoJKrz|=W?%1P%Kf`&*Qsxl4y))wzi3f;d~RT3mJ9AiXSXI_dOTwc*jTa=?U6bK zXUosXkcb~lRb)R8jJXlIQ=MJn5{8_sh1ZlIniWP<=okSl?d&M$nMah++-hF#3AA)K zkO+~sqTh`vqo65ONOHdF4La|8g)u9oNi@hFvJ=a*TR1bCLK$OWV_gV?+m`Zhr~qOO znDiw;)U@!_m@$#O3FJzp-bp6tJQi6cuddQ=F#;7)#;fsn>AnaTvjsQOq|-d_SGiQBL~R|7{(ESo|I z+Q`y4X~zxE>X;2@EZ)_|QDM*hj%w{AV`p<`svf)1H=HSd_cCZ=X0f@{?mj6mRG(Ej zOFv%S0$%b-)+^o$Hs~DOLOu$Em|pKWv^6``1c;!h{?3i6AH~zpKgOtbTMll@)B6&n zv1@LX(d-Il*Avng*)U;x*VSLiS+|k3sqG5wCj9;ROW&I1%MeZP*N+MT$xWt&u*$m8 zsG3-n2h2whMn`|WTyO~TD)7P3@EJI`uB=)KR)DtHK-fMxi>%F`wi>7}IY*tXS(&`$ zHykFr{PL(}O`ohh@imI|ebwRyd)XL_LQWoyP*_ zl_@n0v2S$ibCmDk*2N`vd*9_?wy&Peu6m|{uz7VYQkOkXv@(ABlwOX&iLI_t+sqK# zO$DykuDR=~!Okw*3)+BfL@7M*I_zD!E3*90OgDWVc6>ME92TXjRox7mt1ln?StLLY z`X{wFbt-%g7JSA=)7^`H6491cUBWZvODyGOYL)jNg>}W~|CF0!9$Fx08K&a9#JP*@ zc`%HJbfYvh!g|dtd<4w3^;^o-;q44;SEi89QX>*o57f>&4EM;Fnxg5JUyqM1Z-1tK zfAWeoW}aZ6?;}cs?QXn2W7?Ny81rx|ILF1j!eApm>ZVP~(?#_CyS+T)RzF9U>TsFt z7VW0rExsieA6_}`%wB}QY?z>>s3_Ete&w3WEAj|ZxdBs@85Dq9S&$t`q<`%u43ccmE<4P>|eZO9O>?XKxp*~&%@p(uyqUL8pVIh zfO*G@<(}cK;6Bqc!)wA1A1Vqz49-z}X$e5TWug5Y+*%JZN>uyXVs4BAqFN zpLJm|1j-%2g&+LYEuio6UAtb;f~}>8OkhR5C1$w+|E-CjqFduDEbek=9YtG06kl{N zh&jFE<)TsKK8wSiWFIJ$x73gZ%5-fJ8aixpOYl)Tf+^~45X(|faea_KU(o8e;M&3P zf+X7}gD@{UrhL4&0?>#QSiQGq1T(WjM8RcgJOZy@~3+R}-;#0_ig_M}71n58y^u8Xn;adFy3yfyTG)!b~2OsqA9<*srw7!J2 z`twxKfTq1YMuBG93j^5ag8u&SrIL?c-;@5<2Q!cf9k`I5oDU5W@=owU|J;+l#gkDF zCqGgE?G8+}L4&^PMeCk<`5eRM4qB*`v5)92P6x~r0=oL7ZS`Y(hD+DK16Z}CMH)e^ znJ~+Rfb~6TGx_NuhnWJQ&@XN2Zz3~2eW3nKQiinXQ+I#~CMbdwG^irY>JAE<$$)Fg zC^P~l!_L#kn)M5nGE03jHdk`=g|do`*rsRDhr^Rsf&vJFld>)(au%^&=@j{jWjDe3 z{J8mjaQR60n3%=V%x`2+ne&myBoQ<7ahUTrukvxD^7(f1v4jioKVrhI=7W?AK$-b; zvV|C{vOwbk(#k>_;sWGVSw!OklCeVE_ClJ~0^ZER%?3#n<{~uVBFxGn@yY_Aa3N)8 z5tni?Ho7!=d#aK{ks@QBTT}HtQRn9D)!Mmyl_c_@CsGj7>2WOT+Te61&V& zhxSsZ)zTH98Pip%Jjl!t-QGdD%u~4RJ$jk?|a&sI1(Zts`?}B6lQLrXv0oRM!>!g(Rz|JMR|Xh6VeY(rpq+2S-aX}0nGAA3*5 zSLL^KW9?S6he^u^-xlwz7W?t{bRv!TMXY-J0Js0c-iv!^P53Vh07cJp9Mmf5_}AY1 zmjzHL(q3HE7VOIr^ncoWCLPWH*n90A9i6@%h&cbp%s0#b+?!j}hWzE_M>Gp+!+|u) z+5gOZ|BIKW8MMYCAt!mcH&;raBFHsW;x186V=-e6CDNgn&SY@@Ibfu{FO@6ikKoMY z!Kj=gAHT{v@~?=?k44YNyjTf~!@Gw3jky2K%iGOY{yXBn+?!`LlbQvcet#-zX*v7x zUo+n?_vY|lA6ica<9^}p{@1;E4$Z%~yDx<-Cf!*r%_nQE?j4Tb z4EWb;k^`m(^)+vQZ9APX!&*9puJ)&jWb)X%gl~Q=HCV6Lbcy^q``I4?qu}Tky}R0* zFM`EAI<>qz!BBq|kofO=bBQ&l50-;#Rta~ue`mg5xVvFwM#4ZVoROD^t8cdnA#6^= zGP-&D4=>-E=SmG)vi!@-Z$-H!j%-OB_~C6EFm(T&`Q9rpvfw-Ydl904VD;~N^FBIt zEMz_eIjK%Mrri`>{ZV6TXTilGFn_J{u+aZ4+YDy#pQ`5uBX|N1-g z{StBaD*w)WzeHSd8?@uvzcb%;pNyl9>;E@**R*U?b<+I(!~e{D|2no0FK~pmL+VtZ z9U;Ar?4}>vO22i%HmW$R9)4$We1+XdpIIWjdgSOuA&5EezT*EIaTQoE25=4jgS)Fs zWPJo*j!>toUJf&U5k$1$6_o2A=WNNooZ$WDbTug$-tIOfO3?liabL0VP91kP+a+X| zFOJQqw)n{XGxI%Uqk3|LrdnWev-Es7zg;Qg=3hNw5$*gt&NA=s%=iA0MvC)rm%fO? z7nGLogP*WS{rxmxdtU2)f3D&;Le~rge%d}1{pIdz1h*1w%U^i;D=+U|sBO(ly7f90 zYQ6DezdtDchnM#v`FK=~*!=NV?f6Z5xY)wGjuV6@9N(dav(tw&fy|Y5xCkjY(XosY zJHH(hMbuOP9|MH}Vs#hgJyQW@F`kt23w|{`m*ud3Q5L50d}ooduE%ze{NvGOIgIXXd%_v%$P#dZtRG_PCh>xF{5Xus2sbdP2ChFD<)hgJ;^t>e?Svn7u zl%25G1fqPih2m_M zw2;Ux!EKy^@*$e%kVqHNEj$5QIoF>3D2HGG**YVT>1Sg6hw25%BS8i6OIH~WTm{NM zjDx|nN$~+r#gc?8gHp`g(XWxV!`jQ0BtN(%Ag&ZqBP%6nfr{fkNbeAzv}WraX(gn; z*>cxk8HO`U5>owMOug?ts%6fVhHSsX!gH767IQ{s4@Tw4mM&u}q>DzV8^KvsnOhpbF^E+ zFg(#^S^hkh>3dUQ+q==_y<4!&VQ!i@NxjNcJw!3crHT<__Q<|?V~fi2QPI*#m$D+1 zK@@FEN~&_SXlB_~8e%!EmUKz6%Nil}wN=e$6*r%guS`bAXC~+}nR0kUUdS;sH50mXW+ty_-#^h%|P8Q5xu%}ExOAD?Z27hs55Dw+86wRS`t%Lq#U%^d&yafUCJum zpRRz$BhRF>gLTVPI-_b;o0wwVWYz=g<#nZUlIVh8cg@36i%HW}B~PTr(WBX3u;_j}Y2ChJWhYCDiM#iljfcVuGi_c-B;`(0qH}Rxo1QTT$H?SOadkgaF8-h z7Q_5oY&*@{AhMzJ1qTZ_2kCxHhA??>V_zgoicF@|t}KZ$7m7#|yjlTahyoku6!m;R z0TsUmaRdBp6U4$ERu0ec&IO$sH3YRFu#ZW7HZ*{=4J9@Zo^EI+jO8{E2IQ-S0P+hE zUCVm_bpCaSBFDxJMi%xf7D+^_kMS(Lo2@ezO^JA?C7^M_9`qK)o7^$bLS$rrZoG6P>Y>fYABR{bnrzh-YM)OCHB@I0{c> zG-Gu?av)t;q90ogzt{b$eICPkM_A_C+?}N%uo^@pGxh~fXNh$$cN4?X;~POviI;39 zbF@81ZL}eKbfE3hwi55wR;ahJl&SNDJZ<4H4IO8v$*c1Z#acBVV7%Vp3z{L{)j?`+ z?fXA9Rfb^QZJ|UmZq`g+ug5BwQeFd>8c?Mm^1wbo>^UNiB2uh;wv|fuNIz4OK9h-{ z=_hR`Yj=nxMlpshNIbAfFcS{NTrvo}WrxHN0f)lz0KYh_Dg8UU4~-EDA60e`$ZP3h z`?|5u>ZSVupC~n{ ziMjr8-3SLVFesY%B!qL@O1hVR z&+ay8$7by4i4zSCO$IsCPMW611;PfELQ{U(e(u3Au)u(0#Fm;tm!d?}=ta}DKxv^v z3==>JtwpwgLsXVT6^27r)}A6=0v;JL`cp@kexy0c0s=0WleT@ldbvb zQ{bn#omY|PBm@FpC+C=D3eN8bjITN6nkg~KwlHjJsgi-{r)gM`J=!NOn7cD(*FfD* z`BsRQD6%E0ojB6sjF_KhuuY{eB(v7S&v1e+jvU}7+6YzXy+$Xrv6w}|-Ylh?s zph5otpbQwg->f7AC9;Pozyxds8;I5xD4H`Un)$Akuy05OoM=hj=*XzrH@_u$cZG1@ zx}fYE|DeR^1V+_w=$G@keWrOIZ0A`zB3yCpejsB3QFQy$Oi->B-RvFR3XN`WjqW@k zn*Qz7MHtg37?W~?Ss4*|4MyKRkDgeLnS>I3*m0T?j9oB{UGk27xi?>Fje#qS{TcCc zel9n68@nSI8?}JF9TAt=8#hK}EsN^&;n8G2 zpH%G(BkMy9FcWZ#7G3ub?ysGsVL0T_1lRF}RCl6GG9?Ov|A)4>42!yN+jbEK7<%X~ z=~AS-yHk*o5=o^S>8_z0hi;^#LAqn;5~V{xx?|SpbwBr0@4L43W$|4;;r2Vv^M4%s zZj*qU%%^mlM$tlyW|J95V44r7*$aXa7${;;U69QZe(CAu31%73VdGk27))V()Yogz z0Dln7P!t5+4^cR3)1?NcSELJFyJJRArN6#S-!-r(roj6dbxRIyq6> z-O#NZajGCFbx>>{5YL0?+mz+Rn0fwMK-ZK) zRx(AAfgnmk5V<5gSx@{Jy3jcI(HJxk#UMzu%t#!ih}JMI-X4TcpCE*cteHNz05LN6 zF-=mu8e~@JGhPq?PXZ`LgT&fZCI$ic8X#)WJhL)Ip*(r-v6Ns1LHRXIOuh812LVZp z6VWihBvi00=@qIK2wetj;F}j@1p+8Z1X04p^!kWaAjC)-B)FLVhPWc&7Dt8{U8sxP z{S9KyugWA&L_cpNtFAKIQh=BSBHda!5#*BTXFe-4EL>kURlqf!+ z$29Cx_dvz+f}(4cbj&LE z_>Ofx*ja~+jb)E6nVJnzjDGz-_CPn@?>j!AGG70Ev>Vf5cW1DW+k9XvYAXp#3 z_PMJ)`L4)ujjC>#w5}CKG%a@3n#i|q3}ik~qbcKw<&<+^sL8sQnWVjZ;p=Ex%tty3 zUo*F&t=EX%ID@b}!c$+dt#>MEEFcH4J<>B(g;{_Djji1ciNY+3g@$E4;|vTuYk`2J zs2Zu~h;HGC-0vkL13_Y#^^fI5eMp<$;QYKfYGrVV9n1L{20^l-p>5PaJYIvmn+K?l z5;#ZzHfpSTZBgD45zCl*Zmhk7K>>=~y3aWP7>5ry9jH4MMAe;Fi ziO2UWMqhi@H%0Sha>K1m-DOQ`O)A zscX+=*Z2pi0=}^kI;^QyTVYse_#nYWiIi&r@*wpdjF0Y&P-&2Z#4@ytz7ZPX`g+X~ z7oArE&0+wJyVTO5#w*(q$?IesCmG9{$D`44r9~7f;(($@V<|*~X%i;nZ@fCq;V;t_ z{*@{JQ%y7b3NTn$E7?=VV8uvd9IbMoPNoZ*ctmUg9a-^^aWMu}eFrE(Q4CL}`pJk@ zPq3Yier8O~C^aI>i-8xff8U2Tw+1~%#sV6p_7hQ>Slgf0iu4eoRXDCgD@1WB(81L;m8pk4Ghz+E+A zk|tEfn#-z?5j!S!T?h)Sxw3UpJ7^TM-atTFR|RNS+3QIxcTHem#4$DoFg{$*tJ0`` za$MzILzUFq{xP#x_X8krf~{u^%7!3Sfw5F2(0T%noN>M7<7T7p+c=>B64l>ode(@V zmNL2KT_z#a9M~V#JT@HB`AvU+nV%gAVLYC|`1rH~zpmH0Z}psn@ptVa(PHvKQMN&= zRz&NLnsyc^*c9nlWYJU7j_6AW$Vmw1d+b70W8!5Uzi5-8H&-_C9nC6~j2kc-*R#Q8 z$NaVjUy;c%@j7TD@eVNDs;Xu}$;|TaeEVEq4Fi8Bf@kn;@r9C^Vu`!ZudoJsk3wy}yB-?6x7X zoR5g)0A@hNo)a>~5S>>SUYL3INoJVp@->V{Bj-5mbT;7Uy9Dno<2vMTVGekJA)B8p z+0a8}DLcr#s|<~*pYhKK2kUBe5*t117Y2;H;ILQ{S1u^9{bV2C| zndUIO6uOq15Td@omeClvxNoz#*nVkfSa~6cBl2YLJU_rvFn<;^^-xcAte6<2#1%6qq45+>lJ*Y_wai@&W7k%R@> z>uLPee7|_N++bc2zX1^}GSFqlrIdN%t((I`;dw3t$(g>3j}S1^6No$*p8jPB8MMa@ zF_NX_k~99<1f0J-p9T5P~uiO zp^vge(!Giu8sEA0sL1RZY6tw~re6(`p`D$=uMe$GL*&6c)AG-g+INTOK8_{GGZZ9i z4KsPT!fy!mvx!P<6&GBitW5+iD$he7n6mt%Y@Jm3o*BL%KUhw7nJ5S%WmXe9pFL*+ zOKbopMUe*DLl|g)Igtgzf7RIhU`G>y{L=U$gdKF3dt32=&dAl-0A}`*OH1bsZX| zys-|(FQHUTiM=vtZrzttwQoZ{Qnl+K)MI&T>E&+Zdhkm-Td_y=dNpZeY2MiL;L%3V zdhe^p&uHJg*_FI@~|YwP<|!`a_UazT<}giA${7bw;SCnINm?7}5Q*eeSc% ztypBGA<9%*qJg8PJXu5A)TzD}i_UwK*OtA=KRr!NF!;0e(z4!@>xUypaZZ@m27{}$ipyd!pG{~}Vg z!_U58gzV{UZ${duk#0Uh*lXUGpZ$qckNpv5)xOKgcfFSFC%%_9Ed?z|81do+l}N2T zV_IYxxcn8AkNyLO@*cVInKwvq0zD5{P+uLCaiW!-kb^EbhknTu8~B1^_TGAt1(I?S zmOqt>?7>`mk=*MpPLT|YSY&Z(IEo04`i@6?S?+u|9vL_iw(Tk)3snF`yLv+;t(yCJ zu_`IZ0GrvF`f`#SgI3n|Nw`bROlKVls%K|;6q6Q0!gWK$9wT%)shh20nI#%-n1${^ z%uQ06gRzmAYtG3-L&qd1QDE1RSE-xPidtIC#hfVY6vF_Zf_sY;0uexiy;*iOnRAm&?- z{ABwg-e<4CU9o2_=x^`vUv3*DN^o;meHfdBIM!0r5-%rblAh-&(XPu}N{zd3;Aata zL^I3h}qW~a-YnkVh9)1MW@tb)d(mL z_Y)C~;*4C@_M_rue$=tmawlvoeggQ46Ee#cpcAB<=rU6gqAGm#PGsG* zbIs*t&L}T75bV)uO0>*%T8+@$A4w2PK>~Yp0F7=laf`7ozYs3b8KY0u5u(lUtRPgB?`t4;P3121`tLpJjtp&$~mceguzY>#{*s!dOCr7z` zMfcL=SEHR;%0*NA63e8+EB{0I%`K$Jn*JFlfR}aq&VX+@U@8s(@0s+AK%2j ze7Jv$fU5t$G~W-VKzaQh{Kn9ipSTGdeob_u2KKy&9H>YD_F_8FI7O=ZniG`h_p@0! zMH@eulMLz)a2GqpI`~>p>@N0Mt;r~EFdAO}M$Zhh4fkHww4|qoy%|<|A)gp;zeWGe zVpu(_F0ttQ7K?bsu;Bn#Qc2M^J9o?Io2RpclF)6&_!dg7&a))(=^d8%YdWGmJa|}b)V}(XfFy)~!KKb$t`&ENq)q#yt5yd2skLTvOgRT0`!jY#OJmzxb zv3K_!3No)*7`OLONBJ?Mlirv#PHf5DX49L?|0P`Yx2a3H4RO9KBVVY|w!66K%}xk8mdG+`d-= z>(^gl7V#zfr{hyr{BI(9XoPl$*O;Cq`O|+o6;69t#hE4yR*@o!hso;^{B(IEk#sJR z7AnbFe>+MIxJ=j$eaj;rDcTscC(0MGdaQOGoQ;^-pa(N#ySl-dfKkzw)ILfI;Cg<| zd%CIH!#)b6x)G(axF~`>?!odr56ERso5Rs|LXV?0On+R|;K=S9`)8h!Q-Av?9>M(S z1$YtX4UJpV!@hK_`_g32W6$L32jTqYkO=bAAzlPaV1p*mTA(XbA_=iF0!1bQRU|1S zBLZlT-j6F0e8Y}87K2Ivv|jA;zo{JF1Y!yo@g{xo!^b(jks#9fBW%O*MG5tiB-9}x ze~=&^lO+G%O;jmK-QG=BC`mHb{T|dqtwTckz>cLNMI0i@z#~OtDak<4MVs8iFeXW{ z)lJ&hL;1ajX}0^tY&Y>?7&`$D*M$@(W-rZ_6pY14nk+`@l}aziEMY3Ns8b4LiqXr2O7s=p^hSfS#dRng61vch&`p#xM>&C=i!n;=G1Bck zv1=G|!V%ZZbtmR8IwNEp6#Gqt`*pT>^|t!-RI0UI`*jOtO|<((Rr*lazlhCpOfbLH zQ|S{`={KU6nV`v}9P2mxE^S~Wt7|E%Yd>Ip_*Kuc-^^Do-%HNMUe-6MUkT7>&;HVc zN5-kI-@Z@UglEv4LS98>(56q$TBhIJXaJ{RV5^)bri(WeIvBb(7=9uXf}oImGMHxy z^rKe@B8XL9Aq-A`8P<*w@_jH!B_e024VEO(E&K|dMH&B+B7!4yR;$L&(M_Z$Yf``K(!x{Dp9Tn(V@PDj=AF?+bj4+ZrB7e6bpV2VX3R3#~ zpco9TYiHy7tfLg=7%f!!HOMiZ2d$pBzK%CIzUpv9GlZv_K$%aNi;r!zDh8*1jH}kD zu2Dw0>Olz(;%Kl`W}xG0wO4L6Qtk-hX|EjZ{I1-MIo9+rQcuy}%%l8eR=F22TBD*e z)G#{a8&8mzg;l{DQiDtVDj8>AW%5AAJ zP+hK6U1?YSKBl_*UG>MI>dyz&_%%$m^;y+Ld({PB)l0321cAgku8B=w)sP{Qa(L{m zOzogu?Ql%(=)2nQLp6Bw;kQV}ZoA4p`{Zc|-ieC(rIGrTz52E9;Uw0QV`?bSSGI*O#_>^<%8ivvN$N9C+M};c zS4yboaz(wr{O$-+JOA~^31AZY38^89`dlRsko;{*ux!s#QL@Z@|? zl7Sq$Lf!&b64u*&6si$y_5ayK4Xb+b*9l;EjZG}}_-*a?A145Hhw#(EkyD&bPM~47wXM{Z~fg`Rq8Bl{Jq+7)=+mJ3W9}4dto;90-_O+)PxFTKq2FX{wVMLXcwdCQ09_ z#lq$Y6cLwb5XMp*aV;{(5U5QBV3ga6g=aK2a+cQ8-eNZ}X2WX;yPE44OWB|O@Bqw^ z66DtRQ4T`7v%)ca285w;V#`S;D3U}!dBUyA|CP~L$pii>Eljoj75Wm}>sR^i{tjzJ zR3r=up3#UySN)HShCy~|CrZV>aMP7XjJiWLLv+m;-eMH9!Y}5xU>Z#`C=11~7buZ* z)q;k0neko|IG!49M2^gRhC_QW&m$*it8cdBvA}S=6v?!HG zU`7f|;3T|z>K&HYLl5}?I;R4JQeT=EBFXZT%mSnu)7k3GbQBDG#VOG*;so|gURg-e zMg#iARrT-V$I(xfUE~g*@BxZOk)N+p8e`gKjSPHcK!CG6p1;iJD?_39Vc6J6N|T#AVaK|ocI zP#X_mN@Rl|-b)83P-rlrRZb%^-4rvCus8$IzBghga)D*ygJ>?$(0RB*gLt5Ho( zbTeGeyL{hz?>y9*ui$fed&Jnprl8z`Dnt1%vaD1->tr~m8+{93lxf}So40FB&jUFfm ztv^oJC=pBjd04QkCQYV-0(w>uckH2Q82YKS;=@UQwrc>0U%^5Sg3#}u9mAwNx|wIy z6+{6H!K6AZWP-gK3Q-BfG%OtEW`3Wj9G90UgBeNSQ}^n1s*K%pO-WMTmNHztttiB2 zjFM_3DrP9#?_#aDB&h~Qt*)#cCt?^Qn;FJ!4bC$c$BOynx5W!wU9#XADuwJckTYIi z_Bwl70vucH-s(d0vXgsV87VFk3LEmi!+-TiFvJg2gx+8_K!9$OlK3Og zCj}JRo0vT*H@qp++sT))`xuf0a~!@_$ptBOI+8)sWyKM*G;S<53X+-ZaDqS~V%46c zjzLoRhrZ%hRncBGw4e_>7bUxB%o^cJv-v1&s&cC3_IIVT#rZO&l2f7DCCj*_T9@T6 zwYEw`0dv)1G8IT=vaFyw)GwKHoJI^-NL=~h^{pw46bOpAPp=l5mUS5bAO(!yBYJfb zyEH5s;8uH8Su#v0A=5Y?$k*(g(HL9dYk%zkeo3rkYVJRX- z!#td!xa+@OXXcT{G`5}=1}mu2ukN8>RE+jvrAoiv*gKN2l$8(GXKY7&1#0TE%e-<= zqf2Cy=iiE!dO=(kh>bsFdxZ8o9-TXcBUIg?3Zg zmm>+AF)|t?NVT<`Vn*N}h#5@0xtlx8i5YPM*9z{V3SOVH6D$OpdZ}g zRwFX3_?Y5oKgbOrN8(M(ad8I8?88Xye#?QEjR?r&`-o*;19NztO|ma;=(X796Xb=` zyNApBtWgwQu{Ln1uShvy2(Pss%tnLVE%JF;P>Zpo-m$<2slVT8nCGFTrI-~?9tTkH zEI0g`kvOOS$vY%$ZVc8VADk!83$JwS;P75tqQBnbQTX&|#Mv`X9AnNgALT&hgpBzq zwqaSWl|XV-B#W-fl(Bv_3*Ydt?v>{@qNS3V?*+-f;a-7OR z$z4n)0&hByrz2Wo)oc~a^EkQ6RD!w!7Lfz5)gPURoyp}BPkeM}-NsFWLhPZaEtQfy zaT+#kAq!15O}B+9xX&@Scy3@t=6Kw1z(K;iE?<5$Xy-&%1z;u2BXxU9)x2Br-%wtu zVYtn}a4w#t&1`T(T52?lwi^LvH7t!g=vt~7j016+gx)o7%~Ke9y`(HPdW$yq%|x9P zxS1#^6gr5}^VJ(8=g?QThXi-ytTS-spiuNqT^toTIHB(+T6dlOm)|(+X#N*ibc4Md9l^3z14aQQQ_T#>W{q=kT@02bakYCIpl%A$hEg$lj>6>dbg#F(uacMFA{%0r^}SU3G!z zQ>uieZoIEZn5A$$oPyAv`3t<#NV~>OKBZ+P!Fy2*QVR?^kr8E_BF}5GVO+$0)$BU4 zi<_K)m1iozkS8$ooPdMby$Lty{5_30@B`wh0st4_T<49nj$}&X>(cEcW+(+m~F@59QQ5UoU{=nI~$VW5^Wa`@YbVd|X>@f^AR$j1$qd6d!~tEqF?B zSz>5Xinsax87zpz6XxlR5dj)t!mD@1vD7DU+YOG40JSlJGLW2Tx+4-xOg>EE+gm(e zf+*An(ubYkWS4-%YQixif@K3efv->k74WM-=!zbgr4f?cbbjq6xcT~^aAw0m3xxLNvmtb9aOn)n+M4w9$OF9oR0^z6e?!lV0R0bXDrn#5r`<#;-H=egi~ zX`CJs6T}nLxCic%qc9ta95Ms5oXO%wCR8F3JJTmdp2qLYfL-*-#a&_;Zxa`0(N7k2 zHv&FQrucKh1a+x0lAb~mVcbcQxM1Zbuxe;n%e!Q41_wrdkRj(M5i}jv+hiaEHgyug z9UcQMOUhp-0K3%EA16T3W|Db^S`tFCk8{F1L0z~OU?Ms4gCMo$umO}a&8bB-(<5zV zE74n#HiD7Gj|2}&A4f{-uOOLDiOUj;h^Nfx6`7)cZV|jNMG>)-mTDtx>6I~&oRPV& zvc0G4-n1|c3wrssFfDdACG%LUkq!?gg|caZHV2uLW;y9Z^#g z(medKL|egRgEEWY!t^_lYMYX*Wua|o>1Q(Gn;wgTJCQJN1KudZ(@Ue=D1+^q@)G2H zfpWv|mu_j^oFR^{V!XO>reNve>Mt@l`}bfezDMQSDq6CPw*#t?F8l zUo~kYakLPS5&P_}HXq-XrW=F#Zw=u@h=4u14tQF}wNeM5t*3y!suyUht23*o4z%Dz z!wPptClo-HF>H_-#g(&b5KCx~Wg}PdX|TI#P-gqeme*jPj)xsx-RS;7K8U{4g>jcr zq*W5M?Z_A(WD2(u9)SsL>_Ba&{@=quv#ze?wd8gfjVRL$=5}P>;cDo4aEvthzMGqT zNs|K`$j;C_s;SX33)j@gIX6ul>`69}R9i{NrI24jFU-b}id8G83J#`65e6~O`|J}o zPnt6P+-}i6C9TXd(K~A`zHfy>Vze#EYLy#Xd_a{e*k3W)Vx!xfgXkFsIP?(HJ89n* z8Jbzz(CFf}g7MoXR(u+L7~9A#&r`5^**c(IjeJ&ZsW45xb1%~OXKl^*II9OHcu|f7 z2e18Dn-K#!N1tQnFoW_SHF;eajgII&G#>_~I3(QJ2T!>2Y6KUW;Nf5^Z@R8(5_$!E z2B9;q$u8dfHOE1SL;DGr0v!ipyU*jO+qE#-%`|$|8V0RMj}8xrUIoNF)`R?j!|;G} z!$l`#-X(SWZ4$2wC+Qnfw~85mZx!b^!S^6yc1&P>7eP$r;F{k@4?oiHen@6L-0iqV z=bT4Zm=f+qVF_5%%SOI@f>cgy#uP?-ZTQ+(IFk_Dy%kI3XIS;x9)vV7vZQNDmN;^sGO__NZp|L8 z%N|7$9EBAbx3H5_6u(WVuiYdx+2|)7%O26h=amh!S}wxxz;#4(dOK4&25=u+p^zNP zHeaqB?O-2Ut{m%VCnYzW=s6r|8yg`aGHIg_q?P+3P3(z6G%1lSrCQ&y|KO{^)W_1(LbrXE5!1eHHiVzlv>1n1p#g-6t2sE^N zd(Rw?ILpR5D_hm5GCm_SI7|Di@e5+}{lcs%Pk@Ep4650j?D!nhsj6vgGi&{f#R|S4 zhd_ds8UroU+3tM&3N8TnO^RdgjpnSKUAn@l-v`45AJKHBTH&`H=_suo(ZG)@nH<;g)vK+Z$0Pr?tWc@^x!3qqJU1EpzdIa{^eOiLx!3%$tkhWi zbFYDSY7Tykw>2HZu@M;5*n&pA_I*igsHz@+uo1h(FTzDyFAqW=u^c{S3SAwqJvPF6 z*;=!`esA`|9gbAyP1nb$?sUL!PY+i&=ew0SydB-9-2FvA|7BSTWBiMafZuE6nAiVx zudyoquMWomT(fBst);|7X66h=To3wzJ#qqAIxUnUwTyN%4*PCxmWV-@I5AFy$c8-D zFVIYjjn>KhKOK($pRf_G^EQ965q~;0`@5e5{unQemA;#?u^ zYgR)()e8Vt@vmp~Cfppx&wfR`fuPX8=gMBD!k}A*S!>Z%H+uAlGtd4rv@2fy2T zm!BQCU(Ca?5jQ&($DQ<_MvlKBpt7HI0f_BSx`9lUCq0<_@J`K*7*g%mYiPluWQzIu zf*+zyYuX^9(;;{WZFPa!dB}|}E}BP|b*qma$F)qF6=mSeVgtDOQTi1zVEh#zBa8yd zG`>JF1yZyJbH1Z2;At>?wPkM_b)=F!M~9|3Iq?!>_N#(E?3`DFUpvfb$#S9{G-#$? zc{IB-@~g2~X$*@K6Mxv@T8cIVR@0Q_G@SV2I{^R5qrsNCy7_YnNXK|GTHfSf@pn+= z2k*!g<(9S#Ws}4H+<)I|ish9!{@1-`xBC8fJ6(jwadqP>#N0dt>clmqHy<9(;%J9` z^A*HjK3>e~eSA#WC;jB7RAJ~oS^J3+L(B*e`x7cUEH(Qm0Vize+ynDpYUq8W#Q1hE zK%|vh)5`Krcfdva! z=zC6f8lj+Kj?N$aoI%LRUCK9~phThny=-li`7{;LC{OPAR9Wy!@H$cVmaGfQ{@ZsH z1!QL2k-V*^v5qkX6uS!YprbEwiuM##*F*9@MXKTr4QOe~k_RM-SVY@73!f7Y56KCg zC4gfJ>6sK2`Q|DU)5i)K`G<$qyw8$u&%$pdmS{}~;*+UuWf3)7Xf^MoNh3)Z*w}R9 zv?sWvw*}_uR$CCKTwNVj(b1B@{q5lbJYN$Twc5<}ospd)AjHhV?5|jCD4j?9yaFu-v*6Ri{Yk zvTP@jL8nA%uG}Cc7v`EqrD`!%fo=5;aa~5QgOwz8HJ;d7mCeAf`>$n1zzyAKDGJ=O z%v+7DSz(~;ywKS>$L>D2%Dv;#AJVX16CuhjgO|0K$w^deTW>8p(miq4S6Xuh3@S9ya#=WGYBhxFs-4PCYGBs zif&^)C0!t$NG&25w{9cJy8flo{p>{U`pc(snIV+GutZudIlBA4VdV9Xi+jQ#Nppu` zg{!4Rv@;f_@cJ?tu?Pi1uAS{YS;iBeifPsKJIxutfb-`_w7CoqP?a_ec| z3x%^!(E7lk!Fam@#~IF_exq!oa8Qe#lTN}w8M%sAdnKjz;cT1w3j`e03jBr8vNl=HUk)KP@XFV%gKEE5FEc*Ke(WL*m|MhFpAN% zR2|BZM+sanF8&!>NzR7UJ<>*)^m}8c&Em3pSa`WAT>&}0p+ObciOh8pSaH8{>OS1_ zEa`WBWfo_CPL(P}C-{GUwed&%zfJ*UB610TrvQ`WJ&gkSSVHM2%-dSangnLH%!hQY zZKZe)%}xNR_SRSoufvb_^rWqcBvFnhOjcK>DGQ1u*8ea$!{Jf?)3rvaeEfE)-fAYF z@*jBAUz2mSanQxtpRYED|8CZr^=>~gm{h`>wY_k7RIWJPJT${jX*%93J)mG6nqKP0r|76LBI}dz-=zkIeM(lGrSk337K4mWeWT{e_8w zQrmIH+OKcpQ}kO?wo~&bHGANFxG#*+LVzWi<0 z4l!1+m-=lZThxC_m^-YS{r42`uV$_An-?4ZngTwwZV}PEV~riPv!deY#zLb~Yw8ZX{Ia6T-DpYXo(K%PnW+~@7w!bFATwAAN=C)c zPwWG|)Yt}4%~W_c{k?z8ZvD*vP+ME`^F!rwq$B+(ed|lsxOI$Y)Ctu2<|frEouv{W zLR3L<4XnC5?fHfEI_xPd45yE*qIJP5YW&MH4!%-Qww0*nqktb^=4OsbxXaC*I{KE#p-aE`ga3`p+pK zA1@_XG7#?1`RGgm%v0!RMGOyoJ(f?j!qv_3+A-KfM$N=JrH50_Nk4@`+l zwEf>HU{GjT^OLGRkm>0air9}SIT;9f@yLxl$x$p2)+|N)CZs(iTgt)5=+6`|tYmQZ z&lJEy#q3xo8}+aiMMgWKmHEfD_72&&FDIn11Rq=Z&j(w(J_x_m1B**?PsfZT zu|}X_LKk@;H%H1Q*8%e9AH!|%JR9p1Z zi$&$V(u~zeL-7(Vi&}-tOwQd!iNtEs%W6`cLz4Q^#X}aYw2|3j_!NLL&C(c$K39$s z1%9m>$1ayPSN+67Vscch)Ekxkn4l}DC0b#yF!FZ_aEz@my1!^@`Il?$dSs#V?()kY z*BUBYUmYZ=CZY=T8oz?9kn^e*99wBAeK&$q9bLNWylJV4Bp-aUQSWw%^~bd~^<&T} z?}&)U_Vv=ZIisVxZ_E`ZWA_A%HRKg}LzOhqO!)w3Vg5(Gr?fX-WK}=8W&PTlc2E^mL(wRz{q{GzesS$u3xk> z9Ix}y28ZlYbm$fxFDkI`ip5`;U1q=lH29*gvVRo)rJ55updy+0-Z<(MSP9z1<3+!ekz)tJO9_4EfnhPam0(hrzP?5?Mk#ytoQpfp zeEdfzzMw;kAm76w*&QG>00ozt8#ILJ$~9Ts&c#&HWUH(;l2~?^LW|=ysu2bp?((fG z2(=$YBt46M%gR#&@d}|aQ>#yo^?k=ne)}HPDPye^$+DvFjlkho^pAO2$=_Sb)08v5 zXv+;WU~vh#0$Gk#nK-yYYP=$5D}OuqtYAx99J)4I9G9d8HT!!y&cf5&Qug5~&aMWp zzF-?ya`PSV&$rTs#qqFx9RJ=|Nj$%arBW_$3^FGMC=8geJB2yeZU6uXw6_3c00Inw z9RdCmfXMW(^_+mD626`z{Xt&*6Q_V9FK{<%qei7XC zN?Ti4)opXzo5l~VSi+o<-YNq#=e8)r&Yf-|9lh$>O3~T`zMkVdMgDs|&&hh(L zgD(a9=!Z2~w@Qb#-*N)r$O|PaGx&OLM``xYdXBA=DzS1lOZ9arOc*au{OfsKGsO?- zbny^0^2ExMC;a1f=Bb0&`%Y`*<3H;;=&izukN7*n zgnnGZHpc-9kHgcqdVcJ6YP9k8XT!`T|DrnjU3apd+cl=sj=hT=t2~z}IrQBdPYQjm zK`!>C(P>JdEsdw{kp1Z55Ax!2R!7g_tFrvts>}KH#8J3(=~I=npuvlam_=)x!gu`Z zIy#LK2A!0AvL8$6<5DL->8SC0iNjx? zbLOQOy5FO1BI1(q&XQi2g0)`8qa!;;P|WUTVN||g^6-m65C;Oo|j4y=ns%Waj`-G z4Ejt)XSl{kK#SWV08E^E5hul1_+DISi7EOjZb7o}y$=O_ZTk+lI^%dMbp<(>@qAp{ z(O9zLIm2isv5J*ay)ATWkt^_Be=>di^PaA$;cCIkT(rUf=6x$!zR1sZ^o3NI3E}cv zXt>@_y}4I9KoQhBn0lyXJ?%~MFrODMG)iZN_An+&D5DOVIg5mP0qEx>IScnim!a}E z9byBtfYh4LsTWH7B)C{XYAUX@DG;U?CX!R}*uh1Jv}ICKLRz1ITZBxyiitIIfI$0h z`a}vvNw;Z@JOVeyHIS5yOC~t#MF<6#D)5C&D_Fr-hYUipFF~)Q>0ND3$U&&^s*X%M z%rm$gMiQduM5_|`Q2#<6S;^>aqK+dFK+wPUOB=NttPA0#O^67SsFs}fA4;ykaQY?Q zNjC2vqg#Q|B1eys|2nWTsEU>Ly`c}6-e=cFhPAF|g1<**6AUh>x7H4%9!9`j@K+K1 zh-yxluRj1|yef$2IFM?8^(Iiqy*6EUSVQXwjnBiBOp8df`^&h~kjru~#>!%6FyUFuJ^2OUuzKSL1&n}p)n1O0v8ND(jhi`4d^uc_>lNt2D<%sH14A6Sgs3C>9WXowQ!kYNh; zW=b7G$Y!DV87h+5>HdTouG_Ku`u=K86RW-wRrR2g#(;4WJCcF1YgJ(MdW3x7Rqf}M zcgl1tm7^%XHD+s)a*6h-OA8GejO%{KN3=G1I$TJ6%2_wX@tN+wa*l*m9zKu0XNm@Z0$*$Z$`1h>Iv+`x$h59Z>%yZ*QN-|nBUu@3OV+h)ey-Fsb}!wE|HcG1f`J6`7Q zQtqy-h^Su;`hVJjkn6FsmM9Qwfx=jNeSdH@RdzUZ9-$vR4E~&N_!juVt;153;bYp+ zd|T(w$O68@Xv%xL(H{q~(jA)*xp&JIKimy1I+%=Wo~>>^x&=agcD$QD42=K2&Oz$j zeI#laQr;K?H*BtjqAGq@=kktl%|kUh5!&93xh`wGDi6(hIei;*<##Uq3x?puVBhLR z|7FXNk(d~ktLL3W@R@$_;}CA@m%Gk-sui@dKKYN>2TSC_Ri8RVn-?a2f|Jv>YV3w! z6q>xBz&z%7{C3jhL=Q<@(S45?>)p69jtlqIREL;Oe!6Djx5WdSht))GE4zm6CFra2 zcx!ri-Kcnga5i`i@fb|+vW5!n`^0mKeS(VD?}jh0fhG@CbsUo%90$WzhN1G*5B80JzT=c8rq)68V` zjUkv-GMG96bt@GggBef8l!PBh7@bT`dV?D%05S)vTkiQH<+*|fU42nQ?O`O^+5!PK zZlNwi91ICSN*cN_O+HfuI@hUi4N0W{U>LS;ghE7wl4qEQoV&V$g(fia1JLAEL@2GK zfQ2N74Wp4JfQ%xAI#?g~n?4R76j{+!FB}*;*#x>vbMRS+GP;Vg;l)N2Fir0FsgQ_% z{>(cMHzYJ6dgC;j;52&86v;y)rX(UJa?v|M-p{+(DL%q)1{nOEKNyDK4ND~b4kUrx zP_Ctm3qQkt>4?f_8q*#YS5_L6u;5Cg;B_njoc8q6X||b z&3L!K6xzHb&}nqXS`wdQ3hQkQJBzN|evIhVTctNiNSdK0vI#V&$q@+w?a$I@0#hmb z@H;e8*&KARX_tqpC^dP<-kQD>~11n@SWMDFYM0FWL zhUG+RG5Ji<DICq{JwsrSO@1>^rqwyZG+&Iln?9FjHgB1N73-eG(+vkip5x zpeZ9Ja)^tx1-F3xu2W7)Qd5_*2;p{G39NG1lnCTj+oW5GVagKgStjD? zbF@^-@nO(61x(Sk%v8>tV!5o+Vz3)ihI>nn*Kii=I&b$C3DI-_MuI{k0&OIKc!xj- zOB36F2oxj;TItYBjA%sE1%a%qv%BD3;B zso`{fgJL6_ECf$`QFJX`Z@dzkLaKrySuz50eSCKqYq4_XXMxtw^xj$G1I6jP1xeO# zeq`_+fl3U82&0wojS-6Fp~x0OSqZ-i7nVNTjyN%uyPLO^z2%ng>C$YZ$>v}r%oD;l z?m{wKc8e#=m(3`6)l!f`R;nwIz_MP(h9rC3g;qj?dCZBjhDPYZ3Tk7;H`72)g(7!l zmhjnz&6SlW-IbgG6PU>=@|sFn%NGTzWAgT21@p;x-@3U&}Z@=Fke(`hWI?11*+pMR?Xo!sP zrN6^VeP_i?l1VRLPH%$?WzEx1&kS#A6k0{Se*bY}tf>4pNyFHm^%|Z1IxfJx+(o!d z|8u#>Xg#M^$n^?xX?rQ1Sh~aeoEJWgF7F#hMjIE$2&{d5?8a+#d`l`F{cA*vgKnEA z*fN zt*=WX9K;IV`ZS~{6~C)w*k7iISZPz|iRgzH$6g>u+XUP>w!>yVdf7H89W+ZCd(~%E z4o4I8W3(d~;Z>g2+CV$H$D>{xMI@7!xeC8{k{HhNt-w|5W3X^sGmI_aybddtt?HX{ z)BR{mGFxYwcN@E4>%Lwq8)Ekxn(l3rb~?wLUX!kUtjc3-DiYG(YT8~BqiDxjIr~kG z7lFN)pkB<`P%~jd6!AVn(>|Pg5D=$tg`~N`gkU29eynsziD2)LH*{4t50Mp%uk_R} zw%^nfamNt3)mxu$c8N*j(y(JlD&aE3^bAz=lvn1kPvoSD6>+ilu+CzO+$VpX8KA}J zVxeery89qQk;myYXkjrRnmcEd;uTv{dV4O|xksaeo1iRR8ycB1!Llv$P9;(8g7{D1H@rA21 zkM{JWXl_w1+Few;u3rNQ0n+Tq_Pp0KfJoW4LQ5n%58}o7+ z>^H~$af_Fn7kN@ucIt<+T7~|VqNZ~^q>=^5v~QuOP&eabSefO^PF~+&Y&+wMRq85k zyMgNFOK@3HiRwRt>1?4w;*@$?ix=wwI!;AfHS5aKLxEvGBlb5qG4Yzg0vPufc!*tyEt ze#*71O2>IpGKavxxkInFS|PUC?6~NFEjhC)Yn1hqU01!-7yMt29S~>C@%zb1ap)8F zwzR$R`L!JH>d$&+1pcwL7Uq~PfT`Klm}#dP+|h214nxweC1I@z;j^Ux$|Wq0kzX;R zH)|!;ewn#Bi#3yhW|}=3Y|B?`MIJFLT~(v_qodVk?|mon6qru#Q&eCgLZ9-D$u66QG*%u%i`sI6%@t&DWFc;>96 z-?r@Ef7vjr6`}odMcyruhfa+;92D~C2n7HT)?8fvoC0xwwX$NsMP}*y>G($D4am zOD7LK^i=CJIrtK!{ms!6W(k`mF<<+4LzXE!cl|zpHTxzz1Z9*?6|EVNW3kxlS}&E@ zuEg1-i`)KCz0J@!+z>mVxAAQPXS*kQb;NkP!++Zl*G4D~-?aOi1Q1QLW}TdBn|pbq z;(p_}Yeghyccx?~@+b7=TNHE7B}>ljhw8N*82dN*sn>qF+b`bYLlO4X-=etHY&J{m zgr97D|I%deb${^t9-Z_DwYUi-?)_qp9g43DHZ}WpQ~S9!yRi}k1z&d*5>Qefzm=)) zK_#Xl-Y$hxY}$@uzD)q9%wP;*AJv+{zX+@1=Ex;A8*SfMSiXoGI=RJN-k6Tb`Obg#qk-dePkq1b znb~~q>B+NMpU1;Esv};DQUtD36qoMw+(T=ax)IIecxKct%k;}UDtz|!vnQu#rBC;M z$?teg9sJ0-@PFKAnyoDOe!=C^pBh`TP;<&(yS&)Cr}#l#3=h9h`Q-Zcf}QG^v*r*{ zaj`e|>PgELH3&_8b;sn_r6R{qyOmAW&ck-I*v{CW9H6i8%fqvtS5kP#ZW2HFs3&>f zp8LQKl%M1KcYTvX|K&<~<>|8Y8gIiZ{vuMt$MFX!mb%-VdI!SQr6W1Z@?uBf!;Mzk zHN)%;t@x>ha00{aXeJ3KWtOS?Mj07Yahj?9@1W}9pVD>9s&1!r_^N@Xhe^RLav`!L($O9$PHED z4P@k6xum7jbyibSxwzkx7fLBl^lGe^=XO*wcxdNo^T~6d7ui>FDLiS&p}Qf{;N`rnex=Vd-zI&nC%c$wvZ%uSIZf=8sKU-FBvm ze@|XyJUy#eP!VF8El}`vyDF=LzYirXb!2$qTB#k6C#O#FqOPhxmU8)IXKney4nBDi zd?IFS;m{UvsuvWX#`RyMt>uXflTP35xtO2O&4 zJ+qla(0}EHSEqLy>_lE@adE@2m^_QQAv{0X; z?>NyM1f z<*81*SX_g3Lq86ZoiZ%gc64^g22Io>!KZQT0*(zKdGNZRL3UYXDJQk!6(!$as%fhT z5OG@Mf#gXN4|%rq4B-+~ed8BRSNf(NpI#X}^S$~MK^3D&7s*F?cF8clZgbg4N0DxYq3+ls)WEmSV%f=pQfS4{cLr=|6DWXWVwCE0i&RrV@J*OQ`~}1+UFR2=u)+gQH2WEyC#2ytYCqnMf?7_|y%lytmG-zXkNt zqHo$j%fmOKc?7*kEw#Z**1=q1M%FWpwL<%efVg|5_gi%M`#E8CkLY5XRs0d(1FlI`b%J?`Foy!S+{6lM z$=>_w29r@@oCH8=?Hu3|RMUKU;rh@deS~2Z3X6%Q5`YQBZ3jTUM5tYBmTU|M)+7gC>|6Vgwdj}gjYycun$JEgeQ z3K7cdi&V-kAkRLPLHx!WZS{l+)1p_7-n0)>lg7$)hflHPGOf(Ac+ya9L5Aq^G~R4* zR?MOdvL3So3AMH~ESw1j=mXKbfkz3TCtzBDl9<&bAgYkT#{X-5@*BT6s+{~}?)}DO z-e(11dh;+PxV=U9zHN1-mZt149Qk=}27udFlgUDeJk2*ouuV;bJ&d*&sw+&Nn zVQI~Q+#l1wvV@7(B$oF)aL~DD7jmkf5;UWytqHM{IQG^EW}zjI zJPqc?sBhEX(2<$(vSWj2#aXEq0G7=Qr6_MTdj%|U-O&4bA!?ZUIbTi4D zH-t-2TW=NhV9+q(Ls}d+nv^29ofpp^ZVh_T^y`8doh$&phJ#G{_0cv?R+M*!uvT1$ zG-L-hYYtzd3ip>ZPs@)a9nBH#Q}R%puN4Stq>S|aPbf=Oi#d7jjF*sVs3txzR~5zM-kr^-_o;1a}SVx6h-liHQPN@S*Q8)Mf&u zMNi{J%FJnGPX~z1HIYqHq)@Xp1925ig7G_(+b@c_=JqWD@y!X*4DwJ2(ID|;7z0SG z83U5Ty_kHe5KQ{IP*UZ*U^dktDj}9WgCk!H9OMH^)-tCsiF*rRxZxl@(_bbp&TcF* zlRMK2DSnX5#Q@yLc7>}4`0^E==@`Y)Mp})ClzdmSXSZg6!DOIlkuR0sXA@9H7o~AL zbre(7j)$0?P{#@n5joC8>GbyEl-l=`+%x0S@%KAu;R2ZbX5=q#Euaje3Qq|wvDNPf z@H#hY6fC&W)mbcX&WX^&(a%NZ`ROKSA}*9~&$a?}L7km6LAYMC7$ng02{Dj-=JLdL z;C?GWW^0g0(Zo9UIuIiph~|T>x>HdzM@)Ahho$dIVSg<}@-*YDe8hbGtzci8z{a51 z%1oFJ#cGoaNN{^t3I#hJg?jcK3WMVXo(YRI$(PVDYBcv1P1gdVo<{}p2y-XvyL><= zFt!f;;XC~o8BzzS;KxU4+h?BX#p_?sp9o8@(3;UM!w4mQN(oDc=)~k>n!ZHBS%LrB z)!2uZ&(fNxA-2y3+#IcYdl3Dhek>w{7IlRegWuB}n=*o)oD;wadBN>io+`G?eXUTe z@a=>O+gSD<8qQi#9kr#o0v4*>cFOxf7&dl=yv6SqlTE5voE z>u1J+?CN_85uO%`GAF%EfV0hLk9vLOm^^4YJ;*10ugLh{nIO5CNRoWq%v^_Hc$+#IunkRPjag?u-#x8)X9-gtc9_$uX04aezHB|i~n}RiqORiSpcVh zAs{1=N{bQ-KFQhBynuX8lN_RG1|D~nwf8!+z&KCn-SG?!`>-0W+hK3JT#&iUx_@yZ zGJEl$ea#A7Tcr%ne$YH5pD72;v5ldt;A^VA`kcNJf$^O{N=3T+~Cx z!1#=%mjZ`k=^~seq|6GVUyBT~+bf;C-vfxOakmdA?!;tZ=qJNrd7@it=o5}b7>NP@ z>E^yRCL@OmQG|v9gY5_sywMl1(VxgY0J|m`h{y|9jOw7oSOz0zI@5)dUMEmPtRs5~24lJwo117jyj^CQp>SAw%Tr7)Ui zo|rdJMiYfcquDXj7ckLNlnRug^JSwi2qSSQBAu>Bjr)}nJC!tJMg#0eQ??Z~t7Jnp z$CB;QnPVbeW{i~+hQH+QD`^|6WS6c^k*;Y}u3J+k<;SS_KAORzk~A}xD5cW0FxH?u zp2^)OC5tJ=KGuYyQWc`2S%_KLsls?S-u-<%uvNLCYCMZYr4whoMHiz2Wjw%ZoMs%Y zf?>S4XyRqU#89UyR_DYxit-eS@-zj;D1}-ch3Y891UkEPA%hy0_~c}j>gtxWP4 zMJUS0hxt*0(tm7o%ogH4U^<2WqfGMeEl>D1$H#y2r>Oi*5&AEzM+5=ezpx(ksSnu1 zxF7eX^SWN+!WE%^vL0$Wm3{$@RveY@eT$Dd^qp4TcbHuTk>{`A+Z^n0MQAklFw3_X{^o_L z-~JSO9sc8e`Z$4yYpVpviK2C)2vy{EtU!%*f+nV%_e_e$9K%kk&SD5-nz8mlaf;c? z1DgyhL5JN;`+ru1{-x!)B`5QD)}wv(Ll~3eGG>%u1u;Gn&*6Si3?<~CI3OqZpd?@i zq0l=!iOHd?XgJiqyzDLNTCQG+qq$_wFsxz`(+TQWX;t~PqS7$$gtb%~)_Y4_*A2cS zsvm|cLjUGZ+47!lTu?XBY5FApFa8ub>)}-rbka_AJaE!+I?VQ?)1bUk6Z`Tv>p`&m zx0Yuw&ygb)fvdpoREiUHB+fpPgqt1mxa`rG6ZKc?^5t zj7O@T{IxMFc+Rrv9zS|ND*xc=xmbODT0b1;R|VnvaepzR zz$KyAO5izg+0ZO1@H14++~^8`+V^n1o&G=D95CR<$?t6r4Y}9@fqf5k*kih!4kpY? z^qI^yZGzrLkY?me^gfnnZx+TWEn3m^9;84#RA7b)&lCd@2I}Ltab+DsUO;_uE*<7s zCpNE*b&a5y3`iSvsml*Wb3-Bt#_-y=`i7Xd%477;3TzyA(QEf<;6H`t zw?SLesprPu5<;x>7VO0aK@oAb?4uI;*EAB^q45nJMxh9#ib*)U=H}w*)a2z%`~2}q zuI_Y9LPja}7=z?&qvi~z_@i#sW0HhX;c`-ENi0aUDWqh@QVD&^>YUq@4fgntkDE#+ zys~k74TYT;q_s*Y>>=GwNz!#06LkwT{!sgptb!+Mf?6NnZ-7u#YDSsWR-9;dfJ}ly zsM+pwGugWo|H69EsIZ4+UQX=X<0uMlbNDJJF`#aL5g_=qHp83RE zdon0kT1WRE3kWQ&&2XY-TTB}ZfpaX1fUDU=va%v3n+Z@^&|C_uZLy9+xeAdEPC3-G z|0fA+PX%GFwE_m=cAR+ z`jD3T=tgQg#Vakcbe3u`Ue_B+J6W|MsX|}cG?;i-*;LXQ4ZU0x&Uj#V5oI&p4QXy{ zqUCUm_gMKfCf`)UsQ$uAg?t(|_gb=|wc5tjeo#peGqRlnS6IH^Bzgh&mE1jsCi2ka zLK9LNC*80{8qfGoQXR-PP!Zpc7i;cGwUGrz&9mzZ3Bt?x)(#eE{GT>wY4q14~R=dOGiP*Gqu}C zI8_(6UcLGeqR+?l19^fnzqTleh?MZ&#aYXrnLF0Fe*;o|#k)_J=y=4F#8^7AFY@nj1P_VOrX zSBN!y($@UxYUUfd-LUM5m~q@uw9)OV-N2BDDWKc?3;>-f$(YfYJFchjQOvH3Xc2`^ zGe*I2l^8W219?FNyc)HNUu=fol|rRhLfdc<;Q4+YwhDN^uYa(vKOhuBYNR=U=7^sWm+OeZFgdK}^+vJ%6|pK09jp@B#LCEAX&K9e{|- zVjg(iSGw`r;r&km{V#1#Dj}Ia1!wSpw)9}`W}y#bnXsq#(819C7Ar2wq7*MBKcb!> zEB|XC>XH!iOPsQxh-r+vJgJGKHtVHXs@&J$owW9R8nkrtuqV42)@eo=X|OzpzdF3( z0bQDPxm|9TD{$Plm-Ejs=ARgb*ACJ_QHuVb4(|g<5}c4Ifnyks&vW7&58)U_#i7gd znnPCQ;_kl*&e%*|ul+5WSos=yQKRHQHPlc{P=GB?v8hn<| zBLX_VMRyLSSVUVmvFpa{k%&eDz8|mE&-r z(~y!CWc=p%>a%$`$Im6}bmyPT_NBiCXD!D+S6xRqeyw@#dCn{OE&4M{$jHD_!ZqZN z)QobCpR!+P{kjfrmem9g2$$z>~ElME0k^Dy|u%9d~~y~?<@_RP6>|t zWthVSCOfE0F8BGKibmzM8#i^*wBPvaY34~cI#;K0uW!iNDU`WZ=WI;qho4Sr>)`dp zZy57xiA&!7r&ROQ!>^5Su19!4b3IbF;8x|_gn++4O8yv`e*8V21$(&OgO6vyF%0;4 zR@E8}5(dMr8OkdZ)jT9(XfK-RsQ`vw9tyLfbQ4Zp5U`yFjk2f@?spBQ(gkA3MC5>y zW<;69X)u?$}a?x}~!_o<*DE(93nQ$glC&$8^xrlYNE`3;qMfgkuh&;P_Ql*Wx$eq$KLoO1kazcCDF9eVC?r3p*2 zKQRotvI$$!i_Dpr5`KrhXh-9Z?|lZpz?bDGwbYZ@R~9BD51TTN{V%dlc^E}!kz#f3 z*=YW!@a}~`giwcAhJb(pLx5pY{J$N6JXS4n|5|we%QMQq?g#$YBk;dF9{-P@Q8M`c z)$v&Ne|7}6sJXOx#2x3Vw0OC+UqyeaeE~lLJAN15qfeRXpT6WymVE;by0+<%)6rFi{^;}O0e_}@vi-Lh|gkZAEzXiv8P=6GcKx59g> zp>6q&{<3qXe)_XNk3ffA-N~FAJ&~=Df)c~!qMKa<^D(qoDYZ`TvF!iAqyL3O`^ORZ zH^<}q&trawi2w5;KtTBanS-o%#GLHG^f1iUjq=C*T-2~U)p9=Lm%U&%A z>u@hW0zOLc&mRH@%W~7dk4WZ)DQlIWHo>WfvJx_q@`}HSK8@EH8y4H~E1UlmeXd1@fjKSXzs&7&+;y>2CLasI*Cey9X-HG5kHtW2fca~o7Mw{eelUAwGngKG! zaf=n3Y}%psVcUxQ$TphE`mFq9y?KIa=ttc;AjGK$g;-UK9*y{WO`idiII!c7=fFPP z@25j(t9N*eBy3qOBjb)Z=g@v*RXFu9;^;osT{FR3%h|(zF_A8)dNEm$8}zZZ?D)G! zg&={i>a-;Bq{D=K2ieOxRiWQG$mJ!oP`%=W4Trn}uNF=JYYuuux~`GE#lfHR+!JAz zGiQMH6U=&lMB9HajULA=5lr<$7`~L$?G?O*av%RC-ryOxWLgKS_b!KJ9RAnr^tKj{ zPudfS2S{d-QBXP_}4dJ&g$8>XX@KJ)JV&5OV=y;!hP_=R1pF!tk{mv(Z zB=s0LNq^k`F-mZi@FmVaKH2HVKXMQ+k)}`GB<|<#FQuKkr~$lyyT9h(^OD0yZ1{*I zOO_;%TXDPt0|D=k91H};m^*`6`ml^ogPeJ2(CFbg_!ORlPVgLT%>yL?pE8MW!gH|y z5T1kc@Ek0J=it-QFhM6=+~*B-6s)%4PgQY&bHQHl9IO|X7can1hYm8GRD`SRs^EoY^%?Ozy0u{!J+;E+kj_P^2f%31#IM5jcG@~-hAQn+HQ%vUwh+YLMj2>QopW0uhvcn z^uQiJTrubQ4HEsPt}WBn{r0}dfL}Y?B&!MUgjmtO0lX^Q3?nOHoC>G5rB|2fQ!NCl zppvElLmIx==m-7zK5o&T{>6gL1)WLxt6lSWu*kOPq9kzUr%6fc^GIWe zKU1Tf)5|~LE-)5lnzu1Oo!uur1>z*EwvSdKUlCb9qp@dB%XOv%m>q+D$r_@OH7aRRA4JD&z)OJKzs z|G1`2WuF8)ohA=44gP>UczLHO39;PAh(LC>tDpsQ<16~t*o1?UziJi*Ue(M+ z8RWULrM$7dO$P{V>#*M!?`)}EAXCGhLM_%{ht(m${JgA);* z1NqN>Q`h%9lI~ZOVt-usOL)^qCv2x?g{J(N>>8veOpW=XcScJDTSnEK9~EfN^1p(g zc&qi8H~gpV6)=0O8R4Fb`YB-!YGqc*Cg&Yp66I^;i#LD5rWoy5y*}4KB4NEjg|y;fWj$JJW%$?%0y+5C(ku_TCNfWDO2XeGQ7uL zPPOhXCX&B0xd2(`N~FjyLr$e((~KzPNLpaR*Sb9o;H$AnoHOYHih`DR{vGnv9`szQ5VUyo!CgSP z&C2ixwKfs7GdHm7@gW$45a1+pZ7YGwltD1&81m+|kVz5#PpmzM5DwYE*{`_U)ZTF4 z?CvY9j#-lIr*9R4VEIU)6q$A(Lr)+j@(B^n95x0S2H)GIEs%VTRHhN$LwY7aZHB!lidJCmUN-#}w*<140R#$g&-7AUh7o?r z$HAPRjRiwE7xFpij9%D)>{aZTOxt{izjU8u2&ZRY_6D_r zr08t;Q%`VS?}27O`$FMKx+eCBs=-9tbgH6C+{DI_IjmjRUg~uNGsAbxCmk!3Ur8&` z6}b0e5-o=PNLyTTdMy;hOzltc^5{jh<`eNHw%)!$N|p=5wvaX%dj_g&8TtW66kQ)` zW?%)CoMx=!Y@_ntggL$CaQY>>XE);=8u36~9B(4iS`F;5d%P;T72ms?N?j;?WM|j( z!$m3Zniv1E($0BHv{Z`~Pfm>4ZS*5=iT4uB>Tfevm^RqCC4r zhtjcNu3VF#_R=hR6?GL1SB6yYOg2tOsv;?fX;r&mKu&|C?~lomgfDwGSPp0Yy~NTl zc;0TN1C=+#YEt=-ECQVRoKHr8EmwHiQkZJC1{8?K>Uu^9^4duGfevR{a1SZ7XTVRC zcd!{>=H3A9d`zS>KWsM)q*)0HH(cUbBtX5yGeS!gI<8@DVJup{BRkMR_&X$?5PLU2 zoO(Xn-FIM~z_T|(*cO(ao5(+Ckj-p$n6A|on1NYuu)WSCkZ6O6q{B>SUunA`UuoJC z(FS?U2AaD0ElY)J^97180hNIQ26gW``au&zFD00Ws)LP8NHi9ifh>lg$8@jx5s)=3 zA>t)Sc>NvKOoAmvzSQd$K8s=?0hCyETa0=bc;$iP2o~`40>uI)g>{Tf`E6ga0Cnw! zCBRXk!W!IAkQsb`Bs`j{3^*N*)UpH=8v&As2}}rRGiY`VqAx`0V}XcOh# zQ_YQZS9MY?jM5Yu-HeThl^xQYFr`G&(~v+i+8`NErF2p&PU}&kw+l>xDJu3`Ztp}S z0}tFlvMLEF!6A_uu1YKmi5V`48N?uxgz}6ex{Tl(*7P=s&e_yB5%Tmm;J}4+AKHxk zL0lgmJS1sm@8z_rOqR+vv^Se%pELp0Mp;r043_p;?U^bijd*WHLFK^gavEU2QT9M4 zxVtTDjFj~efjy}K(~}kr;Fb;R#Q<1@jW4Iw_VbexvZ){wFL9ePz}|qI>PYMAfRN0b zsz^XC1M&Pjz`-bZmEZ$*J_3aW{4cgzVeY*Hh@6o4qdO^MxKg*$2b?|x=d%wlXOVGM zkSRcD58iJ)`vK%dc`#RLCyRXlO&SRnqNW+3$p$~H4gqr(!7(x0vkw{00mAYM&Y5$o z-;h?86LTBWYmwyRd}Jib&qwMjv;*bwuH?H)7vQ*|VDn%QyXAUoA==gJ8OS9N@e~du zJ`W@z)_9FYY)h;iRp_CWYd4#VnU6{?6OXf5Ohk)>W$^)H1&Edh)H}s<@d4d15);e- z3AhoQ6D@PffZv#jd1+LNrIc*eTCOVqB1>yvLC?X?XeD~gCvp{aF2q_VX z$Ra>%UeuEyWc3wDm&7t>4A{s5e4Cs;ghd=|4Dwsz0=Pw`BeKS7;%1NqQXqz7ot4HH zloQQXz0u)+ieOaT8$4bClu@)wIE-yG0+sKQp+i9$c|ciKMB=~?ih01cWT5{BnANyc z0*KIli-$`_yc7kt2rftJV>?09>HL}>}6ZL;9@7zjltq4ECdS7V4X1Iw7`f2E;mrGP>PVwkhP_QacBzy+$t!} zYH$Jz91spJc|l5$1MFM&_kZ-6X};}*M>FANaQ9x zu}Yeeg=-cGPR|3^VP;v?la7oR_k+92VNck$Oh8P$Y(y16m_wdjeuqyYc3U2Bn1%=# zl=F2wMXCZH%c5K5k0SvK z!8%wLfZ^VOrxZO>>_p1#KsNRPpEIsB)&XD>SqO-Fxi^;r+^vmG%%sh5&krC+DUoL< zCVxdbeL7@LF>JXugvmQ>i!+RNKIBA48#qp)Pe;8~2jOU9UYWI54QBI-0c^da{eqxi zqYd8XWpQV3M&MQTS_8D=kGzK2+68S1WLtvi`=PW*e!-RwWZF zD7A{%Lfdqf%{l1%HEy>w9NAgA69BNJC!I5Z{sh3Zl-9EAEUW==4#K50izGqR9$XNG z3tI{NL1|0CZe+k2j2JYNKs1y+5ZsTQxiy9rsKY%rXL*Nrzl}}bz&s;0EK3<6dOr`7 z8b+BN;@~JUa$8v3!u~X<5f6zHk`Nu488SM5D794+%b3Fz^*0x zV=n8a&p}6}@`OwI#l zKNrQ$A_Zb&{ls%qnM-x%7(rNziREJlED+?dW#iAn`T6JCl)YQB^pLsFQfws*>}deN zv|%|ubHobtI!i|_Kyw3Chz9vl7g|CNgB~~E zHISqjX)!sH#+N7Fx33d|(K$!A6}b1B7AMxV1xq?y0BD(w&_HbQodPs=J`U6-!ZLx; z-Eql$Vs(!&0tn@uEuV$1PfzE=rcwRRr)SJ1MYkC7r5)$1k>Dlk1xGdKmT=7{$#4itCMY!IlO+hWUQAIOL68S zxk{;UpYcNZfIGSgKBHkU4S$a4+owA#pN__u&<+^0Z$5oDYIOJnCSe2`EKT?o|d38$%OSnx80oTNDK3;|r#(EqkC%=L_J< z-o~FShD7=qf|nEvW`ku<9_isy=x|6SQVRwBzRab|2G+$RGW}ux?gkw0l3a~#kzv%t zBzRUc|DUr*>~qttsPgrjZAO;Fm8zciJ{`xX_Dbfn;CuG zK(C`8)X&D~Txs~Q4(%&NRy^t|MM758X_jyb*a;V@e#2ey+T*>rGMDTTLH#=R;vgMe zw>Ed%JFGz>EAeQdf)GSkx@_wOw~-RoZMe@^=};a_63lvun*lv9^-{(++9@_h8@Yd&v&+1Qgk3DS}6I?5$c*7*r?SRmh&h#Y}V_S_>6>lD{r zHp_b=X9||0^mcI!W*Dop&jD2c2_>||*OK)GQvjATi*`0^^+J&%b*!Rx5FtQsUcrr( zSNFXs*}iU&<>A~+D1T}bjiHHI)4aAsF_D3Z*q2LM0nDKBX-4{+v8>#|#86F6%J&XW zk#n-2toZKt@oHqb${eTF^z!5%D50&PKr0N33A7L;%M{0^ z)`Hj4qKZ6jT=*i)Do-Hu`JQK2pyv??vPSu-#EZ-MFJjCb46z)>ytmlwwkq?0&D#Aj zGzD~StvzW`-iI(xK1ar#K*9l4T4WyE2;1mu_Wia1;pDQdK=HR27SRvJP~up0e6hmT zH-Z@49XwkKG?dqr0Lwsl}gp zADa8iT}e?`DQNppDgcgS(GA2-(NT?0eg)DAl{E*F89<#y@XpEBJ`uN9-v#6?(cLXH z?L4JhhvgU0QnzSYcmy%*Km4LW{UPLgH*zXFhb#0jKpCh4)o4~ou%ZbQ`aG&*Nl4dm zk%Hq3#!QDvBA~Pf<>Assef-etDO7Wwi26*uAAjbZ9w=a<)`_@KZ3km6txgz4u#f-) z_Lv_N7$Tz~i)=2-K0<+rHu6rN97Ax$qE_Woi2HhlBApjYLWgIiH8Y}C^Lv5DP$@U- zdB^Y!-7?nX@*jC4=d$RUNuVRJa7)$qi0Li3#yl{@P3ekIVN(oXj;^st?_>dwklu-dEC6wpk);4TL z2Wjy)^$bV^BVvLq$^HWHP4wj*=`l!$2AYlw8=@sMo;!Wf0v_#_c?mChKQn@e2lMAd zTjdEDL&D3(;`gle+I(H*ljNiyZ9VAhL==*kZOOLf`&!AlLvPd@S;oCii%J&`y)_b{ z^voB7c9L5C1J7=C@|d3JprX2Cy?M0CLbkD&wO-Q9>Fia!RaH{x4}D+EuFITu4>E(a zO$2E=u)ngxm8A8Vs{@1(FbQB_kS7g{k!<@n@j*#Kc*8PrQLqeR9Ha-8fZZwIO2Sm4 z@X0**f?bDm#N`xqk0QG{z<7uhYu#_x#!NCQ(yuq4yaw_;E-?Rq9 z>GP@NiQHp;B_5;oCs1}d835Bci=++D298pA!KX&teAuH0W~7#+tY1D=B9G?lGZg5- zs!O)TF>fG!gSX`F2?EN?go-RY#K5dkuoF;39$xzo|_f= zG?6 zcAEYPWVL&e3(jt}-m39KWOwXZgV|B6HK@U$*O*Q3&eb4M{ zitw?XG4gnz;^*W~&Wn;>zns4-n=JowRwDSy0dyySALlk9*cp7o>%vEf2J3hTcK|5^ zt6uur*;+Mn+dbrkjk1hCf>~TF0n_1PEL&_1+(SPig$(idza1~PMv0!ddA+v!>{YS{ z^>9beP09WyS2dqE$X}B6Jex+S0N)H@VK*dmmP3oDu%8H*NI3CeU#z@MYGKhOC7|K$ z71WA)D2da>#_VX@-KL}Y@v6q;=;(R4;!@YspH&9u(Jxw3;4i~oH`h|?J?6Db8PA=T z?V0^hJV#B8>-d$NOL6L1wb6yXu2Dw)s6t@iCjnUZf-2<7aHji#%pQJ?**&|++Vk71 zkN(v;-G5QoLU5oK;IklULs)L-Z_grqvM9;8RBv$4)2e(Ixe>%LtqzOGb%WhG7+5aA z>;=cY@b0OCA5Vu6niZoY{kA{k=FGN0Yf+J~LiTfSlRi9c@yoxMntm$Wz5Z5`w)ufN z{rSTPf~E9Epx+sC`2At2osi$9*Fq^wNu@L(M*mAdX+%$0h9ts01Fdo;k`or9YA-f@ z);pbMD#JKbQw$_)DN#|$K*jj6XsMkHDeOT`X7BI>0+uwBs4Zk%Jk^MAcfA^iPXkG$ z16ZXcm88MqPYPYdG?MzB=Jy2~O2=&UkZmVqUibLS_2s_nUf<}Wp(rCah2(1X2bD=N zGo*EA_2<6(f7pA=s4DlaZyV|61Qtk3HwZ|Fq;z*nH%KWUCB5iwP`W|7MLMM$6zN9k zmh~>S?tSem_I+R1^WM)G?>ol*SwA?2W6g8U|D3<$5M$~tOor)X_CjVRL1u^mo9%T1 zRiW(E;$fF!i6XcVK{0WpfnWodt~li`Uu5wxBSAiDEavQ1K|5sreQ_mKVi9@q@XD?b zwoXy`ZmO%U_;yA?_3p9dY#O+aGx3P~0o^Zf3rqRLYuZJlPoRILuu24T^sw6}E;tqK znZ_ylUQ4jtdJLo9v&|R@MR^f9PBd{>a4&!~9@n#>+;->k>^Vs??uYpphzHUaFjau0_J_9de{qz z1{#t9P8{soW@cL>a*4$F-SV=82$z_7!Hv_;tmm$rc zz!&5_^`B7SaZo^4AE=eVjQycxV}*F+p>Owx!nWH|FWYF);ljt@!p7jzNx+?EpU$jg z&%#4OmOq8W4COD256h!D-3~f4D}?dNhDq0q>%rskDNN^q9oW*#NLY@G1@rua7p&l4 z#$ZD-G8DobDa<^Dvfzdle+V*QbAXj`-UV}vU6G*8cvZb4e~*}1Ps>?zeT_87guK2# z#!wS_-a2YrrTi@;v?p)Wjvg2HO9WEB5^SbYE$k@am+{>GV4@8b+z&*r*?MmF5!>KZ zA9>?6-eP-eV^7FZkx#QBg<~7C!F9!f7sbJRjjDJm4eLe~^oe0x?x8W4qXZNae#?&` zZgSY(U0@m-l#>1l#C%!OohZZ=bVh$mkAh_X2 z<0@xGk8C*9-8`d{8^^y1BG{)*&_{+QB&Y{iAvqbTgx(fdFit_=!{#%_4I?HPslnzC zR1uy{&X>JQPx29F( zj1>)7T>)9AsMP-uL5D>lMS^!+1R<>y%N ziXMs4FVdFrot3i|&ze>c>hx=cYzmI}H!R59?5Nz?v`>r+irz%N*1+XuM{VZShB(E{ z@)XZHFF$e52SUto-SLRsNcj=)z%k$grFhcmj$-DqA0Bcqf+z zRi%qm2F=lEXH&XhH~2O#RLw2Oh&^&$iF0epzly0+(?FhU#2k4OTyGWHyRDP=1~ITs zZ zaE9HC5&D+vGivCfGw`|38>#JwR$KX^*v4X)!RHk7aCY2~)(!N*52)h?$dIL#GKy=t z3_NfnU$ll0%GwzEut-Ff1h~-yajh}jRC?)YK*?}^^mw~rk^sWiEzdkh;w)+?%WYo6A&KqO+>ao`N5VBihTbqQTZr{ocJ0^5eQau%qCWeXvPj6ut9j9 z!aPJltY?Lw@+KU;g(#ZBNUt(TjdwZlHl#5%FfzsH`>?P$nJ7mi%d5|@3o zofU^w(M&rFGL=^<&#P$K++LhO#F01ROApE|-5Ug0!6LNlp#(L3o`_HJ!6KUL&&ZHl zBi917o0jd+Gd{7|ctyWn&wOW#D`0{A)W@u>A5k?4`ln`Nj2n~c<~A(mfkqpePuB@i z*QE+H#mLNbSVNV2H@FVWlcz$J9ng6dOMLs;#{3P&pzF8QB%|U22lq`uzfG%x3d@mT z)Hn;<`c1L}M1jpsF7IeN2Xoc8EH5m;j!9w8h<$cp7J}ItEo&ApG&kH|ZG6<&a6G4V zueVHaw+M*gSXQX*{gACH1eVtL{H9>0)1?8mGoILamcsEdH) z%Zl-e8#(yg$~Sm37uX4i*$jMRY0Zk^DY^4%WXe*LcEo=ty0;+p?d(gRodiQmSOv?_ zB&*#L>%K22x433DtTsM~eX8a2ISk+`5$(JgZE5da;$iikm$Y9)chj)7gZkAg6nA~k zXg6SO?T=}B)aaTh;vd*DW*+XAj!ac6+D6MGm$YTSpV5x?DTsmn3_&T(Yl$id2RA(c zVm9KNF!x$EZJG_&YVgym6zO^~ZR-(>dxNJe;>I8B5i>C_j|FVS?pRami1yJDebf=-t0U%jM=XdV5KS#)lE`H<2KNF_#-qP2BN6#M zS#`LojKl5i%7N+Wzn6Y@s*o zx7#BIE$>7Y4@hKdi+XN(RR*$9Gs)wZm z{Y)0le(@Q$Un_Wc?{C;45FhV}OenPd=MB4O@%GZtyLZVa-!D&3_P&mO{0KR_#GX;$ zAu=~La)Qt_J`zIbo?90EE*@&KQZ!lFCg8R~I_` zIMH5t`Mga`g}OrM-g_qUA9Y5K1jV)u;Nr0g=%X*B+UHJ2e({9?nu0(U)(V z4;sQ0(EiD(_FK;OZ%(z_^F{gq_y?_TEAQ|HV`1 zEKKC4k7rF55;6Vs1s;1W3#Dfxvxbp7xcV7ID@h9GL&9{%0TL&eRYxV+Y01}-AoHO? zyqDy_3*6$E>KF6es%A!9$egfMBK>kGhD`%rvAmGh=2K{lCz6o|+ey5B4jSXB*N!Xu zBgQjpfAM8cC^s=y9}O~fG2`QF=46R{XRrQz33IAp1&Q6TVhtB6d0FMfaEMut!!>hS zJwQ1bU&8Ycdbn*PR*|rcgJ;Rkny6;R>t8=im#{%(+}k9A%$j&3^^!>9sIo;(0?V(* zK49`YC_Bonv*Gdg)~-H5NIlcUN88uWgtR`g(k(ERz5G4K^DAfDGyDGg-3`gi6Steg zUooC3^6Q!*UkD63^n6(wYEwCUgM1(3;VnU7JM>dyhdUrAVA@b|)JSj6LgYbC-gHt{ zKfNI@5_G3c4+UtcIn@q7ab)8LhcNYb$)T&g!T>o18&ixYpdoQ}MJy|m=K#`(5I1m~ zmAXIpqb|ap=BYR~Yb>LzL{9iy-b8xY*k|eqVR)mn-AvBAOor&Duh);-Si_DYh||c4 zW_h0yL*tIxgd-tsQf0z|%%FKu%rC3PQb80L6twbskBDc&{M5HVE^AaIkGcAviOI%B zC8$$T&C^S({<5k3cD^ijbeZ?Z`LcXIqn35$T-9$e9!XtoJYs}6@&;ykR`UTl1;kuD zi+!53JIY@%o&t^`%TROvlgL>20?xHONhu6d>f7y=AIxATACPi7TUakA0<7XQ1DA|P zY1I4yW&PPNG5dz(ty0!V_PwOA1= zKP>Ya^uqPlTAc72I|%ixhzA1>=PGoH>2+?gbR?PjWKCzWkCZ(94r!FG6PFj|M2SBN zt#&G|N&@(0nd1uW?>3bWPBi*ky0Yn{2^Ha2scbpHKW!=o=G?Cc=Q=SNNsiHV6e(!K zJ%Q;;4@%}V_gEqI1rv0MvB@Ovl4)F0(<;YL`@%lGvwQ8RunBMnq^6K(0+=- zR4#S4aUzMeu=>D$Wn%h^PXQqdLx=;*alCKB8MQaVH@WVP&r>!MjTAE9oRBCJb}YJ^ z+cXMH`zE3+(Hkho+8t!N$LEul8E8U#q)~^4V!tn~^VWE)0Y^Bf#hqq2=Nd9TYLwww zC4mnMd4qI?Ii9moa6}`nyp=vrPcHce5baN^xrp-`2RJH_d~y7y&$v&9*+54O=UkZ) zi1wvFmVhEb4n6eCP#WGxOQ(!#8Z-Z6GNP6(rqy!Qe?C&D|LaUD{b9;IG=eOksA}z5 z6q$fOda4ukKs1(8l6)~vepeDJac8ZSs`+p{$YnQzpsaB8tv~=O>EAwP{~8*h^~DeR zG5ZCL*qh4KYdDx2%uIh$@x|BeWa2kyMDWJlOXANg3@aV}*oZenKLw$l`Gv38ryJvb z2C~FHf#6(T){hY?kNy_O(lx37n74;0d7)G*QiVRW;_y=tN^#A!pjdn0zmigt3c5Ft zjE!Q_>E1rF_cxj66(ajBkQJ{8d8C_3Uh2116?7lS@+?~mN`mkleE4y5c~F`np762# zQq)iKxzD|U#BmgvI?G5jFnG!z>0S_;Mnf5(JVwxMpiG=oI4zlZCA9*kHhHNe)+)G( z$@4K^8~QQZ)OzkMcTl4j0fk1a8FJF%De?^*&_e@RB{Rmc(zM0Ynhq>GP(djF1*YG3 zbv|?D1g?aQK)p?~jpXm%9_H!>uQWztRn7?R)nM~@Zyb6V=*;fg`TklEniFx&pr}Q@ zq-Bwtu&~vq@vtPnQ~d&d6Uizx!%CS69{X6CII)2LVF}#uc)xHc8-xo{!sS!*7zP1O zw;YCasB@Tz1t9TE{OK)RkXQj`_nv4EzB+RSyy%S*ZZv9lNy%Ie9)bC+b2UJK%XJh@ z4?*7>tLo*R%2Hgq%MBJ;D3;S}++zqj6xl z(qqaYwdn`l`o^@MKAb92qlqsUNFR!$@Vo9b^IdVod_bFzQx>Rk$k-9>3$DfuM2l_i z5vd|daA|^*xh3imLHeQICKJnaIxbCDe)=nm^UFYTHmz+5HIP8FICUilf%lozNoI|C ztME*X1?%_2ujU;-3cdR59P*=1Gv4{x{1W64a=^3XjdaKJRR@FhawX`IgZq*iO9k(; z?^l+q^#m=4tBn*(pTwe9Hs7wgGksaFxAT%6pwNgyR+6-mhHrF2InAsBSyiJBEpJcR zd|I+NC8lnKKa2vghb<4kk{&5kwZn=I;hx^;HrwJiA0=|X2aZt{Q~->bhf`h`uq&}< zr*H%E8XqC@O5UN&S>#Z8NhoAGMS@GTwiYS&dbC=V?>2^an^C%&pp%VMxm#HHrmtZlZuEORvd5Aqa<5y+?kG$6vt!60@LoJ-VWxDYEP zAB|Mi;Hc^{c4`&!%WyC_ty;uN!iK^lS3=B?3xtnq=4Yp$gq6#ivnA6VMfYY|!)yjj zjw4~>ik?S~B-1ZObnJY(y-e}YI?Hn^DmI2>h^j?ZVCLEV$86m~v3tN*o`WuPKTqUo z@xV_t81!QX&Eovbq>2}0lc^3KC-GO&u(~xpG&nv^wmmYJP>l@>SobIIhA-ggP?b01 zFncr&Vi2z$k1SNpV+$b!t79J*IfHXaP~b~>tE)7? zUUiHc+rcz0CewZ(NfJjqY1p-}giew?U2{CJ0ZLpXIXglr>`{qmGh=Lx;(EE4$CP1% z*sOoibeXAl0`ECdN-d6Am92rao*RzpU`j39Jo0=GvKVfO{wFgy56OP@f|wqBvszf= z1C5dXnH)&OOx#1$T@hznf=p1bK#>Nr9afyk0;5EOFG|I8{dDpTR%-DsJg{o!VvJ2w zQ4=}^k%WUDXqKb91r8-by(har=+d;Nv&sgu0W^UtYQ?*ufOZuZrtg7?Wp^$ri(rnb5k2CWL2o_8ixl;=3xMsQ!24>iUEyc}4&l&%Z}`Nj2%iVJdZlwR5^PJ8 zQ7VM;nsL{S%2#^%nLH*hELK`vV6E4YC(BNCs9<6r!^YaIu3l zsaaxp)vhN}Mhb$BudUR?;7o9@j0$Q{SPa>i#}HMheA~8#$0K!^(j{dJ*^4dx=|v+^ zt&_SV_VUE2Y-W-ZSV|&ItTpgVxqSOwL+UI7rrp;VZb;8^(u876)#w){de>{R{p}<1 z(^Zz~!F4qX-<(f+&At{)H4c9udsd1{xNnFh#Ur`n(AN^P*cKM?+=Ch0#UA!q+M1}@ zO#(Ki+4Ix3#g?b%KrRalT&c1`+q>gUKfvEiOJ+4yZtF0=Jd3Y{S1vbO3?W!!#PA!$ z0jx;H=j0#Q$~-E4rRatI$X`tnl(nRbN{OA3tVU!^Xn!T*)wW5x_AGVnP`2FDCfxPw z%}$cswP}(9Wr=|Gy3)s?7_+Bm9oj-7Hl;)Raij^t(wXE_5nMDF9GOSmQiV2dU@B5; zpjj>OTh8%D=tA3ZNjK{^w4D|)cr44Z*i7b3T>j^)lQb<_{49ju^p?<8u{xD#DHW5Y z_rI;o2MSip*+)r#eS*d5OisP3#_p*I^AS&l3Vsis;)9Bfl;Kc%&$(#F2hp6Z%b+>Q z3)Lq-l*Rh6{E$CVG#d4D5l#9%DCt0QV$ckO7*{_h?ABLK6*!c_BT!X0!yH$^Ce2`6Yd!hw;NEvAyQqaHq!tgN?}tr((dxmqwoNWg;dSC z{_iNTE8OrEQWOS4K*z~kP4NQJD_8)>bDbi2Eqc(+E3SoP!bTo4Wp^1zqEg73;}i$Js|-Npnnd?T#~dU;o8)PqKby{kB2UIpmj-t^za$V8gM7sZ8HuT zS8>8{MByn{Db>JXG96*q*s3+##N;NQ0C;r?`Ip)2zoyUd^~K+MTMaeR&tHPZ z$$^P>7dUpZFW}dRPBBO;7}Qr-0dHalr{Z>=04D_4=ZNw1kcl`7J|Lt4moXKuH8@`N z2|BW$e=z|_LJG7-pCC_2BIog_V+>V;S3p8VSG5T396dr1+h4*Ar~D<`|L@^p^{=I$?U68uK}4?G04B2z+DDUX@|_o zo!V#uAa$itJ5E7zB8kxlXiC08#ehJ(_WrpAitFDsUuF^$u(_0u4Tv0My)ia8zGJ2abJ{8js zUM1%^rvy&G4Hrk3Yyn+5ndnpL96DYwgb8nJ;^iUi4)s^Aq^b0etU)JvnIbyC@__7K zXiP1FXE6ub{tm&G$Gd>;*lQ0N)5Lc_WTckerG*CG)~mc#zyD{&szfU@210FV4gAv2&Vy}*U5f-0#ads%ylvmk+{NZK#3?zJ}vh_ zNfNtyzUD$cd$%g@c7Cr~SZ;i#JOzeAYDlA50kTe>$)JdwjjY{ufh#}1*@CRgLbPrP z*8~je3(9xgmbnT~@&P9dAAW4ECct9>41o|DHhJ)PUl+pYSosff23`Zfve=;|K)5Ve z^{nVQZt=?!+}@3X`1oQlBPeqLEHucK!(Sp%m6H%qf>TwDQdNRNUz&PSg6UK&(UDC% zQ=%tc`hgLs4+9!eUrLB$B{K50E&y%(UIYWi#o}dSHf1Gg$#s)uF|UiTu*=0%-cHOb z8qt*LnwFy<<@PnlDRz_-<{PvEIZ7vGJ7MB%))fj=@ko9ZXxSC>3kkglWwP;Qm@DO# z{15l=X+9kKAQ5|F*h*vC2=>iZt_=csdtC1eGPwpp;?neqS)~w|7dRaViWG0fJgQKf zP(O`V1#zHA%7CV%tzLS7&&`Wk^#GOM&*ttlqSx-fj_O zvsiD4Tj(gjKblqRBFB&Ox}kvz9lNxl2-n(&Nq|@m_(s$iKUoy4Cn%NPn0Qhjanl%6 z3L0h8Kdo$x^=wL61bOKJLFrA}Y87wg_{-aavh|t^Je!Nsn@d`n%NCm}Zkj8JTdD(aU)#qNsScF2AlGL+xxwkxHaw zE)B_UM{6ZVZ53f7hE%by=k!C!(HNZBjXcb|rSvK4rEb@R%1smts`g?%Q;cEV{)i6a+px4?)QLH(Vrx3OEuzp^)cr z6vzYBmF(ozgE{TG< zNnc)}$>_gZIreU>1ovfDY zw4)iv0f>g?8j)%o4WP%RLwcYocmR;X6Mbo)3=y4@@YWGjn3Ou06fd9RQ_$Bq8&w&e zQWTm}z|hjPpOUqoepUBe;=_cnw^rPOg&ETyQ~ciPdYMz&KPEZtryrBf zimFV;B~I%nPUDo%5`CG(jGfXSuhUe~fykvgTg|y>>o~d3oxV)hMVL3YuaXps0{-leQ-h&xJ;Ir2qIBNov^i z0k_m(zJ7QiFA`|CmV*G6#`zd(|)V}D8=*f6z&Va@dY>b^MH59U}Wlk>BG-x zUvy+Zpm+vgMF`|E*(OCtuIu*Y&hs;N2R}7IN3r+fN75ioIkKDsKg^ZUEsVt@md{w( zOR_7C6lL^Z1ec3dml31rk;&xp=gt32dU*f?5913<{@1Td|F|k)M3>^o_($SdO~G*b zzr_9g&>1mn%Kv>;lBj@?);d^MI{V(Ji{mBZuh%8>l$U?MD*5HN{cTn9%Wr#+BsFas zxqIewFP`s-fBXmThsl0c@g7MU!XY=@{F~o)sMqtwz2BDjdg$lt(jQ3D-~G0~5zo9` z-tNxT6joqgLLWne6Ja12G?f^=e6S7b=o4eDqFh+nZ{EE)14*AThE4?@C$vEzn4$q> z_kP>|bMgGOTQo1%ru(A6>Gn32ozNXUwaxcdXoB?zY4N(H3@h|?3HGXEKweZ#$2i_< z2PWV|3M!ue9Z4#QR!%*^IHXuNX8}c$2EU>LxIZr}(2I=*?(H@rcnsl1F`9Q( zXwTo`zE?SE1HEY7C0ajd={05mK1xlO#>Q?FQDZ(9-asR2S6S&ll*GUAK~!{qL_!mJ(dz-+s)$%yxL{S`d01Q9e0qb5A@= zH-Li@&mPjd%`(oGUo3fDKn^axzCmKWTpr*Oy<7p)Ra~w{@O4>a01MOV-DV z{YR=hePk~@zAkjBe|VVe<$w<|liWA?vb69L`+(K@gj>cy1&KY(x$&&w=_A?;o|j7{ z*Haggqc`g=kv}*P?&gob-uf;Z_pse&p4A5v1F`nq=FsY(a2eo{d*l@`aQ6enLQf)|~j zjWK4Ez#|An6or7by0CYkr|PF*NLWe=)!kY!96KqlhHF(ocL2p&N)CQQ5e@-ncep;3 z^wM#O#SwNSCL>7Y_o+w{C%-E4&e+sBOr1I~VJ#{*9=wg5!*PO<7bSU|t8ysaFNUM4 z^P&~w7Qa}8mr)`r>Q~>j&+XVrzHJ+wP_H*5MUrBaYWK;`RLdq>ka0o9^RhxY)o107Q1Sehtd_(| zZH4=Aso|f+^Kx^YMCX-Yh5cs>?Q^~SKgIKOa`S__=hZ30WfnX`^CPd%YqEOwg$d*u zCcwGEA!f-x23IsA=9DPXP0K~DT^4*H%T9GlDvxZ3s=5=HV>#dBfv*>g^G2qV$S=@X zrM_KaZD0mARnuUIDGn_LtXDOJ4O=t;6PQ-5Xhc2s-$b(f^n<$h2q{lkTlxinS1+|1 zAvnmKQz5w*VOp*GYRP(AOkdA&0zVwv9|*VW0e6^}A3G5o{UCZoH+QigziJ={?#UUR zFTC%>palnT*)88BZIZ&^BL%b5uEK>7bf5(jt6{97RiWhJ6(074p_z09DG%eb-^FVp zIIsCv4*O$=r)Yh&=+L}%=tHHb_I8f|j2$}%Ale+F1=QyCnPP*mSMlEZ%rPWSJjj)O zj)i@a&HZDVdVQ;dwBm2E>P0;u@TpHkqXc7!AOS;io5#xao*W1Q z>xKv(lHAA&2?wmN4YhuR<{;#3JF{FrO8kbx$!%{{x!(6{tbtonnkneh4?JRf&`Ri?e|FZfF4S~ zf9|cQt3S*CCf-LhJB9DoekSB#`LShwQxf$RpR@36*sSreJ#Y8(xX+;?w{^JR`#Y(e zkB-~Ijmf13`Y>K4M4d3Lap*KPc7G@S8v77_|nMThBVJ5+`*oBjielT^!tSr|%nT zK=bEr0|we{y!p#+gD@%lAG?jPTLOo?fxqXg7Eh4=x!dpzL;LS`Sw9am{!0LQtoJIp}Q=&>AAQEADUk#Kjn9r&slH2 z_)dG`1<8Q>Z{UKjKTs`0yNyds1w>k2a(`6Xexm?{r^qY*PZS6!-Z0It$19NBO|FFS z_|fNtP{i??gm7kBQHC;96q$sRo7@A?XROxl0qFk~TyW|BK0<|XBhg34Iwnc`6<;#t zZ*V~=8;+P%vjUyxMmF_3o9T|d3|oK4mD}0+9e{4L{V%w3JNbGBl_-Bc%t-phS1l>~ z#g+S~Zo^!>cv?ZM<0Lqd8Kk6fY@2b#Govc6G59O;K>(am9KOQo!LqEwZ%n*1Iv$52g zJIsI4?=m`gv=%caawBzGb}Ie)R7@^B%{5QK#awb+UCVxVQq!`$u42s&%2(xhi2>bZ zPe&=WQCwC)yv^t_(WWvNPtB#Oq4YBdhjN2EQrlZW|A!7xsmh}Y_vO%w z>kyGn_!?gCVT^^#^^`*9C*p}_->!x>Z(R?z_A%t{cUcv$V`a+TZg1>`4$b>j%zne! zuTOs&l7}==q0I;7$_cu!mjwwZE|(yEJBF}*7gW8F@KrjQGR?g4n7Q$2l@xydi!0~W z7JYx1(UsV`v*U{~D23Ayt;|me5Dt1yZ@vDH49j zQyB16$b?8yX8xdB3`A&f1ue`hfFuC}S=@>ME7&ZM+7$y;jh+D4-z?|{juf}NI4wbS zsuNc;*U8K7-A!Iw*SP*flZi)p2FeyV0Hk2zzI`KZVZ2l3bke7i$^(ZW=ni9W( zK6jPkAMw9!85 z@{iz92t^F3Edx1+$Z?yJ``9^HCfv=8qW}<M1%Vjol*+YANdu^@S`YHuqnT~^Oxi;I??|^~u1$QD#5> z<50KOcYptOKhzDSJV<6rZo2nOh=-H?;hFe-sC%o>azE5TxpwzMUFRy!53;|&SpVUf zfHGVmzcE~o481Zw%KY{Z~61zhkWb@&4^UEVC&Vf8aYU<}i$NVQEK%3&YeHL;L9K8I9UFA!ob7 zqqn%WMPdlj%G`*1+#YhN4=!J%+)fTt;EOS z8JrvdHkDjqzz4b(_d${RT055)x1Y;SI{Ciu*K`PZ?uLl;)n2=}dS(%xj>~Tm%Sxn0}| zHO%+?5VH78l!^LlsEZ96zFdoua+vxYEXR5{NtS8LXExCvc(v*E4DPjEPV{dl0~Oc1 zWzqRpjjJ}=C^GLG40R9cFSu@`8@I@Gzqf7GwMe%kebqVYo#pb9?x%a9b28FbCnyb- zP3WA>G;sZpnzQ__eX&$n=e@aNiRg1>5&3oeYP;ck+jQnf;Z&aE*>|)*&bO3k@2)T2 z8wg6RJgW8D_!x+Cr~}Wu+<{rtj;I>yhba%$w-!A_Rvlx*ZCy5CF6!to1E@N8vov|> z#oE0p1Dz-+P__Cq%qtIr*jyt#pSp^9p|A$?e#*vl>+fnJC=XFX`O`^k3ye989gG~b zBtTy}{vPWr?zc+zpPj^h9;o@Vdgd?4_CMcw{(GXYYh*3PpZ=vVPyqEC*yX<{UjO2F z*U)ZO@&8`&a_Dvl-2aOgsXrI5zXDL(c6~P)daH2r<=y_&)`RZc5)#k!T(bL>i?j45t?#?L)EnTAb@UE7RS?*JT^rNet;9gwo9jT z2ZFa2edD}QlpFu&7pam+u8fl15+|~*-O|e5Ukv`=U!-s}l-{=^rmvHC{!zR>aqmHk zmn74{KNhd$V5WaM-Yp!5``-Gu;@qH(s>ETW;7i!<`TeQo}K*u!TMSlztdh zj@~`gMevbc3ECriP4<$7FgweU|7_5nREK&b>KqTU^?9k#aLn4B4D)W4os0-xlz&o|k=LfhzU$X}6~l_2CRLthHwPsLBc8@h zkRLbhZCH=B4@vM|+*%Dj{{HZonCmz8@Z*W)nbKhQ^Uv>_y)TyIue~qVPo&RO*2L4T zuM`R)``7!A4t#D;zw-J1cvl?hYj*K{H1+PzMIHj1LI{K7$POo%WsY7X(oJ3I2e`&^ zQc8EAehYD6>eOvt$NQ6GqZ#HAjOv4=KYrhb?;0f#?xDMt*0CYO!jY+|0M=~0JlK}i|ApiRsoYo7A z22Y{A><`Ci6%&9i34TO|^IL!dm3}}Z#O!}m0`PCwVE&g>DZCIE#;A9X$!Z9)0FN9(K%jG<|Lx?F&f1p$&!CGkoN%!hCvZ1|Gff5;a|+@y79uz=ev6`zPF6~e`+BA z?HauLQt79t>}L&r?WO>o(}$+o?hw5a**0OB4?8qJP*rq1eG8q_X^-z4$UbT(=$!5~ z(bIHIF~%NjgT6{;>dXw~ze|B+2ALb6b2?iel>g4DG$TIjoW{JL$9sXEF!J<0jr7=e zkiF};6|BKz%gu+qQ(+}3A&`(dG2P2Cc#a?W69g1tzdR^n$MW|c6d}S%!_wj7K@x;L zZtICp@E4zBo&_{`z5d?#`&JdUt7PAvWAd;^F3#POIyq;BROs#$JmhYcDk^l)-K#*Ve=Swn$NF0X>G`<{H^lS%>w~uO@9hs?+#Zol zN48ooF@F~<9u|K5qi|g5g;3NHxrTR5gkki_`KMRkg@%`*b9%liKhpHQi(eTPHom!e2cuCN@c(f$|81!L zZW{dGhU$MCD%t-@tLX0*gMa6>=WF}FUg7_;ivItip}IFsF#bBTxZSe-C6>EXO8JMT zm)FS%n)wzFHj|Fa>yM}8xf37Y(3S~cQ7MV=IL?d%+Wwk0 z^aEGXtMO>nC!9&xL6GlcqyI+CcS)cBY{#vpp6O!b-CjlK_g9d`VS%|?Yh}nr+m^R& zWA=*QFRPMgO|#E)-`kI#+vtHyau;57BO=?>MMiIsj(DbwB39^D0zsNq#@=zm`B32F z#`Lh;V?NvkkvPIy@&JriDa&%$hCj`(x!M;A+eUn(BlI!0Z76{zrcWseFr8O;FGqv< zf3qsFUS-D0VqSg~5eh~!4?x`D%@@_;fH#T%O)O{SJ)Z$aLAh9a-g>q^Au2@HJuGq> z*gz}BLK3K$j6_QRJk;*0DJIJd-^MEbqPA#^8pVDNGaI7+QY#%jn;~D+iILMR2JVO< zChaX5w4usNN>k3!LG4B~hTL9~#c@wVL(SM@$aw+2N-DY&oG)lW%Na;j$Hhso+3hx^ z*+j03hHd)ByU?N57QY0Mp?+7)lNx?oB=i>UnUc?Kz@9rl=kbAXV_!zi~V-Kk`(di2bc8niwMS`galJmRl@37OaFCQ6?(&(qY&==2B7N z$AOh>5Mca?7-~GIq7Pe&rB3Iu-X=GgonW+ukjYK!%^+)iZh@LB(?3T49v$TZ4wt5(H#YS!-|4pypSBKm+fu zgl%xc+*%i#_vTkaQHaTVRP$V@SZ?pDH4n_bWNat42+YI)`RQS#zEMq#8}A`hsI&a> zvbz0Vs6)`5CC1p8fHGn2M`jm+@Ju@uy-hOU(WhmEonsM9MyvqfGdU`DbvqViWiW%f zF^1`-7?hg9_7vR&fYi~5llE?gJd22dC#9D_gk=b#;lQ<8onf-nj`fB#COE*KNIX6> zV|^|=b-5iv$Pip0VnK~U^s%NlyX+{^N*$R5jk=Flw>OGAHJ5A>9K*eY9c4J4t9cIY z%Ln43CSjxCzP<#WTz3f+Qsq+9$;hA%7bt*lN6jz6$_Q*j(3rilTQL(4 z#u3v2_oPgq7sd(F_NX~_Dg}!pZ?{fxjMLarO4&@})!Em{!6F>bJ|MJM{=Ovi-51b!95?tD1tZ=2&0^% z<5liI;!S*po3+X2DwK;No|~?QVZ!T&nulm=)x}_B#6f_(hRC(IC<4w3E)g?D4?anG z)QJ$>J&kItFxIj97F9!!UBVd>(;D)ngN>g zcW{W2RxD$(>doBnWhIbXq{kIwoa4bP6dB-DLYSNAnF?ksGAaTB5n`einmpTRnlktJ z(~3iS0nBtCmAmzHlN;HjlRLG z%|cSJsyn>uYpW{I)r=?l$VS8!<>UJJhH^*dB!415l(T?gs$0?XdNK>Mu1HG3Ms?JZ zwFptQMC}8CM$7AIU%$Gt7U>SH#n%zNEp_F37<*zje=<$n&_sJtYYTepTVT0x?}uVn zWGWoU_;1HGcbt|edy-P zIhl1EO5Jy#o13pNSiG&-%!mFLH=i5LI)p7M9UBPtRv^5h-E^!+VQROl_|N5p;5#=y zAloctdMrKXj&i(WzoFrTNH-0tJq<{D;ziCH?JTz2k?s%Quc<+nbEGzRB&>B$nWllx*o|V5Cd!wgyTDeC|(+izO!+j+9K0fpO^yV&;T7vEdk0!OBnCyXiFSP#H*Jw$)+?w4V@2V143WD)a<8l4)cM;CdA z>1$%u*@-FoyqC7%dyjOIGyw6-upjBL^zo01szmISLfG?AOTID99a{h@yVakBt0g`9^90HW+@{ zF`iX7R-_~2%4x($=b)ViV1W)us8fI(`pZx1ARigp#G0t`yjeG;#c2fEvjD&fz)S&5 z9Fa#GKtlb%OfoQnBeQv-QJe!TPjN&#`pS*_FFpYU#&IxE`Cv~xQO<&kspepq(?UE7 zgv7uoiqact;4qwU@*~S4Xye$sVWPMLpXhWA`X zuyMFHh*O9nMRtP(WhU(XYM-qxM}$hykXlBrUQ*U!KYcz+Y#z618R({%OX3 zL7IGtHu}sx`aC6i={)Mzoqnvq4lULWmM;cgCkD|Y27U+hX)YR_kQOG?t|tUoEdW}L zB~RvJ2y|r7Qe#Q@1QCv73`7~G=VGa47+-ZrW>8BbVGEFpIn&5krRK?W!^g~BV$F!) z4?+&(_)%DPdXWXL;!ofxshaSLD-lIJ5`rj+lG&dUGXPD83CbvmNJj~XRanvj^WqG&IQQ%v@wZjC<;P6-jE*{B`L!TjKKcjYH_*|K6J5J`L8s8j;O6>##OYs0F z1|U4ddejc|9%6M&@>_Snp|C$h$}#1TG>j;wwpdMxwZ=`ZPO)_&6cS_5p-ADbf`MeA zmaqX*j(~AHFq8GvJUb2c0Vdp0Fj3F*T$2Fw2kzn&nZ`%qRXaj@vD|5~4C1_?c1S7! zTM1CM18s!(aE<^2%mXD+6eK6Oh(wNMSGexkhv7wdnkk<8RV;H?AXhb51MDc<4ZNu) zJQ^-T51DjCr?-9-uRKfv(IN!B9=vDD@O~?AA3u0!pXCW>j96}jrmP%%i5*H!5kP&E zM(vb^#2$_`{v^DSYb!8k$WVl@<-m=j`$$C?4B}B=GnhU>Vv2ufN|9yd z^v>oP3jU$KVhzA2M$h4nerXO+YpD&wr@}sf*Behl6-~8`%|jl~gME;M4Y30308CFA zn6)b$R5l=D7w_>Q76Cu-DHKS*#u^C)X09CAtN?S_M<*|zbZR{xO9bkTbP+ppACJ44 zcI4FT;(>DEO`jmLdI0=34n0(f5c>m?k1s?29$i z2@L1)@hoWg*Sj^6O!)rNvURW+^D#+{48ZgumWn_fMoXopUYZgk^NmZbU3LzeC-F5E zNsbC-T{W}hv6;nDt<_MSxN*7F171h81`tkzt6qZxlgvYFV2xe%_JN!xxA~VCVt*z; zQ&Qw41_M5jX^4{kw%1!>)4}W&vDs$hYaVl*%|~W47~P`mGMboadP;Y(RB1y^NUQo` zi)OJ!sxkZ?%HsW9K(G}pVnAWoqgH#Vo_F%N7pBSz+_Y-uuFIOdvmlJ1-Fi(HTzdL40g7x9hoc6HZDRrEG_*0I4y4=i)Kgcts7Z6Ul&RGm?BZK zTi+75G|F*T;PSM^w`>!)%A7YZdwQ<<17FfxS67?$dtYoQ%gvNFMBg;Ew0yW@x5(LO z%3Xv?HA#_F9AKUBQeOg0v~QZ3fNxV6kJr$~9MMk`I%55sH4!^)ZGqPIR^k7Ly|<34 zdf)cHm0XKlba!`m_o7=tkdT&;6cnUm(TfxikS>)j0cq)!kZzD}Bm~xPp?mMM_c`~R zd(VCDc*gVm#vQ}I{Cn}8^E2mszg`KLQ)^<=X6TPr+JMXLh&%+y*=;~`p{X^i_CvpG zPmCH~%4HhS_9Z5S`gX30TKusNa^sFXRtsywCJI0Yq72U~Pcjal&oLJmpMMDTg><6G zyt{S7_)dp`9A|jTBL+sqY^LtgP!fK!-HGDTRu@p)?@H#2(0-YV-yFm*tro7miEctB zdcEU^g7KLG)&rur#`R5?I$h%_|@&T)`0u`xi<;zlr8EdZsECeGPAyNQDQC=7<$8cV}#qfq9E7Kt1kuUEu_)N>|6q5yeCugiA@1j73PezG>4}64_x& z>4tWZ#H+F1>mR=*Uz_xi7r&M=&T|y)RBWwZc7~qjook*bXHLcom%6h6^dv3Z@d>S?1fu2IdVX;ST2^Z#)6Hy5o;#0^k8Y z%ol{-Lb3wd#u!$Qjk-k!^^!YLsKr3l#*lM4QoVnoQh6+>O@`7^^2}~GL=j6~O5k+W;mQ^CxHZ^IR_KtpHTz~xi8S-p6E55 z1|g#%YJV4W`7RjuJ*5K8VwsB6546s)i>7Ukk&Pn!3}nQI>eOe9zPvDAz$0NJ9DhV{ z8DkxGKwC7-UVBb4JVNL1fR{A@su}|btg0j9G1bLs?r=D;JP_^Lzhs2fAoO#Ba$vZ5 zFx&zv;?LNG`g}jEY4${mxUIGH8~nC(g|3NQZ_O&|IQ?kms4VyM@FP$_-M5%cuO0sb z)5PbH&&;=No0zK|E>sGl4g%apALCf`OD(6rtgEK*STXWLpbKj0aMOgPatz&YK)pW} z!=v#{?L1|dTHTp(J8d$6fX21m=xRSy6E)&T81Aar2XoIr0;31t)T`_!aL<(WHXj8W zqb7Twmr{&{sU18g0~2zpHpwq$u=hPYm~VxFm`pG#<}Av<2a3<9O6TUA&u^VJqE4S` z_z{LxtXbh%Go+~UcuWJ9tc zPZ70SaZ^jMzQq?lBewYgvh8h~lw$djMFjFR zp`sv6#T(2QfJ*}ILq#3eVWNw)hloUE1pzrQ!f7=Ic5mB`RYL^zFx4B#NwL#Nn4Vf- zQJ$pt0-{R#l$-q^?7Xxzrj-iPFb+KZM5%%&dOcBoO5lAODXga*S)6Bj z&kZA*!t-dQk*!#yQr2{Ka|~O^dN649Qrxp2q3SGCQQT^;yd}jK?LsvHyy#-)g;khk z;aF0y&=3?Iy3*cS`YYGFX$zcF(WU`bvfPx20pl(_SA<_96gR191k@ro^&ky035GGA z^0+xRED;YFsA1WJg_dM#0ywhxfwHK?k0duk14J(#WSe>jUr;a8it#W`rPCsXv0f6;z+_cQglYUg2F! zx4KOdE*Dl`+e!p0l5Kg0P7z+xNU@dB7izU02yA(W-+OT!GnZ~F({wcMK)Bhu(4+Vw z%{%;Ia1~7$F-QW_2MW6upTd=_K=Q)?X3B>aLT|P6aJwRvZIOD~usP+)_xv+g%v`Y{ z>v@V@Tlgq^dAJBF!GQ}F5D2H$Ct}7U+V6P10D>H;<)Z^SwsD}z`}`#G4K1d)05zhT zdfY?^BCj#cs#Gbl&;xB0UM`VUZLQXo0tJ5 z6!Q|BG4SQ|U_dp(26|)800WV%dm)kT8nhN#01A>XDE3Jx>}x(?GD-n_+9fc<#z1c# zBpGz9pibk9h<2PdIv~e*pRRzshZFUSD#YMRn(n}c3U01im_G+?!lNYFnJh#V3`^Y= z2Z(S;+fXMaQhEh`F?b^@*l#G?S*&4BekvTwSdaG>Q$(-7_65|3GWaboa7(re6oI0T zopp}^RR(505}?MH?IgF%dh>N;$V-9xojpWLza2=dChLF{^ko(6_)Acf9u15<#7HbV9o-M!=q!UC+jARFcvd9kH%ZSSG(x12z7RDk-R8(M< zrOFwBg_!Zuwi);49#(1+)`aKIRtHhb+K&?sg4e^AviXH+uA@uAYY3S4jHVc# z?P2(c(V^ExTqHy@a0Lzb>m?0v7P4~o@n9fOVDctV@<&E0&%DG47~yW_f1c-Rnqwa9 z4D$kW^YFyQ9?yLA&u6s8bYU8efU+4+_xf$g&UC599Tyybo-huVnHi1N(tFWQXvdNK z)l%O`jkY_JUf!{8rzU{^#o*H|SN`xoOB32PKh@_z)A1&oaAPb6vk7L|KCAw6XM9ew z47%Wyuh#NA^s!|;BE2FiL)V<_W)KHVmKN*hRT+aIW8Jl>+(9Zi+gA-XHb%4a5)e-% zoZZ-R;sMTEaF|s5C&$&bO2X#x^f8JA?V`0Ac9!o__{JQc-GlJLhHCRj+;jUd>C0jE zlHrYu67iICZIVk}ka{NEji7NOnvE_nv5b#%6u+#Vimj`rs7s&Q{W98mKJJi zxxiL@{z+TWHGDj)3MX73ng-J?#ovP3Q|m%XaXHsnj(#0GK)6Cd)+KHP?;F-=l`NLP zm(;T9CDpf(A=v22$h}V=FK*nbAc2A2y=~!zHEX>i9U+u!gRlWAV zVR(N!?+6R$DpkEs%zDKDe(WtbbNl?7+VqN`W#IHP?p55y{MGEYW}O^IoG{ezxq<`V zOA?*OC#Lc{tixr8V=!NjHW)25@%%NFqDVe&@;rA?{5IFXIqZni6P2E zV5(wa(kNft0Gncf8`aiwu~7Y7X$YV-!mOFjO$viu%B2W6QUCF@itC38FweEsh3(Vz z59u9UQ6h4HZ9E!2xx{NoYp_-bvAiU1N9zG%1pL+i2@h!J-$)_fJRsU02MvpW1lL%! zf9OD_Q%&B`Z6A`8W*Bcx+N@@^1gN65*G2*;s%0C4WO&DAL*QEanOvB8BrUHlgxdkY zOfT0sR&|oqL7)aXWQ(A^<`=*2xar_d0kkJmcSZ_JN~?9+;B`Kgi;y%1$mw-DM2cg; zbq8khrx1DNIr*(wxg0O~bZQxm&QeNpg;72Qy>v)if|RctK$9FzOHILWu2yia)v!q+ z^f2U>t;Nos_6J{tLFecElMtOX`CU9k%f!zQks{2$5q*@*YL$xh_{rnL_DK_jIKg?PgM>RL@{(>_i}Y zo|4}wy=NZ4E$Y1=f8*nHNpF4{dpf0n;O;>BkM!x?{^^hac^X)SbW50co>OZNu^RZP z=;yGduEQC-O~Iyh;_EgyIqy<5q-^XRLb;t zGOrciH?@5rSFK5;inWvqO{py)@2#;EOuFu<70(ax=?~acxK9suPwxk+Mm-Md(hls$ zLQ?DGFQpML2~81fu2yJCgw(4ISmUB@5)at04+M#-^~v+|@%MMl^=Cy6KvD*V#0M`% z)x1~L#@#D@=?6xx!@Bbz5?`7pn+EB1)W_r@5&UJY9qOY)gusylPH}@W$1P$v)8XHlA^WuE%N{O?j`PfC>DX z=heO8wnL}lO2=|^=S`X@dVp>R049d!yVhY~?hrP8SnMH6X*G6|R$G9rn8ZCT)Iq%0 zkwT&64Sp#hVbr0hpG&{;x8V6eKqY_#ISA#ZmR&I5N;wd81AzbMN}pEMC0wCFqL()k zkTn`Wt+gi%Agj?1H9(nP8YR6!r9{>t+Dn;d=?j<&E%3)p?c}7&03c6DQ2{l}603xgvOs&DTu5-B+ ziuMDdLz0%4m7t5mw7&*)YfnkDN3(hq5Fvdpf>}GWI542RGXTUK)^iVs0)p16E7l-a z)fTTSjIV*2|JYwItfwfzO)sNWTV4HgB|bXW1TaJQOK^Gq*5PoXSFb)ng%k0(@t!`z zlhgoa;Pi}?TRV=ZA(H8ObE-u(u>;c95hB0(gXi{|$=r}P?X9{gJUmI0LkZ~Rn=DS4 z4-3mff_xz61P|RgFz8jnAB@DYJ)Llm{+i;iokT4B;?viKV$=Xz9iP32em4*0UlOGu z83b||1UYhfNf?B@LW?#u2s=~pePxh7I|ggnA)rh!h#EAAo;Tp6Fo?OCiiFZZDGcK| z3{SxZ3F?MPkEe5r`e&mIk{?IfdZ_q)oJ`Trado7BD#65zn6I_@;SC2FPp=_%yMC~+ zo>Kg1mcX06V*|}VvZulTBW~T8>FJk`A7Se--S0=0Zv@`|JToXvmx62*O@LzJALICV zCUx&2*P~oYI-?L`qc8$M^`~jRm57H)2FxGBF((Z2;v#LN(T&Ol=14c58!-*e{Njx53=NNxH-}eew zxn%U7qrab9e6R!K6Qr!wETT^=DyS6$)~JQCP=nC~TIhvvbwrZ(-!mCJiCCsEX&h-< z_(a%W)U+xAFdm)XRKVEL2ULO;doMk1%zb2eV(9!_L>dxgD$8imZ`yMPRnF+T=f%p?LZ z3$5}z)JO`WX)sCw{HZY*zT!_KAy_654@;n`D&+KOgR6h2g9{}ZCu(a3dX&5rTTWB3 zzuC^K&>nvjV;t1dp6s;4NGG$VqB!)nxrOIhcrHtkH2aGV^&-2NG9;o9np}_AyWddrYQl+0z5QHKxqm^<>3Rw`{*WMqo^gMm$Hu{iaw@` z=J>cy4_)Y`KLMEwf34d51Sr>9CPA6pA~0P1Lv@8? zA1oms1Cdz_6EeTxyi7vY<}U1HNpe)NG_|YVG6w|QTSs3D(S;%>4HU}-todmvCrUuX z(t|Ci*V)=u1E$_Q03wsyf#lW5#S|gxMZ!o8PhIE<*+ik{T=iQ*A8^=V zM0xTtW~VOZ$w#N1+DyAsK0wuEMtPMca4BkDCsBUmTa49cwu0`i6EXclPEV zI4v#g);I5jwK`4u8nsc{hd_2Vo;!VO-t8ycKi$|rMp-!%JZRjYFRKRvjv~n$L@J_5 z5f@BSlF+BElNKaRNs{+J*gB0!I^Ad-_Il^`z5{T&9tzAH@JARS3z-2uEs(f!k;|MH zjOy-ruHJ{4qQ5;vw;>=81r!`ck`^}|NVqJ#GqusnC8~qqygs@~?ybq-xQRI=dVT1W z=0a_=1nf2^D|ALLbLnwo?tb$onq@h}Yw=tGuc^L?@O=B=74yF1k;G#RcFkk|T(VWG z#csAEq-T_=p(zAcuf)qYUHSZ6lUPjg&li8ZI%)NCMvH|=Ja*$6UZAmvTGU_W8%AHv za1;7=B75LQ`^-(DEDGPqtx;N>x|>kG+f@23dL8nK!}21j&7o>x6o;w%9P-I#K4iIO z5ufO!4AAsuoiu(v+aubLigvb%!EnhdQ*%4pFt*KjcxuTOb4L1$*9RQBtuvD_qojEc zi$#O4|LD*7r^sexS67M29hK1`x zcllw8GbB9|J@7k|!G<$1U#UfZCgxd%wm>yJKRiG7T}!Iz_lr`k3>wp+pUClC)wddO zOhf8k<;@SDPmP}2%_O04fd-UP;utiX`^|^z=IZ=VUx-myDtq$c;^f|Q88 zrRp@kty#c*#v(KQIgZVxAkZCh9Dc3%hd%>AX!0tf{VO?TvVk7it2nS08``|Iylf6W zzJ&~{!?G3#O+Xup1)O&d3YTWo50Xje4xv+4=`n-i2IC`zMj*<(06D`_;z(tcc!M7@ zqrl;Q;SZ5m3N$N?kx`VJ*z*OUX`Y6FmM=7QTVDTRu4| zjabps_kgPGfd9>Vm;OqAIhip@dybdgCBfgcsZD0>YVALS>(x0$Z|{Aiiz7=+WSI`< zv@3{n@6oVe)>~8CmCY*!%aL}{sk4$JeQwN+lS!Z#Z==@ATFtC3ljUlt=4h+Z|AEcT zwk(ricE)+e4Q7@c2YiMZvTHS=WcxsSF^Z#f-k?ttC)Cq_Wlt0q{1w65JsFlp9h{Gk!K{7RCX`G`x2FKJA+y_-|s;k;_3XRD_T3v|5|cyw3o^o*o(=iSGrRmF$iO zV)T)OC*;;YsA#-==kwP0Wi`db-j$RG9)9C?^;f4Kd-buiX8Rx6I>eTz2AbnDTgal- zRojV9)sCLcCP5vA(eZCo<7SX0N`Ar%hF}?o70tCSmGr* z@`40-|6C8|)GUmI$q(yk!MOlVKQ6g`2!hQYuw3t;NL=W}20DlMO!H;vU3I)cJbp$! zT)%Wpog))+&-uaGRF||oGYE}0mS$Ei^1fz@&=M%XpS`oUJ6@q`Z;3-yOU78n)|%7p zMP5KEANU(AkiXIo(m?@#ayZx1(gwRjZF7p2l~l?zpc4B^xIe=19oy^CMjb+tTt=lt zyFe@<)S&{so|!YFm-vw(G5;pi>)NrgOP%6=MJ)S!3R}80@;Ai2YzN zEF&tv1ce6wVc)TC^>0w9t2<1?Mj$=2n$|KS&S&_wA}}eefY~Xvg*S);?}>u#BYOxX zOP)YRd_Mrk?adO#H|>=+sC~80n-zL|5m-fp`>jI;8c(6vV$IO=wC%VPBxND(FEA=& zJq7#vClOyrpU4L6uf0K&Dawy&O$LMHDJ=pREY+B_V_Pe8fH?XuxkW)Cv}@v&1f(pe zPc-B4@mZd!KsYkNiO_=JT!w%xF3m^rakq&03{Q%U+^=Gld4uuP0}IqDl9k`t#xn@J zD|f1eC*)49>2FqNoQFn$WJg%o^&GXqrQ5hEEDn)e%EihkC@Kny9&{Ak;! zZO1>Th`Vq1kT_C%fVZ=XL_M4fAg4Q#6y$xN{TAn8BW^XonSMUSTGEYaS{F9$UMtr4 z!SwKw|Kfv6-K%95CmIVxnK`8TRGGKJY4;}Is$tL!GhjWolNEm(VMoj>Q)=r)Z|t67 z_du8c@>~e-Q>#8M>txNy3)m4CHG?_zl%uj2jK`$su;LT$%MZGON>Dm&bKHK537?%E zTnKA^Bg~d|7$KbjPX8y<>6SFJ4V?G;Ei> zuS-6Zrm*8MDam(f4ONOEXNNTzh{)xLL&EiK=KT1z`g>VVjGCi1R*R-#MlL+)GD9mk zAL}P;P*~87k#Jv+&A0VC?#H;m$Za22ejI^loTd>BZYol3jKm~IW75tmgYS^z))D!9 z>MYNw^YYS%5~ImvR}4Zg?ewtDauf%l>hG>54$Tjx%UNiMHAA{HLj?+SKG>@+H++4) zB2do6;9z##J5j}2%T=h#YlYpYJ+!f2EQF6)ATO5E?zK}|db2C<(l{G-^_^1&ec$yB z8U32%d3MT&{pXEhj}P|s8dlYxc~&(pToeGssRDO>ObchQNY0vZo>=;kT`!TjFt_*O ztz|I#EXTYQ?kpQ~&H($Y#BK|9(Iu`$+sv(oYzy}&E!f8;T(4!r1V#EV^|zDU!0Vh; zdi@reG$~`oYJ4ppLmW!o@Yb8Y;jM^_7`h#$;9G2hi8Nj&XuRjc>)fioye$7lfsgql zbqn}3h^^c=`(7-D%h>l}vX^T1P(U(c`XMsYT+bPL$frH$*v2{Y5H$m;ATPJ>#K04$ z^!yVEJ-;yMqAG5Y^`X!qM6+pyX!xQ_Y=P~e-?jTOT6RyjaqR-ou!Vm3a>)DkBn$h~ zrjq8>mp8YkMVj=!x|$i@Rn62hz7o$U2*n+0Du$a68rxA%~+H@%BiSec+ux#Z} z4E$k2HZyTSn@k|l3+!4NqKzQJX&F#lU?6NsLUfZ%+UwE0S@3Ljps=n4Yfq4pSMYVW zu7qu%r(%c!&Q)qvVKof>i;qK&)Ht>Mn z3yk~ZGmd14N+G{JLK}lWGfq1wOnwCkhr>W-JeA=Xbdbp;Mw@f&rdDM?Vf$=njF5{6tTx(^qKE*U2$*za>Xb+rAUu0S zBpnQD1Bb^NM4{b}OzmOB4Nwny2#N>eG7#f5Ba>dAgd$f+Y4Jp(W=CV+$E*yMo&pE! zf$=7Vai`0rNcCc|!W#DikpQDhYeg$qDkz?mhj?A^y82#p}56ySHzOQ z)HpO{C<93x#dJL8M=0aRIONM%{%{ai4G@YwiaARsiI$Cke8f+jaVe!BPZjICQ0;4>{-ZLO((poN!pf^ zbSzFLGk<|Lnq+R6??JQAt>@AXf8m*e-tZCIVC9-^rl!n9GLn-(B{R1AR@1{qK|y(pACzPRT0my{|a2g zfai{gf5*ErJCn8r0shCr_P*}j>cwM)Kk=>;Ym%P&RX=k_4>Oi;LvB=l;aw@&3;$xm z^IY7Te@9fd_#cvh@bmm1GyH*f{ih@#_t~EK`xT)N`(TXAl$7Tg(yT#c{=k=3 zR%uk>x>N;1-oyrZK)g#TbFbsx2!uAVIN8b-u5joG*n&I-G-%NP0pJ98( zBdeu=gSOzMKwxtxbs(>Vmsv3Gv4VNXD;xmP1B0#3Whtsqz=|4evT%+XV;W=y!jeg> z8%bMAoE!R&z%@&)TMW1f4^9GFi&rC6mP`1Z1e9;bcb%}F^k))Ku}+X{s`*CRXpJl4 z8)sGp&EJ7*;fr`ToBtBH_C;|x-|fL)g51A%@~kT8@3*%Ve+0wi+ul{1xN9oqV_3?6 zXbMbJfx|S|;6d)&9yvG($cRxGOLGDYqZf?l9uM)*_T@P>9emtJ9*ne zjz!|9Wpl=}&fPbrQ$JxEUf+Jhy9(7@pFTWOG=g#HE-5Xf6&t2<`f{(xHS5+d^T-Sl z%o-J&r;;YJ?R3b*81Y|7$$2_iQRW0E^69XqnCJ+O3}{ceA@vU76d*q+#G|lHPGqdHwH5`HV9O2?AB86C| zrsqU-cKB_U(|p3~xd*$fYRBj83k9`hA6Ht-GqccXsW{}|7lPxMC7<~mZQUnOu=>pL zQd`otK=OMl?Trq^{PDjWx_kck58)8Mekz@Pb>?_m=jO1$EScl_BaX~ z_bEZU>N@`?B&^dBE$aC>Yxflw@W3dCR9qIAc*;vAfO}Ys-gZfPGF3WL02r>=x#DPh z0aJe-aq@!n2a^NBRf}7Eo*9C=ZO;2*t*>(x*`VlOCcH^?IH_*aPPkw+=4D9;CFU;^ zp0CmyMk@?C-M%lfdu6{&cnx$`CE9QKDKJ#rScx~56AS&fP{08y<2j^fMY*hDI+{7- z&u?-m;{4C^WE>lU+vFkdCJT z;e}cte?j|vONUQ_ImVaeVt7!^M>_)EvlGdgnb7F0p)gNrZs+5hGEBqgLuzwWM0$hC zLzrLJbfYAswf!~ww6f_6;u(CL_M^=BcI9kI9qtP!SGe7UHY52kAb@s3-f4h zLhU>;$>+rgsoRQuX$yW)b#%I~xOCdtp#Jy%Od0^)^F`SG1MO1&TgvsHqg}3h9RGcE zQ+u9L4Xb{!K^1KcJmorBrd}AHf$|$nJldbgHxwjt!aZg<)te{J1z? z8_q>7^Zj(0vOoO{yQ#rz=n8hYGc4uS;&;n?b8hN?4Fs5}q3kPV1)d1}2XiCN(+BWn z74r&&KG}99Tz=4hC4#;7SIYHY<2^0I41Ma?{-`$p26yi1XX#8Il+QA6{WtRZq?M5V ziuZi7rExbmV$uF#{71Fn%~$(1H!_gP-7YD~*?y|CehnKNd>1*tp(+T2=z_Qcmqnr6 z>Vqn5R?S$ybLV<}p zsP*83qnnIhCrJJ=Hv*#q9lnUh9APs>W5@@qiSbd)H(Oko3&a)z+(W92{+Ju_Z3ldx zc@{WW8+Fj6PRIXx|!z z<5#g|G6_daYpt%N^4P{7xU{Qqifm$qQ@U=Hy4fBkR(>rN8~vC-ez@O?J??$j8T);* zSrg0D$10iq;Q9oPoVz)Nr(AE&rfg!JCT2W;!+T!9Q?78lXJOgx)o$G%)#f+vs$b66 zT`41&rF};9y-lepkd_0&`_cR8DQU>Ohx}MRW_Gm9ZKL-<<^=SZ$b6fr=&o8pRQ%DX zEwYWEKFc7+fdPPS4+(zdVF-;#=!)4CN#p2gBSmoVW1X=erhfMJJ{8|2Ya+k!3wm55ZIZ ze~eN2G7&TWuQTSXpN{6g&6t0ofaU%H1^ioQ`UmDsTBqmF---swpuO5TUV7EKrQ4Gy z^{^4VKjFph-2=g2JO}@!-_@_(#r3Aczh8s4eg3WnWrTA8f2%=BQ-9Q;x*{n*kN*z3 zs_FnqN91?*=>v4fKe102TPX^#G@86NU5BIC{<6D(*C5pA^CtR?p8E?e-mqvEU-5xs zP&?zXOlvx7aO`Hy1nyvx~7*1-G!XUL15yUHunokm5zBk+R^OF7@Z{>fd0W>Y~pT+i2nMZrNzSpDLYi|Kk3(P1+T| z+g;!i*!^vHq4V1JCusp~g0H9`qNJEAq9g0wbUCcgz_H!^L{lVeLJ-QO{+SgnwD|er zA+&d}`9L07Ox5=<@PSSRKVKeH%cA>4fxkJ=#A~Op79ANJ`G~D8gJZbwHmaK4O@9win|+*4|E@ly2A(lw!4Vw#)!@( zfd%vSN~?I;@Ox~h1ssnFGyWJRY|{FrONFDW>ZTN?EUQvIrn$GHzDG`H?e5HQaALxR z7I*l-UoRdq*qXY$pF6wSVldOGkbD49X}$4|$2rK0KK|s(GB!hIa*E3Vi>FNhj;{K>29@1>pZjMu=#3(xpTn^yMMKot@WG>7qeUt@*p(ROJw$`F`?${h zDB@?y&%y_pMDOnW00Px~62-!`AiQqW$Z#PS#I4IDCR z9R0JwE0ITfR~}9`LhK6~$N5l_K|4aAR@?q(Lh?TW+&PAP^7%)|=wTPzpCO}v2crK^ zz7l^w7x@iv_xk7>aj5C9W4(X7$o+R7THC)rv?Obu>c9J%KURQ)!S?;#bd@c9LI2~> zM5fMRwJ$@p&S})!dGFtNX#D~Bw%!5;2mWSl%KY@5v@z_bS=Q_`@O`HS{eikT(~aNx$?DtU7MO49?Ir4x@BLdM z-GD31lq{crEON`CDC?j9);!T_@ulB2PydA?_j9Z#xJ4iDAb!_8{nv|Jp%TVjkt4q= zawQn<|4`)ie-*hJ%|D79i*BFK&mzZ4!2h$zQ9mCu6L~KQvwp)heNCq!(+qg9Bi-JK zw(_C*w;~4zeEW(jRsNHo@7-AM9Sei#^0BtpiiVw2gKOz5PI><1SI+w5O8bLPq{o2= zfA3NFyPvN&rpoUgg|8lRy0`8FmOZq0W4+;*kh`(oub;15_@^NZrd~n&bB!U9%=SMP z^wHUricHZ394a04Zev`stKCw4GV@R9;2wpaPVhTEqoX@N4yLS2>61c7&@?FZ!}nR2 zB)YpIhq)v7yg!;@7W?DwhvYuv28IhMf3`J3m(und!9}b~ilg}mo1%ln7$v8Vy-B*p z&pZT;7pyii!zf9O4;g_Cn@NU&aKLxn{?!f~&G=*YZb4rwyjc2Uzv+Dc$3ZJ9*WVSn zKR>iwO@dxI%phiXMbAGwcyuA|r%89Y@;21>D*waqt?hmb)uZ!;9?eJB-@O(6ZgZB0 zVb*Y3h|M*V^Z-)1e>x2{0?}riMOJh`dNC=|V?FFms6`;LWh4pGN(9D(E; zV5SduM|^vKJL3D@?C1%1Et!RVqTz>0(_ujo;v7Nz4(~E*gs0Qv)kP4(EzYHEY{mwm zMz2j*>x56o%>twjh~JQBb? zQoSl7b6$O-CWw2%bGe0ZIi?}B62%iL^|oC@OJt=w=*K|=Ob*+-jjY;E?yr6M9p;nm zKlz&@=6m|v;Vcyj`hQuxLvg_JDeQOg&eJg}{fN`jU+ebt^_WK<=QTh5W|ada$rc~$ z%xCZV^3wU_z5SnkxoN@+5#AfsJDaK=qP;^veFfZI;l>*CQ@kVf(R^V5F5ZcHAa%EH z=Wib=(0ym3P9ku}O<(ljxD)Rv3atJV@BD#cP1p*eY9bMwEfm>NY@KHu%M#73wS2eW($|FQtVsHM9*oE2SGNwyX(R!e)@XIGf)i^iIt6T`}q zr)X8fq)~D^w*9Vj2!^!tzM@Z_?L%$XOZyKzduaBhEjfSBO=nj-l=$6U5jErwA8Ou- zcb1L|9P8JT;R}%NFQJ?n1j(J*Db|{U6-)Ke;P*`PAob z$g4VJi5zvS74QD$o?rIg{ms47mq4pwKbs)djy{{DvWvz=G$z}tQ6>*|e6Dc!beaC` zaF*lO@JY>b{&5{IEFG3Blmniv8D0z~a=H`m#PBU5V3yX8o_3yLe_}K|@#@{x_Px{^ zac_3;U>n4XTO+pHHxeSxmWF_NbKueWNcy*a;jnc zF;@No)hJPK*{!1L1ItwaVa4!DoGQAhiWxM4zy-noT-7Y7S&lZpro$HvpY(F6K=dGW z&j)893q`1>4eRA$5cQf$7J#=MBpGeasFsa(w3clS%w~ui0dk7sCaZpMHsWi_9&(++ zL2r)s$~ZXLn-$*D&9D@x^*L&ZMFWxu!G7Azx$z_owlUB%Z z)|*9@QCT)T(g7t4$RoKChCtQI>5luRq!__XoFw^}H3`HvkC>Sw;Q(9}RXUA4K9DkP z=o1DSGXT=_o=AQcR&5=yEs`xW&DG~5$O|In3!yN@r=6_8AKkPM>m!1Tc$st^uxP}$ zXoJ{Kl&qC=R&u6^{5mU=Tca$6_i_dYIjqv7o}zMjv=2H<@G*Ur2hj&j#(6c!6Yu#L zi7f=eKFqM}XBZnZk)f6_2jGqyEs8U{rxjDh-Q)tT157Pk?Kocy3}$k<*eW2mj|3Sb zK1O+*hU4=@J3;$|TOQOyz&wh9;i1RGpx>j!(vFRnJYtkYudGghmO(jXRVc2nry++h zo)!46NKs&1OD1qU&-Gog7QIzP@)b^zC{Lco;I_U`xOS*l5VhXtC(Kxa<#2Ot$)m@5 z24f8cuS+ZokhWNj4yqr-WC;Wfym@DWsrxm0&Lik@?wy&CYgm#z9qp@$9#cASQ=5(| zv4P{bIZgaj6#Mg+G4qoQEGIETFKeriF4+~N8$rID^3@Unkxw7Kdju(;tj>+z^+Pf@ z=!7M&RpL%Nc!S|kg^!pS70liz}dM8^}2432O^C%bCLW+v_jFP z&+E`9X9;=A=P(bnO6=oyBF>wRNz`N$6c!>D^_f zID>McuEXaH5%0^A>$R^udb~}q$%usL`FXxGM|+ZY;T3jvizi1LA|tFN;EVLsinuB# zMp;f^TvDlFDJQ;hAibKg?9%IsN-}-2N|4F*88XAGUVbecfvY;eu~qq+32{R%TLjh* zczL2Sj$t$1^Kl5N!A)f|>f6_W#9?k4x3^TeHi`FMjuc;>s3S$&cH&>rhdJ@v;lHv{ zewfM_S9@y1{1{Ks{)#JBP`N-#eY=1>w_+^qSi0&5i14HrC4awX3dC<81f`p_i(@M_ zkLP)4W;<>#&Z0KQ4|+J;O%=ic(Im=2Ep*}$GtW}3_Eg_{YUDjKY>g9JI=Hv!UpKqO z!&u))7wNJS_P(0G?qy%Ly+`AZ`NNoV`xqMi7Z!zNw6%53!^xN{`*6%B)p;GF#$h1* za2B9h-%d1i7%FzX%uFKODK)kcUWVd}TPJMOx%{lY#%MJO*xxOqL1LR#^@I{uQV0BO zzL6RZS9$fK7qim3g@Q}SDZ&8xoWObYF3@$wSr{*ahgp zW*4b$Uj-jizmZ59!`5;8;#jgJR3@tUQsY=L@-fW_Gin8yt3vFYo`O>}8GmxFi{F7Pt*U~(G-knSk*iDvSoNz=g z*{$*XCEGsyFpSD$Q)xcr=~v8SBKm_f8}K!{tXKE=(AyJKe;E89w?DF%KO&DG!ja!* zn19GO-v&PaZ$bgEZV*a62mug)L=*7C6Lf?c@a-HMlQ{sHIN-iP0D6i)9K{8+cNO)vCAA+u{gP#TjNhyh< zrI2cUbNe6wdWY;TQy5|l3DNfg>3fCvybdw14=E4vctalwtne~;9m0APBBLFuZX43L z8j6|i!Hgp*PzT}*BXrSrvv~;OIR}N?ka|Nvm$mNpDYyfpVNIH=!9I{M!V1kF!EVA# z9uMnq!Y-KlaUk?AtXag*(pdvlU{Ag2Lg8b4!^JW?j;` zqRM>L*X*W!=_1^WgKsz-SLRZ+n1+NcP)HMnnEH*D+QDR-!9j9#&D+d0%3$sijqugQ;cCAh#>C?F z?D8JAduTjN+V2XO_t>6K#^a&cIRkugjv+XeVp}nfWMZ_AbTQ1&s-C;-hqxz*XHQ8Q zj3rto0za~WFV1tcUoh}L@gc6o&y~KfSf8e{ZaFq6MSm??KOM)+PbA>Blc3V=nB&VBC6KnO>9X)IFY>k?YUGTV;UrivX zL~kx_RSpcHl*qhSj>lyTWgPF3Qn^NyqvXIj9u8i-U6rGqzD)pQI(9zC*0bxonDMWn z6MJNq(8irYY2{w%m$Hz|>4-=I@(!ikuH|-R0A!~J(%Arc2WB4ZaTHlDsIhks^O++lEq|Vok@wN*U!qV$ z5(;UUr-`wIP+r{o;Ll3&Lo=IG88&S_EWhI;=q=;@Lvsjy?-gi?na5YF-vmcia{z*_ z_hJIB<%u6RK!+#F&L&ew=tI5H%cX0x=m(@%POo@mpDwO_mwDEZG9sB$PM&-tQPS4(clb_+NpAKD```FBdKE2y{vMtG*rEE}fi0%jk zw^^Ct_2+>CC?zsuOSLS1Ma6~;1`$C32VZD4IhfAO8H1j{iZQ!ruAtomIzLrple0vw zB7Yx-m^d&Xt+kc(q?r-ajiXM8@G*dUQ>I1nVl@M0>#Hs+@~XIema_E+pP66o>=@e8_ zQmFxk9=efkl#)ieI}{L6T0m5~ROTMH``Y{3SN&q$&%M?&^8)6NIoI)x^E^I>JWdM% zQ2NOz^@816j3Deby8#GM>kAgq-aoYp5zdq|S4Ox-&Ex%mWQg8KHw+nGWqcrz-Rpqc zqSCQJMK4U%Ylj5H@H%ASi1twc&omJz4^g`V(=~^X_%G8}Cz^O#+8(C5EhN01v*B6|S>#K|i%jNO^bG8C#hg=zdd> zTkqWkE{)1zKOF6G{owbh&k?#_)dK9pFS*}V%DV=DNZVOES>gqcpKjSuFJBCbPu9iz zjLZK-$?J1Ra^t9tjy!}w^K*10+ew9<{7A?%IDF=k!NZ8chf9q}S8xUlZ1M%Pj$zFw zDr5mSg;35`=;sU{ib_74+Gkl z2mBv54%KM5_i+%4hY}U;6@Pimc+B}3H@AHu4(T_Sy>c9p)OkMf8%q9rJZ(4L^&^iD z9=Iqg`Q9Fn&>)eHHQ0sf-%#@8s^j`Jq)=r=2L(HZm{y|aW7HYnH`!5TA*0S#$kcZ8 zEqr$gEzqk}6PaC~6@Qmf|nB8dg*Y$o@xOp6!jZc;5rkck35(=o)K z6ccq|igjr6+M9<=90Z}Fa1g+yhJhX%QusRxW9jm}B{$Wb5n@DuAcnRl#A@~^} zlq1MDA7q-3-&Y30$pFceLsB`EqEeM*Q*}6z7B)Z<4~@LXB>ak1&G*hXUBB zgpGBu9ti1k`+|tvNCA3J?umnF&qxkVLlJgCc^sf-oj^QrAVFe~+5t&%I%vQ+((sU| z%N_W@hJ{`9jwguemXCJdpCS^E%f5xb2NY1dNdcOll;y z1QJ&r83Iorz=w^Ms^QDKf~XTA5{YD)&cZtisoBc0P8sR_4J}vrY_?wg1Riux~%af)qZD?dPOF{ z9YZ@G5{87-B2#SEQkKq1;HYjwVHWEQ%y3R{kVr^?;Y{*~Gnp#}^#f*Jfuf=RE6u_9j!O$38P56~GAx&UiSteG2o6_6|hq`jF` zE3H60gzbY^fswn3Y+b>yLvEP^$e{w{B}94L;Ej8j{q{V8R~P5H0`k6#aKOgT-JGby7zDep&)`g zh4sd_Y7J|w3W*v+l(Ik>5xFfMi}qz_2iB|$O=W%$qnSOIL2qx`U-WQPr; z&1tUD;FEYo5+_N@B2L~5DdAkBq4XzhRKlJis3{{Y#XZmFbkDL~tAx(Q)mK9Bm_R$* zke8PvaZ!*%e6k)>Y<>aIITz?M>xI!;@t82z>P4Or`Y$!3e6GR94$0|gtHqnC^4WTU zNl3OS$xyNjEZk)*<)Yx{0_`F}lWruc5~-Z-_$ax0UT`W*3Y6{kKyNJ%ob5`woP&}R z6A1u`qS~{l1ITH=LAVLhP;zCSS%eDQAh{~YjiWIBm_(KW5LIs_E-mwRFlb$p)IADf znB8bD!Hs!C#@Ib!eBSGOVv#X8+vILj@?qh1w+?t+^$n8zaWH5fiF16v$!nQn6-x6_ zI8b$|LC-qZ`&+Z+j3(9z3F4AOF%9$}8~yCI39q0fS_%|~Pn1O1V$p-}u7XWZ6SenH z0rXnn0Z=1(<;ZWXnAWW+Qlv#=6jQZr`1NhizqQqlwZ%i*-#e8v!m9-2rzyZR{0M zSbS1K_B{a{=#0---*`Xhb}laa7?s)&aCWp42E2E%UxmJMEaKOCBe@~~-CFL-6VB=V zM*m}3axtch;LuJD)~V)eKOtrMe2M76I!z}nE!n%y!Ed~#gReF|b#JkBQdalmd3Kvd zu%1hq;sVJ&edB!(?LPVT5Eu*khUrn=@Cp)0yG+>edAXYp$X7ShbAG#r1K8cW>?38~ z*L)fb_3T<86neL;+dMa%az>{7Vs4Yys@!CShs2WIe4=BP($~GjQnu_!(PQ zxd65t%(!MXIDKHwUBF*LXb+tu>X37=Gbfb>R$|skE=GdpPP9wCfE7|XQ&zors5L?# zo4c_*AfCs99_B+xy6%W&4m+J`1>h8B$?!`t#^sHTl%iW<` z{#sFJVh5;Wny6OPUU`jdi3u3T15$j`j;ckJXpV*ogEC@3U4<~8Ucy#vqUR~v1s%gA zfXdP_(j_j^GP}5sWI_ualCOb8ujCw-4zx*yw3Y}a2?T36LkO|zB#GV*h61P5BF2e$ zfJp(`e$u8dcz`Z$k16$fsiLc$URT$M>&{!t+nSIGO+BXE#U@vSyxww?JY|}q`$iI+HCrX^ zaN-&c${l+pO@rq?QN~TawF=#b+OZakN7Xch#xXqw*Cz6k9&hk!Fb#1N)uqdjG8AHy ztH|6^N#mX`j3#(vy!zt(LN3-sOazQ>BHUE-IVbHTZ zqsUaEaW1wT9n9BTORD;%1DtG4tM4#-O5QUQJLJRSMlGgLqXXktx=l!Jo-MQW2QeSw zK#`(%4o)}lZWKQwA~(p#ZK|cU%@@$trN^=+)X9ac9#xlB>96a+UI>TwYIJ2Ip4MqE zb3#pO6DjyyKH-Oq<_X{N;w9i1|D*>UgS$U!*WOp|mpmV%H-5ga;;v}^GI*MSd@a`g z^;7cMx%ee*(y>oVEAMS-$i5gHa<6KC+4(}z=J~}W0LX=VcMB<*91EIj(@D+!qA%aq z#8>^84d`+u{5YIVmPK!LR_I6Ls9$J~9Q%d|ltj4aAlaQ@;P&SrmqIOMIZ6O`-&;a^ zBPETOdW4w5nV#{*>RVi0eCb01qaG4taDT@`E$y(pOw{wWRZ;@6_`cAaKr=8ACX^`O ziX117bh(whl&EFQfOwD7^}_`T39oPy_hJA$wv;@v?BTI^9l__s&I^lu0b(a{E0E+A z`7KLw*fkYF*XbBBd+>;(!4#=c5UI&Cko{MxC4sL_cSx-uM~up+@+cDPF7nv}iuV{4 zw1MaRH;C3vGTc8fgg?6At&`keT=hRYHv?Zh6uhu1n2i4bF_ak%Gy-1CU1Wc~Y<)wB zCx6K+cp_$fDQ~l)r%U7iXb}(mZBFg5lY*r3nS^~vO}NOBfpszBv(M{ONfGz6z=*52 zt)$ibtXl%1?=abYX0RO&_SbC+C5o^cVWd@IAyX(T%Xde>HWpn-H-hzxi>$3xj5bBv z;G|f{H=+hjbOf#&I4|)YlsP5uz<0l;Dd)>I8sOul3uN{7(xj60aat>g)^Sm?Om#`wms7Svd== zu}o{<+U2fd)VAB!^1{~-Ayx<1E|r2jR{c@r-1As^tRn+v8`tesi_R#;6+tyO~qmS?JReF70Yb}*qTwebg+aqX`ZW1Ws5f?ttmG(8|)7qtC z!Pxi*%SP{-MO*Eh$8Y`cIuKM`Wptkb$NbFLtz2dF@2>USdfGO7-3o{}xN7C#Z^4mr zuZZFNJ kkaXeQ)zt0`nhx7Zh<>MtV2p8#<>~|Q`wuaqFPT5)jfE-!B$-2`hhH*< zh#U>G=N4;dL`Bm<+SpLevp3-x-#;?2lGq%o@#qTGYw|w(o-{T#Exk7$GL3x<6>W_L zNOIP>dgi|c?ae65aY%+T(=aBv7oyZ$=K<{re6xoIYAt&B9g>W_LOf!mm<^hdJ3Wu| z{ijbvs++sbJgWi}a6ZkkkZ7DTMv8}f8yF90!VK<+irydBCm(GziWcgOEV#X3U|3jd zgClHg@+7W&j$eYPYHEkMkX6SO8ogcU%hVgrOcg0f#zJqHSeaUC@v?l}5-*gUBbp`$ z#;br!!24EfnVg`@W2a*Njm3?osY2O1)QhYO^Aj+|xMXbH9Nw^okT(p-Z!Dfkz_L zGS)!suOi@hOod2}x~RI1+enhN!S_TxKGw{&4M!ZoGluo$_|7$(?=pAfOOl zNV;B(3lD9vW}>>#R?DD;ABL556^ChuhDesnM}-8gnioI<2?!+TRTnWAiIBAlnysj{2I(y-E$5LVqIh6Qygh#5AFS|ZfE|H^NxX%d}kD041ejn=q^62`k0z%Q@Xp`)hgj7 zJ}_7Aa6i_nB$P1Ehzwl$Xrz?8f$etTq6ag)5dkH7*?U~8n#h4~n}Zp_gS5Y`?AbO2 zs9@%{uLtN~?T%Tmj|euM?!~_M0`uNsoS$Nqml0(Li4O)p!;@8qXyLuhE;7LCAv9RAP=Md9D++u)$%>6 zA}U{LDC+wOWeHT~5qJRdS;`ML`AK zSCvRqyEf|!e9liQlae3=ZaAWFX+?hajAT){xB(EwsU*Zo8WCv!6R+=bSqL{IC~1Vb zKTt}GY>eblhLbpdwDf2(L5VzO!WA8{1!Ec(h@>#5|4?-htEY(|Cx_CJMN>c2;d)p2 z6h&=0L{bqz`Bbr`k#1~0FPz9n&4MeaU$dh& z>5J%xW1tX<>;5xF^;ZHaZnu>Pu1b0+LY|RG#@vlAK4&~JeBp?iQ7S4pVFGN&%wNnA zacMI1N>C)Q^nTO{CEOxsHI-}&JYT4q(nxaDBb5@uUHXNuK&cP--Kpi zeCb5dh(6VXadWPLSmR!v^{0D|O8q0aHsH*-%t1Q)*EMOwRZxhl;%5mq;=nT_cmd>l zE&21W;_eFl)}Nh5OO`9YoG3?VZ59r@tSB!X$+5etM7&dS9=lmNn*+q<8qc;v&1s)_ zP_LL57OT(|$~ATKV}{e!x01(!s&yAs;Nrxr1dkJ&`+gjMDzf^<`0PuGE@IEU0EQgF zx^bMz9q00eYcqD5Dmz8@Ih`F{F{DEs5s&Chd_ceXn(2kwGc!NWV#@H@2^tv3aE@31 zi5WCu!prWlMXF&m_1@ic@PgpnMxpt=7xI^367cnR$$+9Y3&()vX4`l9x8XYk)R791 z7*PKExz7O~zc~Q!?F0p5?$bcURjMD9Cx8FWI=trdp%u-~abc^6KWbJ!vLM6xVGD^n zzk11F<0y;&c|d&7B;1}#_w@a=c#lE13%kkQ$T#US+F72iZUAGU(xW- ze|uK;(OqX-n=H}Ng3IMx99RjoCU56m53xt6P1-;)gK=({r*zciZ+9 zfo*RQmx_ohQX!v>m_X7- zzem1wV#k)ochf9h*&Fo^{y#rB;6 zBy_6>+-QpBt`_<`igi-+aV*s~KDi}5g1b|S7@mKH`Wkwd_dx0u0uK6J#C5wK= zfee}R{F0!<2$y0-N3vJ$v51E~2o2<5bRs|{F*CYF%KB5EXJhZKU!w_~Vj;55?>pY( z{;IH@ilE?5rg?Bk^-w1vuFn-7N_Zd$4oHze3_+w?!w{%C4TN1Wz)wkSNM8-^HmIrD z36~pC;^`|q=tIa!#c#H;+*OYX?h8S5$B3(?Y_=8%sHS5-zoh~29Uh6BR>TJqq@JiJ z91mPgtLRsU#s-fBA=OjLMk-__ofafA(uL5upAp|b_H&pWB`5hPO?i<3sOCiQLWiWMwBx@fhr=n!D~+&LS}@wFr7iCJ9W}z+lPp@%2C+SM z(+1xr<~Ju^_aiEcrVVT--|pXOIBF!?(t-RC{+Lr4OEm)tZ^U>oc?w6k=**zwJCEs< z6R`&(0c~IAMyWenC(N_lJ9IBML>^Eh=wE8y-=EQSso31V-6A~OY@iqEsRft2U1%`H z{3DX(^8|j1o?2fWd*?LI$}I3yFXWrluiG0;GAET!XDWi zUASIRhN4u7u!!LtVtVGLR)H*UwfMxi1n>NYw85%mL@ph|r*^jAeE!xw71i*nhida9 zjq}Ox1~hqj9E%M&=nZcDn8&26)FC3dxoI$bGJmi?TUk48I1#5N^Rl~9@nIvtWNXH_ z`gOC%>%slkNmbGKI7USZb2!QfnwkMG?5ewZy1uN@v9Vyg2`-Y)@wTG1wt)9Ol5d3h>33jfn7=maIY~<9&Q&ym?q$`c8wZFfx=Y|uwJOg8fC!M z5mUoXxbSY?Z*PG~ae$+40HC`fQfD-*9HU(dk^2$=pqe4yF*P>RT^{iYofKPs2c(RsXdFyI*?vHMEmRIqEVxi zVO%qN^O1=JTL83S0O866j}@l!i&OeO8?T)4uIW>RgG>}kL&zlu+o?QVMF(%@RMHYL zmB$mUVzsEk`g$R^*-9yj#48$AHgRv2D526Td5OqkV}c7$hCm>>xmm{I;|lPdXjC(7 z=?f*y^`9*0TJPp?vz_gR8vddEAE;@wS~U zsS#b%OG8D=#=g!~9FegPE*<6=46C2mtgvobVdpi^`bQ3HS>bIH&W3-$%Ui7}H)bla z0%`;2##akgEr@XoCMOI?u2;V--g|U)7ehF&>^AXTxw{Z{g8VIF3xTlnw}6s3ghaXZ zqjhY`2qKOE>y+RODt78+WdQyao*Pk0fPMTUto7IoVY0LM>9;YAl@Rzvc-U$w8<_i^}WwE{BKzxJ=;L(|jZ<>>t1jiz zpz_Gz&eS=?dW?<}>Ve+PaDYjq)ee6pLF54*qA3}h6Hg<#xvd=NA->`Z!0dEpzG zLJ^sI9}ijxRQE2*cucAO1R>Xs&*|dWTfS?2lO>xwR-!$sGV0rnV z>4gMh_&GmQlIz%;{danRFu{EU#)CqgeI5qD^sR`ILD%r|xCtA4HwR?UPE9jYVUrA? zHxpYUDGHq|h0<^d*UzWXt_|-x!(o=B8M=i~FDJ@up}g;YH{v^9X(mzHLAZ_+PG)&r zvp~it+=ArKq?Vxlc6op{DB^G%{xzcK&_V6^7UJYh$25TG$JOUZfsFN=G#%<+TP{9d zF#vRTl9#XXwB>S*Kse1SHs}a|gWhZ%lep_!gvS&(xF3`8+P-`vj-w;kKe+k8+Nl-e zjw?crp2f4tcWnb}p7?>QouLNcMM|@)z|^fg;jrzEMhqFJ@V|d4L!59=-$S zd{Y2Y<3kkxlnP(E5XaP@-wYtDbT@kVXg1X|rrVt+62M2|AvSfyFm&ALa1>o0`#3o3 z63m&P-~yKPvNZQff9#z36hSb84w^)&JGyhHd#N{XYN{UdmBmUA#Ys04k~bg0I8Ik8 z^L54CyRzadzMG#1(aF9(k(nc-Fq-ZI|w>it>K9`q*)5@X`5z z`G?03d`{icy*$fK?|ksG9}@Ho^0F)gIxr&K7JQz3^$Ak-@pJUyc07A*dHU!@ruSEG zOT05w$oYwSBtoO>2mv_v>54($Focnu0o{}Pd^Zx35CPlH4n}7y8k=?>Y6#bm?*dzW z_f z|K~3zQX#B9*`BfP=I1r+CSDrRIIWBhd6#<_XLIm2&d04?^_^TAND*; z=l3sF{ZM5?^ZzP~71+1ngrW`$v$3!6F2~|4PR(;X*x109oot-jAfR2B>Sw;Jz+I^3k zCX9$#?sf)a5i)3+6gTuDNVzS>Tej8)f4*6jURtsaO7Tf6;;4JHJ(aI$oWp)lw^Moo z$hDZbYS;?OAU`fFoT1!L*J0K^nrUl(G+0WWeVMN13=7d?0fZu3|(b(Hs zxue)x7-i6JR#)Y}D#5Jb1b-JO@F$e#*PGS9_acUMDsIFv-rrKSeXX7Xh?m2a(4`&1 zN8>gmM~)I8vf3he>Uni`EJ+62DcN$y&mZS1-PHkasn)|T^%4xz(6|k!(h4+gqiJ^= zjoaXKRGI!Ryc+DeUGWj^i~3I(QYRJF-I5fU0dn-4)xF){aU1m)_7&x&mG>(|kV@N? zwc9AsJ|OlC&8M20rTfU|23k>{Ubvg00|lxs{gZ%W_>DMq<4wgQa#NLF1L`B!`n(2W zB2~Qd-g#}Go1?V|zx?t=?UYu1Y1?o5^riiua2w08Fzg#0d9~LR(#cP7Ie18W3B>jf z`ar6#;2t3`>?f~4T1S?~$DG`mAu{&$tw-d7iM-4KEj)%+zKD8dXa`*eF(q|2*9e_E z#=6@bjn^vvab)&mqvYO9phu(?$ofZ1H}&kSL;)h0b#lYE@hw_M0u#ki9c?FQFJc^* z7}#C0Y0;^yrpY9!`tunYL;AZfYUPtmQEH+&A!`2o&C?(|cSpeW0|U$V#PiK-c!Czs zH%L?Gh}Ol49wIlBNbTI$KjRP@3`Slh0zL=rOaAZ+d{SwXx{Z!`bbj=mvjR1^1Xmy5r$jBytq$6M}d@AK72 z{_8)%a03f3&|o;aH^M&O4t@v2%`;s!j0K@EfcY4BYTcML2f+Z%d`wF5N_>HX5Pdp|9adJ*NQ_T0U}0H;spCtDzTPy`24Tlt=64r3OpWSHHEH;sC3bv1j|+uce3x5s%g z5}3EfqEO6F-p^&rbK%~?)6mI**XD~?tcgb=rX$Y2a$0%)!jPJs6jDu;tB8%FF{CF& zOuu7DvrdX(S``|`qqAvkC%-VH8gp51$&@%dDzr&TqI0jv9(jFtR;0cHhZCHZixFW# zE~DnT{fjEp;us9(8hR_9s%pY^>Eq4ZMFW{aa z-Pz1PnrURyr#z3j%oHe$Sa@}H`XczA{msYJi@n5LbVoo_Z76$80O)nCA2UyuZ=#IB zTN|L#^jzA_%Gadywsmf3PVLjd1&I-iG#?pKCunt z)@EO?JT0Z><&1pDdz2iMa?1LI^ULl2o_F*2m0Fw7ASTZg%6(XF_BG3VN6Aa3TM#qy}lffKF_CsILEZUduM z#d0IbBz9}p2eG~1?U)#RD`@x{y(elP^tCt!L z-|?IEnEaKF^Bd*#pV(2qirH@ljNjQ&adTr+U9!fO*EldMV^7fG6cN@>a^b&%@6heN zo`__6y14d>a{7y0sIo8_BQOZtFw>uKVu>|a@wJVYoE)}I5WEI##_$rnWHkQ9cA1c* zY4mzC`L-lATZ)FB@>YtjS=3gl*-g{UbgKx??F_qrDrO)5#?<~<%-#%O5@O$Y`!PQe z|30z+&R)4w7<+SXM<)sBHC*%$={WzIT!{KF$%W(0-xM3BRnR71A4$dEncBZhzG$X) zOP_)*pU5WW>xtZTL~@)s3eoU9gLdL3f7m&}$+#?r0?t?24!ZE$O_u~|6LNTu&L8P5 zi@+bYf%qj=`pJx44+r`#!_bsde%}Gv)5rh7)c%(y-#_3x=yV)>-2&`?GS*A^-+43s z;NC)_Iqf-d9!VrR9mlEN^zqMhoF;3Ut{Uquj|HvQq7sL;=kK*QP+E!a1M%J?1;oF} zfLA#@W{2f)3G(uZWoh}q>+E?#NZxqIFAQ5*K767d^CI7i>=dS3i0qb@z4BzO{0n>s zUjE^Ez)0)Y=jluhVV|A9>iNm6z8OX(e?NL9_KfO~jCcS0FTz~mjH1|2!kmne#cfpQ zOf}Z&&_%O)*i+w`Y7&cYUw&h1|14&XxhRi!97Z-N*B4d97+7jFD02H?>{wztr7MAC83~*&dMH`LV zWYogIht6P;nhP8278u&(dl>r>%zuA zS)en^|Ln#wG3+qzVdnf7@H>J5dr~nsmcc*cy%-w`%tz`=(C|A|f-rWZ?Rd8MPXW`< zAIx(C9t!qNusjI z1Si!P&exFRy{1uqR}Di=)k|QLFdS32|HwD!(YJ$xEu}Bcv@hDBHmP z>F?>iiw;$P16};Afxm$+{=-1`>1!7T9?wBH#iimw$O&EbK`-#vK=&KzJ8)W@a>Vv< z@X*FJagZ)Da9VKF-yA#)jrd7VMbPDve9F=UkK#26f!z2$($P*xo}2Se-NGZ{pH`sk zo9w$`t*;|X|T=FFft`t+5g#VsrCg1E{wLWgZ{-aig+5JYvh=4CHOT@EiCn9d(f#c;v@xyu+lJr9c zq8A<3ld_By$MnklKS|$zQdU23NYFX5TwCEklg+r?`;GJ+gYWbGq)I&K$3?nt(Dir5 zmLR3Jy=OlMx*i`ZzgD#ARdnwuu z!UbXrfR1W?G;a_7sDXJeOaV6vNocKmUj+dkGO2!71xM~A8Q~zKBoedbip7(I|B?*w zAN8W?|Id0c_nTf={?rS}$l)&9f2$Ys5C4T;eEv-@Z2qNQwC^@9|6kCHx^B#Wr5CJN z^vwT{^g@AkQno63PAg_87InoXKlL5Uyt2$*82P;AY>(U4_WN&O9H~s%LG~(FZ{zQz zpXz_>ndgmM{;6mF@9G6MrR$6gF5`vvU-SaqGvnR!1j|zSNWU1QaNj>1#>2Pe8zzsU zV@AXN?dV3Pcc=MA$tnU@IkA>7k0>cX-l!&x<4qAOC>(WegwrraDV5ZXT7nM1VLZ*2Strs7HU%+p!giL*E zR1G3~o*@!lM4`1&CPVzYUSv4F*IQp<=C)yDb$>45SeWpXa)%}Lp`=6Qi(8a?%rC!4 z+SgBAQ|v=uKa{d-`}&IF3)ATrDcfF>Ac_M<@<-A(qx`ZIM+hl?)8pANoF}UD#((O? z&jrvib;3|X8slQ`9!c8MUpX{ZqgtpRTyGOl*KB)tz%RZN=6iqV_-z4H0;R>I{J)|X z=$`r2ja7L%I6x`AIKi!&X82q5aFWOOz9`Mjs3+J$1DSshXqLN?hJlIxVgPV4Q25^| z|H8gxK=&TF|EBjqFO$m;=>N?!S!vkiXZ!jmyE)H*bkmY3_kT8j|F!qvQ*`$|UVk~( z{4X=D5iv5VanAOrL$W|3>7| za%pZr^OyIvx`h9`_LcIPV3^gD%ZuZH&PT|u>%RlrF*^$(LjnIpcwdY7f7!lrWNv-e zca&IPy%^6C+ENFJpa6XwQBSY+ck&VJqovf*==mGXZuWm;|66hZ7aGx=pYi81`5%)5 z{u}f6KN8-#b7bEdso(i6)9UYgk0h~4<)cP4yV<()wrPJ8(C42r4dWJ=RgOhnoHChzIIf$;leM%gB0uo{pkzZ2IS1_-M#J!&+uwJZQ(Z`E>g~t?M ztRKn{OL)dbvR-a}z85dyks4NfxxM>@SkgT=UB-X2Ow71VwXp1##i!>|P5!F2LqF4L zKmG~7onn?SbY%JN^ML`Cdx*}oLc?zZet4bClSn=}UF`FFa`x^;>yw|$9YOF1OdQ`;@l~l(rRk%???q+F*_r&coj^~o zKnyIjI?!OCer(LEt;#avqIT7W4;W=a%7AaL7DoU1`sv^1S^tacCs(TK;*lg4{mS15 z-ai%NkBwcg7snshPbsDCWp|cE|AtIq=Q)3oz3`B!%l~t;Pk~A z2&*^j&Xwzb*zA~TunkpOD#xyA`~qWU$7z?U zjE2Ov?oFywp@g4VBkfbz_fcPI?7j{ien4;R9*HK##!drg2gMm%CTzWG8a_;Y*y@CL zoN(v|V^TP+K9~^o`MI%k$_yp`GtZjq#Nel5K<|E)JD)^AZBC37IZD%Qlv$fh%wyP^ z8f~<<=08HG(;WE?0*aiSg5& z)Zrl9mkJ;#$xFfQT)8EQX}Y-Y$-`>4aw4kvgew?~@*VRBiLf$&9Xjn*WV26J2d4B< zE}B8aSw5LY16hU=nJJO;Uw5w5Ht#g#;vftW)FnkBP)B!)i48TJ6}L?L_hjz_u(=gQ zTg-GAFhk^-xqvOGomZL>svEO0xL7yl)xQ=21$fisM?HEPD)OVdrk?WfG1%lgq9QEP3`hARE5wB_Wx6|D-X z+#<^IBC!_8?Mg!U5Im0*TR?N{8q0rYuP!)Lj>GEYN?Y*ZJiI@jf%T(oW?TPf#q~wA z=@OuG6_)ZF(eHQaTPW3V6*^HHJ+esx^FMe2iH!Q6QP}*``;>9{$YY!zd$%+Nbl}%& z&XANqc^pTQVk$iRXL7{Qq-A;~JX{{Y8P9s;w{SQpuRgrsssy>KT>La)6ahSGlts~( zd*fV&C~BX#XTV{%7)Iu)cwoqNWhGh89tM$D{m3F+X6TbywQKCqPCAGCAq?M%KcZNL z`boVWv17QvvG6gUGyU4wk(IRw`j;m}n}|%xV5bl8y@$t0fX&}`sG&D@iCif44cTrJ zuxO<&ldJU46g>3C?(mNkJY090-l!r*JWjAY<-C#t&QlF+T8#jV%*Rg8BG(&Pp!2ZVF22MAZl6CT9gnlr~=&5 zz=la>xI}Urq0%*-b3}er#a`=6;EU|loOh5u zb?q3F7dh&eBw{nWN)PiBbMN%e7|c5(KXf1G0SY*7otvW6o?Zz*i5F25L77hK<|gM~ zcon;0AMwG>=8$+YYT|E}kgi@Vg=9BkOmG!u;9eDU>#)dEC9Zf^FA-*FoVrAtpo%9K zHjh9^g}jQlUbvm22qvVxtRIwMcRfV%|8|z#)VxyQxc~`cLl{nMGz66`|{%z_| z-Pr15-Wxc#Z@xF=3#AK-;Nzt1#661jS^HFizgsCcDM?yuR9s26yJujl@hmjf5PDw* zar&+jL}sz|+<}0eH*$jphYB zrlhg5(-`)lp9Mhqb>(5L>cii4wYOKN#1*BTL8VlhT36rzMyboyUAK_EyG)+j%d9SEM zzKx2>8}U6hso2eO#ROxn%P+P;E{Ir7i;YZQygda)8}eXPwcM^WKC%u0DOd>CF-0tG ze~PYQ60QVjB-E+#+!15VzejgdzVJt~qscesS8BvHci9PG={z`z-N5D-E;SGD2QYnl z3=2RVK9Gu6N&4_jHyiOW>kXgl( zO$KKi<4rQ(>Cxv*S{+fR{BV@&L-g78 zSwuZd`%XhBtj)P^=;8M`P?)g7A5&A6gWZe*7?Q9J6Md-aLWQ8AeBxpvzF{D&Fau~9 zWnx&^OelmIE_nfxLr`q6f{4yQdxo?Rjli@oshnp~n^$zIv#Zw3hERF5)l%g(@Ckb9Bf^ZyGb>d4W_$B~t$=lKVH)?QT;9mLS5^ z5me<1dhZsC5&*ROs!daQV1`72t?$pl*r(NEu|hm4XJSQr9G1%k`+`C9WuOpo@L>}; z$|U~4gzBp=UC%TD89;p91SC~v=5oU7u)}nYxP45KV40kNU6;UQ>ylzZ*OtMcwZl|a z&L(Pa-C52|dW0OZMq+1zI1sc{BTV4dLm|@}oROxdMWH;q^#~!rm(ho0CvW zU0HEN7yV+_CKRbGpUO;~X4A@Mu$wx!m}n~@;Y2NFpPBaXGEI9n4I7_>bC*>HBVDh> zo7g(dH%i>fG|uxpYE$jzdvQo|TIvtnSY75=`or5#mW*%&Gahed6z&*Vm$5Y*WEd4> zWJO7JEoK@R=;h#NCD|hMu;YF4sS%liDVN~#sPtV`g$^-P|6=&uhRAdrKNSygSyN(hkdl`(X z5WC}hGf)CDs}s*Eu7<}Iy(5v2*vNZ4pARxCu+`7^Q7Xu3dB(y*l#e9sQr8(0c(@cL zctQoFexoZ?DI{{gfUL)u zWK>AHt&sXg@k_isR{dg?Eb!!#&}}a8tt^oC+ee06H}&>FlA~Z~w2qFXkTF5&!ea3O zOzef`j)K-RO8}^z zvI1Pw4!ImEtg>h`xoY2Xa{V~G#B##A^804-fy!l|jdCJzxqdWRb{e#^)~}4ft7cEB zE=t^6ti*c>^fF7x5;uKO0usN-nmS#A!nhCV!Qs-)nDeb7koWD}V@*cJ)4HeA_k%r zIPETPdb+geO*9Z$8}P#pmvs^V{!1CH12E%@=e`J!;1F=6t(r=k!zi@W4Zem3K@0H) zyN*kAE+h~6rUvMPi%MF{NSlX8DmVeDBJ>exY_0X7#i-q@b-}fwc_!Gd1Pm~!V@D`p zK^OY^rH-AqmP@pr?>lG$3ei11tmAL57bC@?G6XU&*55i5OFa{))CiP))1cJept9JY zcGI9i+NdSksAJgp)Ta@%8y!2ck!-WZ?Xb~|w8=uW$;z_$7}} zCb=aRMB@uPk(2TvuD5--Ab25e(!rXPB*moFg1D%iC1Tc# z0_R5vWzd6XZiq3UNF+<>oxT0|-be5E*K}uDfwZ!~omu?_N$f~C?fH?;gYx(A)OtT} zbQ*3je5Z7}&ajE1h!$^%7ACP)mAllfwJupH??r)JsVuazU7GY-a7&$-jvq#21ipo+ zW4>x1v(be*qjem z>nZlc!1AuW34k|Hw$+3Z%JA zRY;IJQtqp{LGq;E7Z}GtV8YEJB1<4>qc6)}*fFZg|D^nTpHBZPpz5p9E1z+!JaO;Z z(Suw3ogd@7j-w;DV@G69b{r?RDs%}`hwm`DuWrYVM@NpuCgGQLxbW?c9LM$?$5qb8 z5c4LKttW6Xr?B5oZ2L~hTTdQUOdV8=kz$Unjp`i70?Ab;F^!EV$HdNJaqn1gZ%Jp0 zM?O&WU+VB0w~+@;DL2j_9T|3Y_|k%A63~NBG-owDfX(QBTcWd)&u3NN&4^%jZp6%N z8-C)y3*uy-SrDCtjjZ|DDYt#v(&^_2k3QAPe$v96;}r&Rvb!|C!2!s(pAyi%MQ)3V zY3&aAyj%Mj7xWon{j=-cXA$C77vuR*_WH6I5I-|8rV=Di+uB0f;RZL4aWsd+Eyo_| zEH^eQBe%d-+X6hYEFoJcu9yQHS-xe*iOlZMvKXv*PhWNSMH^?)FEj-U|1Yy(L>O57 zpS?r>4Oq;8alx6Tm_+l>lby%|r~jDjppmm^ll=oMeqgcGM-tgk9>8L~dWU5P?J~&} zqhDZgh5kE}(znLH$#5CH<9FLf-H zKhBfxZW=z#pC0JffM0Z6kjmL03o_KflaY=mF8nC1F<5M-UmS>+tF#HKoeIDM=gkEZ z*(iYc@Era(CLBt=TQ>e7C;gMFW1}&bLX$-(2N!Rt}9VRsJMWOxmT}hd+RGgpnpmq1% zcO406&G!SjpPl6g9j9}!BDBk|<-Zr9U9c+ux$TqIx0?a;PmR+mOLin4j#J_kf9>%z zQ0zG#fv-h48RdhyFuIokp<`nt$uX0>V#+_=aTWqlF5?EUFzfr2*;lWU z_at<9Wj@X6OK)#ZqD1wMNDLsJ@yV#rBJpV$8-5ay>zTwCe5xgVGO>hx<$5kLQ3zGV zn|V>bbs-sIi=QP^y^VCP@fFSLLRtL$<;%5qsr8qo;u;229fb{&mSO;j)iXRX^$Uz1?1-0>EZMvY0BW9|l@thLT=_i8 zB2Ui(c$+)4ISjqqT#qG$9DSND40ncF3VI)iPm^ITIV8N=ShtfzVYMAJ zp-JP)rUB%&I^^K)8}sBs?tlHGiiZ4A3X^!B%z@QWblhvRp4rHc-zGQXY#le{J0oda z=BFa?^EQ?|GNJ6VIDQ0W(Q(uO7QPlpk-5E+5??ftozR~hD z3(8&%8q?U>C{C{4u0o+{amyR@JOTTmrv$d%RleGUmYM8&(@CoJ9rO*3SE4j4>_i*G zMb~QbTqb+R8G}mz9>k3}C177#uURAukVYj)rZ*G*$eQOQR5b{YNbA4!&bF;}G{_N1 z`xT%>-2aW#h>DH^1C?I=bPxs>CsTd8l^6dx1fB5rrpviGWqcE>D8}r-nhXC47mWKl zQ`8J8@6!TEY8X6Ku80_d5S0by-7APUDaxn9WLBW2(TWa_B=gqaRShf=5^9@eABg%U zVWp&9w6yuIJCT_#8ENWppU;@(eWWZgOZHowvl4|OfMoKp&UeR@Vr*^)?cy&JMenNh zPYcVQzTyFtJ3Wy-uu>3&f^?QDXH>UU6!kv9z+#83ET_0~qaCHs(^idD^h(>!Yu6uC z#F=qu)>%!S(9L%%q0~?_SD337&i9L;)Kb}3Sjy5Z46&fpQI=L%KQ3Gtvni?H!<849 zFJYf7Q?Fj;skGfL`0^>gxUmWo+tKnSdjUFq-lS{A?Bqim_gcoXnJS6JIbu{dBYM~y<{?(|G^AKZ#@-`pvMW*jXTD{zu!2dF?^?}+ z9dF}mdF38Yc@9Wc5sC#lu2A{dbUE|ZC9w+bB?di+ELjNS-cwe9REXx8~=h7S#?*6^m;N< zts$RqY*$Y7dI}QXP{;_I?7(EW3HJlJ(yrK)twc7}pa=sw7Ke(cYkr+0^D=Is*5<}a zvM6okQdS4~ZAkPRx>dQDwbyD2$4k42d$@;P6iwDhMQBoD2xaFRg2Bq!UU z41B}ij!G(9`gE_RXlo>hV|4wkN_``FA^D^b314hnV-Q62**60ARUE<>1N#P4yC0h+ z?-4QiN$6Miodii^-dDId4m-^3-+ciJ3JE?wLWHQtwrX!U3j)|i%D_naT5SmSuFXHo4 z&BZ-PuN*u=Iylp>2B}NFqf8|(m^k793L1_OAShphL%E|`F)Mx`*oV>X$en9ou;Im0 zZqH&)p9Qrn5V#1oFXkK{B#Yy1MJ8J7--ita+a$n;XOKn z!}!msfIkz7@(J_e(Xd*C|95aeUiy3`3ly*$;m;1~^Q1bVeYB7f2 zN*nJ*VdWlO;XwR9y;NUvW(>g4Y~&H9x-I!62IYJeVpsZ+WFph1SZ3U>{jUYsH%@o8 zY$nplu&+sA*%D1t)C3rsol;U$tdTb`RhJ2+*tm(`nRCuuL8L;W5dLi_GahR zx?cryzp^Fe=gSfw0- =%OO!Cx8`J&8I=Anz0y(N5a|Stg-vv6}xYTYWF+v&D*7>4)8ml@1 z?ajZkB?Bu?K617QpP&8*S8Mv*>F}!0{;)axjgw2q_08qUcXiY8PR9$~?r=#8VCr2j;N}l+$dsRLvZ{ik_Q6AzOam zT`8eU2dqHOBu-2}S2sebX`)(}J(?h66&93qSD+}|Z@)V|Ie56weCpUYh*I;I*kgtL ziWACzrs5nK!noScCC;#*B%4c27g%^z?qgUlyX?gD=20)7KSrHwkt^NtKwcWG-I;d6 zlSh`#Co9v2#EY$Z6nCfMWE}G;jFXc@F{ZG+DrG&LQeY&vPW#2xI+UXQVq5-F+8FSh z@{Qhm+Gi#zHZtyVTI#cCa)^~@?(;8E?$nqTWQu{{=cG^_C(l+TD^p>m(>Nd=w1KBt zk_&KJ(=_D|_`cx+l~xdTiQX*bGz9d;)Z+SiVpO=zKKBkTL7NRPj?*!O5Sw&!fbdaD z;e7HY)n1~>O$_Ej*a(L>CL59WIe;;4v?dyRC_#$tGA)FBaqU_0oNa*9l?{J2F2T#lb^KK<-iWmASagR75SM<2E5 zmRdV=`BJNA&gdEd*-RxgDaDf0990c465x(GZIJ z-eTk+Wc`U~rm9&D?#@nGqr?^bwP>8EA)DiR;?1hnzN+&(No%JI7#ww8XYT5Q$aD1(ThL%PPAJwf_v(>lk0;ITYnauZmfwgcVlQH4SQWhcOJcol5!!a*Uc{AAuU@+{;h&FHTRN9R zjJ9Z~FYy&vZp&BU-=JWlfDmLwy0H*wwWW@FA|14(*JsEILN+LsK0x`BocP>A6 z*w2DVazR)(dR6iQ3Mm(xh)+uLspKakMfr@<`j1Bm9DI46zN>&R*XKz;$sN>KwC;#e zDTi`AKQPsI_=GPanmkGdC-tHsH#n-xgY_T|L!OssxAeVqfkjZT>}Q;r=)>7@)S(~W zPP51vUxdOz?YfQ6Eaw0mE-+E1Ocry9c@5iHv*)`8J*%u7yzj-6DBNVmcF{Q{`36*; zb4nroVrk>5X`hK)wKC_`lG!x+`CeM%O?q)|p@cQUH?n}9 z7?A3cn{H-a`oe}myqVZfpVG^5M%UOl+QOewnUPC*$q;++=2%^~g#kfAYQ1tN4FpA* z_dd}p%*y}gb0fBJrW{Dz5YrD7#cPQs(0A8M%k9%HE=O@hvM`3&GeGOWxH`v7R`bVm zq9gRZA$Z@orKD3Z@vTH|x3y-c^p!*AXDh-Jj}u8s>d!lqkrorKImXa4GB6qx{F?VR zg3&7cjbMOmu%Yi6VWF^p>C>BK%9L>Jw|my(fy+z$xXzlhb0?i^&(pU;)qI0PbTF z?+xo#c%(-y_%6Mur;}*evUUq7{2!hIRk@_$b^J)C;82e=JH9gbArmCYfo6j3h}K2L zih$3;@ZnQ{{6Jlk)9VO8KUNdON`dM;q2t0^c>Cv<2Yof?& zNH@p$fI)sdYw;Rx7TrlZf?9(;U91y9Vo5s?q9=?{Vd)7B)#pXFmjY@$LI~NWgF1&G zA7Ql@X!sBYp6Ut@BLo_RNqTyE!ox`i=m9Gs^cz$hpSZ(9h=OC7XyTxkk!CJIkjpTL zUQ}8JC`l;N@-lK;&}4v0Y~*tQ&eW6K3}6>^a5~_{{7E1$J?MOg6jnAh*c_QXZ``i! zU^t2B$^?SI&W!a@2%AB#v}2YUg`{@zi+ExT`7q$6V>e{!%>glPbcpCDFH7{IG6AwM z8T6&_4N)K|A{mNsYWh4DLS(A$dgAIa#J=0~+9l4& z9`vZ5cWM`ZH3MkY>OVAdjM=`Z_(a7d07GUGq?U=x;^s1?J zAA6u-sd1#DQv`8F+j^>HXnH#wntg4GRV~x01`UEO@CyW_TuH-6LA>C}3X!P-Te7%Y}Bk%W%}1AbODC9xnDRGpMQ* z*zP4?H-vxOl>r526KEzRL;({ufK6BU+mF%>VK5DphT%0lLk$l*nm$nOQjzHdpR_^r zEf0u(`i+qup&wHiereTZTdEG^~0F0R1?EA#+F1F7tQ60IOKv@BCyXT&e~T8ae0mqZg<`6%4^ zU~^eOBFgY|7VcD<=xOqIMNq?25MdP1jfxh09Zi~tfkI~k&jMtBP0_PUq^k%rOG@*n z1s-J*2$j+`9nu-@rD6?B8^Q(0X%xzD=7{1J>DCHObr;~Cs5zGbPlO7IxZi=Nc)}Th zD%Y>gW)b*$-Wh1-*lU_(yYPSACcpE1@f~_0CpSqGY~bZ>UhG(sb6Ei zL1QALE<-wh2S-@Zl^?%0B+Ciw{fH)iKMeX1T@f!-Yyp<3d(FG>y4)08xmarhs13jm z@zqF__>CSPeO?x$)?E$JJ<*qb_6C*F6=y8rM^}tth7VtzP81MpShl6yj#ohPF zJ#qAH5KBnGSO?MMD@wF$4#1ZLwM5)S_O(b8QTWXpgtqyKy5`7SS~Zs4sN87seGq(1 zL&C!{&~Y29u4JtUA)dEZl2K4KA#^H6-&|a#g(9|yK!d7k12$RjtJyxPSu&890jVg{ZlN_g>ooEmH|U{D87$HeEH;|-A^@f9yP9b4yMV0*SmxjP zd+I8ArEIUgfWj$U6JdGQ3t8rW2{SvY%?sV!8~crjp3{M z-gX7wu7vx$IoYJ zL;qwHUk+M7%%4Mdyks>#Tf`q->=?P0{d)NUZIlYh$QcFp?tIa4IES@9Sq!{&#=ebs zz9?H?1Da`P1R+Q9eN$TY>1K0BELiJiaP+4i1w}35Q~n_G6^*=Kgt4&%@1wJg-ry6H z1=3P?C*fh*u45x~5b*x+mq8$v#gJMw1kPvTm$CL;PhrxEMQMW)sLA4=EHxu(HmBu+ zV%mGkqJgBha^@A(`egBkYf83R)b_WLa0q>dvmY^!KZfk0cWIZJ&-Q%=^;%$%@Za+5 ze;lyZM73HU@G&0#r7|4onCN~g2CsThuC7h$;YfL-(q@Rs%-Jub>{CUf+&24bdHFZ8IXb#=>a}VM| zBK5-8op}}O1s*n%jC zXBY+fv_m(RU%HGYPoaM=>z~M?_;FM{=>w{b10meu7m3YsJO}0jTVA@bmMt=-P<1!3 zfb5?V{A8!Ryd(~M%tez8YS#dDWD}rfkuKatwA{&_ps(N^8Q0&Xcg?T$8n4)<_!CQ! zWxRheKn3gV11;1PIq^xy0;&41o_Z{H6oKHX zVQnb$7j=Q1!?~fGORRTyk?WIh<_9Z-5B%MofS&h}F82|O?{}V7$e-r!x%Q#kJZg9qQd510@zc3AR*e8olmOqDV$YAbd3;ag47*4=q|4u=&_r&)2F9AB|5(Dw|S6U9@d-a8vG5#5_nrQb(#@dzO&O2Qwp zEo+j;hXVHlsed?;@5m-%M^r~UUQt5j~G zO5)a<*cXP;g>RdO2&K4#U#nlODHwZ7r&*H!` z>uTGNs|iy{(dwr6iKo9C!fiU+02TTezFjTw6)j|62qXu~EUoCFyYzd#0CFp7gIWYU zdr&JpG0OQ-I}ZgqfoLE-;Fl1_&@X5`hnIL@flkS1`BWIiva5Aa>|`!>7ztFN{wzBl z=#3yoAtQhsDwE@fkE|zY^wYy$cA~)5W8~)zZmr8$wje$n=4dr=PW_`rqTm7)a*jN8 zN2uvncMNL}V8y9DM_s>T(e<+rxkur?-_F?|2Yx}ON3JD&Rk;yp@>*? zuulWFL#nrCouAB;4#!4iNYQgKlZu4`wF>Q~*1E$%nBKR5W161u3BIb^;-oF*j14o9 z6y|y})nK9iZ@0y6JLfoLvmU-QDT; zUhcf@Q-SG_b^Wn1Q(dm^|7U-r1Hz`lKNx*(zHX3nizEN0K3yu87img@t8o7RYU zTZ+Xn_+(cb`@<#sn~ z)(G`jtm_Ed^Ovs5QM=S`W9!GGCnM`C>)N^a9l1ZW0NyIiMd6bRo7*$o0&s(`}9iJ z#OLfx*DM6zUC$zh|6I>1`HA~NxRdp{zFk48yMaS_(@+vc-#L+4(64TcZiadx6W1y5mhMqrmHepG!)k!fAj~|;Oru%-KUCx*L-&ZF- ze1Op&$V_X2ztkxJhR7#^%L*xDA!p1AllH=u*6Riy#-4dWBu?`>ux^9YvX4m5rXD|Ul%zGSe5I}bV!zR*^cMI0vsLFW3fS^P3GVbEu*{1u{0bEgp@e>kjPUq}BsHmWuEFQPnO6|A9W+TMHIc|>_+CCO7 zM|bxUY4Vh8goKw`b6hqubm$kU_V?*mGdZ?MtLr74eeseX`Ocp2jilYrs%H|=HEUP* zR=FIs^{V;&?1Ez59zI=GyB&=shm~)S3QiF7O-i1Rp2pp4zmLMazJ|m$%&DcE!@J}> z$$1qNpd&bu8qz7WLQ3y1wO?=Jf2%Lc`QuFPs&3|n*{M)t2&*;+j2KCB|1E*l=R4X@ zA`7Au&4@s07qdVrg-k@WzF_C|RT+)19ZiYq+~hAw?;055wZaZ5<9yKQsq(>LvCewN z-xY;#&l}Vg>0Omdvud@7@Uf7eyFzm{9z!iW(+A;PA{dPZf&3x8k%!JSZiiBFO@~5J zbQ6vmT+-5IyA3wCmTs6{ScJ(6O*=-3v34p2<8&n-1-_0341^TGW}`Jx^nDR8Zx_%` zJo!SI`%s*Gsb^G}fZ+RHi0>#dGOkx65)Y4kjIY&XB$Hx6V@;Aw0Ublo$B(M#70GXP zqG_dDD-e>VZ6n3dsG0K-gx|WFq&r4pAmg;@wvAxqHf*<#&jZEIt#E2*>09KORcwpu zGDx2Fb0@;)^ECFEuc8Ziw|nU9SeP>aS8IIOGzqi7WS+FlLBVEWG8Z5Rv*yf}*+*fB zPmP<@v=^gr7|lfMEHC5UZ1ly77j#14DGguTAsiptIriNX7QW8g*tZt6s)rgi5-m(h zOm$kp1EF17m8H9cP?xDPD~veM-O5W579dHPO{&I~o&c(=%tn|F(-$4IN5%+)Qa6zdtDHV=QQ z8XiTSp59Osp=UnN;x!8>NnQwESK17gyZ9cn@%=+{xP`#NOH zYQmzPuI0~GK7X`wSgB&)fE9Duhi1SUtvk9A6e{$bXywb35X8BozIlfuKLZUzu?kWN z_5n4Yr3fgp6$L3VzqELr%|Y&#*cZ+r)lQ7$09Vd@@qg5)t3M8aM$DHC%+}GK5L{QSl-N)~SUnpNRcui`9sLI~dJA_o2 zF_~*9;f($;y6Jm5ixPcQ5M<$CbVK6)=E;eEYD%Q(#9%c-?ay?H=Z?I*?F*CfO%27W z`woUTU*^Y~nlwAUA%s;#O)~5^4X7TtzPVZ2RcmhhoNeO5Ta4L@jLCPLX<`_g2m6)~ zIu{;OsS$CE-NvgLHX}MAjlnI<`@44$jvt20zv;t5fwa?_kQyG+tl)i4&_g%GdVbFA zH({WpsdT3D&{}P?26zoWR_kNs;qKD<>;U|;yg}m|a^9&_F5Fq@%SDcj7AsLigt+nx#BVgIO8T#ow9oG?-yv%X zXilot1<#TQ+6=^VeN=-)rH&Fb3E?iIOz#DpW>a5l`(S(Upf*u%;dKILb3>vXdMS}M zus|Jc_bGAT!P0xLg5F9#qL9Q_FFgK?dM81JxE>^_e$pW9rw%Rj4$=_!ElBYDCLAI$ zy5n8;(jKDoMn|=B3(a@oM*h&4?Y2rt@$@}>oQDl%qT|cnDB}wWuW}| z@`dkLbn-GfPA`!G3B9rJhLjf~aKg9Y(lk+qyWjUcQQ~`O0`1W5_n*YW`*U=rwhw#4bEK@_${GPQPmXIL->vLsDo@D ze_fZL4A&!yq>H}HQ)Ngip^0XBcS#h(QKhFHO*Ut@87K6&$Em-V=oD<^w^OayBe&C{ zu8vaDjl!>RFp$Ei9=y;)CYTOQt#7ynTA2TgZ~uEQ^dB0rvb+A@z0kv71ucBe@?@V+f^Spx$F%`8@(X?v9%Q}er3R4t1?3#51DRHkR?B*~NI$;$I ze4PON9f<{;2KIXX&SVaaQz{*7z8??x_TzYJ2+rk7%D(8<8LP8P4VDq^D&?N*HkOzUk1xaR;Wc@} zt+u1hyW8XQu=iA7CUvVtAO8e8`T3d8bUya&28Q~TJ-cvcv0pA$;w)Jwv>LfM>}R*z zyX(P%`h?>uNp#K%dPGcb1Acj-$N35a;kIV)oq3x0;`W1}c58PG8L3EGFpU`7r=}n2 z;3G&?2-WPD6)BiT?D!iGLo7Oz98VVQ*iu%#m%++B80`MK|+#Q8dFsK4Bc~$B36M zvEFc&io=m|>ov91Fnrs1Rv`(dOcr!EQXu=OKqyiNNwC@)q<|wPl!&HF2<^k9!Q~m0 zY3qkj>le~8Dh??b{N{yb4(n0%cGZl#-O?VU9;ObfODP$hW!4^2QmU*=t?`{@wNzA= z9ji-gVVh+qq`|t{K2Ep$LeJI66KlRvlKhbllP8&(1c3*JJH*=53~F~C?goWsNluIv zw&Lr%ObQony%QQ3q8`(aFv+E5v;=@5lw~K`hq1+CJBkwzUg*owVsYDZ*LJ__lboXz zYDpBO$zYPxT!1Q*wn3s=n1~MNfL(;-Ko954<$m68UTDn<`l?@E=o^?B*{?5?_Pt3S zd^5g=Cywg2s9c=EqzH2z~5CVDFR>sCwtEp#my>9`NJ z42wsah2oGXn1>;v0SFDq?q}8`9tSbyM^GmTSwx6s+tEZZSCv@AP&qKcZngh~W!Tk2 zHbv*D{a@^C2kx<4=KtPk{7>xU??z*oQHkYS;UCNJpY;5HW+(R`lYLN@XBE}q^lAbd z7@^-imtVR)t7;xjDNh~9V!+^o$6VaxUEnH8dv_0zNvM1Lwn*pk;9S{*&5_im9#8e_ ze#_RzXSvp0fzN1ln1z3*=l|X22xBJ?y8(>*=KqH_i2>!h@h#_=@Vtn`4e`{7k(#pwQf&8heM@Kb~w}SYEN>mWTqwH z{E-5g7INTB3%Ww_oP&(OYl_0VHx%n<2`O4{(z{OH_Qq)T#Fj3JLL~RymBbhQAY0n;FegA1+$X^zuO7f7u>Scdlkp5QK^b6+ZROE>K z^Nr@;ZKWaG_p(_`M`rB-guD#1o=18AhquyS56eAad z;r_*~oq_6x@h@BHf1w=Uzr2+iEb``tqm>n#{kop0%wnpR3ec;)oPa>vaQHfz__rmh zhrg_dwlc^jRQ+;mOMbmpqwRyawcTylzE?Ol@tq_fPW(?rr?++j@c*%uMqc&S1bq-U znx@04mv`>}RvBIEUF#HU!bFi%>@xUuNXpe~xxw|=VKbI)Vwj6?sZN1&z_I=VZ-mat zm=AkzeTHyI!-=u@t>Xj0{o8=}_ZyAw^9O)Co4((G7De^5nYKtn#aY;6qe}C5RfoQT zSgZE-ah{TIa`WJeZ0NSsE%{F9l+nI zv{Ia)e}kI$Q(X6ZF(UN#at9Vj{fC^8DtC*q>n)@paD$o(9_Cp^;yDZwcBMjORG>wL z-Do)LsE`FqXfQcs$Ot!c0VA8;AR22T2ACKbo3{@C@5RXfC@L7u&b zGOfL`il#jWGno#rzuO!a7mIrcp0P#BP(0}S|7COhpSaimd|Eehg8e1_(gg7EBKmt` ziA>?Q#1f0qV9mOeIo99&8of_t>*y5CnTU}Mhmy9t(|*}_-L|_ec~PYB{jMzE1(<{ybARt;}xSM+nCCdc`Do0|M$;Tmc4J; z+XeO)G1ynzcV0L(uYQ2Ok|uIouO0c#z;LBCV4JvlAZiqxJ^(+zIucMlYLW(=}uNP6Lh;{j;!rcv68_s+pnj2RNiY%*lXm;$c7g0=l z_=gSesvzvel_oIA8PoP5clQmLL{VBi8K-4ax}9c3gKzfGhGP?JinYC!VfT)CT?dd> z3afT=8e&LYYi*@VcKKS$7%O~mwILc<_iab^r4rt59uI-YuEY$6)pq{F-BB|EZFZ+H z!)7mABHiIXs@?u_cl`ZDl!7i^a$r53Rld`iQMt0~%O}9A_ZEePerX{3c#P!RnMG!z zM&2K?!DzhumEAV1>BNYQc|g3-LmV`)(k((i!Ti0YvbrH)3n2}Oe;vdJT?zy>XWeRV zg7aS*!ty+*UWv`9U_{wA#AoHsx;pbQAR;VfI!;*)nUC6{B9}fuPLv@kAQAM@(vJbu zeIK9Lx9MCpuY;9<-D=4z{F= z@4}~E{wbk*J98jqSfQ)|L;`6}RtM7{_JU;|WkalipANBSp)n-p@e_k@Z>p!HGJwD&S zfxZ9QzzyZBO~0zw$>)dZvXjq#L-`*Dh7YOU*(BAs<3pSeHePwoJ6Ib|PNIaTLG@kP z>C*eViz09A`^y|T+0IoyjFfwfon}t@o64uz?KeL4R9e@l)GoRo5%=jp2QR1*@Ae|# zgR<5{&2bg`@ba6AR9LB56m-FedJrs)4N6RmZpq7t#9B-%T?9N_VxX&Jehn?%X$#2{ z8J^$(&q*qF+{iiPq?-JW8Y;}=Zi!u4;MHC4Gr-ZhEL2AWf=si8Cxfy6M$I#w=o&H7 zg*x;-fdY^&bJS9f4gf&nX-cQ3qUGt*CrG_yAlQCAmauHX^TDNF`f)OLB^oi7RmzDI4sgexD1`4e(!BCPej2ek*XpRLvb?4zKYqFp zWTxC8)=^QhOaCSAB|#E`Ih&OGu|Xo#$er81D8iB$ej;+vo#qr+A@%xN2>s06R{N?_ zE``)^9xb%isdT^%vu7!mN}zmx?BFGmR@LCaDfzdu%A$@^sSvjCfE9j6uoCG6x8xD! zAzIWBS{-gPcVQcHrXKDdL6W!5Q|jarM^g847J492(hquo3%Ny;k=lL)=25OQyHtOG z*(uelmxDwJbzx{ZN}B$j3lexV9G}ZD$#1@&97rf`e}m=bZ1J{yGkQwTx_k zH{7%N$CPVE#;D!-t`1x17T-ucbc{c{=8YxGj__h@il7ED=kOBlPGo& zbg~m(-}&7%dO0t)8%E2_@kTT?eTRwmlxppui>-ACf)_25MU|Th!d;UZcIdPg&RMqn zm3>}G)4MnE_(EvGdrt;-ySg14EBU8ci{Q)W+TAq;v`_`Dh!j3|rwzV%H7aNpz%rMH zS0{D(%vR`P<_q^-t?-W7X1JITX~y^*3lIOQ&~=|B8gupD>nw=&F8j>BPM89b9}wrl zIbD$ETZwl!ZsR$0_ z;oG?BQ=vwDqH5xENw*LUC4)kZTauS2`h;GK{=6I;=Cx>xwi4Uwx#^X=hqwlxHsMT; zt53#QC}Wh$m)>(Rj1%&lLI&#umF3MhU*4ywad!y6ubpH~MR*m~aNx}drF1Shm4;o>q=#{M3p!o<>{aJ&eVFCs?^oURp$KdDY;kxXV#+dG_yZZ;RZ^#Y>)_* zq_p7o?IHVpX0uqn)VoA#&k229ssK;|WgigL-vm2r#w~h~Jf3S?F*>=|J+y&>Y1=Fr zXI2ss=j4i#T_-w`KDZ$)C6}sNka>rY2c?NPG}x%z=jp+EhOY=+C)rVNyBE)H#cWgQ zBi=|vBCWfVRDYV{1Z60o@G->JIrd}$(DJll40yF}gqaSFY687aEW)MHUEo4AGIaNe zs99WMwRCy8j?VuQ-(%Bjr2EDA)GP4_V9T6fwhbahz9&_pSANn<1vvb*b?j0E&B3QY zyi36#51JrC-*f($G3fF>nkB0srndWzNMsS_dkiFv0Cw!D zQ2BIpP)5;05|R{n?i9zQ@8Z`Inx4+vihyi7fm@t2%+?633*!6IHK*Cqhb80|P-*>S z8Kot`i1Vxgk+fu`?2>K&M&QHC=I|W!V8(=S78H_WHjz%R95z-ey)6OJr6O6gf<08` zUz8Bv0+JjcvO!%>`%#$_b?+dMcf$)g9*OT5pt(2HTKJ1#>|c-{Ex9$px%3mcB#W99 ztzhC`k)LgHJ4lJWee+te^YP>J@N4p5SJ~r=`9SM@CVWD;|3jWgFkd8?<5|eimA-L8 z!L)Dzo_>L{e2&uRf|ZQ|T#Q0o&jMOV9#gBhT5HDSjzNppJ8en1L6QO^4UK6wnXf>S z>Z>e;Rx#Oh2FpmKp_<|5q19sz8T-~E_g_V&lSQOmrd7b=e5O0aC;2@y6XVUi8k<6h zC!zl{h9;6C9}RB5vSOwhs&I5bNjhc;5wzrLqGUz+eOO|NX-)B{k)f0j*wIWnA%Ma3 zM@e~bsYzZb)>`qWUJE4}i9C(6Cc82%SXng<&j+(|x`|S2SV%8(xu$&igu*ob!V^=XOi9I7B)O9^$1D07X_g-0b_DYXd2f;<7>#R zod^`ewWLV!^7122GRGh_d<|46$%Y`i2B7@gC%X@45!!oJ4z_=}HLne(cE$+RJTV+oY0;($X=1r2eXDhPgg`S6n~C(tlUyRIgd2p^5%wnv-ZV z18WPP@;k)GmaI&Mm@h54w5_qfKnFq13Cs=onXSEb&1GL&t6ZAjU2ARrY7N?ut>bRa zQ2jU=!Yh5+Y~HHbwn~7^jNHr>Q_9p_!X^0uYq*2g90}C-4vDhs6wIBdlOgR^qSOn+ zROyKtjxN-b=vVA3E)o_}9oSH6Y$3)JPwtKDHmj8O`+glXCe%rg_T}BS@7L`-B^`&E zw6o{^^6puN9-){~naUlr6Qc&Xo=jXbyf8p_*HY3j>|CCJFj7xZ_JU}JS zAC9g7KQX#H>wBiSKw@0Mej>fdrh%HXppY!^$Cra#BSz8EgY+1V*hK?a^85?Pp?C|3 zr4e|>eu%QGt(pgntQgAr86;=%w)KX%Y{c}=clK#yD3@-y&0<7K2~w#AmaZQHdKx>t z>~Z`&ECw?1vNy)D9-V6=pSLhsUmbZZY1}UX@ zC=ms(DcKt^K&B?}<;3Rev9)Lvef$JB5BOXQLNC(;TMA8*q^AYm0dTSDI zf@(*Kk-FlE*eF$A-c(lJRP)PmHm|x_?oVf5B+fr7U@T-N3z{ z*|hD+iQ;DfT{EWlXK}jN9#D#!@sc^le0mf!ttA6-ev|DGlcas0gZs46#%=cH=*+4n zxfdY^4n_z3QIgi^b0hgVqgV4GmUEH!=UCHY_tXJ?id6KNdb<>$$OW@N_zg;enuKyKCL9NI%dTjiWGrF|@&^EL zzxvysSo-iZ{hv52ywNDP^4og~$q_FMlcu$U014Q*Mkate+MMG~ zltiH_?+J#|l*X@yM{#=UlVWi?r1CRgLF2{mY!qve)G#NcVt($^NE-hg0C3K~$o1PP>T6ddF3!cja4sqQ(Pv*86AAxO zR$Gdn8dmWq*8a5xKM{m!O_hOPuY%kA_W!QY{3GZ1*Oel{OS!-0*+4ZcBqlc`VqK;nkEb-MBRc(z z|D@4$Ez#lnbKWL)J~ARQ{(1$bV1E}jm;8=LCojuPCgQ#hH_#EYUW+D~)ZhD=5DGNf zoj_4@@={JOzoCFA8-BneM5wCo)oWUYh?HqvB$Xo{tJO-Q762W>qWT{Ft`}Y2Vqaq? z{Ta~F%nGgqAQdpSeA;3lDYWAW=_3ZRW`$?6h1`vKASH2k!tOa0t>)h_UUri-<$^w$ zm3FZU)skBULW>S^4o3n_0Z~Xr3`r| zK4Ha^Q8~u^(){5&$(-AH^PFBF@_ac$*Y0BdljZNL@_1&dtM4Ik51Wi5hTmS+w%sL- zX=im&hnLR@wD)eAfhQE7Ki#9Lel#VO`$wJ)X3fui;*yKaKA#QvgTo3PVS%i(Wt7(!PRv93*wQF zSX8JM%D*lg#B(6%Sk9OSqx6Ixe9BkjaIYRj%*zR+MH7NJtlJ~#dQ9JAYq9el502cp zv4oeyY1udM=6D5?Ico|#t0{(UW>sSPw2FlILq_cHv@=o8MVGB=wI2-kpEd>+71Chm z>vpX&l$ewK<=HGu!Pm!8C{#xp`W(U+Uyw;}EYN%7+ht)bSgDT4qam;G?Q%{>i1~zs zG{Y~2b60+CbPBQY`VjTz0oo}9iThBuRBJroTU8aQ{K24PZHsMe;4xEcPE2bdJ&V1* znn6IORN?1B;~yn@B#KiRiz0$#Eu1>Ujg#f|NDW!H;V0o{O1@o5@8f6GR)H z%xTT5K2Dw}=x{C6eLzO9Z!}X8a8}N-!)4l^VMG>e2exT=r;tfTm&LIsTjb)wVQBH%V2mLwHceQJJeM0~?NY|lyv#>2YF>7yfT6V|{V9D3Puh$EjqS|=-T_{{f~ zINE%2Jygrc>P&k&dfX;zsP9rx>WO;Hojie|U^5qw`bgl>7}r1%vfuix{%K&Zq39 zgAAU!&)cn-G%W3H$NgH=cXggWHJY+4N-}GLlj}Km!)3)Yo+4Uk6zaaw9AwK13+*@u?efN35~Amu!g?X$tH4Lc zfn+(~7`n`?zl^Qb(H8DuNwlru@Lz=)K0Hp+Ra+H~Lw3@>Wklj3Lg5X5QFa@ruMgBF zjGqp4RMO8cp~%KO*kZ9_2$h@oS>*NTNxzzJo?&C0@4D!|UM23md{V%kasSj^m7}<@cb=bL4ze$K5oCW?-oD`K>!L@M1|#R$+wU(>&$quQij5{z{eK zr(YOuchIjcFBo1Ol-r$OJ3`L;U#(-=WUPyd+x1un3VwJA(-@G{*bZ^=4(Y@Si}enbDhYM(5j6t@6Q@F? zJwtf9LbNVJE!4uz(pVY)*^G&Oce;Cp$@1ULm^bXMc|HFJ^Wx2qfnwgX|FPB0Iexbi zrEohpR{EDC{okE}e>u|sJly@?f~2%xU;Kfj{57Hb2i^Jq15CBE`NxEA>p$k+!3af1 z__&=nJA4ymU?_w7$@#Z=vCp(x{=XdVcHXBsl>M6-v)4c5&w24b?=1dT?meN<@y}Lw z-o@9GxSF1_2-n)Rt3e*0%CsZ9+%E0)u{uw_s7n1g2bD0nF-&z{k8#&)OO7osF{9R> zKNhvQ_xkR7nRkb~4+0a)J}hzdBT~l@5*Vij};v{|CC0PE%UFzXJnweAmmo z(+P6?y_cD@g#E|PqLyBZ=zoOlEzO$$wblK1$o_2ZZ}q!>qdQ;By~!0{nyVCfKpY?P9(#ym!CMQ4aEe@;8$_E$-z}rlL0$W^)q)s_lI|zw}1v|8hEgst2<6@~i z%l8s^+H$Mxb>esm4a(f)sm8vO5W#rzNSa3Us2`&#Pg{Dye8*(p z)a`1tizdhT5-mmE&BhOF$uexHrJm~a2$5IT{eO&Q{}+z^5oh@D4+-c|ukPdq(`TSI z?XnD(W%N-$MtH3~kj5D#WVZtzjd`VoU{3B$@pJz?7Ii{ zS)Gq&zxwiPZ}hIm%6lUP)LalPyWiUAeLnCS{2eRYGV+2w$>6~7Zls>3OQgS*jHZ^@ zi1y<7B`b76?Y}YbCbo60yy+hg?33p#&|6Qw<=^Uxr2CCh6r-I3DMYJ>nAapX&xiO| zz6jd~Y*dVoT|3;QPSSqC-_iTQ_u?!#J4fpBqkkM^``dTchiY5J&&{tX?ijLfY+bUS zT+aWeiTIRETJrS4B5oiNAe=JSA5ZV8CD!UG?9pKQRz{D;A9M401G_=7(x62 zqpl|k;0e!@U?RDC)XO@ig3uY!B<1Y>$ngv}(zt$@tZv}*eYct@Dq!=ujv8b#!R z!UYz6mq?Ma8rIL^QM4<6T5viOeuEIle7&Q&l<5LqN~o-FR*q0cPy{$7)%SEpc41$tlo z!Rpfxi~9fc8`k}@zv;u%4o7q=soKHQwH^=wyHd0t)V2o!6`R%k`%1~O^QS1G*}J&CU+Vnvbmw0;N}i$ZZ&J_juAhoFjn~QaZ|&2| z1Pp!Q<>|kDDsce#6o_6~wv<-f-|FX9B7XSh`eJ{h=N*@w_h%e`LTdK*nzbhR zvdZCP%!+ysug0xrC3e2ac4Yf+{-NXE%4Ez7K{;A8v9LQrf=@S7@n?Vu8Lpea?|(pQ z92PuJ$k^^WC0yX7l_gGat}k$iB#n7cBIh0N&6KXf+bwv80?LUcRs|vS;)n8SMJr0C zivAB#f|R@dEGa-cA1t}eLTy*U^gabC0Db)9y>eb~Kyi^SoBwhFb9Of}!a3QNv%wjW zU#3!^j1#V)7~X4_(}_QgU%6d0Z2JLS4Fj`bwvg%|Pl!}X<;LfabqVny7^CFqZE%&G zQfSdZ=_buJaSWxlB3Tk>xAlGr0cWsYg7sUr3OR2lI~9dCp6M832KLhtStSm`V_CNw zTar#_7>}OeZ;wfRh5PJwbv%@w)7S%m(cJBWt)?E-{tmt3zGzil+)PO}TdzHx#|^>{Q6f{nV8XWV!+#Tn>WkcjeVymsm8xsRoN>RD zbx_N$?Rb25V;5x0&cdr0pviEmDoU!UbOBU0;`#QK_TfH?6pyM< z3^#3pnd@yxIO_LW6WfbDhOAsX=x_Oo17{^YEJHQ!V5@jv5!f5hU0x5ZrYr-?)rBsU zzavR)P71WsV<|KTgni8`@~P&9qUr|dzJ0H~OLIO0?qsXb`S3&u>_}bfX{Pd#O4VIr znxmP13-6B$Pri4?1kI?||QBuI~_M|$JBIintS@LC>slBp@HJu(b4{r2KsVQZ);ip|zP@f<^bL1R{E>#v- zbpf0ojvV-KU(XbN43OYVKoz(euBH=0CL?`MAH3;y!VJ1+7=rP(CJW%KL_wgS7*Jo} zL7|nc@QuActoNDK58$q;2|=--1t0X86SD%znu0lcKAIHa63kz64>$E0Ha<1=DvJgZ z+4%&9&prH=>UC~g)e?X85h(yPjTA>i_TV860|2)!{+&$}akmq6$TeBqa%TV4dbvDd zpFqTcJ_c?#3N}iA9WTgp&LAf0hw zEA^wmHn%^t_%Wzx_5QqDeL#y*nhefsQ(QR$gL(rb!ayXoI0B&~#LQcHjcjXq-VF-4 zI6MLfv>@)i(p<(wJq6_otqMbQ2zUdSj@EOC5|x9J8I0NtxLR)6n3q0tc|8^W;neBo z{rmgRME^yU&@{T|&Oe&l18Qpi%sb+l`ATiF%S58LYv1Q%=F%j>SM%f1e!!Q^rBjLs z`6C(kp#k${LuL3!`Smhy+O`$U=VFQ}dwby~4svpl&Ase=N8OTNqbbLm`^3hMVqe{C zFtQ_p*p!bFQrl#@(7QfEiep|#vf>PZIHzGO;i3%Utu0Y@f-&Em6OP!b?{XJc9R4~l zvhnV3vv3AXB))x-BW$@N5g0J#!uPU-V2Q~%?w4B1!;`94x4TxvALsjZ&a1o;nrD65whwd-8hwvu&8n^I8@9-%$ zI;id2gpfZ{tK+!dD|sY+-mgD12{)HmW_z3|011D1`a`nlyGh&-N!?(k)FYW)N3{Ne zt=DG#I18aEBMA*p?*(N##-Sr4c%8ZT5|D>+Ol|Xe6K#7%38Yhu-En{{JiM6ik2->) zA=|QnEU53dXw{(cl-+msM@c&wR|~=CKYOyTKR+Fia9DlAVi9`7JSb1J%mzL}_n@C2 z3Hug7f{Li11@vJPxD&<{yX+){0we>ZO7+%OgxhbWA7I@pq41~!cUnQtFCa|MUU0!e^NJSW0qMQ76Hf=fqGeVOeoZEHx6P za|H`S%nviJ6l#VBhmdRqiaV0aQ&65W0W5w-L|w$j&q0Fgp!B3uP*%+px}`)gfeWps zXghpHnTMq706i_{)FI*OJZ3+2Rmz{R*px#P7qR&08CFzV{v)oG_Wxs z5G@cl!cLOT0ZtT%#fQPsL9tnR0px#6Qs*t?C(e zOv8mpl%DZ%JmOT?;beldsc`zLrYEVjBxxYPA$QRBV-A{R@LoTyqi-?`RkGQj&tr9p z&{SXZyX3A!iroVBUK54Ow7-2zO3q1=TbDk;%NSQ`FApH?Gk@kmPilN`A8&oakU~8^ zq150OrECw%e33M`Ge_SsXUjdxQe+yElN)kO4Z%!eh$l!(PtRCLLwBZw)>7iBGkj0e zXfKIv(Doc}VoFUOn8g*9?fo`y6I>n4S34t61We~VeE@@ajg?e3;8ojPjRi6of@?Pzr|{ajA0}*+Y4V1Q%&eM>B-BGI(>SKAi-3gLTkMiJ z5rx07DrWM60`EnP*I**!Q2|Ka6~8MYGB3E?6XJbHC!_9`=J68mJ%sZYM6MJ3vIT5n z;@j;HiGhO`c5?BLa47V#(Tte-CE%A@Jivvb6KF zM(Ys^ZHdFq=%Na+^E^RH2E+?kPH8`6OZ!BNxZbx4xe6r`+NuFYMHQ>du%qg5Ocrqu zJg~|a#nC8`a3fgb@V-6`X1=7+nSi3K8Zb|f$Xl)`?gtjD05GqUK%+B4=$vj8DPOQC zi%=7pGL6vC6Z@VZ|BU4Es;5#TlkMiApaYntjj{X*Qr^L;Y)KN>zbgAdU#|3r8^9jI zv|7X{sD^(EfqT5%vV$0wfL%Jlr-Kx;0>oaC6k=syX;cZOehq;>)?J+ua}BTNSiu2> zuaprDfK&km6%967o-iurspo+1j^D+PE6k0gjXm z9@uPxUCi~w9E-49kCpN_pyqmT;cqU=r}gHm?=kZ*IiiF=e-?CYHslN_CeY8aJ1U|) zk}G%t*{puMkCLOvyXW{3jKK{S6(BKT!9{0Kcdy1hS%_#i6XF*!vSlM_H-1WwTXDx1 zED77>9Vv5SnE|1;_q-#^OTY+H?mG!jkf>s}oD~5^Q3VG$n8Q|E4!|mmSJ_EGQLSLW z1$KRDO+Eebkp|%2NfQ90we^eS2zNyd+QyP99{d)C{aXO{ZO}*Uux5aM*3T$z02H^F z6HM@mGWr^F0A}IiBDuIG#_lYp^t|^j9sC_kNs26B@sw4-LO!Vnv%P|pT@ouWgVyf} zuQSR>=0+ByWZrj+qVz)U-u`!xDsKt*V`fReX7E(Gka7wbDJ(ZiQP0!nQi>ta$Y!oo z=PDBkHu>Vvy(p<6fGdm7Q7k0K2r?$g68fFXjVs|+k)8#D=^Y}#hhHeJqQVG{s-bJS zj~Pjb@H+{tn;niY0kBSfWC6gHDZ3eLvdSNlFGls4TIeeUh{wmkB4>Y9m=K!IhWWhm#iR74tY|5@7;Mx$y8m+P?uLj=zGIBm0)&e zk?e92L2?70ru>CAg(?!-(mVy4E)J4m3bG6o&@#9KyP|@a zu=w$b>FI8Fop$%*uBkN$a#LYu*ON=ToomaJi@w&~^v$&D?ew>``&HdjKiTN@D`z&2 z=xTxmwC^K#AbeK0(|Z&wrw&uU&gb6pdYHw;JIZ*N$IN<4a~hpN$`j`8-KGF*=D?a+ zAIs_F>=|Swm$oI50WbYaH^}MiT)?HImG=CPnt7ljm%uGE#RZ*TCA|wFPxT(1fEzuM zcLB~jZ}Vn8(QTnbMlexnK2h5mK+3&h{kAy>+=e8qxORdHD~+<5;IBc|dqRsR2|Ml) zzE}Q&DbLe}W}GFl;PP@ad)ol+?S{00S>$==!GsmZJuGAu^7gR2ZaLl^w}mld({;TS z))KSc?!2U>rLbhe{(FQAohwY9tN8j5AuJw?nTLFJD+(d;C`M3Y^~x5Z(Rw?$Oc@Mr zpZp@;c!W~C+}+||FGo}r<>5$EgiWa{qY85G8LQN2v^ReRJ4Pl7nFz>%zuB2@u8T` zBdX#`niUxDr3I1K)f&^y)-!iV^*3URiN{2h-AiYO31Kkg>aCG;R};a} zhBi7@*8SnSM0#k1}Knoi&_AewZA66L{+X59DO_4ynzN558mWH=JmrrUqnwZO22V>U_WU+dDI zIPb0>8rcSRvGAe)MU+(?imA%;Dd+Cf{@CiEFdJ|fj=ewE3l0fUN>2ulD0VP#3%9O2 zY?%g+J>*nN}{2(^Vx`=mgY{uT=#z`x)uK1Ba z9w?-DrlLWi@+rhL)2)mW|I^#=aVcLZ_#-{$F*d;$S|6|_1&&T`gpFsh0R>FXwcx%J zVpl&b3ISYRZ;${=vaJ*N7Hrv_DIO$?i$Y0mQQ-jTYofh(xLD|=VbrDZ%-(4wAFoC7wrrY>PH<|WB(;GMy<++ z0?GO8=22^ka0shTq3OiBay02@#PIyYhAI-O9Lw_f*jh4pNvq0kVRBP5P0)U<@bT1^ zb{2SL^V`DIoyb@UM#O41?WE?Un#^avm}K1&*qx>G-fYI99d_}%p>AZ?guih>jU~H5!JGRT4>2H#cc_xZUR4%ACC^P z@-7Pu|Kad-<+lf{c<-Q}^Bp?yo@W`KT=l?Je-><&xf=S3;svTMTl^KO!iDXHngW6F zv`0@e7nzzo5#A4#6tL!L(9ncW5!Z0EgH>9RqnB(Q>Y;O3_~$ zcHFR95bLMl!|3`VQ0Qw<6;IS_j^SWN;S$|7J5NFQYzhwtDlF$JA`$%JvN)VtHd|vx z<9etkR~zzUaxUE%{G2>qi@c=aF;46BV8{R&2Ry7wPZ6q6a?7q2tO4GRWPEFohzcx` zYvh(C($JU*+m=uneYtBdTFCT{u0&oxmjy7sSYfcM@U%^;MBW&Wrg8Z_l^aKr8;(#S zXnAeg zt4264=naJ=Q$T&buTw&|T)<8mcX_&V2_cQgHagc@GNYY3CN{t&7^T&mT}IBd%U3%b zF1V765_K+U9bg;y30qyRa&5v}ADISp&1U8n9+E`u*5zoz-$h9OL@;ww2PX)#$lxwK z2$ZIP3k7lrZ+p(w=7Ub6m`v2TSrpOiUPy^|u3m$L8uyu}>byo*W=Vx^)q+8@?k~fn zFD@j<@g}nwWq_^6xy2X^>W6X0)4Qsu`;$b2nM^qy%JRc~BBm>r-}x*b?K@pfX^{?{A9OvvnQPMx%%HWhD-uPhgU0=s z5qJtpIHccZs@NLx;x^Zl!3RJsreX`dk6&qOYH*}) zsN1WwYjcGmYqkhpFbm;NfIC>BIgskkLq=<<$OItiy~W~ZDWptdV|^Hs1_f*ejo?EQ z>Y`kAqRhz*6=Rjb$q(`c2qDVyk(*J(?!;^mQngNj{8~YpUdn0A9?GcswD6Lj3^05O z`ClCI>bYFXKCcHMDcwEs_w>mbf2m1587K`AA9=gOLoMhUgWV+gmQRtqDV%Z#=o2;C%RZH#JZ%8W9 zX}mEoeO^|YwJNaM%OK@sm^lhvtQbNy$;^8KVA8A|K(g!y<2ujDa^bx1?Xc)`LIapoQ1;bLg@VursAW2Fg`$}oPsWGh zgh|uy`GPC@Fs)ePKPkbr(>>~#mq7?7YUlX1lHPb?^)<=l=4xX)tSE=of$A**6|o_m z7--&;-SuGb%S{i)`Ct9deU1k>xX4m?9snG*N<+Muo|)puyz9Vygpvm1Yv*}#%6I09 z?sC>JA|T;%=)78wn_-jCpOI?93X}0cb<7SwRCFHuRVS;xCzJ|C%r@G#Dsk>t&0zyC z+vW-qZpK+pTeGcj@@vs?!AVdV@o{zD`~-JE9ox?JJcZ2lW0Y4-SaoI=h5Wi~M%p>! z9ME!;hp8udwfObhFcmx2j|@FPY&g1_N4e03+VNPJEvunyH`gigeI!eZv^*DXgpCBt zeR6}wc3y>q>a3;nS*G=9b%{1}VKU3`YMAvG?T%MZNJ!OysZdQrrV`Ob%svu>|>YVcXB3lB9~R&@YYbwFuzF*?BKzQp?G$vc+J*W?cC_Gj)uY zYB99LBzx^X{I0&jGZFAD@!S0`8ZE8wpPoGlB8~^sqU9IVq!-?e-Hd}iv1+IOM&6hl z@3Skx8FzRs`15arn;V#ui35X{A#Z@YSxg;IhrX#25uWcNFKAjPrN5w&W!L!E!+=ZL z4ELyl*UUn)!VqbUax^pGmq8?k#i!pt+C;hFi+%(l8%WzU$fv|=0#ZOq2>jk@Bya?N zLqM%4ETof5Y;Ki&YYtBS)hS<#kZQ()QQWQ>3c#x4LhKAO`G zNJ9qy6-o9H94Y=4feGT%6>NhwD@LOfa|MJKm;jg`C4QcO7+8Rto#6EV0NMqB8p`sV zqT3Gcom-Oi^#^l<(D~wb^zY4TDUvfh5im9*4?LzQ$RBtL$!~II{q?@CJvQxYmrm z5x+h-fZl}#*&Ef1Nh|+zu`jJu*)yp#-lNk?tA8X72VtsM(5dp$4kFF03iQ5fl`516 zslw&@{gQ|XG9<5P!+bz32_<=NrPW5ORgb*;gYV%WtpNQ$l9)wwxYqL{ zK^CT`hW3N2G6O`T04FDa^w*4WPEFa;#4IfXzwtv-q(27g4YX4Y!jS67!@=Tj1k$e} zg5w|hgaY7nkxMp1(a6>hKS5$#l0a_FGAYe0ahZl*K%?vM2&y3Yg>vf+qJCPFY7IXy zNOPm7|9!P)oH$PGp+*-r!4p75zboRCR_5SO!smvn7B}#rB(?32Bb)O;a{;Z+BRmf> zxK?%K5D&s#PYspUN*sUEb1&kpFTHU;LI!#qzsMwB*YT?(2&0hG{i1ywH2dL1^$_(5x@aE6H$(gz5x~U_z~oAIG`Igt{&;+~ZWt9R z7&TsXgO{y@`rwB<$)W=Ylgr=MC76lY4H{482I6VM3GV}dXMkF&G2$hH0F(%Uj6RG* z591n-*iHXK(3p&fq~>J=z0p{L+C;Qp;!>}EF#wljB5u>H6H^gPx~9r36X^wy1qdhR zi_qti!Jkwkmhn|04z=QgCOIA?(0wF_Rf~6FGokt00YBP^s4D?yG*eX^9Y-{vi9~}? zKlS*_c-qfXReE}Z-4EGsK?3%GS`Kwt`^al`!#Hu7++70|`^Y};n#|!zteO}FOTb9v zbWvJ=aozNTB?8qmcp+F{=N4!nGm}w`6B}e`^v39(NR*Z(+%Rlrng&jlB*11!LCOg_ ztDm|2HnWgs6rP4Hhcg?02X^R@3MN;G*d_i@G|pKan-Vv6W}OX_Gjwi1IK|AmjRH$N zW}e^Xj8s&WB@wyaHz{gP5bQ0QGMppe9<27n4~ zu7Xj?8!^Lu$pN`qup+|o6f21`ZMZ{j_q!NGXTnH`)gz*{g#y$9oDr{9xd*P-9f8Da z7zJzs7AoDKopQkNJe@4Y`DRw6`g~`)2M+9>c_v3OZk~AxQZtwluSW(hMh>tM2wqVF z@RA1Zo7Om-7M^Sm84`0@2Nn zBT9n%V-WDOrL2LO6sI{PGWu1}M26FsK%~0oFNv>Cxt||QEIY&NWL5&zG~&c{_E`~o zl{gw~#jQH6R*7^FBk8DLc_`fT74m&Vlhgc&(HgZV9}<95JMh$b zbBeC0ExCH--OMUu6>zZA+SF*BZVbgN3Si4w+xN5K8UtpS$8jxJ{T#7@SFfavTL1oL z6KTrH{&3wGjEA-*+YoZLR*J9YA475)ZM-pLW*7tC0pS80VGy|(wMVS8=9Ew5Y$cW% zSAo>zaQ1M$#^Cv;mpk+FvyqZS5OTHXab~!-bu#r4jMobE)HaRd$y$lQs=N;H_`W>` z*9N2e$oPZJKo2S76hM{fvPq78WT%B$xS?v5P3(X@pGpGpn4qC(l+{?2Z!`bM>LyPI z(Ist;adlHbcg-{{zDRrib3}6fBlR$Bv@Uby(2G_`Mwa)k?UIG2s(hc+i)q zWa%*Xsp#j70E*Bkit8q$zIsfJMqxsPZ)7tJX>I0C#v#x3Bv-7#CQ`lhTgatE+ywa( zj$-Hy-d!jLWNiKI9bBH55kU43sv82$cbYLE*nUBuovrpHBF(|IaW$iaozEOT$Spz8 z80LK*trt}wLk}<)5D^|Akxj#9PNYgRWeW!2F%dZpigWdP0o_C;q}8)auf7o=bmEN> zzH%h1B+l1DDvw1s*GlOEn!g8y{|Ht7aKHt3Pg{TgdnKl5vuYnwO>f@_#51RGuJGGn zB#P+W2s_YHz4O+$=Kwy1Q`2=pLaCx3xxgRGK#8}4{k;)EyC;pX`0 z1A6S-)p5wxF@NuD5ir@|_Eog)^qKZpGymqSVwDx`L@deDJ-1QO{f&Ls1`<09oc*)z zp1zyZgV?=eo6N6$;9)=aOl%N?!+R+(&ILmZDr*IXg-5o9`1{h3>U#m&( zLKzRSHA|5Kl7~wZHgK#_gT?}lSx2)E4w4N#3c8RWbp{av3pju4Gx*vF8VJ(>boA1{Z3;*QM;=3D^y!^J*j5j9;XhvCeqvlgFN$AA=ROQo zYg5s^gbDb;bAN`vbB$&fdESuh6c+C3!>pg;2O<+%P^0_g=NDlr7zOc8KgbYvzM_A3 zwTSdLaP}AcB$uh{m#ypQL=^yM{}rct83MS9Z1PY2ev+&D3s>J$Fv2hI9pJqqFhB0n zV)%J22i{JwLyZsh9DSra$E%BA&v_lU2oHXXHy;|~KGX!d?S$`LJ%h7w!9SW@&o}b7 z2JW#W@XzgEe?nh3&n0Zn8`f=k=}N?i(|OfeNj5|rG35~-TU{MfMWrx!gUNuXr`{4N{Tnx)C8Bc zZx+}IpbSy`cdkI9oosks_4r(ySj?2E+eiM_ZNAqWU8J&Y@b8XIynTRX$`4EXzfVYF z_lb*J*kALhqT3>_n|xoL%c4KB9~{JW9nBFAHRTz_RZteu@;JbSvEV*vToN9qLq>&A zOj04~=4z-?@Btm0#U+xd8-dHOa#K99(G^FcNc7rq(ylL%g4@Pb9a+#Fi=*4&;%LCA z6@2o{p;$nmC!Tzn(<>7jN6!E_RxR`fdKIVUH z{aDHS0+y)nynO#hTR&S`foPA#f7<$)W^B*DyZyHusxO@?es};>!fPn|YwO3%fNSo9 zRZrx7O^P2fAMF2=h?ek6l~q&wpHBDY!+wc}an7!+hv{qm$exZU5Ebv8(>+^85p6$JZ5vmJpVs*E%UxQ7qQv8_RMvSh*?7OL`Dnuh!TfZr z?aJT{Vf-X*!1KES%onmWeuL<(w8AhTKC54l?qLRk4xl+t{^s{*G zsz1^i9TP#jRrWhv$f}NGE?4s|BA1^v19u|Ysz(p5$6bb1cBcy_|1P2(QW)k9dPPFU z=N?L;wAZxVhwav~)96C_asR)zeh%6%x5^JXZq7BC#rDZ-DBFDRKUh;}yyP~;dDX?3 zMl7Jb$Rfp$VawX(qrJ{fn;HNG+kPC>NF+gLl?Y@5ZIg}_Sny_gWk<7kPLzOSuEJ%@ z%NA^6(r7FXwJEKQ1jFhdt|Iah47cwU)~uE5C-qc$&!!E^C7EVSKNUWk#s7bLJM(ua z^gWK()IrI_m>ByucFx#&?B{4KjTu5wMx9)aYgC6Ym^5l=WC%_6t)v)hjxE_!7{g$Y z8Pn0Vg>>wUBjF5ny6$~?o_l||&;1j=KfRyl`+Q!nSD-R5%WC^o(MhfnIj?o2B_M3G@dXmLm ziKv0`oo=(FDHtPAt-vuLUT8+<%mrtI>9VM>laF9t#>~&uPjmJ1k2!DakaG=PChZpb z{$~iWS(0nG1&}tT{cK{hEwIa7H%9w*?cpa2TWm)ecZ#a#1iyW3uM+?OU_dn|Pr+@;| zmT+?5L{dMs-GJ+KR~#PzkJY9?>)xICE|-Xa1im6fd7g{-!)XHpsJQcKN#>Lh6ruE3 z`*NE?qQ}P()UsZZgx0JKyg>xooT_|5O389mz1yJtm^z;(WPQJIsZ8U zvdM#Jp&qzfeVHtUaHgVph}thC=t5n}k=EZIj%x}B>0AUSco|nZR)+5#;9_Wp!9(5o z2G2U_82$3h(Kxo(BQcc04TdUGy?{)}?ZMWqWIKIS`kdC#)%0s9Fkk0-`S6|zGAgUn z#2l4Af^_Lop6q@#;q&sYI;(L08x*3X8iRB`Nhz_O!u=#>#B*$JOMCb6|9FaffSaV% zXr$VVE9_6HOUkeb^}UH}>5HSS;+eIDsNDlxoN9r&KvD3No9x4*YZO~#(cS^B@mk^5 zt#*@?Bd@0#A}MF)d_^lWa)Pc^o6gBjxTX&PpT@s7t~K@ZcPkpYtHIEX@he7;JSIJ7 zC)>+z@gf&!%qHx82>uC534ma=igU_u-c$Az?P9eXbACuhgau&%(KnF9#J$4kpiAqP(pSDy`!yviSkLo#`fr)lWxt3iKD=0Rj;CXopRg83>6v@;Wxs(+#i5zLuT}2ifZy%_o{&6 zXNzgSNuw#c@mTYPS`3oJscEidDn!`5x$VFd2=G#n_{Az<3Ic+bRx7mGII<&Fa@bJjU5vm&xCH+s!gLpA((`?eOh3rT%a2fUor2 zzsF2`UCn}q6sEJ~hhwI5!a2V8E$}>QGY>)U?Y`)dzlpo{>(TYHiE5bmnJD3&D|uh^ z$e(dnm!O?H&Y4EzgY45~PGQq0Y-(t1@Y4>Jsp7I7zLn#8RMI5>Pi;p(K+G0C9h$M| z&xJ*nGE0^Uv5q}NezqAAP#Z3HIJ(lZ>;!AB1 zpOU3^$%QVDeJ+#eZQ?RbqYFy1oXt7u(5=br1~+nXSKan^_FTY3f4o80l?fbi>usi+ z>UzN?=q!_UipIGClp#^Q%-*$B|1|URTs7SzLX%@#1BO;LUrH$DP<^|oo$NgWdl2)= z`bg+B7k3RW-Z>TgkByCEp?JNo26n&gY)m!UxX0)^*`e&hyL4;bjg&NZ{DtY9R9@W7 z#9b6FH2=Z2$83>L2kyh`M&M>pMejCxuEsF>`urU@Xh24)^JV?d{m{1F#dLV2X&6l* zIJ_hg(b#|;xoW<(#`1{}G#kYv=q$cXI2(f;jdt+Zn2IpKBWDU0(3|ri-c}AD1`bDj za;IA`xBl>XvV&U7JhJnVH|rosOPxTqJK*iva%epN7BIXU5Fz@*q-8n5$xarf#CML(?e&yP+?#bG)kUJ&$&`tMgB6dvnZi`i$tUDTwn+VM?(XgjDDJMs-L1Gg3wL*Sr!DTT#a&z6-QD%4=bU@*KD+z>*7H5d zm&`;alVs*iR+zl3I6Mpv31K0rrAt%ioPH?D2wh^6WRHKUn_2u%Pm%$kBHS&ZqD1o3x+VEqN%~=N+ zWpa(1-Pq@(Qekv|1zDHGizdSdiRU%^wr4*R$5AK|cp}P^2fYCn*xn3=fM`GlNR7+N z`qVEBtwr)`2r{S~h+XUxmiF3sUp#z|C)*NF`G|wr)+tXjzDf7WAG7Nt?UL-t9Ku;6 z0VZjOmR}!t)tZxrTJlBV@HkWw2iw`>DoI(?4>d{l zUyf5HccsDeDK+9zi$;?u445d>NYjRCCn8lAAw3(Iy*r2~yyLF|?Q1DD(y{Tmc6t;S z$uFslUpy6J*OXTUjL#OPJFjWK(B2J0F#Q-_1@mMod5|WVrvCUCmiYzggFgsd*foU)5(=-xHUb3seg|&%fTqSUlu?y8(81^%`V5fwLtq4<=t7wX6JLkn@dH4E z5EFs*`id|T+WCQeAx#26NdJ(Mhmh(Lt3p@y)zL@f06_>a%KexLw%0{&2fqyA`h#>5 z{;^A%5pFd=0ovaV2|HhaE0*}nhXsLXB=E~%uv|te7^y(TTqg;Lp}e9=i|-ILK{UB5 z^6*Y*T%cJ26#`k4;NPKe0#^lc4A4IN7gzCFAxs2fGom5{8Lb2DxH4h)dV4HEWuI9q+@Np&G@LtT5JHWSWCo@qR>Ux{AfUNJfd`K9D3Q;~U~ zks$~Sm<+%T0C_=n0h8ibwW%W-_!%?#C(CpAmTePpowGcjpaCUS~<`Va6b}xGTc;j(Mih~9Z z6$Kq-73GWr#adwoXST^Q#tO~?Ob<%;V41MIRg_0Vg^B1cD*Jj|q+NKeP^}D0laVe+ zpGWZ3MLwjSr9QKMvkt>t#Ug9=@N1sgE(;rdM1!A8ojm%Rn zug;QMMx{=fPNkRHQ!RoHr2wUpX@YFRII2!vMg1w>N>B^8GvE+G=9}zY=6IGa&&&LE zh8+vN;|Ln+>O{Z{B^)}-{aEF#1SI)B%CKaGh72!CKDD*A(lHX416P2Hmj%L zT>hs6jcbQT$j7R#+b~8m^ z>%St7L7TvR@>^i5b*V+%#n`>rwH(bDg`%sYpT~H>sK{?c(3Rn8M z6knCS+`tmk($Bf*1|E05|Cg9qZO>Q74<^A+a8r?o*mqWv4WE~ImNb_LxYKn~S7=%( zTGc+um{N=_v($R+vU^}Y(LJ@_#^ABw3*o79)^W7i*STzSsdBB_lW;?FmD^dkxSv>U zjk>NLc&-I)qMX+B7me+dmS&Xp){i?+j{T(XD<3`~2pA6iQf8#>GSKwYTxrL@^E%Y? zOL*6QbPG{VYvS`nKsI7N!PmZ5e9&~zYEX1gIq)d(8E{MRkN|D} zWQh6?M*hM9?2v0lN43qzIJb78T7xyQuz7`(`;+05rUtVH@m0xo96V&6j`v#&Cbgoq z86*M_+=h<52@(;5%YzAyRgNTk%Hu$S9i)1e65e!_cA`i9>nE(vRCuNsLwci~YHNE7 z`yqQ)d&13^E$OXRR1*q1>89lG8C0LGWV^}x$WNqk(r_7FkCr>Wq-^JJR{$}tFveP$ z^<2GYpJ!lyV%TBe$^9to{f77Xp*w6{*-=b!p;)E3M;pTx_l|rbr7?(o@NP5Z@@b}R zT59IQbo(^>H$)gu2xEU@Vrg|^&n)E3YT7Mf6OrB5&!VcHs$Oh-+~iMz5=x2GEwM(i zwN&4ftVkJ9T=(3!ZN~7E1Ep>yi4S;#FVD7lfvdnIAR%TyJx_;(QJmS- zP2X(99K-1Z;^>?CNB57el1qvOMYJimbVdwI?Rc8mEp668L*d=%UXX&2P^u_uCKb=d zNiQYSDrc$#l{VBr0d!QyFAV#wizL5DB&XV0vn^e`VqSIcy#_SD)i2F?)9#|{(N_bg zX&-8$TTc%W5%?3|a@BJhI*bC2g0pa|aYb=k*&eL8Jsr0&9+Nle&l(u! z-HS$>t>)M^*&Z5BFRLzhPrfd(+q@|fe{a${P}9&WQmbz`>_J$K*5dYZojsXeQ>i(+ zis>diJ40ApQMcCBX@F{_w4JzWxA$1`F??38m2=e_>Zp7YeQHG%!Ech^QdM%4KU)vh zY*N+bcB6Wj9P4=v$vCn)a+#Ysl#cc#y(9%hf5kiD!f-D;;n;FpnK0p3W0l7V$Ia{S zi|Uc_|9ZOHyE~3bOu4AZqlF{8n6>OPysx}tUOt06jx>Rmt&lm!&pl0JgU^-XUD0SQ zxKwcUaqmn!)iH0&aKCRP1q_g7Yub?0e(e146Fr8OvVysSO~P-H z!m?`DI^{X@Vj{g)HvXy6(Hb6A-ohwN&h70Xa}gAb3Xn_DeMtwI0U!cnn7-B3 zRQ;G;va-WBfVi)moU*+n#53f(1wt39gdp0mAbR95eftPOn@75Z^H3mlyRxGirAl{SC|o`yXm>{ao<>iG!xU=Ya?+2}?@8he}2c#>O^|X0}c!oJF7B6F%BW zXgGp^V37ZQK_wN*&Ot!H=FOGWoz!JMa~auMGZ=iaH8f^$v$p$P4hWAM*L&33*vWv% z&DzSwk;{#jdN5yiNV&v6u`vE$q8U&1~4}cd*Zs%lfYeV$ATmwT}XD40~lHV2m@AL0=8oQbQUrjcS|LN9y2LZox089*w zfPZ3hGB^4Eu>H>YH`~AZ_3!Fs-Cb`Z9;e&=-J`@g~Z5A$C$|IYZYIyL^UPL5CiRpnoD{=)gY4_u1Ij<#0Lzh$Um zWA4Pq%metRgE3J)QK5_}ebo@9oH?j;bW&qqRJVHTRIn^?eL8=h77nxl(Lx?h`ZP@B)}ReD3~ical2`cJmW`gXGr$J@YHdS;c0xu+S=GZ zaNe8BiNbU{Kqq*l+=4Vda0YgqJ8$WXKaH__OSeP4S~(s~h@Gv)V%~3K#ocUs`9L)L zCj6pSV{#DG&|L>m;sCz8=@PMqXOeX{&{kf_Y+h3XqiA!6oa4fTg@o`pwI8#52s$h? znSbJP=!#S%IFJks=0Kl2Fuc$>OC*zx83FIoY_elFJt$&g8Z-B|N`(MRN0as(d^^@D zjqoA)>{O(mQd&|NV-2kXLxxkRNH0?|GQ>f6sOV6FB6Ah7VnU(C4GfSkFE10JLAgjs z;2s`=o=4`|s;U@80z-&n_8uUE(lL<i+Q^7tcN5Mi(0u zp`$S6M#3xTm=YLFcF;N)3f=elQ8WJ9p6p4pYK(F${tMk;>L4w9`}BlA;9!iny`uy1 zb7drEp3H^w!H&A)(`(ZV?N&S%K79KW9i^9|kS+9?^KP=VE!IVpyywdR%|PYm5r3n$ z=M@Km)I|C6vL`;`>2f@0rcC7fXU)C)K#9KO=njFaP4jiKs|`LcU~mtQ;c@E<>{i;$ z%v{%wV--CW^OuA{)FkmzhGU* zhgDa;yEQr)6Yp_leFFA+MeC5)g9rE{52&W!oXY}$9&JS+#)Mec=@ey%y`X73s&e>2 z7=+p6;K$$2060%*^>hGba@eU5aENRxARBtxlyLC-xz#h51PgWn=CgXkzXR!c=WaY7 z-z>W7%(I;elME}hUoP-lRUfBH&pd`f@|~KP%K|bAoQANFn?HZS*r3fvY^w3sAClJP zp_OOe4q?V@jMZHqnqv_5{06)*)&2Q2}1V2xk zO9n~kw0SQFF+7*v=W-e)i1rgL?ueRg|JU-?UoCa!M+{c;nT6r18Obu&JDk?z%*V^^ zh$^MM`M{ZA3I5n14Oms;Fkro2kR+tzfOmnn$GQdvK*n6b8JoPfA*?d%;ev zwTqfoZFF&FA!!$S5(2c#;LeG*bA`<}8BkM#?P#u?9nIRMc{;kL~%}BUm5vCX2l$OkqgP*1k5=MEX}w5?fpS z%10h>MKBppsZI}1$Fr2dnHyO3I!J9)-IhTVP5Q@IMx3}LNuUr{a7?Tp$Y&e|%+-cx0z(`_KYZ8#RP(EQL6 zyV_Ke#N+|GHyh16I65xM9<7qb?Z1R@+uo+lU2iK%fme19liW?WRP$1E&YX1;->gzE zMP5fF`}C{E$PCg_FzYs!OPrAaW)*Gvf*`t#mfjk=NYUnnYCupu z9sEJ@L3eb=4agdKk~USK-#NpsN<^j5>MviO>Ofb>O~|qIpQHeZ?Nl;=dbAmw-r3`b&+Ir zC)Ed9M_RYrXA;|piqHTO%DPq7dj#WGQS;>2mtJb$T+DSRqa6j^QuqP;z0E37ZTitE zn0Q2h*k*M6lO4!yogz2CyDXZzMoVE`0ltkb$Rxu=%r6j|keResnA~l-#1F~mmGsjAFo2`y6 z5iFXu7HbinQa5ZM6wH|vf9%1Qj&qws1~|YO)BI>8A7~ncw4Ak7;S}2j+ks?m zY-`gee3IBsxNo9Kl}Xdut{5HFHeAqLllISu)KiETc|{+yJS-zmr-Z%nFQVE~GL>2- z7}lBEF1>LYm%=5h{IDakp&~g%ojStQ81V8g%eF?gI7~VPP70MBtTe6C*`#wY;9V%* z)}_C42V$!e8t2#W0#fdc=d<`g(yDBLfM1Zh|A8|Fe?if1UvDFA9gi`@im50?FzS@QCT zAfjeBhw^S%4|v%dNHz4P%Pxl|s5^B;4jlhfG$6gagplQGb=`6rO@4AYMSODI@GC`4 z*FCIA{gMnnvPfA^*Yi#Lx}^!>yz;uXg;>2cJl=-MC5^(+j}fc;l9AW%q^0l!udJM3)Lx zrE@i0sBPDs?+C2aa-DXz-i6UGH@{JI!j6ywk2eR;__&o^%jTTGLrVcIu04!AQe zxOT4a;SpE_;WNDmOy%C?cyD^bGcKz&wXW75_$ht^7LYSfDeF2RXYS1_ zV=(bfsmSnhJ^PTudXevdZ6Ac;0g89o4MMjfX z7P@RfqK5&FrmNp@FX)#h+`Z{u@b*{NB(!o}u-jkt3AEPUY|rVr1)|I0*$AHd11`Y4 z8t;h}`O=DxC+Qp+jOZsbITzd3jLRNpo=tNbl}%rMoZl4CQ?Z`-c1ilIXn)Ql+@luu zAddFn>@6R5zPh5V3^5FLOi10O!v+iXCDw<=`mX>F+fQC0w|9}8Z^jxMtpJ8yUz#iN zl6-EMMyEnZl}&G0)yW}eXIASrE!svspQvSLyU|MH&2r#rzUWEa?0YCzv@3VH_a8#$ zU;z`1tk|QDoy_>DK}Hi_)JX`IKaU?_cz-86s%iDNMm)1Y_}>noxOlz70&D%) zQw?=V;}mrL@`R{=_|qItIxR0x{OOw0&)_RA!NoyH?P`-V6wTI1LX+;m{>lFAj`Ftp z5Y}F3%eMmGra2ws!sBL^X@0rrk>n(1n`}HNsaNO0o0`3l;j2p8N#57HA$tw3WshY` zhf}?;$IXegU;fr2EHLyCf$vSnVMq*wiV3!NgLf?=f}Dwr*>Q1xGjfD^XxiR=&So<$ z?J^`xT>(0G zUD+)zGjNjZXTN{C#uc!6px0_J?2puVq>uG%ki6XKDOzc97Hn;>PPEzUM6s4lWRyI; z+Q}BqYBe6#y_;}7O<}WSeO${Im99#x%W=32t7B1BYtc@BIdeXxe&_vmJCVUoIH&7@K3kzv36rYT z-#+ki(|5&<=R+tTWqqP zS#6@=!K=2e&WTRF3hCx(PFPhnS+gI-a<+GOOiR8}m-l$N8TI4GU)LJkF2}w3ebUO@ z)@vR3IBZtAH=}8vh>?n%7B11}n+#A(l#3&y@wszN#&9%OUn*%j zr{P6Nd3o_2cSlu9l_s)R7RIGgc|9r`s!b;d9*ZtcmR$9R;*G;46DXoqXeR3QYC z+MEYX>s=opq};#xi0UIq$8^@!pvnBVB^l0dE3j+T%RIYK$Ad>wa_DCgLe_V>gT6wY zR;-+k;=L&!-n_j!37}2q3xQnuhZEj+AnF%SOZ@}Q<3`BG&7Zqr(pCkXJ#t(tPM;A12+wb_UC7Kfxy|U}-Smc(g_@Cy2L zKJ0Q&Oc#yt!e_Y5I_6fqPTx!^DXVWcA75Htw<$(7Jhpnc)`(}5TVr`0{K~#hw|28- zM@;&z=+yq!p|rbv#c(UqU;p!xeZ{kN`fjuqu>Y`Fe{`LVsq3aOVOm3PGdwhOvF!TR zlYQSin>|v|q*^)hiO_r7Ue3TEFC;uGgds0|twu)f#p@~S?%IVWAsaM6_JYNFVa4&l z7~zG`^Ss(nyVD+X;v7}(O1XS$@#>5+$C=Qy^N)SN4i9NPBsHsDjR+I_eJKIQ)Gw__!yrzj}A7gep z;86D!pgnqj|IuP9Ji;8-=V>|!y(e8$x9IHU5rsO4=W;YFp-3vNpED^%~L z=nk?HrB6&oC1I2}ArM5F3z+~pdbV71vwSY6J20nz>n4Tp#~8cL-jQ&M%@gY%6Cqrf zNF5DY;p^oUEThj5P7cT^jS>{UR3cp%-aZ*MrBBdu2Kuox6da<`gxKjXDZ{)IEc-*r zLznqvLB>Vr(OIo_FHwzoDkB)NmMg8Uf`a{G<@a@Q-`0;E8M=Az`1;%B zjDD$9lCJD7Z&R@_pxZF`v}^Qyxa*tKi&5!2nUPx)(f(E9WKTEg-xCbq?+f~ZL_jd^ zXlna&!8FGYV=SYTd!y-&awF&M4n*e$Cy(ik!0p_mjsMi+nBT5zZ`$nxc$@@dl*kA0 zhw}nC`BE`Fo7NYC&o9n6=-+Og%*#qA9MA#wjfrFo5x+|MwgPo|Z#?f#SH7#zBCj-6 z+6=`PsW;ky^Sz$yz!Ch+u}NksiIo(5U|0g>%PC=aygrHA9ZSzgUtuFJ`udeR+hMud z$V1s!tJUR%?pv8HZ%pfY1C#4UcF1c0Wsds?&IQi>)$&rB>P-jgVv{JGlJyoRi?1)H zfA0F>zNmo#D&fYoi>*GxK>vc&M6dLMHMB=G)@A}h(XWClIMDF+x44iVKKPJO7ANrz zD2Lt;@z_|vLw!ws68S-1y_z*@T5jApo^P$WXiB2R$mls*HqD?<&8AXx9HyCkD0AAb zpLD$*fb?5bFi;hRd|2b{j?|^ktip( zH1QU(&>?@y2`e~(8hnpN`Z1cxPQZso>|R zY;iOD|H#q;GJjM8qL&~`i;xLA1bQDnL)BCuN}XIp8x)ZdtG5ihbG@{(Ly%QdS!C*9 zsvVciu201&q4nYG(Nx-O>HDU7#A_Ibd^ElO@oc-t}7ME+^3#BuukaDcL@_je0&J4E|f;&WqRMSIBk+W?oRu* z{ON{LNbPW6#Odkk4DX9;rr1C z;-53v@F)20m@Arh6|Z+)mp;JrK_*aoRSu_7b;Ng&>KfK32v8bM(E%%T8{Yogt$F{- z1w%Tg);BOP_^#Bti(LAJ2<9|Kvnz&)T`*^r(yWd@EOV|(k}}x+EqZv&`*RK(vK;RV zUjMR7ZEy)@>F2eMZ_~;ca>hr_*JpETIiDWmef9~;B@?{+a{XSupTqS{_aVyPBZ^Uq zp*-(zO{l~jEqFjzbZ)3>yPhPu=cxN{x2h1x9eAlaFoh3G>eXRI|yOaI!YdZb3oPsD^LhP z#*^c}@}#HSAjn{#_Ze%p zOe3Q0*^uYyx&Q})!G;?F($>GC*_D) zgKHpVF=VeE@Z9I?F}k6;YmNhPc%-@_7Mh+_(;PPuj|28 zC%b&MHh+od1(uVH&1;f-jM^udFGsWG*T*l2eBD8qg9PRAEjleMGf#R8JP!i(wQ6OB ziHUJ!oyJcBXOs%Z#IQSX|kCm3k2 zTh;n#lxP%AQ}nSagouXyO5vKqeV=#jZD$p|?c5G(j6=hs#ZWc9dT-|FsQFQAoyyN4B;=L6Yb(?Xo^Cbc+#?IhCU@q<_SJa zLH9MYwfrgpk?MbVf*fRE&q%eT=X=}R2D5F(${!Fk8oB{Zv!8tWjwFUdv@s#&(ZuHH ztGYivWznLMe}2{G@!lI)+WKP|UUwDponqRD84N+Uv;El;#qG9jreC3W?J>DQL)1A? z`}%zX3GPokrb`bO6kd*sCPiJZL^=AxvYZ;iTYo<956lJ&Y#>r#@^rf$u3KT>Q?JBA z#aoHyHkGy>=8u;A2EP!*x}N+Pf@QzKYFk-d{~)Iu_yZC9y>$p7$wPj=B{bgI-kj5j z@QQ<`Ep#dE{U_3{5MMFD#Mslzywwx#yL*P`Y(WlB#Cq^Q1j-2U+6|r9M8pg&uKi2O zTc(}}@BiN+`RNMY?Cx%`df#7V3g8L~$OGENDu0Ko{smsyF@ovBraBT+&6nvy34h`I zL)rA9mEpiFKxr8mx?jQ5=372NQX(9JejFxV`#@V7y|at1zjw;=Vxr#1vueTg7Xy4< z9SNGO8c*8GrSe_qiA4HWr4SL}+%V21FhWcLc7?~%fZ_$=uHw*#Z&i~>Kg)D?i26o5 zBk^(n4xIeP*&xKaN_~Myy+n8)f0ZOB(iC_O1;xhd_lhkMRHMWm5B@1xzXEXq9VA$o zOd`CS!}p7)5`$A~*5rR^|L-x4#sSqsLU=e;la*anSTlqCN21{nUmE=%k>05?JC>K% zL3aFIbXr}1s@?C#D&v7EcV+HV5XdnxGuOUYu)&Wa!f~_wMK=F|QP)$Ep)sUW)Z2xc z?n+(8EIMGw(c1q6Ro)?2zjsH*%v7;P+}|z~WwuIiCA@UO;t#+7_v%g+KWIBufbToNh!Wlt;NLCOIU;L^ z&>7i7U~w&SM*sRWFuZ#N^i4--8PMwI=kKykHvU^Z&-BPtw5Cr1@~XRRX^VteZzt6> z`qP4!pt~QOQ6-~LJqy~h3U@|&Phvp`jjs^3&WO>PdRDJG`zEq&{$A88G(>Ez=vU0< zg_j#jsmt()2-fp#pVz!-So746@HYz<2r8qOKHy-)M*YhdxyNrXu<(MdY-0=N;(8H2 zdp4_WkXL&E0XsX!&CL=Ea>cm{omM8(aqaD$ojmuO!}%6x++;e9@WMi!`3@r}7YcG> zT3T3@66IU?(3>N6{i#jzLTWUXQdLfO|FXirtsv)^VqHvjRep)JuE+CX3y!MzUpYYUp4Wu;rwV8{OSo!UI_UthVg3{_%Ur{o z1%OtJB-*}Q(TH6i1C}>-nJdVRK>(G=bVd74z7W@#%*?lm-t!G%;?7s|zVIY0HY;ep z*KNnKY*tIQ4+zIGtL+|ncOTm)OHC2$tQNpr*Btq8Pi3Z<^?Y9FgW>TbAz?8No8KIt zj~a~rYjN>&Ad)9(N!p^IeH;+-#SLj=Zo*=gEqq?7-U^%V@baK$rj&a{2mf&0({#rd zD8hqTFnC|dCuU)hUa74C_|&+HHoVR6dB>?*satA1Gc$8B?W5b*y2U48Vv@WYR)ay+ z>22z+o#Rm*3uoR4O&o~a`_PIw}5oRPELA30ZO$S_mrwW7b}c!To4F-xxCowYsj z!C|}59L`omN4!rWjoMu^eEwG!WcD=&C|Mq3G%-DQ_}&P5N=os8blQPdBLKNE;n#^& z$)Jg5-S^{z$uG2tb>e8P3$=UGREZ;wrpt%Iul{evV5*E&c|ri3j*X*OaPN{urEj%X>QBAyDXAhCBy! z;>38rhzWwxsXtzk5WO7GaFlD+{|t_NyA^N2{Cart2#;H3_gdL>w+a=Ps;+dUTB#8s z$B+GO%V4cTS=;^Lrs-_8mFbI}p3~7HsOzddt}LN*b@JHQNS`=iN0baM`w{RLO;T)j zvfuR!wwZh<1_>!Clj$i>rsuR>VPWBVrUL1Aj-B<$Phvv-sTs>bpq!XTi?tK&{+N26 z8s^X+KhD}yJ>@iR}Ff zj0}$py*%E0hmQK-z@Dp65ZsgnlZhp&$zod})kYi9x-}HH7C`LKVfp!Bww@M;{m7rG zaV30yeimy01V4Y9)#fMkk5x#}6tQZDAulE-Cb#r(LuMWQ9FJ3StA!eP*Hvc#my=n< zl1=-8ZJuW}cP>Mypx_UjK%?DdW@t}Rqz+oF5EJw3E!#Xh4we8sNbQ$y)gFv=$U5<8Jr{AYS$heR_{`Qy0ZjXyx=`us~Bm94y4~muQay6 zs`!XW`}^6&OK@rvYj9kL#jlby=C2ZqK7XBvc#*#9xFYB151*HZU5?cS?kYK=)af4_ zR;Kk}{oZX1GnU?O*`AS4Z{xH5@Aha9W>IEJfumbJ`y0{N$`~ zd5N|Bo^RI2^UX7jh$HC3&ZB5H-?Uf5H;!E|xZ72jfR||SUTX#7uG)4#fMzod@JX-8 z>OY7G4SkDM=~wqKj`Hy_FuuZq)Z841x&O%W7}uy9oK>BEl{HdgWl+fP?h&42l{0k_PSpERFY#*dA;R+9kTVl`Pl{zg}~8?jqP43V$!_R zKVmm<(zu?awmNBdt)U@HH5$RtlB>+Sm+ATus$bn0FFzI^KB|bO3iYpQ_4)xi6kTwe z`vJ8ym@IDL6=620Q}FIFegD?fxaGBZ3aRtq@e_;1Y*O-sNr%HVxv-en*KFxthYRi2 zdqT{^2l9f-d`!(m8a>l2FXD7o>+pxGy`y^Y#5r=6yo{~EnTcL@Js&}5?;1%*` z%Om5IsM#YUn@*_Gwlz3hHm6t`JqP008UWDn0LA$DjEhYLG~pxl*ZvRi!-RptT)L+z zGEQo`_Ql@xT0&~W?2sht-<)2%Kwq4UZN=`MwsDR% zSYmCsu~pamfi+5MzFJA#=B#+bvPBzHuGZtsLw@CbZ7uFO3%1^42T~d#ciy2(rahH6 zuJ(mpe@-9*8Zxz?y@pH{IhvM}20OeKAg+ZFtZ)lQQZs-30FURJ_Q}-fgYby$LQ7N} z8uw;{R>e15L%sGrJD5%?0|%Yg?fWw}wt#ml*8>I?7OR#YQ5#dRbQj($OC>v?hG=A9 zp6oCj4o(u~P#0mvvC-y1Hq~nXAI|i5#0BWGjE#?ber*C8BUp#m6nA{+P{l zDHR5n+YRD<3b~%oUbqRK{OtzS%JvvE%fDKH3USr&NV2GbYH=yVt9O1O8f-p(ikFCR zI8E5w^R95?Od)fl(n@$AR1(3^ zY4K|dz7EZd>>m!$`gbI|B*t%5SbSh>ySovQ49u-my7Ahay3x{e#-THsOD;%rg8J_K*Ghj+RwtmDW{zV2))yzO(myYSl~ z{@cwF9KW8SNxuq7-CR$gQ0}w94)_j!x= zXBvQ^>M9b4JA{=tKCi0kG!hj6%;)Z*2!nCqO+{Wll=Y}FPdtUKH|L`RS!3~ezi+*egy(uyK@S@Uqs>j)7Oz$p6qO3*P5Bcyz;S=A-~ zx()r$4EHM#dPj-%y}{|YDKV8y=%x`FN3skZ>i)d9^sXZBNXd6FirLEdKc17F$%Z6F2?;agWuJ>tD1QI4!=sDtoO+)aDmMOAGgM(@&5>)Pms>b^&GDvPjViXoI6?P zkvM1|euAlLYe%Mjmw>~cY$t;rP*|}Eg7fPkIyd#XdR{o-|2#Ke)JX-_V0VjoqHZ~x z1L~J=h!|e%#q^!!4XZ9vL^@lJnAVhZyJOA0l1Hi`9^#Rf5?gf{iQ^Ue8GcQt#CHfM z%JYtvzjHlRfPta_S*@SnBAzW-=KacDGUrbqGP;_AZj5-mdkki>?8>FW$yVb1EV6dQ zy>+wEk30FF<}0ED-)!DY3D_SWVo9cb+WMn?aECoSc^;(;ks2q4r6)Fq2{APv1YEuG zM(Gj6$KGDk4Yk$pL-5qzJe(rIgxBwhbEOd0fO&Cw&|!A|X~25~M3|2zx>)|g(cY|b zhw+0yR8k{h1boHCtVrVbOw&Hyz88vS9knf zC{AuebDQ4;DA;V*0+d4TRB2Q9X`rYJ`ykKJhWV-k(!xM6@h~Xxz^MlL$zs9kjybR1 zlGStDwm?PXsmw{U2-GCexP(&0(*re`HnFjJhd!dIeVZkBj)WfIz4pZaN-$B8sj zykEz)Jw-LvT#5_&*b_gVNp0nStm|VqG|_6t``< z&4tXpAxgaHyFQ*IV!~W?@<+qR552H50sTCKs#Tu%8^*RRkFyD z(!nGeir!)2OAY>``%mYMiq}g+dLKaJNJTne(KR%;1Nf)78%enQ=uI}^=x))Be8iIV zvKX{3Mz}@|7$Hv+d8r2n2Sr}o>#03Ll2O`<8ua-n$>PEM%U&boPs`=5!qe33to&_= zE=A^HKOzbX+7NWSn2=bI&k9uXtt2%YC(Ks%%ZY^CmQOYqaii_+Ai<=R2-I@|X+GC_ zEwNdPLZdfv)mxVM>hSeS9RfV`kRXfOTW^VIxkJ=vFUoyC8oyr?{JB{a#c!;&Zm27g zM;F+=vwM?K<-CM&&6k(q?JlsWq##+HSJlq%%&&M`lqZ{&9vT_WWkLSc>S>#YEIuIt zs!v%}kqzRZ`C-1np0-3SMm(uR#k)54EE*jFExMAY zLJoqIzY?VO+t@GrnL1#?R=x;93IE9Eksd>+k^AsA_Tcze%E4Lg%BOLT+FFA5GsJT-ozJy)ieov9WDzxWUFYH@0ot&W&x` zH@0ot#+%RgS8ttv?>#kjo~dVgdb)c!hx%<)M>mdS(|8ja{_Q0yhJ5~m|G1IU;1Xc3 zTJhB$@tAIO@DLdk$qn_Ca9tu~JAtERmP}f6DqqY|D8xE&5UOq%iT`dwc!c1N&Nl+J zj$SOJ*l--idj*rq@_hV4#$le+a%1fOc1szWcEWcWI;(84Z1VLoMfT61 z;#(x~eS|A`cS1@qFaEGq+Tg?2N{)A|>!g5umu zq%D+Y>)~I?YLC9Hx_c=v1&zUpij%u<3d?|jJ@=cR#{7?dbG}abr`oyH&EHJleF{b( z`Ju4*SExM_B$tDf1x|JAnQ_r(x#CDcW~jc|cEyAm(o-~F=^B0rz13&8wcCip+BR=%fs*>`eYV10@jX8C<-qLIDK5Y^ z@KTkHRFdZUA3JS?oC>v4zLs=*9tH2$oA>;u4SUwS{Ae;I&J^GNsS+&rWo;L5)m z0->LVzCt={5y<`=n*3Y%<&v!l$zg-+lm2VWDql0eXXA6|@}aI#a)EnvaYb z2;(a^)LR>U*1NUF8>SN@zM^W+CS4~<4VRaZLDqRU=ZT+#vz_TlZ_(2u5kssD+R55u z)Yr!uls({yNoEhn+m|ZTB(@GBR_bb^I4~G*muPv7VC`sS$Bd~S?nR|>xLMxC<87nF zC9E3ny;gPE%YyNEkwGP1zM-Yk&d9Pc07l;_BJv6>Va8fwdGtrlZKV(C_6d?v$Mp_`$SE|QHwq;*Q%sX^g$ zpcc=Al?VwtZ?LhKj#eqIw66sdJ@qhiUfG|^#psa04GbqT9@s^fUKK*;@XC8H9`SPK ztcFY0NKQ@6i();l_f+FL5LrP1C3HV$1M*U4mhX!~aC+_A7F?(YjV2i^xc>rmgh{Sg z6AwuV{UIRfw|=fmmJha|gr4!hc){mWjYb4>g@uK4=m3EaBsLehublt0X+ zNr{x@N-_EK^#{PU$0Ui4SgLV~LQ_6{5h-5mGcZb170Liq-{D^1i=D#;&&1m6whuqISLLB1E!sFv)!#@yfMDr%BVzD3PKpI8X2KQ~%QEq2C5Iy>ALRI4$gxJi3&kw!HSAttJN4N)^WA#a zt)QX^+rFffsx|0fq-8c|#t`v*ANP`iwwV&!`%ysKM1DYXY~B2#@6yB4U@iR{f@7EE zvhTb1r;o7cG?vNG+DGn3oR{7{yizt^At_N%-M&I5E>cbogAVO?OvnFa0ZcP$sIwc+ z6lNS|JJV2X;cl8W=iMT<-ejem|7VeT}Z8jxNLo(F?8M% zV9erI5^VfHML~6wCHR)`$IN$@Iue#2LI*n9yt~ahQsd2F@fHxCn0S~)y}f3@m@ZZj zw>e%7@FN;zl|EkwFx<@78`jz%n9rB0<1d*1GIg_KQmZrN$}UtsRi}>pd8X74+0@9q z;r0Ee@TfD6-F(?@Veqle*He$@?fx4_T8;Erl_aR)!>sa`azMjj z&=RX$ZBH}{2s{6STy3@r18ZRCeL2TfYxCr*6yvEi2jblG<(6xFdS_nKtjbR#82cQ} zh2Jcw3T)pLe@1XAIZ_XaGThROCiZMH~tm> zNu(j{V!0I!lu|L6_SGrTYUF;r*vOx9J#4Lgj)PV9JWy-PCp#Vc^Qvg-5!CXLq7uc| zo-h+{NY2cTVL0UNE8CSC>Q!o%%4NvE+Gr&MCSe= z{+3XtC1-+udyWzH(T0Hwm5#d+(H9C3A>G|FSwSIR4}_j~8w{ZaK4HuR7{~$Vksr@? zyR7$T8xT&X3lw52sRK;+>k)=Gz2aLrq2YkYAx3K0y!(q>e+I7?z!HCt|BKXgfxh;@ zQpLnVR$9xOALdI~2$nQ}pO6i8SFYKbE;`Akl?W*~-Rac+*p1VheGmI_VQsHV#Ql_i zzPMZm{^s6gOxXfzEm7**4LKLy=tg2D9a>-m7n{7BfNDEo!k9%`II zkQE24CAvHK4EYk)a3PMDoH){b4^5uHodcC7^SyH!i9a~6Uub!~y;JI4mMX7}Z2juE z?RvBkZo?Q_DhW%Q`?u2-qDx*4-P?c-C)fUu7wma|uW?DBKxiIMJ`G-OILB#LHTI$ZvV5c6+ij4|OZ$8f0WTN@B^ zOVWE4!Qf4V=mEua&Vj8ZVl zso`)fvgFigPA7ew9#)VzN^lf}g(fghb|ZPs8r>v9vDw)%Pen!gW@1blN(hiY%}RvG z?7W?kAr))e46;*!LP zK$h}5D*Wmw=(FtR*PdxNfof}u>M@}HV_iLaUOy#elc zIiKF=j!2EWbNcG=lC(4vbm4ZN`-6A40EF|Q!Qp1o18_1Lu6zsM>CFd|4E6Zb*a62T3fM8L2(6?s`k3PXH%Wg^|tyR z>X)&W{f^mrjLPwf2W8jSrHMwSY20px7Z*r>em{t4!wJTyPzUz`Qe zqf4-yi^2y*a&>q2WDVg6dluUlwx`{^v+RBWdMv-(0FT@$-*Tm4QMHP;<1CMnjRsC7 z;KY))h@T5=cFyg$s9#Z=r?HS(1>kSW7s+c(qzXY(in~VF%pXci?d#d7zsoQ;)BY8P z#hXJh$!P^$)pA4ipXlNxcz-NRZLEvQ=XJq<#M!H#ee{|4V4#cBVIK)z;03bdsTXrr zYF=EZ)@2K%x{wr_;p>S{=R2sT&1FD21rRW1?L`3adI_NAAxU|QweCKG`DM4YshpA( zr3SkYm98BM_V$=V9Q3&p&|V&N7#SC!+>5HZ-n{jO(Y}IcAfYV`CpK4=FHhG6Th+O% z^)6ZXZ~ld2j)7aWl4zHJ!Zn;oXSma>y7QC&vg1mi*n%#{M9ck8||P)&-HcUSP6S4(Jv!c z9!|;j_0+>s=Bwoe zfiL1M4Q09jnD%G0R+9ekzWvS|bYefEIs*MNlCk(2RvR84+<4*(qsm-TjU)hid9!g= zd*~x$QV#Te5u*A1(RW`%$5$9X|!2DU0aB4GsR7Eg%+{F)7(WBED1G861}oMd|=z8%8Y7_bhuWy zgV(>X+=3b&EwHJE1gJ#d)Y+)D8+Th`JW@K|5Sp~8B9Q1}C8CXY+WsJzVwWqE!H+c) z2+nCRm7q$&f#3O$UZZu+e6supNna=T{VlODZ)9=!e}p;V&OETI8Y6Fk`d)2wqTE82 ztitpW2ilSxDlpPYjN(Yj#JHk;v-qv+0n>2J>#o?R?3O`Yolp9tl_H8o6S=pu5CKpR zgBe$z(Oq6`xtdc16}3oSrMwH3A5=;82*&~?gm;v*G~%GyZtn<=$Fu4H-l*gf?*N%z zGt%Hvi@k3jiNA5gzZ~u2&Et(`DAh$O&e?bp*s*Xj8%26&EnuL;$Y-_FS@YiL*rcJh zC1#MY9o$#}%8Y+9hQ6zS^!8>0orJ5+dAB@WtsiVvZ7tI(x$GxMV+-%c{GO6;RgRDt zuvU@B^Y%f>=GeQ+T7Edi@rrLL*R8yXcT^SR%>)wmSYR8xI*0so5zYDKU6)*TXi}T% z`7mNhO_%re=ef8aJM5m>is?cVUl7&ol+W%U1}`4OQ5m=HAm&JC+U-vzKd4cKAMe8sXl&c3AGaa+{hZZ=)K`X9b`p zi=V92VoQd*h`I*H5)`KoCjtw~h0=)zFn@^3X@#2G#%jOzER>c6f5q^9uwzUB!ez9n zhEWp>;VgFAGzt4l=4A8wko%7kobe+>v6ibT(02~-mXvmp!(?@)`j%a~21JhlGEa-0 z4T~KSPUVOB>g6)W!s8)`7v&gH8V@*U%b6@TTrvbqnNOf;W@dPIFwqAvT&@>Uh&Me} z#kGW0dkc)L#mc8F8kz&An7Z|lch8{7m}GPjaF`4Om4<`*6XDIAOWfBQOkD@5gm$kV ze`HT`VM9!O*t5MY;oUQ*70)tQZzy;_`ec{8J`HCX_BO!m%sP*EDU@nVpmKdb-una7 zTCTD!T=~#S;nQyhajOjvX4T6C?=Ls9!hZ{7c`TSKlol8}zl=U$+1=`isFVfwWjd}q z%&p)pu`rn)3;yI}HXF5Ex7%9@Ez<&9;i4%)oLfkXVAbTP8VZo@2x*ksJRlJl_u5=f zTd-T0h}jciHaclm)$v;3>GnXG;@6r!mPl`P?W@%szIomoP;YsvDtE1JAsfp?=+ic& zAKKQZ$S2|nf?cIniYV^`hDN9tK?6KfV_*cPdeBphnJA@yUADjBH0=9JA3O&KGDeMV zlGAE8g*zC<8c-%%mCnikqu$$jvk^J6?yK*qZAFJOoxtU8K|~juEH;4om~8zkP4PD^ zkdT6|Z#RuF&s>NE5`J{9w!y~-GTcY}fC7y3svQ%m%G*tXaYcjz=Y5q1vicMq;{% zv&xm7%@AE^u~vnbIq;$T(x3yJj$)+C_g!=dF2p44Q3#L8OrY$tp#}y!__4wtHFyTz;b0}zp65kxntow}c7uU3s~FpHC0_l;4!Oh#+}fG(NfrM-jf=uODD=ih ze#}(zz9Urir?f>ppYx-6QC5dhZ7xZ7j-Vw%CSQ z>DIUsE!{*4TB*U_o3dp~)`=EUz&N4&V8s)!)cSTFaTS-`r5n_BQjbx#K+V9S9pq5! z3sYq0_+~!N?VZIBh0AUUG>4>pxe2MZeM%jB-UroyY2PW*)G-1drOjkH{nbd{WVV&Q z#OpXUihMgS8Y$(Jc-4w1oj^JnhJH~uRwd{q2DsTbIZ67hl#}>xG8RDo87_bH4tA97 z0mA=cL`=}~Wx4LQwy+MC7)i%7cfA)_Iz0YPkVKH!NhTn5_uoNIY3%fqSl#J{Lh756FzW zKOX1RFv@N<8~Y@eRPW8RabWFufOj@s)i}w7W^4f%?m)NDF|v%l%smw) z`)xr9Z&)opM|!V1SD$FmPdiTV2oSwa807yCeBF3z1M8 z6Aox0*>pO>&)o9j>ITf1jQNLLqe}2NUy8xzTe4fNhMHvVy)Sjx;jN_%J5Y>!@wLUP zqT5>F>>7^1$}Av08eM(JaI_R3&PIH!yt}2$d$8xfY~Ld+83l&!^4@|xKD-=d zAGT22cj&k*tZ;tyjnzauwD@dY9#7}8xrJTlcxDYXZ@tJ;fAn%b?1PNXX&^gbgWX1w z-WZ8L8=(H@$@unx`Od{T=n%+9;=nh=HQoMrpg=5BfffFx4PuyQkBm$(?jpj8UPF={ zV(_{8Q3629MgHl;e`kF}cOEMl-7k7A#A<;Qpeerin3Nz&p+A=kKTGUXj7KSmM`s=X z{O9Lz?zi4Mk=|VQp-gPIQ~SmBsVw+-xdSKr%bavmC(RE-S!hOtR*dpFxt93) zjrjV>%YlnFu%0LVH|Oi)sp~+>`wn+dT`)QNX$QoC8U$49u)qgoyrx_|-p=eq{8}KD zh(v=>v+nSP2xS?{*oUN&N ze^~XOY;q#lX)OrYnG(X|vkR$ii0YlsH1x>+^W>d{S72Zx?xOgU#it znGsjzZA<*XkeH=*W1#gALoABP zq;3y^edkEMfy4>8%)w72HoGLVjXs1@X!QDtswVooECZ?1DQvbIgD*Mq~>`oTrRzhn)$|r@A**8^P|&mc!F}rQCQOWTTB=;KL-I+}f^c&;32(>avs>QgqZu^{2Q6EWV5@yLmf zXX@eDD>X$5E68*_4}|Bd1fUaqvdbd)6*8nJ`YCc{)b$7>gMz%s*%Fh zt|RhTh>mb507ub9jZ0(Uf{=HJ*VmFFPRbE-q#{P!Tq${_;_v#y{t}SVhp#0V$5AAD z9JLNbjA|81?!2mUvBNVZkuG@Ic}Vi(EZ%q3yOn=gVtS(r0}(CmW&l&KkD0-*2p>U5+BzyEJA{{|%)VxBYbUq36gNHR6OOc`XX65j<(k*U^<3>)cRM0!3q4VYQUw!8@3XO zgmxC>PyFDFD#ECLSyTOH#q_(Mk&2YG2l7NHehi5qKNXId8=~UAg6jyFi?$7%B-R=| zsyV7dx5&bc90%Iq1v;^gvRF`%YwZ$4Oo{bd9?O(gPnn(t@4kam6i5~urzx!~CPoS# zj3BgYUg1WhZ#!nk<>aToG8Zi5G5XXf6G0o)s8KA)wksT_4m%Y}Li?=h2!h3j%KV8u z{9#Lp{=PUNRCPXzbljhVof@R3qy?&ezQw5yBkVj4v&Tye?e0o3>}~-$&+cA29DCbM8@)BKF8etO)M7!o5W_LKaKw<^7+cwvaYS}c|X%SU2iqS1RLhE#l%zT$J%8b}HZDb%8#1*@g9TdxFd(D3Jy zP|Gj**UVoM-cl*K4N>+T{QG@Gvq3TqJF$km=?Mp#7U%S3`2xtL-xGs%%>vB`B4PY5bePpFp(op7cN zU^Q0l5vM;$A(Tr)N3wh7Kh#f|Q<^v+zE>+8?OpQe17$n`68Yyn)pb(#Fi1)b7pxlL zM~9z$c8p)adykq`f#S3{oW8WZ?2K=tUZeoIMEPpwN{f{UfE!Z zjJrkhBc`yO=a$E1DauWZj%mSSK^`mFp<4fzonFnhDh%BWhmM0nzE%~Ogpnex0rtcg zI}y7R@Zv)9grO5T;GScNnm1+ z2m6`V1H0L0Xp}vsBQUcf!{dat;e~s{{UmC1Da;L^vaVQpn_IAQ-JbTw;&h~Z($Wc| zhFRYlG686{6L=qdmL&wwe8d<=pdhRrYcJ0vbA54jUR*f%6WIq-w%)!gTP*6Il;NxK zACW#f8S1Q5zac-=!}pPL=azXKT4cd{7X45tVURNuIsI-OLoXZ!_F4Mko zg*zcuP=;D*G*3_cZZP!Cl-Y2Px6vN$w4P!fo>q1B_t0;)T9N6JgHYA>`dQU>OY$@Q z_F2)U%)^=1j&}QLMM#uNb+lvOH71L2hsEz!3cc<>oqNd-@Ich#Pg?q-Y0=9BcJ7edFrnh8Adp(WkFG}R;G6t$-to*;QzIvC!^@UWyns%43#6RSbnB3Skx2I$c%MmV z&En-EMczKbKDAZsZe|9x>@fvvM~+Y zrlyzOlF{nnfr7{_qm!^OJDkL&%KFvPP4aXLGQBLl<~c+7$wNoE_>5K^F0AU39<`jx9>n(HN-5pJq#ri&z5 zh@w&Oo*&D%B7{PWoPF{3<$dIR)aADHlx^a+h~4FKWoa^*seZ}DVloMTOoLzDiRfhx z>)d`Q5tH3%+~Z(#B7=wXJIamnv!tK>T@D*dsf4I9J&QD}x*OB~LuC3v^~C8dU*Rq@ zx(y(`;(zdpbh1I|{) zg51>BQ|rJfqwLP>1vqs3Qewwh{J?SglP25Z6KD;iEOgfgEv0!fe*lTi^C~s(14B#I zMP-uvxvuXIP9M{gGn`?AsM@wznaR)j}4}LkfPd)!}(&aKz3zRzM{4@k| zkCqVOmYzHBEf5EeYO&TY%eioHZ5k0*KfJ0BIt3j=yMzm?+rI=clT9C!7FuDS zqTZj6nmW7Eja@e6(#rj)=eVbGE9%`9N;`9Xrr~^yX1Kp{!>?C;7HPC8_vtiS!1uf` zPT4g#gMfW+gvXT;SOZCS%iVa*wrHlR)#_6)Og{p<*CoE~paHO3xVEj1M`xG8Oj%)} zBea<8RSaKmFC1=m+dRjLaQkPqdv?y}mRTX3I-^Ucl%0egkP+nF2AJN-(jliTbjk7j z4Ejq???u{1y&c%*=uWq?EPBHwI4XU2)Rr0#`!YCD+a;y$(;0+xKw6pbzZvnn=JmvF zpFqVPMWO)89;)Q39~ht99P~vgwB7GO0P}fXVjos3s{fp%-PHUS!G8YU6a_f2$ zzR5u5iHHePdd}2Or^B&Re3~hrCZT^*Z{nDLS$?~Yg3<&_#Fp{DSqHs?&OJ^{1&%U{ z@hKCi^Xr!eLmyVYFSF5Tf=3vnmixTWNL;!;actj0P5OuJ2O%~83_~W%Xf`LO(j?)G z7sR?LBPw*s27OBb(=LNxo}e0`*VLt0kv~6d#^h#gIpn%r!9c9 zx*ohwRe~{cdBacLWL)DGcRrsQpdzl)tL?W;em*##;xFw!nKV`ASl_s- z*oKC^;u41ar6`AF7LKvrOI7s!shgBmq4a*)V~QY~e!1hxyvx3Q|DLgx z*0%@z{aOm0L<^7m*e5wD$+XjyoR6vTffT;T; zAyp|J9^I5E@7^vkmo!pkoQ?qiVwWa+93HS2dzLvKVJo zimW()@dMZQrF3>64!Bi1oIg{H5mVMKPpXe5B~z#&{T?-`H0ly7h7c}&7%}Rxsk7IO zM|Eprc^BI$z{fcXoZhmLcAF%hsw(x_u1FST-o}7Y=J`7B^LrI|r|ED!zEk(@vXK3- zdfi8xafg4W;y`5AsW~YCB z8Vd>2d|!&f#8+Jpfeofkh46&0!43Oa|At+7og>;^&VrrC3y+AY1aBw1wQ^i86loy( zK$JqSTJtkt@h*5aAmDOVYLVoAZ+c%ab#mvxJAZUNJErn-ZU1z8c|cy36~MWHpA1wE z*yhtzrXEWM?!xHj1LTRW)>{c)`LPfqMISp+I1$AH2rc2F{W`EBlxdQLJ*)%DjJPrn zJhZr7JivLvAquD}sQ7KaI@`*}-e0~A;Ti|G!?@?^S#~(ioy6xz2p4Q~r>8e$5vR-B z9ZhJ|>FdCwUD+K2(F3W5n}8VJ2sfjOU3Pgx2?2 zxPlenkp-W1DBull*I;)4o%=Z7>VOd1&60GIDHBmm;FA9~61SRl*#FfbEpx|MKZ=zz zK6rhbyQtYg86ZR=3#kUq{vglNUE{LtuiLr?X0IBqF zC%ueAsEsn}W8%Uh6886AB<%6jGGWT?5b%U_RW29vkL{mXrFFgoq-@++rH>5lpd6s& zZyiK;oo{ln|N5nRuT6r;;^3X_xUlDs@p5jP^aYhM!9uZ~bn5S6q<&P1WRuqh5JxRH zHHJ!M3LYhK2I&2e&LeZ^aj9CjmR$`;$3OS>%hhuw*C+u4s|V>*{PYjfzp){qck`0q z$NmJJ+_jtwxEs=2NC)2P{9@MHhR$tjkY^wy6HW{=8AK8v+MvYYSqAAn-Gq8OK~PAk z!tagAfmb7KFJ0<4pMBrOn5fMMQ{3}C+8unWzwJqMbw2m>otx3dGv4j(P-KfJKY7U| z_@f_fBBch!Z5Ta|`gEs#7RsEOj9JT!pQfe5IObjr#5XGtCE&}4Ow~J$)ESpWJ%#Ss zF#9rf^)7P)NzSs9???Fagt)7o@{UHkGhK7zzN3Zb>^$0NRTj{Ykzn@z0ZN&@WdHtAQ$zsc3mh3X}?ptVKk^5FdH|GZ8l0 zA4-N~)?8n?oo=5alk^bAL;?$xvDq%VH&XG4r*WQkSJSipnF6qwJo4+g>M{5X%(Fvs z+hCPuzksjI^`>vRTh{%Tpg)VQ@pM$qJ?+F}CtvseVf|k5wR42uHA9a1h~uHeLBz4O z^S!DFXu>x|y2nfWtt>W>z<)j!9I_B+C6;alm91Xl4#i!&Wdyt|Tg3D}i>Sz$0UQmp zTdji|lF@+XvzG;@W40G={r-80cTP#4g3QVA-2YWH@}s0>aQe`3e2Pgdlil}{>U5wB z&OM)*v867~RKFLrj7^TOaC;O#mmZ%1$Oa$9*u@V105zWI3VdTd{ZN(RK>c!O+4)%QPmgtY`rqLhYS^XoptxL1};XYY8f=r;nIC zJ2&v`(ORW)$jJKV81l^n^^tuZf7dZ-jqKqK+5JtDgmqYHLF(&58nl|J6$4?SsH8La zTxj(>`q`+xMAe_%O@t9;J7@(?YtUr=0S&*CnaAVMp<*yxa>AVB0@Ye{hdxcxBLsGu zy9a7KjeU7~~1l|5OQ_+;$8;SumpnpD3QBEV&)cf33p3QdRbfOO2 zU(2~Skv6_SQreI1 z-wPeH1?4vpCG!nLy&M z+`#z4msTy?gYH!P5Wq%dMl_OSIU0@_v*=DJul5lkj~cR$y7c$`4U*8;FsNoqz&u@6 zgpOBJoC}IE6#PqZ>aEYTHJVx+m^&B(YDcjw#^#}eaw;7ZfgvBv5NOsC*9yKTydaV8 zRCEIhEA8mV7--6vaB3_~BnzN*FxNGF`4#K%q&~A+5%lZe&pfyhvYZdBF_ozs@ruas2JW&2zLWAxOz;@`?kE34)P__&SF}fZ zlT?|?<8h6-DT)X~>;Om4t)#h*;mjZn_{7v>q5-R+sUUQb^Y@gOdb!iSfgbI~EW8_i z-aszTaG`Z)$s@4uc})Sq$?oshARxt;V_f>9h|skn=g^laTtTiV=) zjy*+((u0WP-*{?U4d8Hx#QAB%Ox-gKuo)-$PSW6{@~Jzbzt`xvG{jO7!a|3tcJqx} zpGEJOEBl5LYUcX-w~In9sW}aXtcd5Wzbz+VT6@<}lL&|L!AFZhaj|!xkOUZ*t(?6Z z6#3Oj$d&a$YYB!4?S2x=#-yG)vbMrY&I)Kn`^`f^kWv{cS*VR}d39#Q$b8CEzuH>J z{jCmGS<(lOvuZ4j>exdMSzI5D0MX9s0e`XRv&Z}IBTceR@%HjB%KZ7UnMe$xeS6JT z`eGs8ii>@Vdp>i0CuH$b@#cEx@C%^Brw)2K5y5Lk4Ed1<14mkYqaBnSqa_lD`X~b- z9AbhBJne}?UC$B56OlTm6!o?geEG7x9{<==``*xkDwh{cz2KWvPA>UjGeRTV7YP4Y z!yK4{8C|Jd!A-5erNBn-_z@aaQKsQr?JvmKeeoBWzq+{Rx2#_eJU1k$3&+TKKMv`X zoV?&(4C%(;aJEXYc_M5IChE|F+!LCL`Agm&SEFNyVhhdqiuh>uiSZ!>>tbBhR$v>Ugv%sa{w?^<25FFvMO#EZmv+zm>?kZUzcS>Us-_uD4kQv4x-wTe z7|3rt{evywC`fzP%JrN%S9Y6fo2o_%cKH%xh@0beqI)c|J>n8kV5sf0HE7_iOozL6Xq(patFtjYkpk zn&wb`)U~_#M>IWW1e)Kq=zig$ z4cee-ig*p~U=Xz?IO*~Hq^QTL2kdwGy3n8(4QuGSu*EpNv%cPTG!=DOWI?_kKhi)@ zBb5B^hBBGnF*sc_`Qah_QZ!p527E=dBI$$JK1`SHrtR@Fj1s-037^dUzRtK6`~AU2 zT3`*$pj2W4>tCXhULpFaFc8We@R|$0gH%3+lZ&$pD%%1%L6@GE*SpA?4VAx(lot@$E7HuHMRM5r-7@d=!22 zLxhmW*m7ZHFFkkCaW0+hpe$(ut1FSZTJDlK1THTP&DD}7;#gwvv`Y#qbY9wF^;Z`B zX{K^e^)NO-#xm26fUfkB-$B%b8riSC0mxXHM?g^S=k9FK5LAfxC|f0YR?3b>ekR4j9>jV!381Z>(Um;N-U7xmh1~Ncc z-!8BO4|0bFsn2r$HjEHunadOZFT0?dGp$azkL!QcT1A7N@;w;N{%fvOj#SmKye%uw z7wP#^7AuXU@aex_{P!4PLG&cYNsxM`kSbc!>6ntc$CLKTd>ctZAjl}B;)Wznbon5n zDPfOYd!KX8`@N{^_&PqAf;~jBTdXo*bb(}F@_PXmOxW1sD=)y z&;D>6*lyc$1L5i?SXgr-9-`lYH&_-S04n=lO(u=pQq7l%hl1W!J$7@=3lS|1d(5Y& z=_66WZ(eF!-~a%#7x$Y5QplKgTnM8$pL-{W}-Hx@*2~PO_i3ilt+{ZsU1= zmgO(2jfUCA{o`aYS2I05UNgLu;mr(Z0I+yr=$3JO!o(XhIOs;=Xb>CEgPDKEgEjKx z7@n|;v+Xr#`lQgo;WcO_<(IZvVAfgr7NuU zKcG_$hHolV8Wn+fPWQEvY4g!mYOb?~Uq&ahL2|0=^jvmsd~~G$MqvB#(sH9i&+JS7 zl?Vvsixl-wV@HtZsPm)(%(7;zW=6nxxqi7CzKTQ}&$yFT7?@0ecZjgt>{#otRzhG| zt8~3J@PdqI-PAWon_N9MbYL94=3fN|6tW5Er#bY)157htURZh0&Fsv28$3NVuvMxK zV)(V6XIuhMC-z?R-6}dvTj0i`Sky2EP3D1TyR@|DS^{Gx59ILuz-@Kxdrfz8;kIcD zvvV`EpDNQF4hO@(G@EZE6~`=2e#+Uq3;j8#jl#9C#li?O*0<*8@Is3|J8D0Wf>DL2 zv07^y8;r^@8f!{bD%avqXSx5rvzv!IqVZkY+<+KJuFq{{mUFbzZ)6iK0=rz3%P6!%0~vsAZcZSZ{gS62WgrSS zb_0x{bdw&Ij8ehqJ_J0}+1@Ziv!#)J--qFc1o@kmC6KW(@=va$Pa9v+HfNO!&e8T> zWYXT+q>zGn>Nz)_`1&vLCh7Q}7`Pmk(I*CPRSqv`-&=WE5O{%+3?5YYP3XWHkq9vC znEo!>-^xf_+pTcy#)m?s8l{;sKiKtKf{cT)7YyO>FCbrB{?~rL8!(s<2x?&@dOi|* zjd^DG1s}2bxcLeS`L$m*s5m18XSC9DUqT-McQd9VI2==zwm+K82bUb65v39* zh&YMnq6X{_kvx4f!_oyk10sz!W8=HhZYEPuvbai8xcMj;-&{ zsHZDO6oeej+v>p0xB+qn{-*l>NAn>9!t75KK|*RGO$czrz<4MgPg{mEr6P^&jsP!~ z-uL=$og5JUOrkpxgB*GfNba(0M4kr|DK^c44Egae`s($@3GXj(!);Dy_pboU>$wUq zO4plc#`9PvK5fcKE^nM?=#Jj#v?To#?QWkZv}-g@PO2R0P)(-V>3CWCisM8|jAItU z%wzY8|Mp(rwZwx>6$Ijx^P*vPMS@ms16`QyjV5We?tnq8V+k6mxHeb%i_h+OgdhaT zeQv>V(DhHx3FCQvc>wx2+oQo1k67;KG2R(lxOx*-zK`()%4|FM5XE=@r9_{-8~xV9 zCFz?23=H5zkdYZJEwYR?PDHak?c}KK$0g6)oXra=Us~|wEkxIT_Y7}jEu+WL+{D!& zOLVlpWAIefCbo_3xtYG%!2%~5ij@cr;O0L93VNzP|X8Ijn>Z}YFE@9J!C=lNdx+6fIO z)0Ja(AyhTpEdOs==tbM^$n1;5cI<>Px z?Ij#_wT&C<{%3S0$<{e_2I&x6W;L(3H=Sa;3qXZ%e=&iJH?>?{mJ~|10?S#sm@K{{bsO)V`u~Fa4>7F`P^qUCx|2B`eHY zd&X=3w39F82%|t`Lwav(&v6HiL7GJ#c6z~-A6z~+-j}&m3DrKm^bh*yrEsncidZDXx=F6|0xfJv7o&tw11x!G* zG0yRBW1qFM`M_#OgCTC1`)+Cc(^J4x;NYNu3Sb-Nb1atb2|Gchc-U!k$CPxSY0qZzXVIiiTO-o<0e4+qP{A*Iy!cWgf}{nu!d5p=h@M*F0Nr}lJdMbqZYe=xdzJ$`q$ zjvUw9w&4s`I_6E{n)dt{07))7+@PFTs3OF$ zy>+{0;`XitJH$`i_r|$+CZfyUz}}O*hJ&?1w0`tw&f@gnJt<@l@)%zGiteeQV0|*R z_-Hu$vC%3s&WAF8M!G$n1Bj!I>3xYG+l4qq`-xiy<2c`C%?gw6yHMF?TH+eck1inR z-7U`@fo?dH)6d_I_?=%42>GX92qp*j72!Ow4^rD2?##?l_H&$vWD<{*()gE?`=aodh;#?<6)GMg8&U6k(RZd0Jj4D11#Tj)^oLxUf+tPySiv%>7ky1-g*B zx61e5Pn5-re^0^0r3+>pHgV^Vc}RmK-0AV_ym|89fB(hH$s{XQ{3RcL^s$Wl>KmdI zy7ZP~8JON>;-dMZe#@8WsZEpIJeq_wTC--2n!ROR%rUK|w}8kqTCR&H-wBH=APW{O zMF03l{Vs@Tem5@qzN@r};thwjYuCzGUwtqyD;oMt$2&$lknL$qt4Pq!#Os_j{Qnjt@;~dCnkUY zy*k7zwLAu6mwhDxozj{EQY()W{Md0{%b$O)h_t6+lKk8yPRU8No@@u=6m1Vn76VNf z$Fi3!S&GYAQ&uX9Gt+L|$ocUf1;KbXO(H)MBuvXd_FXr>CiH(i1v~`~YYK#8-kBR% z;pqGkB|?}l8sYt(0((FKet-CVq$6*zdGqG@w=$XMW;{1`_>Ekb3n2}63 znItwA3Co+`XU&=;f2~{@lmi~0X=cruEi3-|D=drfn1^}!qd&TZ$#@I1bOyl6rQdK{ zy?Tv21Kiev5jD4L*&p)sfER%8MhzmveQ@?Ve-d1EnK)re~hCeGj?Ldids+l z+4*j|<#u`EspsU+<$p3r>lVcw;6fMFEvUC!Cd(td*>mP9E$Js7Y0)AC8h>H>plq(9 zCDV}697MO>ey=S4{dY~xbe5L)kPsKw%bpGWZH_$n(4$yj3EI+NTUyP4Kgr=i zzp{yz@j?3q>aE)&eTn(lrnU*lw zPDY0xCry&R{hkGpllxDATe2|5e8HGYE{kE-hXa^#Ix75(Q5m*2@J~+xPl1Dr0-O)* z7sZU>iCk*w6Q%WGo&sr6fPIOA6Ymaw;e~?Cj?vAVH(z?)dZ)DS&{bNuxk^6$^fUd&+Ba7d9maox9WW9UOe*i2 z*j2e-xZ=6FiMWM1jAWy>yoo_Jb*U%VvD!>!3aPxP1hzbyNZ}9_Ht}ZDHC(VqtDNGCy=o%Y000oq-beh7B8~LWS~S+1&XmT<91%{`liH%q}r? zVFu;l!ZdUm!Zdsg?iZuS$md^tsbvyKv0}wk_^Md(1ck{?IOP2|_M--Ae*t1Nyj?6 zX^9KN0-6Makm^^2V|bFGrTg{QdGf-GuR^d7`a=Hv`8BL=-8vf2vaFp94?Yb?O%(r= z8ci5Z$ETHVxbSK5aWL90XP#MGhzrZfkt2K9o=o%4x^*&t{zAM30-LpY0MpdRf{!1= z_;YDNzx4|~&2R6CaAdh#w{4YyFFhk$u@Xc_OIC@}a+ihW5gzHzG%Ul~Nb|NmO@y^Xe4UDaNm9ndGFjm2AeY$pnTbnCGDHEGgR z?Oui>pTx!b5z}#O6F%opnx7^vmWE+@^5l`cdGkuXeECprPG;F_NBEp$xCq4`-x=ne zr+}xx!9fAe5$>3D=ZsxpXmcm?c;_jwHxyuBnm>PmTykkU`R3d2tKN)(5{@f(DYSES_e zWt7>Y-Zo*9xtTEG2USa)`|GcA^wCGlQJ@oXC*#I=*6qU&KbDnXevdouI51tgRrq@5 z*%#%HWy`Unv`Px(FMzlrDul7qel+qEnTIkhJPqir~LvZ zF0T|SR8Z5B@%r|=pD+j-gVu!=7w%3DAMp_w$DfobB>o16YL;Wieg%4sQanqQI$p9v zsF^lxx(s}IkSvAp$sN1nk1r_&3m&5a80(ogZytrgx{dsJlzjEoH(Gb%?c!?qlO}W% zC;liSJ{+k#j)l;t@`C|2no+guqmMqpF4j0%kHJq^WMaw4Ge6Y}Nzc>k)YhFimcw1S zkI}zALq9kc@Ys&qwr`WuPOGKNI?H4me=ux>O#5Xztb`UsTOFl1jvhTmlF$c9C&J={ zG#-7dbm>xIx$K){pmX9k26W1Wg$dS`?^&~C)xN;I>(_6PDZk8ZYFCL6brl(uDa1r{?C-U_-->RQN2UlX(hw3hZMFa4b@zgk#;tCkCc2 z7jk??$7s}VqE|G0AEW8P9RU=W2~DXVgBfR{tV6~SOV8wUWky+^T_`@=A;2>3dq5x8%!gYXushmE6+nE-+GSl;NpbwF(&5ak_d; zTwi(R^0q4gU7!^Hog165PTipCn)$+kdX$&)7+n4sL4 z7?X5jq#(e~L&1YHBXOnb7S%3^8}(gp=yr>oefC+BC36-qbu* zdfa@s6e?U$Mt$}Lwr@MCdK!frmPv+gBes9ZEYS@fJX9WdsE^|D-GqtK;*$3A7X(Px zS$lr-&3LI=r80Ik{zjU=q+-PiDqJ!x)2#Y?o$iLx|JrMBf?2GrZNL?c%iDHU0hMv2 z%X8SZcaN{xS4Nrnmx7V)*y(yz zN#qJhm+N}UQ+@j@L(BeX_y*#JK$sXT=Qq1rcL&(7iWNOgceF?|3UXbp>8`LSAU)n^ zfIRu+(<+$qV?{@Sb-XVK2XCTcwOAG zqh8TKRkRapG*Kp;`FWm@f;e{|={T9RXnwIQShz_26h50byNE0NH41El`eg%E)s0oyh%>3UM+-4!Tym)`$+9t zH9@bfI1{-->YUvQ>Ic7}4`+qYyB!nn(b`YgUnqRB|K8m5P6+eAs1S12S!c-G@4Oe5 z$8j=d+<2){xw3}M!}zU#PCc~a+vx%?j`v(SbLn^(ihe>1nsi*O zs8#QBeP(EYCjER~~)rNv$*c;|V7;#7AgyT!0c4ZaL=GV|-EA zt5oS6UF6^xVjsTwmOJG9^UqVEaK?;Tm`i#=Kn^qtY|Ln3>G;FBiL~Gt;X5?~s7f+( z)-0W~x1&zR>@j{%9fm;0xxIi*da+*o@!ftIhpdOZrxfsQlT0~&FGvq{_DqgW_07Je zVct|z`Up>fv?;*vV7s=L>jL81wd=SJppM!tbmX`1z3Fn@JYavNBM-lR!$w{Brhn$l z+1Ld`0Z{C4a$><571NLd);tzdK>krdg z9<0oAR)~RV(kxhgj#vlZQAR%0}`?22|*$8eS<3RWCNY+!z)7(gGiIv)(MS6LM#tFd)j=8fXlr=Cr=N*E z-TzsA=N|}OvC=2hjLn%dSHrNQ7HfLZC1E@cBgU}15L>!*X&81(&)Z{zUVB6RpM5qu zmalN-*!%?x)Q?@77|sX9j254L_C@TPYrDlD=xIF8%^-cH*!b}i)Q>YKsK-Y!Fz@Q; zAFQ0|J8?U%TS-Ujn}tEiczLgpd>~e`4(zX+wwIrWjT-!nDNu>P}tN&-$^g zv8u2Bl`B`qKKkh6unk6z{3O=B`z_jDOaN7`SiSm9VmK$L>2JQ}_80`V7z8`@W7jO! z@#^bhtdBXv8%$x)-qUAj6a?xR1gzM*?+sBu7}{7{wC~1Eo74|RGFGxojTj7{7^v8| zufC3T?s9$DSNrto8@r@+yBLHCO|x*}qFAQ96=FCmrG5zHTBh4qUwCm~tVXT+N>BE^ zT*p+_c1TLv61)C}n>0NbaLo^aELQid3-q1+kF@#_^rU0odFrYDu}+<@Q$O3PMA=i( zCzc^@N37|^tx>;z8pl5qC;l%*{YQ@;gE91N7>^yKSc_IyC|(?MENke{VPQPmf?;6v zHSG1*-_mhu#*4Q0)-Wz-E^*1%1b4in?mxTS5f!JA#RjGbv*ykDc{0jqP_n|Iy3l}cZGL6op z)3eXL7<=)hVE!BZ<(L%lI5!r48!@*2 zj$u(G2K7*lqrZ8J%VJ~3j8(ro7YDgh|I7N)alYVudE-sD#(Ld)ckKD+Uy2PF@LcSc zo_EH2+}H~=|2!NsmM3+nJIAm;lMdF`c22S9A%scTd*affmBqQRGpY_51$R$ql974# zwyi?k0`?^I9!W2oHf;ib@hAA7HJJC-#h`%_!$Oq)u$v#___QCto$OnQe%8N_B-;79 zW()<$KV8)9vhX`=r9Ac2)3K+)8`H6G(k)-UT+>dC^PkMvcpc9s*$mzPT~ zZK+AoSQ4bQoT9r&T%|98tx$7Z?JWYeA*%4vQKgXQ!?>C}b?OQ|kFtH;9GqVZR(^TN z{(|$*#ct0rnx5s*aTm*VEa#Y`U`;YkK&@YVReHjoE1yxsAC?7`{1_diZB6iM~CWI zzf7Nw)$t{&uEpH}u8bEdR0zmafKh<~(&5Usx+Bw!J3ev8^HrolR;;emae;(*aF-Mx z4jJ_Jr}Evn!FryB@ztwWm8bhXraMsd(-C(%svh2S)2&hsD=2h4Bh$V6^?G)SyF5?! ze^W+%g!5+c^DtC}yzj1VGWv@#!7dc?%*1X%6{xooCRIsiVD;t7c5PJklQ7GaDJ@Su zbc61;(oglT4p&_RHN4a5Rmb{Wf8DjZi*h1%Q*&k$?B=Wl9oc`g%G+gDbZpeGe@>XcF6vOOVr{fru#;1! zY-t((!8dC=)p<3yP;qS`jZCc7Cs2+gZ#*W@9`S_zDP*J#6&TUX%TDQIgJC!S;$~swb=I&Lq ziyINVI<|{D2e1u48#P>BeCZWA|Gaad?odj1FRd^0jNut|PsIvcKF!bYHkWsh@~8`4 z38++JF+uw!{p_!GPp>KeK^2vbDy3PnW>&*2U~IJC;bVf`#V@7fRaa`=A^e5?mwB-G zBUiRaYK}N(g_&KtpJ0TjOD$6C8wA3BMufP5VxX+i5znF~t zJrrJg|8RcgxTH1E2OfMB=U@v0&#R>f=E8h=^J+h!$}V>*A>6Cw(EIMaOKHu#ZaeL& zOrE0*Mt?B=ZA|Yf->%}>-h{O$@GLLOpmk8HqEgM1?L}uW?a45UV@T@V^0<7VyJH z8n<61zvEmy=4|V$=)M@+mLqu5pZvv08Fx7Pf-eqh24a}8j6JR>s7L157(IhSl|4G@ zFq6Ri;F;r@8x2cJX8g(Uolvg0e)Raxk3Q9sPCuhMn3?t3h#w7q8;s1U^3cOis{ZIp z17A_NY;5M?&)h69+tsR8(nISEV?BBPqFS}eiZ8>klOxw$i$j1dItZB`GD`)Ht)z5e zytCWe z^2{6^RToJ!8a1Js9v$gLSXAevSv~DhsKRG}JN~~b3DxlH=jJ=hO9U`ey z_e`A8`BBf_jl_ALrOTE{{{hc}Aq$L_P`EOtfag$-D{}@c-Mk8+W2xdm<|_%pCIMQ zwjqph{s7H zcs$F{)8Ru^NptKYV9&$;NL6RzX>$?#@!x;1QT1D%g&PgLd2X=vrOg!t^Jm9m2gjf} z#SQ(~aAdfeqmL)R?zS%CkVYIwtPdAVc*c{C;l+vu3qBO?2!~_4+R0_K4^oYpj)FDM z4`R0tDx}M0z%$Qbp(3veOnpF8s&#+%`Ik^b{!eODEundm|M2sbx+4y(J5?}y+;}Tg zDo>SLZs{Q>ophqA3=?1WZH@(=|6^Q@Q%)A_km*=vUh4y?mEzKeZ8!+3%v|)axtaNx zhV8*8)i>GCqi`9|F#Z^C{frBSgaz#c88T#;qQNv4Z+J1Cm0@8lk9pa?qrV)hXY~3# z{jActckjob+Wwj*<(M9cerzzg(1V@so#3&ZL)@J2gW<#S64i}`Fr4i`xJ=Kq=2&hB z*8&7`Y_?{(~ZTb0R zSxo0T($-YG`}cniD((+rOvS&mDBh*L)yH7DerpSZ?c!@;hsx8f7jcgItsV?dZXpZx zPfvk;O@W}FMf+NA@GqP*>1)i>3t&9xbc!4W_ex%xkQ8ew@74k>GUc zHValMH*DA}Uw=16n!xfIKT!M@;IUhd3=c?|G7kU|9vx%IcybrS9Lpi`bK@)(Kkjtg zQTS@?C&4+3xD`E`sh{}$STHj%;|xdUxqG+krR%lVfZ?5o9juGMcvjFAePg1Tj*U+9 z<7d}PW+-Wjo@Tb|ofU+!gA5ru9IK#(eGd{ltYoqrs0qPLgL{d>1=l->E?arr~+2_3MMPX1Q|Z#`&a03=Vf7$b{~| z2Z{_LiO8~8e>#5H*x5UG?kJr)U8Tk#>YaP38k)EeyM|;qjp<~^U-0`Xx$(wsD!4H} znMA_iZY60|q)>i^4;2UOXtY*iA+`%d;}HV~zNRbwtao9o8sB#7Ez;v=XFVIzZ8rN_gjW3KC z@riWn)-@DbxHI=3n3uv3w2s61p`}ZgL71qhf*JEJT(k&%B`|)#d)T0A8wzpke-ug> zPG^?n7A^WcoCrvdsZ(btb41~v?q4vGJqyC^wwo9^{My6V4QZi$i?qM{o=0@N7J;Ff_eOpvk3PIf8EV4j`MWPi|0ECh4i-Yl z2-P{QHg<&S$iolaCs5y&4p(=VsXu+KeetKCXULs*^ki0b?7yFn`ceA_4XDsjuzvr& zujP@4?+eFm+siMLGG$8ZgiEH6eVS+T{s*HRuMB!0=jVP-c zBRbqAtOWt#p$G0!gEbABbdbN7{j7}Fk3UY8Zr5LH*|qMW2QQp*GU@J15K6cPn<1p> zdFP%jH}<$e6L20PGfd{v;@R%je;LO7_My;3_(R$lgUj|GGV~+tNZp8bqxHq?djAP6 zDONb4ytd{4CeKi&(mpUe>o$GnavgucLO?$0bah9agE%(1h_DH?pfL}qS;8>Lw>YEq z8LqmhfW;f06I-g|*YHX6i8|Vp-XDuJ4eHmEHf=6VGYiMY6<1t_1(hW2*SFnzbC8~W z*?>hLuq`>4Q=sJihmSwjTMeb~+@sNuPn+*EWx>iQ{?Rcnzg(P%a<=J@4PomZUV1qyy`M6 z_Vc@IT4dB#p}~!g9j^=pE*hYsWpXZ{(;e>pGnl(~DmGRT~uxuZhHl#CHq-Ef`> z%=YJD$FNCGf#Q$(DFBQa`!yK;#Tu0v>XciMKdd(?iq}%haV&sL>i7whg%;)LXekb7hSX{zKP+6mUa|C- z@Pqd4`0oVgZxmLws#T?W<+3t#$S`HfS>GXezxB4eq0SeWv)_naD&lS*G5hG#XvI@~ zpOK=+9gDcEYK)>{<+Id~gAKsd%hw|==u%XX{N}qKaTs&1;>k2@>-7+9$<*C*M_0M+ z&IeTJ;;JTvfC?2(!0sA%21Jcwka4H02jTgHp>GR~VvsSX5s7ooZHAqiuazFR-FgGm z@>=RHCe{7E{q{Q*3fo-PTJzI7UbU(xsntOSP!K&AhEm8_PM|f=Zai2&zOgMBDKA(HGubhJ&BxBym zHf`M+?4oI+_#d`^;4;a-|0U__E`=_fjgx!s?X6>k6BgU=!{MW`TLHlq#9_OU0b##g z0S5lfH{XF^mZYo5ylbs)_0oc~Nvb}|6{R=dd>h3q3z-+H_1$&X{jvs3Xm<2>!kIZ^ zg)&QQ=VJ>W6V{RV1$|)|4AZ=$I~l81{S5;wFUk3hsv})VwZeD%?f0nh7zzc%anz{K zr0aDzs@h&Ys0l7yvMQ)5{!X7h1FFMapzan3bBv%>#s9$=1qBj1mUTV^pSUCDw4aRT*=TE5cwYs#ujQaF*%|bfQpF2t3 zg#|*4|9 zCVV$R2K4V6F4P2grNqz0RkaO(1JySdE?5k;?N<6uYqeBK=FUIP8|stq3}YNGmcOj^ zrMO3Kp6>Xv9)y*evpHko!iAvgA98m6COTh{A!i(a-1Xty#WtcE;OyCR(6?X!2(T?b zH;ygR3)GCU>}wDv(oU$bqppr=!sCKlF=!?*E$i^{Cu7t&4$jf)q80JvkAfWMIEJ$f`*Bf?I8o4;H}5xH zP%#|r$-D2Kd39uX-yG8h`2)j3JfzO?U@+ZXC*sKYL*uZ}z`B!$q@~f2@JO@u>jM>7 zrlpY2`IGYs-O{B2Q^fo@_p12f9EP?J$2oClpC?SVAJcG-AYB+n$GL~)a7T)2w6kZ= z)tz_>Uv$LjCw$+3{&_0$FVOjmZD?bO^zL@?e*=xj{O#zf83&nC2X442}DCGBhOK&@|)=TDQIgM`$ii=AAG; z4`-({D2Yb~r%2&IRfZL|$!m8i&y`?K%&wz~STHdL4b!E|ReI*(igsP}ObF9{{)j*G(79YKw1~8Sg~BF>c=pi#aN38y+Wlk73R-VrpYnK zRndTNd=5F2DBfRQ}Z{M~h%&DKILRy(J zrE!+2wKQmO4y-?3F4bx`mVQqUP-`**_ciG7)YC8NN0`Fft1l10&fdomU@npi8n=*} z?|2;6Y}zPO$HBAupN)DS6;~~22K|gP8q0-fi#zUm02VBZ5~Q|K#flZ=s&>s_S+bte zt3gv-v^V4loaL&nX=>G~i8FKcpypXs&r{hhmwos_oF^OElyZhlDbo;c&2=F+rD1GL%28sDOMGqnGcQntzk(ysm0 z(zsPuRqw1(<790!erzjOK1tJB`CRpW>Z$&E_N;atSfZQs6I8N#>4%-nEmvti8uq#j z9rlT~Q~ib)E2GQZKJK8gU1`#tg59-Udq4#;7&~TZ^OREpIi~)mhFZWK5ejX{f@O;i&YC(@!gcKTB4)G$(_StfqGQ z>8Ht?uRH;!?ks7JIiysndKd%Q#(!SjlYQd3#6#BS8;5v>OGJ~WM zcl&0{_)?yHdZ6~{vl}!=yHwQs|Con@0PDit{Ca5HDyKG53yeKMJ38LE_T-Zft98e- z>NS#!o41j>9(WqNFc<2g#YrcfguBVQWA3VhK6wRpmqtnDYNy*&qcGC?V{nnrn3f>BZ z2Td0rQsch*28$#2>$tRU_LpPE;*!sM^xI}I`D7ozw0$q^5a*ZE>R+kX5OD0h^wO)S z-#40+{gP^!6bgAc`{W;glJ^G>hXu>N8pcGtQsUUMr^{t+uZ6I7T4)`UakFtnzzyAd zp}l(R*+nk&&{==wSbgxp$E8lS60o-WEY!fC4{6G4Jt|gjAh!Vb8nqi?;ps!o%N<=? zv~lUo>qm+dIaPYxbf+}LLewY7Pe;LsmV}9mISO1Cx9p$-5*KnFee5ap?N|ip2Nn#_fq$) zMso5Qt>n(zy6B=Gap9OFAOGRdSLB^{N8oJq#o)y*kXK)QT^e0*o}$aXZ16G?{{sq} zRuC60UK(4tXvrR1lmemDVbuv%<^BPjWXmP^(5R&`d@w9o3@d9feE35PXN+z76=z=I;^naxmnZULmc9u0r+G2XvuH>{Dm4% zJZLEq%(W&XO^A={aN%wYtB9!A9L>XW3Ey>C`P6zZht(r1$LdJfq#sr-!z?(gueA8% zk3T|MFcLdAYU$5lFpT)Z1Ual7&V?1fg6?*MydT7zSoe!x(4I?H7sifO$fnTA+P^V=C&{_O!$Z=11{nJF*;eSb1gq*AXLO*47EOsW`vcq0 zb!?x-zyGf7z&^?HNjo<`>9%m;qOkvwM%ek#pIQB6+Y~8rN^I=7uM|At($Rva+lQhw zWjU+^`@ZXFy_0XW~CL!9qYnz!+b1@;}OP8)RO9N=$G!;GrXct;)nn0?!4vi*(8*|hhW!x>JTdI#>sX~lN!KbVuE2=ZtX(hG@cd@l=4|U%Uwxh2q>gWb zeBi;}>i_P$@0Ct4@S=WNlcf9Ni_x*mV9An>{e*crp6N*I%VAyjZCI|PGrZJ;KVaZv z=QnB|(t+u_Ue_Zwc<@k7GGxdHFDsje4O~V)mcXE$)f47SQdNe;lM&IaTO^H%gN(_Taw~g_2e_v3NI7W z>T>5UH)uYN*HdfPSNyP`pkWa9)M~DMLu}k>ptk z`D0&U-4gw*583k|uC_<*Af^EO7Wq2%O?4R7Hn!>K{6QWNJKWk285Zqx{N6$3TP=vk zr-c+SnCEbHsv|%t6NJQ>f{j>(4bJRf65lNc0;w7YRXJS8ofLCS!?Fq$DyTn(TNou~ z{^*Fya#)w+StnXUbDc@VeDZ=f{>&LHu0+#uhvCdKPfwvvMHMw}aaO7nSZX93gUOwZ zN+$*3%x`Cd2$yGqqR#Ts07AKPWx{CFab-TzBT5rmP2*Uqjm4Ojl7?ZZtTqYLR*woGz8tz8J4 zj_M><4-McSMqzW&`a&3v7aB7#g9br((4Pp8xbv)7)KL|(&!cw$kJ1`NoXzn)T0VD} z=&b&1_q5vH4wM>9s@)h3EsSci(J;4PxOuEx?xdD07pOHF9QVncLjKG}@uvEt?Zz<; zjkUOreVx0QuH!DikfHsd<{Ru5T7P3Z+E|FTx3x9l@SeKVa3(BXu$;(Qok=5?PNWgl zQeBsnv{|0*cQ7&)r@A%q60!wPVozg1*Dcp!sv1!DJXO9yiBv6LpE^HyV@S z&vmS$o1f&doEkHb`_j!(|PuH)s= z_z=P}WS}-iBSfTE&6=l%$=KhZuoZ`qKy?dI)@SC;hnU7j)SX%lAPPX2xDbBO z2C$loe$TlG3^a_dd@hea{*-WsmX6OsgC4;y+)$`upQS4I5UlhY!1kw>!s~C`A6h6q z_uTqw0H-Lv1zTXKiRWOgO$ZOgVwW0ciGc{u$Zdqds7{@(4Cit7E2@d#eRl`3xpBsf znexK(ufqcIG~G4b5z8U1S~ZuGsy3Ae?!Oy2!Q!nPEp4IFO^c{>T{?Hbv4Q7R6_EXt z^U-=32(o#d<+yV(H9v|SR|x8uGj$%HGiMHXkvwwB$tNp3o@34(=Pht0i*)aCC1_Iz zwA>-bgGadgjvm+{8-d;8i>&SRec8}dKN>a|3CaD-;?wiAKAE1hK8>eS6 z=xoAq(^}(Md5QdFR?dS7YlFf3{P;I%d_frIew_jxMjJ#pJRmWmKfUi(jthtH=A!RL2NH=mF+bCA9<(_6`C}aCL;EoenMeL?p0sjy z^(1WUq(R*?5H6V?cZ%tm!4OB3wmt@f@nPd7_BY9>P=i@P_L)p zLq~eCz2156BQ@|um1UmKoA%2bsdS<(7*IvI2vP_1vNmLXgUfTbbQJXHXjEtk&YQKp zA~1|X94TOPv2YlS5Mec0X-T1jjsh4~p0Tizl18?;$a82r_YIr_+Y*#Zy5+!P9xoI( zM?6_(P8b6+hZSzTu2WS-o{OY0rIk=gl&wp&d|lYcRtO6L$qN*DAaqe^vhrCMzFRvQ z4cKlB=XberqjRBVJXtPm(paz~Chab75emp`13O>L^W#7MI7P3#p;|Akl`h2Pt-;0V zqKj?E9Frd^kc)8+^Dmssttsc>sKBt{BjlXr^<>JlnQ~Q!c3Qo#zguMwk>^f$voYBz zt`*}%HzysyRPtVB~Dpxda_3GjLxW07`slN zJW_T_>((|onTAHwM*UH|cJjNh@ty+jNLi7jJ9(pJr+~Fn>L4J^JgJoL=5gOsDPo@m zrzk5G+^nz^X~RH!!7~AI+&n>aq>zZ0&{F2vIe{A=ZF@H^VR;U^_PWbFJELG(_vq=C zw?_ctnOr!0=iHju?fkJxPMczais$_A$VqzJ6b$rdvdkn$g|x*1o@S0@q!Se^|Z!{rzFl4 z%1G0CXP<>Lkp1=gi7C@&NUvMEhjntT5R=}mS~Z0b)n5At4PSBhJv$a|37)%@SGB(s zJ7U9iN3(IG^RR1tg3OpT55`nR0oO{QwuI3vMEnqXu{j|%lo_wokI+2L^yy5S8Vn!q zDd1AT9bfKyYH4%;yOD?ad$JJ@tVES4nyk{48nH5x9#*EVz(MWF{25uMhwUlgDd12b z;5D6qgYflGz%dZ&mfGU{{&kMX?V8E2BhFpDFTOyeDP zorl4)vY3ucG#$-!$8cfa!r@3)fDk{*IgsG-`Y(+7&cOwbM9o$gkg$t>24&0Q(GB7zyHE_y}lX0Rgq zknZrA`eY(HGb~V9O%@Qyz*`;oq>xC*ch-+8bmpp7sR9eOKdO2;jqz}&jhB$mo%5?E zVV+!2XAb$<+_~2^ zFj3yTDZ?t9aDq&m@(W=91!E&cRh5|6NPO|dm)e#TOmpz+m9Vk_&2r`DE?UsGY(JbG zGjG_xSf1shy77r8R)7WAht=Bd2`JZGHf@Ul)>&uPl^0)r4{FglbceJ=iQ;O_cG|RG zEVQzkbM_g*JuQb*1$|vS1v~|Ig90w2xEtB_Ytlmj$2dVUf}si6uidA( z?X=XYRZ~rPe+M)6<_u3-o`oR>W$rADX=sj~0uap$(-|!F;E$!{x!c!Ye@D)5SP#2p z!Ga!zH#**-_3_9ddJO^9=&tN=iQIB?4_xo?D69ZJr+38BB473D!TCO($6B&Zw z5*SvH3op7A2U3y7NwQ9&6sy4VI@q`n~O4*ankXK%P z9ankWg?j-TEA5z{=eb4<9~;tzVNu7+wXbY{iCU~3IB<~eq+N1pOQ{IBw1D~k;GqH| zBe)_aCbSw$XDWO~Q=Yq`+|!~}TeZSit8QZmbz8%;i!EC=(|aG=0M0enc88ESRkp92 zqxVX3$M3UGhpF{a7q`zxjR?a?KdNzm`|YQC-tCDe`oSvi^LplvX7nlaQ8n|&AI1Rx zH znw$m=>PwfaTSH*2t`}$DhAS|rV#qShaYUU}R2*Fsu7kS-cbDJ}gS%UBx8N4sVQ_bM z2*KUmAwY0M0qIpAHp(jhGz%HJ zMVxPBRdPuy(C96&27(HZ?9#-AtD`=%fb7FQ-k|JZzSq&bL@{lo{zG1YI@F((NjRXt zDFOQF*L<`Axh7%H3@}OL$D#&(#f!*;BE*y*r`RTpYMz7ZW@ZHS$TMvFElRR zCoxI*{1S=owVy@jVy&+kDUx89>1P%>o+-rCC?d}Xm2vZ9+X?<`Kk!~8GV1Y^F<8-aFpH4vEI$r|o=V0o`N5`qbk{ zX*oyX5{JHk!i`J`r}qvKKkS7}2g(g=s8M}w;?-JsX1V87^Omk>vkrY$(6YuS3msX= zO62^T^ebK`_w5+lT?N5vwlllAi&kJZWl?c&cpWpei)S{E)m^}G8VnY`=}A(l)l#AJ z@$S6<7d(K^8Y!|^`RlpT95)I8_~vGH6db}=f!Mc$Olc`pKg&lYl&pAxrp(~H!qjc? zntqL|i4r^=6KoX}4DH>r3P1Xb70&IQ!@@o$iAIG7%BCE@f_O(^DtF3tzOh>Cxg#Oy zlu@l*eHu7;O45}JP`V`8RWLYTX`JhUPAD-p$P5w~xV22)E@!t*Gjk)w*iFMg-=Renj*zrXR*7DYNNE!SO`|%J1PV493xOXyh zwwWS*dVu7-weqLgZOiB9e{>js@>K9FN%U5+ZNz%}N6T#!oaYH@T)B^Le(}dHl~Rkfmh{vOTI{Wwu|66G;wat zZmhRaz}G)D?9fO1dj9K1BZLwmCrDek%TGXLyfKxExw88o5G4n^{g+S{_PTi4op_=V zyE$lx+Xo5{rMDx&A>FJ)IzBTxq9d(%UAn+{p{Qk`&OWYmu1-6kSgjv)OMM@3S#d1C zZ52{_*XkOtz-C?^xb2ouNkAZ*tbOX%;_=G*ui)Hj@{A6N3+rFlGQy|2P!nhm?OrJM zBQVB8$$q5RNpu(XX;?j>bxp@yQhDQgv({nR$yGihNpeMRTRSj%7s<|Vqg&gjOMZ&m z8+Qzn^2Ixi);(Hy<}+x+)&#I3F_p93rpaOq0uT<{x5ZZqOGF7`f^py3QC1>8e?PIr zOk8m-g`nrE!vvaNF(AFG7k|&Bnk`^rS`wq0@H z8ND6MBX|YaALU7-4q8GUz?lCp3xI3)L!yl2U;ueO2f%>cBF3p2iiqnP{#G zhYxS6HXg8fy<2E6F{ho-t)BQ!Tf``qF}Y1zfxZq zt$XF?9S9EK|1J-vCcFpZDm$aD^)h6jtjrWEM~IYzy&4kRjdU@m@`CgK-cSrkG+ua( zD7J$kNG31VR5(NSHva~x>dz~MZEN0OW(!7}zK-nFYp)~cWPA%$VtAdZU8}b9xYlj2 z*9q22KDU95;8Av73o7E4b9flm6zJGz*W?X`ArMf9fEHsZhNTU6mtW<8eyg{{Qx+k2 zZQy_p4c1Wj6J^5|xcwvr)Ib42I1aYp$!WT8X1u_MeV;;gq4Auly?i;=BW-XH0ELY!e z9f7j|7TdBn)gNM6-zV;Ml{O6+`S+I#2akJc_^)OlhKjE-0Gc#$Ne%KTAFUD$re?i` z>wBwpL6H;~Y2f}5Huy|cMfRBX_PquRbR)Ck?{cEahq^6`43ZBObwA$^TKtA^E@L#| zuj-T5q8|uxT_G4FH<5AoO5R#sNXg(*tkLf`eL{5yMd73E?Mob)soS$l$47`X0Noh; zSO#98`}*I3rc6@!z0nDcOQ6vWUW>|G3lFoShPD$z(28sd{s&0p+wkQ^7X$|efdO+c z{wA|!CNa5GXbY>}i^3aRI~i86JhQ#Fw)Ze5X58pGor9c?$lFSh4_c&1Cr{7CNQmu) zXnO4OR%21Vv3hB>$mmvlZ?e(aFMu!n!uS+H{gTFZW?%ZGKQnIrj}`>t1(CxSOc87~ zsezk=Yeal2XuSHF{{D%~H@$!u(rl39vAxxO+;anI$PMVIiHsR4AEJ*rHh~@$$o4bPm4ATv^r7 z+XYYv{QV!t3AE}E7)rO;?KcO@K7uDr{%^tAqKPAdx1Zqn7{bXDi;5Y5Vpgd$z%rk_ zOFEtXkEhj!QNvB%h)0ouu;wvvLoJhvQ?xHda4Px_f%T9D`W7k~xU)glgeRKwl$ZC? zj^qSBaR2-7-=Ul@RMVFQSa5A!Te9#J6m6fo2BDoK8KKa|v0nr5jjrP@Pcn z7YXgr35NklF5edNlrKprH~&t+_YGCICCgI}Kn)tG4n~y|_FERv%9;SaEk1_N^)n&e z2}>$DafDFH+k5$cHx^0{rQ7?Boc60}k^A+25nA20m!@w!q4O!R;N5wfm$2yIBI=)X#~!6l#eypFS9b; z-MdlTjvC=;!G+jN86Y#nuop85hCl>;@j4T@*e^xRBgYEnPl*eRowGvOTH^7WQOCoJyM7%n$4nRAd9m zvlyR4-1Pl|>oqL1=dxz3+814CVKhhW#E>TW`$V&xB8WSR#dpx_a9pw}^mt~brRKz+ zaI0J|YOCXpVdTD~e0!4w*g!V4&vh}CXE$rM{r%ZAaI|@v#+!^vVIK=GkOygTY4?yEmRWiSz(^gh87}TqsVv6$%i9C_TV@ zxilh+c!zIX!NChB4vgdx6+QR-`|mH$oHu-fmw=R56s(og4T;K#g$P!kb*yH+smrRHmQYvZ)M-m~6*a?+ig4^~>Eza=FPc+8Rs?!uDuoVw0>DY(9VBM^7v15sGE60+L*W{lnL- zW~+JH=l91ii|h_k@!Uv?9hIDR8}z4()hMqQ0{+<&wKTu|0#B7+*3$Oe@RWYbDz5D5 zevJQPxq(IsTj#;#Vy*giF;DD!taS*8=QH6>WVL9!TqiyX{|xZ1&?O4k)V-NK+e8#p zeyMN_uCQr3)7pPZ7&=!9#HlTsOrr^eK}nX+#&;NtTXEOHR4ts zfbZiBGLlmqTzqG#PVNu#Hc!hO{9*x6>-d=5Q2Qd~!nSSc;Kne;i|kfBu)bah0R2R? zx3{P4TxhRl2kv}tu<&>Nyv*#Rk2U2+hJV+20S7fS|D{NmOGqE1xQ-m6hKdmm3>gha zr+zNIz*0~2e49c+Jj8sb3Vh;Bi`vRrtlOtEojqX4Sm4icSRXx$IC|XChZ*Ghx!DC# zXTKc_9|)Ad>B;afC!k`?t*SF34&yNBN-PDwJ=G2xt+||XNd?PrY(EC&+HKvS2(DTF z5){1H=Q1@!GcYhnXK{-8{{8pt4MbIVziV?-@#tpdTN1>@MrX0T+?&&(52Z*@gX6`T zNANgL+YHQ?%M4h-i5s1fpay#Cb@DCio1|mM?LP5$DsO86Z?1hK$VYo1$T&~>(gtF8 zsHsFfzp6sJQF|8^xqmEoSQ3K&4KQk3TE8=cJ588Elg~C@&L^jTu{ETahM2KYwqbXQ zQh|PIj{uIkn+BH1EDwb2c}&HDI8w;wA+J9iQ|S%aEQ%>202`p5#iKHL3!(!!%T=vvuk&5 zjmY+KK!}@OP<5Co02H=EvZrh`ut8kHdEzqex!Ccdn zYYhdxKMMm)Z`Z|%i=D3LZBh7w(rqr6l>A-~$(>%0G%<*Z*RAAoP|PxginZ}xn|UfZ z2VTAoLMHfb&oh+i0#02-mWtgy{t)FDa?l|$Wq*4`CBE&-LC#KNL;|T5a~34>iTgFF zPIJ|wE%DNT3jh=Sqd8)GjvV6V!H|beducQ(nO_c1y9fs_il_n2kBcXgnitIS?@#O= z>2)^iZK5$m+$RC%edCGOa{PMnZ~A=my*;K$PKT4DzXxQKrT3b93o*HJM$AqO2gEml zfqS6Z3B=~=sO-snDRPnmv5?4@nsfN`K=nF?Iz$ZB0x}`mX|CR<=D2Ce=09b3I zA96ENRqGT-uZ6fK#kl(tN>;BdByHj;q)DXldR=5WpH8o;0SC*~Zh6D8Cnb$C?}`YZ zWBL{A^WxutIE$V13c5V$Zgf7VMBU+%<{68pBlbLj2u<@h$)}WRBYP*4j%jsib?GhG zzql`E&Ep_Nh>O{tZ-z;GlMtPJKM1fi*N$A$n!9H614vK#b*cOppP zFdf0j7`sEU_BPKpm~O1MQK%1P>hiAVm;bOyjo6o!jUy4}>!TV^^UPpBIQ~*4zl`+p z#BOTdM$!XkbQ`AX^~h@0}pvqb;3CRfs{KW-u6){p$_(@Xuo;n zIG#AG$u}w(WP+Ip-oqu0n}Kc={7c4KN6Ct#NNlG4BWVNaOjc55ZZ$vX_)F;BDB%!N z(HB+b<8}m9?2zi|g1mNbPHQRwdnHZ^S{&YDDoRL-}zZqWijat_HcLs6GL1H=w!SG zug8mFu1%Ak+II&Eo3!unm%V|Tdmz9Z8nuEACe<)W-5BWdJS)edY$#`Lrw*nN6I^7| zn7ddFqR^@2KutKO(JgO|R)`bAVZU)r3#8&Hq<6&d7L(4m`z3q!ap&&_Vu=-h48;`E zp@MkBiCRwTVW}DfCiI4yiL$yqNC>1MV?>0j>EI{n_2#uG%mow*SvX!YB9`170iY&d ze2wopAZxxnq&`wT5xDR>=b-HUOx3ChsW-h=M>WmO9$|3V8478?NBg5Flcw&tVhiJx zPezMS_xtPcazOEc$@_~u8k-q=_^pdggONyKWEAd`XIA@-H!jyo|oT*LQ~^ zsi%L7-y0|JyBVr{cuh?a3Iat=Ga&EH+Gklhe(e81n~Q}zd|YpLQ(CMq+m??b>GHl; zlhe@cs(CB$w?{=(DUzyc5M?-RbHO(mU#YA!9%8%>sQFYIOH1HUqiyha+C&~zG&(<; z-j#XP*EcX$>XH3Mk@i68O}DPw4HUg4kEWJQQ8lWKDu8(4pIOJ9atqrcr4WxWkwdQB zgL;qrO5Vndl5zR`h_s;CQ``L z_f9Dkoe|Un9#9o4nsJGr$ECv~l_m}NUJu~we{x9Fo7_w=g{Uf;~}9&8Uu z`Mivs5ePsazTJ#cTCR7YxMvuTKOs)tNML4-&R&_B_6IpuweT2s`i6q~+P(LoO^;f-P1i%t6DZgK3q8W-<45kSkh?&ct}~z9sbBW9>e1e+lskT9pwjNJ}Qo~ zl*BSMIy$G3=+@mq`GmmG7#Vivkln$Uc+t>@@YK}QjKqOhY?X&gLCD@~f7Ut}6vC9I zb6}i{HJ0?%R&V?Tvs{(7Y=lWTJ5$w&+xd)su(Y*@Uf7M-a;tUo9-X$V4CVwy7k0H& z8~bpfZ6=lobneOFs@p~D6~Fa@?(;>vgmR-cOT`xbhfWgcPw(B5dRDtO0LfQM(jSRBUP7OS*Nlm-+DV+AR{HgEu z4(0J&Ub4x^U3AJE^IFlH+05^))!(LG9#2Pb(0=weN8857^Y!Q}{FuLaNdB(5T9SZB zcMSLVO<;QBNlUdqMvmFKSk2~yFyG)Fiz!DzQI6%#Ii}8n%@U={R1wH%*U#QZTD@uo zcAMN^E}aMT>8>n|{K8?)m69@kD%<7lF(>9QvscP$*Q@+YC2Ga(eOEA7rKL5J%y5pz zQ{l4YyY;K#a!GW@a|o<*J=7lctGiuQ03Ghrf-UdpqUIXF;U;UYLP-g#m_esWrVwwO zLh@h^wN6yX{SE%zq5ZAJK1B9QK1l|PC>|!CW-$l~Gg>m8C?r{Hx;g=IqZj;RrcRBG z9$YsW)J-Xh^N_M!k1d69hXS8Sql^(;x@|>I0caeb3)A z6R2XC7^WY83`XUFe}Y@+9ZuxXa@nmV6pgP+-OLXDE%%+Fnh+0i1qX5T1VyX4s%p2#tYCNs<*}{U&yUl zwdQqyMh%y>q_{vfRo!w!24W&hs?Zk(!pyNgmlN6s@okgY5ZC&{&a{TDiRB6lQPV^G zW_44I9-dN+470BVDG;GIu%{nC62Qoputc+#E!-IYON&W|Tzk)P0U{D2^$m!f_ z@i;}ce*z*0Kvn$wm=jxVz9iw=((L+?3_d9WeUV=7(q6#o7>)q%G~wa0K&VOfKHRm z>{DD5At8^e%UXwrY`51V?$#I4^2@h8-}6g+o`>_*%bVN#&aD#l&Y0c3VHHq^2wd_M zSg*oqAf}CEUqLznokr#Kl~Vp74;sbrkzdMRuJ3-4@FFR{Q=-tt-X-(Zi!BHxbfequXvBPf?e2*0LMMr zv!w>hNC_j}M(fRG7Uw0Y_l@pPk{bq)=IfDh<)t+reFa6XF(eOyhgP-XAdSx>11Jjk za7TAu;To#h&c~>ZxTK;CR2tlS;acz-_@l{; z+MxF_DpzC~lb=XSuF3v|v{*D?zihN#feTAlZEs08z0n}b@TtNZe)!m0GW z8gAqt_+J(7;ggBka~S16;}fFBZZ1uwsj4EOyyJ0{F$un*s(Bl&7|Vsn^zG4qeQD08C4XMfq5l%pfcWf(JwZ&y1Kd_>My79fmAVHz9{|3sYdDh(Sa9g=6R|Ste^e|C6NqHTy!O`+Gc^Y&t9Dd_lOfcR3bP4S2V|Fz~>nA$DGI z{*6*$uW*Hf`3f)Ro04~Ww_$A(y%s_FIcWnj4xd{6boC_)vx=8L=DiN{Xd4wvez1}Y zL*BHi)xcmsvmQ_BO6JY}sD*aM!!$cHdjllR_f`}e)0VNYhk~3Fv zAINU=UE^8;y=^nkHZ1JnVy>3Z(e=m(gD)*`MH$vyJLi|MCH!%DkzYY50e9Ug@v)z2 zA)K~_1#uP~xq@+6gXM0?L(ocfJUMiEEB0f^^n8hu{OoK&OV+h@>6$A;Lf;Kc=|=d94I2uw6u6DF8UAl1E9)7%fyNsmbdQ3j!%n6|(Rm462TD zs8ZrDj^d4Xpl*i&Qmf5wD1tm#9M*eXqzi!;ig(RnU;Ab4xBNnx5sA5_)fw>e&d07m zMB=|QxjUul-@4&8Ed)uHM2rcbRx;tWeVgp)EDEKn33;1BTNTboz>VyZvHmQrX)~8acAZvAosg?=y zUGkEqPl7QzW8u^JI&l?^)et0fb@eLE$`yXQsOTPisG#kM`}0F4Tn!&?-YTbd;|0n2id(SS(w9cv z?c=b5^?li9!%?9h+=z57LIzzcOyg)eM!*-mw|8z(bshTh>sXEJo3|LNsnoW}ju$q} z5?Q{Y6Pc7|1|Rc-XBvX92M-w(dBsu-BxLbsu4fruFw#%C!{cy|n?fa0B;`6zv~9Cd zeWBQ>;_zAjz|aDN?%o;SD>3PuKRPQ7R`kntrfR^1K&4+o)k}$>4fBslRq(|eQmiw` zvHS!|*@`HvTX$GYORF=sJY(*^Z%)LRgz0aRvAIUE(unVaGKugId>s(7QYS+y?;Twc zB@m?PoEHw;T__8|F+mb$C!HP^HKbQP3sTu&y~_k`@7!tDs{5RNaxa3UFcP) zslKq!ax&zJ7ZU$R(T#Y_CNF?n?J1xrf>JFnI*NZ?cJCdsm{I`YU2gS=@&Ue%Zvq{I z&~s)xz5cK_PEuXX@$n}IyWm10^j>vf`X{RA)m>IqO_iNG5 zUC18TU(z#7j}Yhn{7%&Z5QUe&9MCp-i=2NHJCmT z{}V8vZ4D@kw_6bEVCo&UCzB3uki~+uie!m^m}1V&C;( zA0zBp!E=_{-eT*|U6W&|zbt+;IX=4hD@f ztl2ySrKG6vYhG81A{oN=F=KNaUiZoBu?ng9{l%pj|~Jn#d&rh zS^564inEoqv)7&%pBxY@`;SPji*TsN)0~)KYIXdB`!S+gs~s!!fdP`KOT1-DCg;c1 z);24K*%QC-(eGox5YV50C%0S$EGm%}x2e8MgT#+gg90dZ_y!(8fXj2b_A?EGEDn)m zH8kUkkGaC%%rRMzQ=c>+KJX)RJ^`>QxUS5%Txn?qBc8+3=y|E-|y_B+N&^K(8-&D;^QO zChD1G8{OLa4|bNhEU`Zuq&zYoZ^k|}-qT83td|wVr3mjOP}0e)>CQHrSbbyU17Hr= zh_AALO9a4-6&T?B9TlbD&3sIEN2C*|Z1Lu4Ymq0FxOfJu^(*1ozlisI+5EGSem&Eu z!-Okf^JRokHGO)jr*$~j67fS+gxB@%2+q?|SAgaU6}a~|UNww40CF|irC^ukx1|bo zFjm0pSyo>PG)dNqJZo>>uYr8d?YYufz)h zG=JaVZC3fY%8K7+BC8mj-!fhsNd@S7JCzqudJ)pl;4&+NIprP}z|9>Kfcr@4;pHU_ zieTdVjuG`#bTYyBtMxl0tiBTqqmp=Au^R^%9e}aM=JKhGBjX;Iap1{hYbO_q-wwh% zjV{=>!A$qa=L%GguzE=!ma{{q#SWxA&wExH#)r} zf!w~!;xNpOkRMJhN5Q5$aDh&Ta`S=AC2->@4Ac(@7ZB@3QxAs%RQVtoB$14Ak+YFj zq^P9SE@q8gq}SU~(!n&BW--ZBK)f0LTy;MCpaA^HjQarz;sL+Yix|NdNBJ0HUjL5z zk~mpDr)x@sjWb5?1S-s2ptc?S#F>Ev!bBVDp)TU@aqdSW%)W3rI*{iAeLCAQncUrx z(tQsSRscBbXz3+Rz5B1&d57s>V=SSv-8|O8_@>Dp!U2qc7gj=SI-u{x9Ha_PK4-Po zY=|eSqY1 z<_#|XSv;d#pV^gb+kds3I~-=Gwc^R)iQd5;I>a=OZ~@&U5j>XAxNiNsBJA(tqSDcA%cw435XsoH52IXS@+(ba2YgV zx`H1$ z&j{jG%>Hu)oa1~C&Q_~7LC|ZO3R4C)P&*{DhY5;~CnesraM#j-E`@2%^Colb4OJI` z+3A1)*mY2Go;Zu5{Lg>th4LDD-dK}#-eF=nayNZ_sbC&$rxTev zJ3Eu8nt!fWg=So#!diLrxSo}*kl5MT4J*jgXR*{GLYe`4-|ju*5Z;#;0n&9$aUb~e z&6xV&Gd$CX&gEbZbyD~oBDlw&7RaVtU&%+NbX>@6$ zpYE3*qFDe>VJJWbRW84my1Na-u3ne7IM0{dvq1f$&ExPCV!M&AU1C1&Qg~%7_V8Xzes4yAk zIRmkDrxX)w7T4YTlOWr1o1Ky@F_X?(8#^CNx2rin&f)lmgXCOoW|PG53KGN0?XQ?> zrM8lcQS7Wggk%jm`d#H;fh}=^N}eEk7TxW{ zibKA^-aU*$CS50Ep_+u(^`iIK=6p^p{J@OEiX*iGaBe$xWYl)}O)Si?N`l&cLmGqk zK?4nGXbpcT`HDv6#Sle}=6E9?%kW~}M;TP%TlmHfwbIxgoW!7kG-hB$iSyi7%4rIj zQ4=rSj0OS#-gR!xsecFT(F!0B#YJF_lrhg#OCqGfNu>T<_Z;bZ4>f(Rg92zd#2yS8 zFHdH1SD(kzX&~eB|D;tweIwEi!9g`-vLYa_x!L0!)N1bP%1{~4=~f12vCTDxmRvl} z*VcW9qW-op2p8Vp73O`RtZZCO0yD$y_ zt25Le56l3$Q{Mi5%e*fb8IWB#DeMH5^k%L=wpCl2k7SN}N0v+IDE)=o!h2I63}xIT ziTqZ7zR;+2VJT4Y6(hd)fOVR}#jqAGL?N<{+MEcjnBZl!#(&&klm)cV8JS@rJ!;>_ zb@{-Qkq8@Ij)m)?3SFG~=mC~Q68;=1=^lDllF&X6T zK3`|-PA zB2LjtgNZ?>`Fx>M{&<#qTmrY*vDF6EkIir@tMYEh`FeLKu}@s~RL_>cFxt3#&oYp` zwxEXBQ_SElly)goT?$60X<2hC?flO`m{V5^CmE%j627Y6;Az-a55~N@Lp9!LHi`dj zfq0+!E0NzrW&UQ5mkf%u!`vZHB) zwav^0O_rmyB&o;oNFb|siBoSFu)yG=zrb*u-vk5Id@QT-^>ap8l;33q5q5+UlZ9-e!@Rh5gxKq_Iy=7)CV&Okf+q6%~dM3S)WxF@B zlZ&*d7DDgd@?tFEcKIN?Dw*M^HlE(A5-~{2N?U1Gsi+^!J-wX1_SI8GF-toIjS9LA zasC!Gdd8mQUmyD5+|4Lv1x9sfDlWtuQyvO@FYWS0T;fE;hd49$t$zIya&^h@D|=NC z7Q&$hr^9plTNaFxG#>jJB-E(sx+9xqpM9!&1wn(}9)4tU30a{mmS4hFLe3hW>zz>N zL-71I&I@-tlRHRtE0wYQr#FZCQ0CN2Jv|T%bpV2_MC<1I8mxYseY=;&kO%DgC$)mB z$sY^wKkg=CqM^u@z%^shan(E#D0`C^ATGN*J96Mrl^M?(Ti-jSfPjM@RKD1FAV~|E zqA;z)Z?TcJ@Aa++h%tUc8_1yjBQCoI&VwC)U+oDY2ScOKISDg`e1eqKLPe1rY&x7m z5+bkXUD|C`Wmx>(1bv34Lk&6UcXaW3R@PR_nF4j_fDa1Jj405zLMwKdnw}>EBEkRA z$I#@LrX4)~^xFlQu@(w3_ixTxK9hhb(qI~%3*KEB{zm7qKsR_6J1g9heKI1;DpO?P zo?$!BIf370Cn?8>PQ5LBSQymB(p6d9d6phu%y7VM`XCvLwjjsYCvydv@<`UG27ENt zw^b2Lo>`s@>vI7PB1{X&;Nt`iGSL)-xGFRKi&HuF2561A6?CiF2l*A~meF|hUG?Xs z``a6&Go%i}A@hKZOlOer$O3An)N;F2r8t@Bo5}Qb*Eb>@Fp;@_cErlGIxC89;_}V? zQ4RKWggY?ewRW*AW`ic|Mxl<#7_W+Nu<@KNL)1X;HENj8P{W*3!rxd)FaUy(W70-_ zMA?W_H21}f;m8L2y(6XThntx|U4<+@n)rONloG&QPz+Tr3^I{(-=B>>v0vsynxYvd zo#`+rE6g!&G1+~@yWi=|jzS^{0l`YE{s@@r66qO#=}M}bo3SmPk#j6bf((M~8wtHS zp+{5XM;jUB(xrVvr-n*uqmXC0A6PC1*th4VlxF)o6AB!5wHs`T8@`vTyJ+Y(eV+3+ zH|mla&d5rRZ-XRZ^I7q3&GA*y#v4IC2tF|fh#jBNUgH*=OTIl)u<4`1nv8|$4Wpdc_Q+1P6al$oF-99pwHy$>L`ap+=3KJ z0R)@b)i2cg#mGn&$?1huzf-BH9BSEv4utr9cd)^?Zzlt7DpOIHZar`gGI@T^6Kzu! zEJTC6Oj8K2wO<)=hyD~2j|v;5Hyq>|@r8lq zT^jWJ;pYwWOnAddu=+Gq+xu2~nf@Uuc>D9-O_FjK>JP3aSh)4jvz>7d&%yM_{#_}X zOgTvHG7r%hM%bS^#rHY3Tz^AX@x25x0!E-`EMFavODCZQDqUWox{<7RybC#MHyB>3 zSh|_C`l71~y+52S)1C9&^$65Z^0a7wMY#Q^isQiJ; z&dgoPBASGdAkv@C5>|0UUFP&v0vFum%g6qnjzwS|;9pnz|GfMdFvZFC4J`IOUa#{! zpY3+OXt`s$uohYu-0-KCctm*!4VhM*V169y?-aPJZ)@Ja<@9}Qczc+W$ho=SGv8_r zjc=vemGl46)03xMX+_!D97T5nav>bbV;nVkoN)2{B)mP`8EPMqOSt(X#%6c%x?1Cq z*kHM+lJd?j3Wbs49~ICDyx3>oKUBF5MIHalSxYD!bw*iU9XZhlKH4cVR{}o)VdC1`#&HbS)oygbXODO{g zZ{0}GerMFT2b+3A@4DwF+05CQx+DO>n#-8d;TTD7;;0z)H9@4X1?JcFK|fw-8?Z4# z@`p!3Oo)$YTdFZW{`uZ+X2t8zN?_TKt-Zf+?>8KWAIRzlK3|1! ziFx1+ULZw#oSlo#GGHD8(%Q6c4b#HSbEpik5mQD{a{O)k{7Ct~PIW2-nclEDq%Wv! zEVR(KeZ`Yo*4=mPC*01cYdaiZe!RPLa{DNBvV$2^(|xIIN`IN!?5SOt3__3D8LrgR z#Cp8ZneA45t~`E1?y;NtI%)(m9DQTk_tkkvB$9$`ftr9??0kEB2qI3@9}NbKg#s7s z5*LE5SChu4_+uXwVdZ5bFoFxb2Xv?W1O}~Cn9~JZ8u~^Pskzb|%za4+cEOdY4hC42 z>ecT6lvZ-6CWv2J)NiiM>l2yNl92OxU8!j21a_LwrFu_pq&# z$cyvdma&|7$=O82t4Vm-O*KYupDecL8bs%{%aOX%b_1Q(lK^INAzT9HsG4W@ z1{Fl7Nl7;MN#Z^ddVRhwSZpN~*-^fRDnIcz<^G8kmHJ}$Ji(8zheP%_5!{`#oqR_xwP6+5v$HZ^+&Yi%!PYcnD{17bS`GYSOs6~Dde~-hR;C?)ol%W> zvmrT%n-8>lY65X`x4r8K__i!|{?H^KYP*vE#ZUVa>o4vdN7cf$P0^50YrhWn*aprY zQLk~WUucxx>Zj7=EnoV*s^kJjx6`vyA9|w!4u#%vAzCpJJGY4FuK7Q$9w&%1inEnw zHmJ(h_5V(Mnu1AIM?*KP5Zjo6#42Ki+9uwSogH&f<+ zTXjd3;{i<}u#0L=&nu7aafE=Q!SAlYsRgfXkJ;7@K$&g_80)6!PExZ=MzTEA5(ahJM7GbGqj zyjtaC5{cyvOONxRZN}2Bmv%jrS|+E1GM^5fIo+w&fGapP9EO}oZ}==dEU^-^~ zBo1q{-pHG6XXBXdaioE=8wAICQac5&G}*<2%zaqn8e_{F3gb zXk^E5x|%uQ=e2tb_kkY|ek81EhQ=cO7Dyb&eAr<6%cp~yLvil!4Nx!#aoE8hoUl=O zV`I(ybPApJ(rA)kHTj-w!y~GOn|q;?ouC~zbaJiL@ox)Uz4PUdA7^ZAedA5%y!Om+ zjNC(AeDJ0kj0OWltx~jpEQF5(*YFVfpS_7l9X?4|U?96+7spF_g3UNws|vMBg@ zSARMOoy;Z^-$NC5iTaNd=*(T$Zc{{q7eSS?Bg(^6rPw5zMC;D+;fA$YJSZ>h)_g9& z183SP=F-JlWQ*B3&ly9QB^mczsL-!jtqlekSp2HBZ8Nt_CYhO)g7N0ZYdzj!$n8nUX zANnj{MIEr>#+wxYEDs?@>Jrb`#Y6|GMpXO{=@pO*sUrF&dxXgiY2EZV(nUje0^A7% z`jBQ0?ExqpJhG`(J@??Zo7xnjik=)&2MqwEIgj6Tmj0nrATKx-R?`=W*;{7+!Ev7B zWQe;hFiw!Zr58-bT#aNjjivL-6N%?S3j{d|qPw6xBcwB^LS$4jDBXTbXLW&|$(gmY zLe|0(4FpMTRK_uxb`OTDLAvt9;7E0$Ux<0vt&>0Z{?-C&%gNZ)r)y#z5UQHKA?dE6 z65;f}GVFQ`OnI$;$HeRcDdkE+nQZ&?I2-1UK;mSOgaj@i>y~2T10r;nxfB9EcfZ(A zQt~t=CcCZo&M}vWakhQ)`|(_1sH{5&VD9fj?7t+E4(@^6 z!^7jai_WUsf>H9|li5)wNrbvS!BAd zo6Z!JdY&+lQ}kmZF8?w@AgZVz+-$OisS;X_KtG5%9oTBLQXdj%B4tHzLuj&EmK(=7 z9Mg%C9h5yfZk7|Xoo~Cx&$}Oi(}lfCCMq@q(k0WSE_xC6?*?fvcFA-<$w}T$)*6SL zmKIldO_K#1X0)Q?^mBj;B6S+K3mZ>y2>x#s*Ld(3NbL^0Z55iKuS5~Et<^l9#T-y%&CnAE z2^|Uv>yL*;n23E!c=bWp{)W$swE#O9gMLQ|yg`ul$a(4*@ZZoF8utwLm`8wRYjI!Q z9_@XL?`to!RD@(yU1Iv*=slVL@HGreQFnu*8+)5%?Lv#Nwbkj5tdG?6-% z#JKNxCDCkAahn&rnp2#~iax(RUMz)A^aa9@4ul=XS2xqol7k>--}E6(AaYdA-Yh}e ztcQ%eK^#r!P)Mh_By4akj><|Vfry|4S-|OqF})1|6UhHu2Rx9DD!T>y-q1rPIu33A z|L5n)90w0Pt1-kS}gvI_@6o8wn58Hdg87l@P^&Az>ekhGeBx1i9Dm>k~yw#1zP zt=C=w8Uax{X9h9TQK?!@`z2{US*2N9t_FEgF~7z2M6nyWR2Khgr}t?=3_OWbKSMsvZX)MIynsvG4B20A6F-rt7Nf=W19OStTE!Ie&GyLg%r<^Kh3j4KN|3sZfInJBqgzfooZv8~$4oFL~A1xeHt?ww+%J(33RR7B_bWVs1=8bhtjPPXV zpBrqxo{bX>UZnFZ;C?lvBmK3By$S=UU!fRsK(SOI+<+KJt2f&CL7$vQXY~KK(*qu? z!j4;VoxXPFF!h^XvKCAh+~r+O9$l~h#{zic+Ox|jP7j@fxZ58gbvm0*I$bD}SfENQ zknelN@xI;`SP+xv5)tj`fkv8_I58T=xqT$;tGJong~y&X?=NV+Pl;Nk+7k?d&D9|D zZZg}@^w+IY9uMRw5UZ(GC>Va4Z8zfyg}f6co-UM**N7+Uoq2QwrpU3ir1pLDjBQyI zVtk6Cijc69uv}tt-C?v_OI8tYlUb7CNmdU;@I`tn#$$t(%(59wu;`r(Jty5CzAW(%fB(Ww?0c@c1DWf{Bjjbe_l z;QDU|2Mq@4_?wD)#!~@&;=;CF$2)HsDz`o-(7_!-Xk#+I7hlToMl0ea*awYxm zuFq=%Z%a|II8edgwv@O7Kj&J8U*p>R6U^U8?!Z-Yj-S(^p7ZMJXZ#n`Bh3fMj}sIY zu~1Z3@$qAMNAAYTsJ3pV4kK=xrOtTAi&^<-#iqfPKrjldXhHa(N^Up%KLN_RCrdUt z_m>+&AO9G1!cAYcJ1NsPZfcDt$;l8P7|pv}ZIW8ZBiyvxoV6yt@_IBG1OuU~4*G11 zU;;i=M5cGy7$uoSzVM>6yWAhj2%H7}VU6|IURyKo5pcWa3>`oP44##zFxG1pwMPhD ztT3n0D^L^+hKY`%8ZTGtDP!#yF3+EG^bwrKKkPxYqWug7fQyT5Nb z9I#ni!K&8Zp4@n|e|}bnfk;C@qhP52x1KI80At)s#h~X05fFir1^;!3hnf*i4?AT; zl*c#6*{5^RZ%6+7I_Eo$DN)PQnqtZv6Nms;c9s6B4NzH%!27;al>de&l*r=shzhDs zmN@e zSZf=xAV=Ap+)B&4O>Ux`ud%7c--JNUPwKYWH+f3P>`V%{dyblAc8uPi#o52}row8_ zAko7S@aktco=@Xc>qu1b1~?Kf&ymZrdT)38-7mWk)3l79WQDG=$;z`7(=ZK>Q?C~b z_YAQ2=5POJ%i22td~fi@*!c@Vu;`<&FN;sxJpm^uk7WKW3@e^@;>(xU(wp$nXp}z* z=`hKpOm_+w2O(g-54M-Z3?nU$QSHw}H{VxfMHm2U@)8Rg62UG5E4IF>mOiD=t|alW zhp8+RGFn6+bSv2Th2`p!VL~vtjjt<}%v0?M6hd$HHkq7e#oLDsQY?I@FA)CP^UWps z%Ij7UA!Rk!An*Ft-Qm`QP}f=Wf1ec~s3Qa`o47>|8h@qkf$YTqC;kZLyK2na7LLUF zp!Ag|{v9dxe7&Ou-vw1oM_)wVH^3tUIO9a;?r=Sm%#BLyM*ZHJQjUry{_L}@=MMC- zP<;OkO&sc8hI+VQ+d7s%g-n8b=KBar>KzM<5Es)ly1_aTHV z5$|v~Y9xR}#lorPNAA_cVc?TaL8;I9SQWoM-;(i}1JPdC-~%~Vrg@wAPcbCx2ZG++ ze3DAeWA`)Kk|XR>(a^N7{(nzDKov7gWBYnHS=K>k+7V{`z;<;h3(NcNfZ1KKTA+%& zfLafWNQuE)bk^w8{+v8bPSJ_JCjBgFS;$M3h&F7+&gV)9Wh`XZe zft)9l?$6WaT;ZDk5h2>@@goGRz-04&X#KL{+t%=NVnVBQeGLD30Ejf~;P*8&{#qN-m~CXIY08`3)@QWBUKz;Zp#snn6~DjE0C5UhLhsA4W{u8SlS8 z^fMQ0o2tzS@1`mNB;t?|nrr;O^9>t(31kFy2DkDMwX-8Qmn!Eu%rb)FWAXpH7~p#{ zTs}4{eEX7P;gbBH%ZR|c?vAa0fL4^(7M69@9Gq8J!ncQlEcn{V3Jk~e*rpn_vl%S& z{{NeLlYTdYvL;@@M9xq<*tn^il$8h2Q((O2(Dls^cvI6IMDjU%BEYGB`g>}VR_FUaP7E&)NQOK|Xisb(1=`{8RdqN`3bB^)JVH@W1=K(_&rEZvpD5 zEmm#tYLYD74%*T+~HgR={Ryr&F-$h-)z*LHc z8_GU@A*4*8clhzG0qpprD3Bfi?cO3F_#$8sl6+++$W+0sjK;ls!iGTmi}^Ww1JXsA$IG15B=w0D#M-C z|J3Zy+zh&}E!a@&76&t1@p6Y*)1QFTC6qz;aLHvtl5CTlYLE}3;tV;8sM(O&PZket zp3=1=65CZ(ni~-`>30@RZ+tfCNU_&LJTqTCd=~T&KGgd!ADQHXL|^ z*|)M#tKebKC}PgC2)%*K=Bp|gJsVl8kpJy7^!n~dx}vY-;-=Qzo47`5Y zlr?EB`tU)DwFRqeiG&1qN^>u+K7YJ1USHyrd>a&E7X(KlGgBY~@7>HCR*dkat9Lbr zmi5lMeJ=NIAHE)mFRt=)yFaes2F$4esUp-nSlz+C1kkAo_FaX{YN)W@~xd*eZtXhw{J!s zz`IP1#ZZ5S*cb5!50z&?p09~<0e|r57Qe)3Ol9NqeeOqBz>NF#b?9$s!pDv?V`R6_ z_9{FMcPYSeRVoFlYE@##AZE;Ms(=lYQpH*k(O2_Eja~VcH`45V&)&eq@?^!s*Yi!wNy!E9#wM_)7^2U%w) z=01?eG5cJk1vAD@E%n-Qk*-Ikb2nMsX5bFX32vyX6V}Le6W=@Oe0}w!{K$ zy)6y~)GE?pZ`FEz6!1^?MFeC4K&>sFPxg;wt_gd_`N`;N^JCRUic^to_N`l>k3^%s zrmGi2~cxGd@=zJBW_V`p!jQ&y4|% z3{tgf-S59N)o7y!@9LV2xr0r_vSlz$0K{CL6*91~tFFLIB}89czNCK&`8+W^)i2(Y zRigju+rZzO5%iZW$h#@iQ1bqB&o@IsyLEss!pkK*Y~eFGP#$OfXeDgZYAnk#jgYZG|mmzg%@bzog6KxH_d`Q9%V%d@_Z+;C44iuLm#`X@0nUiM9USj;fbuC}Z%9@=82)4%Uun`Q8JJT#Vm+XRhHH(i$aDtg^-YCr&D>tE z75_O2_oh;rb;zXBez@K4+wb%jn5bW^w-D3c6#Qv$kK}fLR$~HazFUw!kde?19kk;(OWXa=b|^z>QCE;zl=Q4m09_z<@n5>+l(v`A!RZ5_*}+O> za4vxzjCeYpA%>2XRifCF;5Zv-rzk-o>w1AlC5zxq4Y9j7`8v}7MlL`nS6vl%WAL6M z5MaJ#%q<&Loq{<;F}TCd|Bvqj5P)1r>>3iN^U3?g-W(s>;BBcB_UgG0GG3=b^*vA6 z4zk)|4MGquN_^aWLcAZ#Vl6t7(ciILgQ4*5YK$43_TAU(6T$vP<=joU?+3J)gQSyL z`BNwWowE74eChibRNLe^PN;9O$u)&@08Xo zYTzu|$%bhP{=nQqxa0w%(e!;tcx<^1xY8c=Ii)50-&&S*UtVze?pW+z>PZ^hyAD2- zd2K>3KqfEzok)@w*+B;({ykimA#cTZz_8LwYd!UYh0RATIoU7JRD%!* zS`iS7z@v9UKiwXbGwJQpgn~n+MCf8kjkDQo#ND78OEh2akT_SUQGGDck^?&H-qETi zo3n3d069DJxB{VfBqknC)vI*imSx)ZXKtJQ3#`h4ftVB@WP&$fHAv_WMLizn>B3Hy z!b(M!I7Ru%PHGoy_uYs$gB!r(lv98D@b@(tjs5yZs5;GIHW-Tf2NLl(ANA)%4$zvV z8<0#$u0NSI^@^OndA>mn>hnuX13R1$pH4^yqi;aY6$+7W#`9Ev`mY@rM@miNQi+$A z%qUL8JxI>I8`fOC8|K8Yg*WZ<@z6M^r^zhOBz@T~Oe!W^jX+tx-9t$>jMhtF0h{_zTh@Qoia^r-RnBmh7GLDT^Ty(9!;Hb4h6 z&Qw0%oC{UfQA(845W5S!ua7gOzQAw0N60i)9yzGz*Y;^-u252zvs03#wB)m?zKMM`~laxXtL~KmsVT?y)~4T-X50k$-3@Ul4PV9^d6gTgdFM zy;`m1F7?ho$7}tD5yvy=8^?t-pl?dN>P+_nq@0DezeS zsJJ{`@~pJH5d|h1TjEe^)CETEjlJR9U4tA~7w zkQ^evnc(d-xzfhwFfN)N^~LerEj7DaEbA!0^OB}zo~xsm|JLmOkcLLDrPvAtgRj(? zEHr8~c?Z;+uBk54q*vY#+4)9!1%NI!TCEkT{7VDCR3Zxs4m9U8bybEV_mK%y%7SkI zPKm4^sY_iZX+}K0>y%kA@Ncc-iG2$^-Y>ItezWu&0zU5wIHdxoMlL(uckyij#z*8P zJRfzsM$D6l7k2E~q1DZPxQ|OPBtI|+6}&BhYZ60Df3M^^lkrfIQ@X2+Z=h zUA}s}@H!tL24jXbOhWc#r>7n8pD5;QCj0s9dLLOYCY}6(&V}=4SVwy?HAbJStGDrWzD8ByqOtndogzNTA7*y{tqh8msf3MK+1>j z;&Z$rN+y#=#nbAtXcwz@!SxV(vG&8(=u@Tc?k1F4v1mMDzEq)g5C-hdYwXVEZxtRP z_Gyj)m}D3UFCDn|@N=K|**b?#Dw|L4`}>_YHlNi$_>(m;9M+2R02Xq8xgP;zwx%N` zZd8973&sae-D7n9jCS%!k&T^4*(;6}P#L^;Sw>>$8fZfHJ@1#*DOHPdWSHc0Qgicl znJu49Ij%flP*(|O+tsyQw;IWwU_* zLR{pj+K?4N$n_gLo#~)#r2nRGA6PI7Rc1&dDV&vP6lyZ74Q3>y5@?A4tYl<*$6&vA zzyh|-dxJ`$MvwzjNG8!TI_snR?>dwaiiY`o3C(=N|dJtqw>%xO;wp%Hf910Mf?4aqOLoHJ@+gc=MQNWNz){C^6^OuUDndj0w+#PI`@0BOqTuN49!0V)~J82 zHdT^{$1Mv7&;(FE1%+c4`h5McfA8l=V68}?P>~x|rJ(-t0UnJ`t#Sej2T@oePb`tH zB26NlHV>W~)jO>|PwvB8EZ6f`^jNF9m5Y2!C_d!;kg$Uo9rVrIL2Rt+-Ci6ZN`0F+ z0ZEDLOrT1X5CbmD-GdEkeLVD?(eL(#?9#ipY2TUYLfIChv}LfzeWg?auxnIG^8yDW#~k09vKM zEFLmU2vKCIYAc3P(PY?PnA%By@?M$>2(r%Ye|S_`k9{HFvd)XhY8GQElqESBOZrCa zG&FD@^LRAzhsfcO7Bc=`>^s?gTxI53fM0mNlOCZ)opU~mnSyK=!d^MyvwE!|@F`;w zIh;((2`2`icFCI^oZ|k^H?bi(kuoDn2{xnkZuWbNJll;R_1%R^F}eJbnh5y3h~t-6 z$I$`>(r1Hln5(S2o`d5pSkzg^po6Use+1?*4UfAkr=<=ST2ZR%j3*$@UtTXB9#m&L zwH(BQK-QYWyWT-_>Em{jdY9{pyUxG?MO>vp@#XY%VPb2}0r155xgP88FXn`>#Wq8R zy?Jate`2$^XC=_2$geh8fkb+JpNMAZ5jR|cO=E?Otw^1fRNUruuBbwDZo2f6ThxSg z=quWYWBvna7Je^s=XyP@cfpJ|$6o2FT3P^LSd>|*43iM{25RFTM<^62wo_*6Jm9SM zfRx%Y-HoOxB&xqP9m6>{(f*uffr2lxaO9;i;#h{BE$sKlmmHCzJ6jAh=TH4!=gT!l zz;eEAP{k`0r^_*in*@6r9C%5Y(v ziUkx&UQ7;)+%&BlJy>soRLT@EKS=2Vrzyg!_Q+*Qt~c{VeblRMTQk`06yCu9VF-pG zMzXgRDnvThI)D-LODz;?|&4cQN>6~B+(T4V@*V^$Y9SF$423Y7{H&Cz1$uy z{xVia@J#DN#N)_)12DRJZY}n_m;OBI?$j5-fQw$KO)^4^T*WZ_Dfos%;DoTvNcZ~Y21bVoY7*o8bd{+{PedvM7cdRY`?G#)(USI+&#hH?^JR#ADxhR<>N!QSswG7I$z5##s+$)le#CfMAL73Sv4y3EG( zF&k}9t*5;UyLBd$;tC8;gBvXlxc+?z$(#v?_8UG}u*T)3mK*h&X>3*W91coD+ToIE zf$@~89Lxr+&-Z?bqYUVjn#k~8h~lx_p;B0E;P94~3xO3nZL--bM0f~<(=wg?M4T>< zuB>| zjSZW5czcu95j2a%n<21oyftj4OqyJ(?8b0K*1>QvVMn*Kxb&Le7tb{lhuXYITM(aH z?oPeSxRVCbb1S@y=o9>b+0N`#kj?3p#w}2J_CV5j4E8-XHIuDM*;c2LDvg?kvEtLfDdn&D;>k9w9a3HR(L^f>ub$?qG)9n% zZBp?r+QLK2ao@WFl+I<2a{g{oZ-8t>vC-BTpT=4~5_V8tPlNl*5_C>U%>C({;_gr? zt{37?Vzu5($#)-I#N}d@wFTivNCYna(?)cWn5(J0`{%Us%|K_j@`i}C zMn1gHFdj4xb8%#n9x?e?^9?Gimq-dFom%tnR0H=IYz{lewhT@ui9XqE4(dPrqMOKJ zS$-UuTpq9(q>o~7&{|{OX~7HE8%$QKQjue+FFSiCtxVF<*vux98^#?*xBWY{x|fC* zT!0z8hsa51@2lPrTlXT~EvJ+gH@S?T9S^j_&T7pmDV}_4xN-u{XgFt6u*hd&lu#@F z`f%b;f%!rdldGJpdW&b}v#ZBQG#?$~NCROex0itD?w~TC)R_jPH_e|$1x%D+gv%3+ zSiTTpWOIyTf4>z%4*hEL_{043IdY^}oQ3kyUWjm(_x39Yv(;KI7I0Rhz1Hmgkjslg zxt@1>6wt;w4x*R_Uu0bA!6AsXNAUa3T_fJSrn8xi~Ua9^2 zKBeh%rq>}#J%-mCLad=U>PTARo#AIjDDpSeK5m1CMuZ`{S!#0X&l>K)5n)0Z>!p~h ze)0H1r4<~78hcs}7?2=Awjr%YJEnChQBl7jvZ+8ffUu|4p88k#-w&bSHkN%dLSkeF z@5KsrN08u?Qh|%be}pVd>J2mzvKJ7nKi~7Gdu@ug5LT@>D_~xYEwDK%_*epB4bPWj z!#oCeu(*v*X&4?#jYbRPnJmTVv6%oZFPFEVo+2}^`98w}S>>Om-wWz6TK>BO!{tjhm+~9A^zsU8g?KSed6|^l=>qItX z550fQB_8Z@omSw99Z@rqiTw$K0UM%UiBCj4IO%tCA)wW4*hY5o zTel&r7hBKy>NGdlU^IX2O(7~cEn(soI`C~Ul7J`8@oW{cd;`A#AA{(7&+PC0#@!T0 zX-;zP#kKB_v#F+@+qUZpKtakiA7OyD&1%0nf0Zf^at!O2L#hg^1J&&L#)S-f0(<^0TjU$ zDdB`qWk@goJc zjUGc(nEBX9)al}i{c?4@NwJ4NfP!Gb9T_q-fZ9WIr!Y1MFzk3{(kU($y!M8Y(W&SK z=rfSQb5>S=HJd_Wd9OaBP7*2<$kDwF$WH%hF$YTRG@(;n^jJEbP44M={GN1&7*a)h zyg&$naU%Uh0ukcj8`xX*6W;96j&U9$z^ zg=w@!KA#yOVeGg$!gYhXGJ=%a;)LtC4d`V?t$ezbL3D)|!|q8G^6;R>)>2fHJRmTr zgUQS$QvoYdyO>`{^Qp%CddkR_bCqn50~1L!>P!}{b7X+KDzJ!Nw@mP;Ke7&QJpP%? zKt|)hkJ5x_n;U#j3bM^*>jx8|#*$PuZc({HVVpTci@UTF+eWFPNzR2--kU*+@j%!D z6HHn}dpEt-%dOGDQHRw+f9%#elJm(ZLMn%se^RP9A6>@Jk$BQXKr(h#CT%zU8UQ6k z6v(3-{LidT#U7rTZ+&n0m&I0Y_-=Gj?stl;%6BY~YL6yoCc9lF|Aj{P_xqOJ)Lt^x zzs<0j>~=p9Y}O!gCgKtSiQ|nXN?I4rbiZ9p9`R;_$$<$4Kk z;6HD=AE6Nzi+G`lkY*b5C?DrdAxP*${q(HUBk==Eelgc({$dD2jaFO*8kvm@2i!pa zgkcu@DUt~vU-pbjHMdM@Xp?Ui;z>b%Ig8sZxbj@lqS@!k{Qdg20`S7DwamM9`S{s5U^t}v(wJR&a@ZP;@T9!NTNy}AK9A)gcrv$IvoW5zi_ z9knh~yp$>xe;W}XIE$z6iuZj7T`u1T%3w%PNxw^IG?^FmBF(v+t!l3}T>Z%8Y6yDd zD*&*RYB!TLAw@|+u!q4#LzMN3)%i(Dz0hU}hso#Z83mPsIVtRV^#B%01L6ueRq29I zk=Hj{1ZsSLw3}45L~4YXyNj;puzIzGuIp3BTab~v&RHCM?AS;)Zz;SP)0blEF~2#1u*fT-nX++^J$(u&k*8r#bmoJ^yv zjd@!_E0M-sY96uDxK6x~BOuM{M^+JrJ~q-WY@zg=(}EvFzL-cByx$sBy+U zVwYl|+NUv~9PfC&{UcM6-8r6Y<(Kg}c{}^DP6h5-*doOJ8`CuAw3>@Uq(wbsiQ2EO zD0~{sp=&kmk)T!YM%=#0P#V2CLEXM!>DfGC3rg*FtlPKm)T=cG4#}6T*P`!p8Qj9R z`{rrm9Zi2~wpmOrSq4aVVj(Nw(|d-xE?zY7+09ZL2e?cuP5$iR!+}p?zbhl8E*3QL zzF5DKWxq4qwG2f~_PYoeY+`(|^=hGPeFZ7sf_;64UZ8zp!>gImSuBn#v^gVOyKISx zU(@V&t-73(GU^vQM#}E1wmMqVXL7m>rL01>&wCv}5pt)Hu#}T;oVgx|-enX2RQ^W1 z`!@n?$cxktl>TBJkG%pKLF^zCtTVob?PjFgVIVSU{F~~qsfYD;IUyOX%)B8iJA*^@ zRBGGbaCH-n%ZO^( z-+c_nk1sd#FWTnpoHF06Ovy%+HDs&-b!23KDA`HBJE|LP3LAcT!yOCAgfmlt3ln!g zu3nMY&8h8orj&7@%ZZH++ad(@@l7BvW`8(S^!8}t$H7>lfL8|^!CF5DjP3_Y2x-Ao z3Mv`tUJr%C0^!?dx3A%N0@NGHC8fh}f$n}2kMT5CRYZIaSdcwG%k_3lsy$DtiXn(S zR-;qLm&0^;g*+wUl=XcTX)PA1M@O1BN$7MmUNxD;kH^fnV^2TjJ!D#Q_M6*JjXiro zvd{nt%jT%q!0XA&-)@S6y6H|T1$tS9D$@r5dzeGfKO&F1&D6?k$OpI|F z{0YNh3II{F6Ylu(J4h8)6__^9U#UV; zOVEhunyiGTbGy}^}ZwtI4J#$tLcP`OHv zN*Z1!RZPh>HpPVNez?pAmS$uQ`Zcua_Dw>b8H7DdttM9&BvCYR(}P|?xK#lSSy;{z znu3aoiYN^9F$%&%Kwc@KDCe(Q$t>4jXy@v@O}?%3iH`OI?fhpr%k2&8xRL*fhA@oV zpfS#^>SP^5=sM9K=#WW}8owG%qP<+KT06cy;1f>-b!Id6<`zZIko?V2oGHgGzo_H! zA+1_yZuAiW?G@EJbD5CtaytP29vAL$id{whszu+nk7Syzrc>)Zi0Z(UupOI!g;MBT zcL|#>77)_tb$0PIUmxR;x8?oTakf&|2D`R3_RODMuzBtr8;swu{Z2A^*t4pt?e3OA zA!88~CgYrxodA(5zdCpyt5~>EitB~N9bqMnqcn48Ih}k{7LY=Wh|MJE1_KuwtWVhu zj3)CNN9dT2vKfTPc#h7t1y02Q;4zLk-=LoJYf#E%rn83k&QK!Lj?3JJ-7D-UUpNQA zz56a11j&gQ3w2oBwB_A|OIu$`9ZmziP}TJrj7!I*MQlx&cR;Fh6r~!k{Y-#WfyXd$ zx%e-b}>m@vU4k;XA=rM2zMTic>$xg=3; zKZ1?4u44*@r*{-B(O0Irlv3N9i=>?7=F#M45EJ9_%?+w)U?sjD!`jvPh*@3Bh5QqG zsZ$6f{b-p&t=TsAeD^82<;a|E`;_;x_m0Z~D_ol$1AVRjj6@Xr_3T*y>nIvZn@x#E zF6~5+OYf}~&X~CLN9K#IEI)j!<73(6c4VFaaS9w+LHCdZHbX^s9AOj#B!*f$l_v;^*QI877n@CnVmX7kSD%B;Yte z%g#gnfFGhmqb@s#e{8RAt3*qtRMrfl+*Pj;ZRuSZa5VJww_}X{`zGU7@7I&+$BOtce#T7$S%ipAq1c|7E_q zxlpF9?d-`}{<1YxdpZe0bhv!L&#zwZT9ZMEL*Bc+rjPSWBZv!pK?n(M+|#$1mV-F} zS`uHSa)qWIA%QYb81F?LgV*r<3=RiKebnZG^Int^*4Xu z-L&!?15qJO%GIJ4m&d;3Z~&>kOrgUM*ZGWyXX$1)ylOZ~&m*!JA>xS^BpiG`)w%D7 z?dSF0)M#CXQJHdiaLPesY#mo-{nXd%+12V}w}ObZReui@JDTnu)awNER98_^IjLj@ z-N8p+gXNs`DNeWkt9qFs%7z;;?fv^n@xRL+C_?$omhC+1fr7`E{!4;9Gy~+QniF#Q zm7w%KmEWoB|10G>BM#WaD^0k5f#HEY(W%7N?F~=2Ks5+j{cG{2{^z zz#qLc!F|x{cueU_ql-}Q1|xFtG4 z_P0{0ijG@+4Gfm^*{CYJve{jFU?lESa5~SK7f17FjmOsqc3Fluy^*Jq^W0Q2J{vfp z!@g{r0jN(icPZONo#~9eJj0){N)1^?FdOoAxo-62U!vmqp6`r{v3y=wo50C=n*_5^ zEZaaT5UB@-`-bLQjL7F19aVUA3MQ+CrjSdNpHW1E+vaFX6HlpuiWWc8tI(_Pf_)~+7%(HH?YXJ3Sa%1TA4?rnXu-+ERa=?g3wJy4|QAI_0A zQM=i%nNL_LC3GMS3K?Hlv}JDra1K;{O5Lw}9AiHT;4uCdQ+DlW$@B5UR@ z%{QYD-Bl&GqD2T&nsey2<{Jxi_rGAP;H}@1{McOgT!J#FOEfxi*TbAjFD)5k>-r2F z^~sNF$hD{Il)9NidFV`}j3+aKFeij;;(zya$Fh-WQy5j$YWsZftBR57IeXg9$0s^z z_V`0=#03$aVIwDW+Z&CYBDnr(1ZUIgfeInO@jOmcJ`Zv*IbO5{CVvkA7)p`B(zj0;8_kVK?V7@5s^_V`jm7&SY* zRG3WMkQeeIUmF=$a(UkIE&|*;O~KUe_Y=Q2(X*V~(EX5rEAm60(SykJ0RUYrLWv4)^D`K3V8X2v{_+0@3P9t-7#%RUMT_sOBhr(2-(TTfaR1 zNxuL{p^)JN_TD4*U2+*u+3^wB(v=+`DPV!6t{A$z9>mM*Ho`5`Po-N}S88o)S-ASs z?r1}{tq&WRiED=6aXmdBLVYiNXyaJT2~O-R3`eh!_xEtzSZrktO?F{-c(%IHPreLbU5 z_YEzYx{REnhAXE{R(qc3zeHY4in4p^1iS>Cto8MfxTvnm>syDZuDm@Q?kTLtUdg@n zlYuaELVlE>sTNBJfn?sT+&u{W?`?8!cmyjHd%NpXOXgg1s;{oq0l4Ruaz{6NTaHM4 zpY56i%z}yZv-qz3IqN@7En0rdZ+qCMpyqE^TPW53mS@xJ{jJP|eB1Tup6_wkvh=%j zxX=n%N#UzbxXs}M``Dd@GUbJr5mk$96sV)1_j^dKb}geB9B}gqSj={43K(4OT8^m{ zRBldse;*OhLUe0F9|J?M(h)HA)R>n^A!)30)zo=R!O(=QJKHaVbL|_?C{VAdKhR2zn4)I}y7&Gu@I#+pmxw`Q;O6v%GB)SSzF)@zldNlWQj zgkXADHa1JS4qNI>XjShF&~;D56xCPg70f2 z>Dr_*&=<`)R4X-4vb+z4@lDj{^Utq3xke(h8PuJ1J*cDea&j##-lj!7W(ZlTyDE}! zT?>n^eR-^C?(DjWuRD6wGN#(R^xD=8!`tk)fIbk6@YYT+0~Cz0l3 z0-h3;mRoa3q4TK%E%;x`LU{Fnl>*IMN`MgN{i zOGtpM*nf2Me9RlTJBPbkr|$}eXk+T^(4E_5t<(I{Lh_%=Qe8dQ0kMv!MHCuvGj(?JnC-N*51cYYS4aBAkZGM`032& zpJRc>~xA`svl4C{SO;Qa}sZ{EZXWBL9#M@M?sc%;UYn=hH|EjP~ntY$|$R|twa;tCr z3>@i3ClX$alIt4=>!=kvHO)5Uf5+$^vysVZ*0QY2k5;EMx?~fnIc9XCLr=m(i=j+4D!VZt1IvhI>U5zTnjSn1T;ece zig$X!B{G4~Ip}a44g;QIt`*3OJ7oY}0ejjcW4WMe1GE1n?931hk6SoOIm%JJ^w8Cf zfbCw))#YJ=Qr~HptmRx&4p7?Cux`}-h6sHW5_d(7x`im-7%JP-OE*;Qi}u$YxJD)? z`luqhNc`VBo_I>CDezd!RFzN%f2#{OXVXKO+exQo=yA z%Oz`2u(DCJK|$F*n`EQCb+C|H&j9m?xMk*=OtS35@z6xlD8x1V5|NwZP+&+#xaMcj zLDCR!t8J~ZRW*MPN9vpm@1mCbffx$E!>RS)_MaE5-9QDow7u zD`l^&%{88%Q%nlFoaGCHTcy%ilwG=3Q1oU1G8`q-r1tS@_J;5zyI0=f^0}^ER8``B zsDZ#hAls-|s(iD?n0n4?!yoD`K*g>>3!g;)p}9MyFwhw||5SDHMUjn;zB&~fPBz%} z7)POqF1*br_twXj-b7(NC^rg4yB)9CkA^zLdbY3C$`WqYC7w-39Pf5*XVr^IoAJ*8 z74&>4n+}B&yh%tw1n2l}g^)rk)TE~8RDhesxaKT3gb;I6Or9FVc`{r)T{+I70f?h< zOc9%U-B(;v9cO0@HO74VgvxRZfZ8g<lHkX z!aRUhA98z~M7!1M0f=-G&ayY~o3^Mhh&lG>7>qW2Ev#dC??Y(bwSKn!Ek3&_@hlD* z<2anqA~LQq(ER!YLuYH#A@muZi1OS0*3mtt-aRzLT}pNtiOXjH@mgu8HF-hWt}Z)~ zAB|?ju!NH0cBrIy2}ggvbIN9VSv2)5=5{7ZiAv~PMU^a``}dRhgEZwV25v6r67(*3x@Mof?DNs8UwHtvCIKY8mgSjN;@lC_Te;qg+{mu_xq+MkMK z>S0;VooCC1DQLqfAOzuLe~QG<;HNOwHjXjmZEq0VC~F7#S(Ca%B28&Lo8F7eWOCQthHGh-g%mmXkqeXmc zpxhDzy{ujkk2bJT5y;{3Pfup6+ zI`ndq)m&{#3s7-EEHi;e#Mc6-s3{$MbYvR`k# zph?yNwyz%sWHE`hN*-`N>DwuyoqT8d|9E=qfHt1*3$#!uR-m{`p}0$NDU{+)aZ=nZ zP$XDzD8-7qdvPi5?(QDk6WrnD^ZmW|{@&T$Wai53+;h)?Bxpe5>KU1MD>X}_R&VMJ z#waUWFXRC^W}g!&k}q~yY;@IBS>id0Ho_1b&$s&0VZVC`oS0}jO-N_pWj4Wy`fsN% zTqwd&k)|niEny%dBEfDNuvEKT%lm{>lTlN3q^p9eA>^}YUWGoxJ~N;9bwb$*A08w- z`r<93+TpahX3BOq=D}#f#lWtZe1(7^tG!clIt57%KSeB&g}6aptLL>%gL5Bq$ybsl z(V8OWpXtJ$cMt}tFuQCEZ5T?c-2F?L6tI;U-w(lv+eiF3iOXvFpUIe&3~9UT4S2=$Gco4H0>q@ z%<>G=w7>p205;f?J5)Oi7jnL`w1M7sz0;fA3#Ig|s)#3w0pz#)JT^aE+YB?`56O#T ztt^yis961zMNYqLc5!3V&n)Qv_!OG`Lxr78=i@%L?vw+g2*@q;ru!?(5Puu|FjJI_ z@l{>s;;Sq(z+wg!@c(fE)HI&ysNLXB&lkuiOnoC;E|O2MQIF1TCXGHkyx-5_5FV$y zI&yKdfHohqS1Xg6p_UKX_0% z59T-**3_|+I;CJ(JHb9Zhcy$i#jC6YAq#J*dBb(FinHX6SQ#SDRS#JO4o6NJUzspy zEwk3N22eKP0i)O=#lX4uubnOlp0bF9TZ9=7Hr|n&{ls_kNRb?dU17lZ{#=EoG)Ghp zprZYOl&hnx^!(&qtx&7kkosqt(CDRq1?5e|VGsPp8(#*vV3@?zPjuE0jHkL4!y4Og z=V6`xaZ4QCMw1sKqG(TJ#0ddRM{-6VewEDDZlZ5%3pGaSU&Odni&Z5^^ut?}YK}X! z2yq&h8f+IFxW&>7TV*NdY-hjgsZ&`YJ^#-5A?XoZZT6Ro#^G|x!_+W8_tF!*%n*zc^-u=S&Zvx-)d-!Dm+mzUq zDE#C^FQtBT!g&_XHHgNAoxKXCK9J75+xbe_sVZhAvBb#1iLiDry$j+peUcuLyy?Z$ zZgEp;JEIUmXi62loZc72lCEUL4imAnH&$xl1itmHY~K}52eUX^o*QdccgCj zwJP=f`G~o(SlO$x2zXjYEOEUE&3KO=Lcpa z+hu(B>n$M)=99M^+07#ezfv3PNm?8R8Su|?hn@cUao`B_qs52#^^u5m*vS^l2ZC1a z8*zR#&hFf8M=c29CjEHX6G|qhU>n)Y97W?HRh%xI6-GR*^2+?A1{2aXdWaKvh2>rJhZBOK53s{yCjg*JD$Lhpy&z+7@lJt+GC_veuKcs#&U|tD00368^&Rm zlIQx+$h5w$>~TjL6=*sp)BRGv^>v40Rf`CQ5KSxoRQLzi;=0=VRE|9AE`l7ENK^&G zjcN^Wk~_jLVlj^B2?P0H9Hp~Tv4r=lVGXnU3Q%QoUOqydu2TEA*hYPEEnDr;Nx}Wp zTb*(gPW@D3N@&=?{2Pv^$pD6HI6?hl9lI6P#pVR4S49Ct${>I&pvJ+H*9F;+<|b2~ zzI3qvmNFQ~X!Xp)ECdmTASgQy@{DcQaD#hZAf5z#N zv2ZHkvhzykACS;)8Bj*zcoVat!$BCg#vZqjZqDAgq%U&dt{__&IvLR)e+*%InzQLJLM?rWQMQ_3(|SBH&W$~x&3;+CbY8O(butz+j1h^O(A z)I@+Z%o_&~fd_d9l_fM}Ve{m0fb6~TWN=a6*bY*?FSNghtjhQYwlicbZVTx;$>OHuZ3Q2JbMQBj8TC@&ZivT_roCA zp}{lv=PxY~S!fEy;uTN|^2mW48!0?g+yz3ZJav33L?<3jim0gg;;#`qwP%P~i(v0= z{##lpkDlJUr08>f@M%RWjmWDgdZ!A^ublDqR{m~-X=+`W1?!r&fBCHUHLhloyL3EM z3AzTvf%bfGFitfUF$}CO>LQ`^(rXp9N96VOJY@B$VGww_GEN@d>VZARit{v|D7p5L z&p3$WD=o>bB#mOY7qXST!YQl)f69S`mJ>*dPr)!?`aRqDQ&?RreJh!CI`)1?=r%5B z+5@df3569sit&S*5d&j3ICRsL5FbalsWckg@i_C@ivqc zGjA3LnFjsD2j6J*>p{=Q&U^Hjcew1F0)ZMTPXk*|oL;w1kJfCF=xK=LT8+F7pv;i) zBD7?1atMPzW{=cMTN)xPqGQHRq|SZ8W?=g9`eMU9NRiCMCy=+5K`Bily%6I%k5_jvU>`>1GauiKtXDTQy8tJHraAniDK4f_{8v`Ujh(yH9e<0bAWwZ z`DiM*djpTqFvLL&$k0}7@cm&obSW6SDEjHYziy_8u!dk7uuFQ8xBE6D=Ko&xMamzL z=hu*vU@qmKYnrRmKlC9=k!#w$^RosaA@!*p^#lf^pb_Xtd-L2d(5k_Rqg46LKX zrY#HDf5!&x^8Ub$!QxD7qXMdTqEiYn2WcffEHM@+cNFR@G=VC@FZnk=IU3#@Vyc9E zQ8SbB|Ap8h<=;z3zEc0Z#pl~FH&?DJv44D3HC?^EE#*nA2KsLZ4)To`x>^40Ct55R zUpq~}N0So9LP&{ZN*13kB|_#Ku^9B;lt#10X@%JT-2V=u*DOU+zSsW8diS=c^9x8| zl=IOkF;jr*zbIsVYJJEW32orLspB2Wd}n&-&z1fT?$eepK#`Y-t@rDhiIxK5J*Gf# z=FoIdk9S8K8G9z=>3x6q`6D!up4@@6w`jlH+K(3SXFpSwu_pK@3No{t=!dfWMtVbk z@ivjzU|SuLEZ*5a-~^nCPjq23@CL~tPmfK|b#lBUAP{eB8FK^m zCi|GXiypeu((neS{{QUqBphFs4{Y&$A_DSFFwSwWgr^DDBXWt6xMn7Iev?{Roqh}V zw}y=>v+_Fcs*17k#itF?-R|8bje9B3tqS^y+=Z>>ob42dQXx#{Z(o>0*aChmkr7yJ(<&5mX?u zjP2&?C#T;4jim5|K6Fn$Aa)J(kO~Y@F!l8l)xAK1z$``sWR{ zx}sDwg68_&_yPGRne#CfOIPzFFTKK<p2bI?_=b75hRoKFDl&b!rCx=LT@EO+chKqw`N<)F@GPv(tMYU-b!wYX(C* z9l}MZxKlU8twIXJn4b@Hf5en0dU{7!sXKQ`N%%xdo>CCG zMGFtMAJBg}#}iyL)KV1Iod?W(P32=xIJz?2nhsY9R(wnZ+|`xP8vggdrJVm>*wI%8 zOJftyFEr1+@$$4$ydwP1mj1i$m5g|Z+4bV-&MAe0o5G}os&+%ko{Oe)*hkjdm6By? zVU6F9d&dGQq|)nB@{8z6UWk>RfZrB?*dNlYYo=)Fzjw|i^3L6~u;to>Nk@8=Y z^+zJ3|AEx>N;%F#NwoJE5gViy^lWSZ0X_L2Bvd0N;7|@Hsd?9k1bVv{SR5KhcKb1Ou;)PxmT`X^!gA!39Z-=+Xc4OZeoRs8N^xj*9+V%exdd@jlVJ7I8a? z!}EWaf1;Zeet>V3ytqeG`trI?BbXDI*3E*$y8o95tbvm&6E<%2{2(#zWi3IZNf0-YZ@x$3yF@PH%7CA|Q(hd%jA)2}r z2Yl9!@h2&&I$mE^p08&38f=~|7HZ^_P7e+<#P2G#8JYjL&hTNS_=~#1^el%ph;IQk z=t-2A?w@@;L3uFvYLOw=}?V33=2dVxugL$S84gB%g>3uIw z;*QUK3MnVWB}5c$|7FwvCCv^=1f={?d@8(LHzEU1f?DtC@aX?dA^Zbi>F}#=@EEf} zqnU6Tdj!M9e@6aC6#WxBWYEb7%iUysHEdR`NbwJiXW0Ke%pvE^wv7e4x+jVGXM49z z*2)aFxPs`+|I4HPb|c?)S1D*0?6#wbTrFqJ4Q3em{x^YwH?vQl=$ckaLW31!#o&8IU zo2U_X-SJuOb9+cA-@livGKXGh*@*J;N$11v(vpiE}riGO015lO>%EfJ*{i#b7KqK7q&5c> z1Gc<`KTmFi9QiB>zv?{nB{L$+jx|`|ucD+u0xN6!S;x`sh=Xf=bBeFKvNRa%6+kbz^Akyc<#Buuk~9M(0k{$F zXDZ5&xLXRF|0^?IP8KgctVJKNq@Vqk*r!Xk#NO3){ND9&s7K;yoXL1e&ejL3eK@Mt z1;YEAF0HX!z^&i$d22HeTlv%e2{)d5vw4E^-e?LB!op)-xRTHZ24LPf7^xi2jQ@oWs^BC35M>B0v$v65KHgZt$K_KvB+fhu?<1vHl^G z5_)R4R2#@4TqT^y;PcH#W|8qzZf6v}(aARp6T9xI*GPsyh`CJ4aA-Ae(0z?Iv2+YH zPh9Zf`dB=<+5T~t=yqwH5i<2JGanAi>Tv)xgRz7?G`f}#+Lt8$nVONTEISz zTDRpi>yj2^eMuF!&&{~y>SEWanxp{V8J|sl#U2xSc|UBOag}5Uc7?V-W}?1FVe++N zV#^S%Rlhpv>^~>Tm@n6dQu>_8X_x8Xlx#zo2Pe;;@5a(P<}U8-Q$N0%7mSj0{+V#> zc;166=N?4~YyolHu!dBNR}nPdT~&EbRbX@&jZe;H(XSkSa6AxIj;NqHm3<*nras+GWAeXX#Lo@xB~* z^JXmT2hElb@phycjHFM^yC-2CFCCn|3kf~P;(}XXfA?E~qV0Fkkwi9k3_^Anec$z? zs5madf^I7Z>rUiK?s@O$YkGe7GlK?5Y31ri6soN#p(94ebd|BJ!@>AaIGur9s>hk- z(DtHfw9*U%Tl7`tP9(;F!WSA=a;lq0>##h7s{uMVYN)EGRnqs<6GO@bd7KcL2}!@w97dI7$JDDr=ODLa8^+tO%O+-K>RdL1dQP6U8DD813>Io=93)v@6Q=Tih}vXB-Z@5dZwT z9F`-lyHiJcY1r`4)=u|-J}k;I$Qp5UfwRW-ltzUc&c=v+ub`&6=GXmEQvE}B%m1C@ z?nls)GtN4p_o4Id@GgT=-I^CXSPoG7ag!*6lX2a4tF>! zlO|;!_S%eq^$Kt~NF41H*U9MSB30<9G<`-L!G)W`tlOdzKr||7>gQDy)(uN{> z`H{bpxN7e}G#Ayas23YOARk{ub~&*jApPdHY&V$7z2+9lJND_l7y>Nk?8%5IT-~NZ|QMhZu;Wi0&K_g7xqS~iI#*ocNPq2yT&&F zqTepIxbGgn4w82_FtLB@L{8*>lA&MZJYM+u%H*sov|rZOdhe{&whsNxY#$7UL}X2z zrXto9((;%Yx;AO--qf$O63)q~oe=H&B6n(9hb=6}I^71_8mW+tajwz1{aflIZOMO9 zk8>7E1%|7*M{8>dK;_yK8>Z%mk%$Z7J1J{pYrkrc*MKAM%gZB`!E34GcjR~wJ{<3> z)pF@|vJ)5BK0hXy{0PV52xslYH5YKo;7UvVjQrY8_STsFmC%h zv!^$;ngs7T?8>Lq_DS$>F(sX&UClVlFRnISuFbtgQK0N#7*-aVmSRspoE&*k|5|%f zST{~;rCtnB%EGtCZ`@GxL(bqkZEhS+U}=WSk6J&II7W29L6CIYjtKlVSAiAE+w2aV za|s6uj0*&%#zqVd_hRTVj6nAU z@t?~bV@)_EaLAxQngPkEOe9!VdyrQWT<`d*KxWnV+sKb09pRZuEtm1_cKv6YP3(8h zEL0wgK}KI&Gh9Ee+HJv!sScbeJc3TZ85X+Xxz+Oo%<)@`&)rKh#VNm>5>cR>zXdPy zBO0x1rk}e|cK)ehnBzG@7s~O>3$-%nE1(HUOnJ*@$POJRouo6m?b6~; zPD^8KhSlAo=Q}*yTrYCCY@yv4orWgTHg%J-w7)zNpMERABs4l${XS?{m{16^;2-QN zt_C5b>5}PqmcC_~QxShoe^i*>QWp4FseiE>TH&-UeY8Jt7vQWQZGDjOCYGo}8J)#g z&oUB&dJH-f;i5&EO~|UV16L3H%d#A#A$~VHP0sXt$vBjPlseuJFMoQPnGw4#kl)8r z#Mt^1XtlGq%F@Mi#=?5b&G9R-5T7X z-a8c?XQa35UUBY&SweQJcmGNOErnk93BqeE9MP_o!-kdN&5dgA;+tT2MDHEf{i84$ z!pH#-a(Bt{x$*ZpnR;B^5`;GCW_h1kjNYksb*7a?1W72AvV@!NB{90z;hk^#fm>Io zz*c@6Fn#hy;7LRl2r>L4Lbv@&{ZOk%7K`TJ#z*fP{M)@dqBXyEqDGs!iMe3%3lxsM zz)^w;vD@7IwUggjKYn4M4O5VN=(k5u+>r<~YqM2cS0i<*{viBbf<2s_K&G*ery}xW z20?{{5ySVLDd?t%;p*bmt?(=nY&oq*3Y22c?W|DuJ8uM?&j8Z2#sHzU6EjV3(&q=3 z?rr98Xmlq%``h@=1RFfhA8Q`l<;o}hYOBxuQ7E0=BN`VX+aJXi3S2R78zP7v<22;b zw2x>=B$yn82zg`8<35)4Bl;j67nN^=hZ{9zLVnOOnP` z{FCWzQ)avLH_z7BO`G5*BFcTkr{j)+i5pplm`ALIpGYbR~3I_A{sgyU<$up?}tT2Jr0p zk08@|441r(qrE$0s;<1{u<&CIO}qT|hYyAxyPr=nD%)N{gxg%$7HZY6W8d}H$~TpH7>{wcg*W1WW6<+Qw9D{cDE?Z^q*gz51_t?@ z_ZcYNCL~v2Qn-bdZWJf9Yz-sWfNH*$#=!b#$WV%I%h z(IO9xH-dKub550|M$9C|OML+KiWKe~0NBHK0T!Xv{d0nmYAOj%AMJiSJyL1okwy7f zHlm$fv)AxV3)j%++Eu$ikJf$dILKFCuUM0&_A)ocjvZf6xwL+S~#0Q{0mj7zvH}6`Qd5;5m|X=EgOzA zV-hj%)P3gqmvMj2y3nf2gDHMe)njmdG`AWNy@zV=JIi^|RgD+=bqNFsP68ZG`!89w zdoz^!Rm+xPDaKUsN}E3ID2e-pdKmz#ZRxK}vF`TL9D~4J9=+J3j z$iGK(MO)_Wr^%d#mP)gj56gbo;r=pIUfr4%^E&s>+qzlBXw=(`4qe?G6hAi!l5W-L z!kw>Uvk!U;K?hzx-3>@Z?BJMvD_3gx*OzzC1N)$I8I z74+RzhvHs)gNwnZKY2vv!-;N{?KIm;mxZ`5<>P=5+YS);pOc2&*fM6d`H1!apTmPz zKjcJ^MAh^OBK86zto^D;Kf7p|<%5G)AopBr;gfrAf{SYlk{(HB)UM{}Fd)Z65T};} zm8osln%u5GX1Dql0<(NynhI^_a{-Fu>b+(O8qeHe)~&n-Wj%rbQ~nKZ-g+P;iHl2V z3WSqw%8fJp$W)EN-l}7KA45^HIJaOx<@I&%f__V)5=!mCq)dfQaq2RKS!NwmuKD2{(xZ!G#DEc8jei4MyED~@+Dr6(`< z@j0&Jk~!@c>%>`2ZGh3N`R6oWdGlY4smqkT0tFIi3pWfkd6;mxLD z0JnQhF2M#ouY(*Jf-Fv#2oXmLXZ^B~rhQw0)Sq8r*;IHR`P}Xao=s>b`!juCzWIww zkGvDJrLv_>ftl8f6u2a02>Y{r@VXeP_CwF8@Bf`pOsfA01YE!*E%O*bhxaO_Pz@Z- zIa1;o8*ZBg)6Um)c*){0>viHOKG! zq?P0ROxy^hA!j-($|NOA6ZiG+?k1xFS+ypRO+bC0K3*LV3AdOoEZRY0{4Ch%yED3n zNs#+KyPec>sr4qj{*_w^Gx>Y|q*_Ejwk)4!H(!Naux1T?qyjP0qkElHv;^EFBqSq= z8~z-l-c?dFGSMhh)VR|&^ii6LCb`UqEz(WXca**+>W5lCmFd>baabPCs*p%kO}m4% zkd~5@h5q`ECKusr#mDGW$Iju|TU-aa#h;dGSt^iW{|e*Ifnke2B^MHXWS16W8@Hos zvA;u&+}_{QXH;lk%pcOITg_-ruY}cFqCDH)oT&8qDxQ=#tgCr`c32j2TNuoCjLGCq zVlot_w-kiQry1o;k!UuT(APYl-C!*v%AdZPJc^Aul#aO%(q*(0ta zCyeg6swvGk9E}K5t%O~LMv%8^wyOiiLctur70S$(maFYoz*A<}7yxCVf9W?9C9(TX z3<*)9PlKkU4B^PBGAnKwrZgY=cNA44&JmZx0^$Y5 zY!lON3NMjGx7}@x3~NsgyK~nfRdJ8Q30uE`?tOw!7fbX{`qLaDecG(!`s1*K?tMc- z1q6$zO`-kCjFZD@om}l7Zf^~J8K#$rhmwEe(W%{k#rL?@Z}r>~-|P-EDRnJikC15d zG$cLtnwv{Sd9HVwNvuW;X6auCTbe|GN0KM*n8Nj@JH&p^m8|f(jde==4tHxkYfdwf zA=g&C+wEBt#@mS0ELrDt)9boe?s$_5n_uD5y+VJOv3Kt!Ma$y;k(@U!&~LrG`SUPo zv@)aRO13UZg<~CpxA#4X_S--dT$X|PH7@g>d|-8OvAa>umjId7%|`xyQQOdd_6~c? zo31csnPF3Rn#Tf?opX|I{R8s!Is?wZyt?Oq&7M1Z)VPol$3b>WLF`UM3w`gor)yc7 z9)lX6^a%A8a7&9&5FlGHpW>sZ4`;6ZpzO;Zx(bwzo98kD@>%LWwLipbHYioQ9`pC_ zap>TBoz2OiLE@sa2rSKmRaGr zvn*UBT>fQne9ZQpgaBE|vxN997xlGAS%a zF(odej~G2#@c2!QbBW7J)yHJkuq>ADZvRjs&0QS-W}_JSTyl=-{P2Qw)Q@{+eE% zt}>zdhb@z@NiSaej#NfJf!$DsK<$aurZEtsPZenlFugCYD*}>hV^uFRd`&w7sLsuIBLZVI0nm!JGigmXG}D|Q3LUWTD59+|Kc%2)y=A2;>64xf*8{n zPd0pC+ukAnUR}_mw0cjq43c^MIGTP^F@Pmln9Sbj-(hq8@b{OVh=@zcY!|stzSE4B zdWE>FMEH%R#8^6;&J+re5!T6THLLzOR?3~ZX^GQa`PQe((0la}G|!rWqH6$GlN}C` z3^JWky^M^04O&7(kf+03lw3-rWnd*AFduxQQxxH89`J>tK{?Me3Acqr@DtXgiP z?8m5e6*%*4hR=uVu9I!^(S zq31UaG~H&GV0}(^>F&BM6()`9czh*}h>t`*zwUo0>kmq?OH+0&B?b1b2EnriEi14? zP20c7AQ{(aE5sTD1-l6Zr-gM^;p#8ngV`lBjV=*~#nXmj9|BuDJHu<7wen*I!U zm#$)6=?5A-S7 zV9j3IygoH6I$~_Q4H|+UHO}J-Rl5StE;)MBH5{6Bo1Fi7L3Z5@Rj9Jh{$>`eGG6~2VNBfMv*?G{iH+sFIjPEz|9 z&iYnp%jf2_G%>7syjwVyi~jRZGJt?pr_)&SrXX2@15n@HcJW~5F40g=`r1(Ec&`3= zI$cS0H(tYF|EHJ0C<{h-7)7fbS+X$A0uDFd-h!B-D0Yna_-BgvZR*ct?N>EmhpqUg z3iCL5lUPBmF;m;QvNQJ9?3U!6&p5R;D#3-php{v+8n71!ZrAerftTcZ<|0(L&kl_!#bt`~&4x zSGmqZSnB%lcwAI4LxxLk$mQj_m&WRSn*;D)DFNQkO{$=f;I-}OwW8C<;gRiKt#N(8 zD_EP^yFB&tPUp?738L6Kz@x7~X#HXPorwR4s}wuG-5};!v+ZNElSvIzBH>v-S*5GY zi2W}Z89fiI^1I5&pa=bGZTIopcLoJ}u2-7m7IDcWD$ko3+8u6!TynnO9Gbli70F8F z$%=|eo_fQe^5OutBp+5_!SBq?m-!Jf&Q~#25J$2vadcE{+WXTJuH6uEl7^S3OYFAl zYU}X&Gv33Ve(mI1K0*z^XtNWH@9a#iVW?3{eS^!XLbo=rl-(z{E+{OU*8Z~E%Xu`A zbfV!6gaGu;@;cFn>Du(+M~OUV`=S8GD*>Z{#G{b+MPGVwKud9QoOpg~mp7kJKdXD| zs%%(bmVUU$qZ~tK@lR}10iPUMh=!|O0n}MKO=#t=0`2yeDhE%bu>~Nty{0sUYN*BN zC&=TBH{NgF?`@VD__Ke2isY?bI@X(O_l}1tU3A185q!BJjs)xw1p3tzAtB+wR>H&oA0HzzAvWy_0)kM3Qc0+WKhfjqOklJeoAu@gzKwc&AwV&^ zg|tPnd~V5(f~UCpRcPGz1bduvr`96@hTb`O$;YpAlD*hd0) zU>-3ZQ`AtM_U#MEI##rfER zJY`qrk&HrcG$!>4UtztCwR33{vYOjJ#bJw?|A1D}*M4$FP{ct-Z&>DpAJ z9GC7O_gzk3f@=+5u1F1ppJS=6e_>Z0f1^j-O)`7mU|evr4NV+iV;z`q!u-kt7`BE` zbsn{JkLTHf!BkCL(c+uyX?MR3>N&rxkmtOP)j|74x3%FF+@oh~j+N6Fw2sZkAjRj<&QqVZ$& zQ4!&)yqTH#_Dkf4Lr|;RWjba%Aw=D~XUh`{Ck8FPrkhgDQDnimB-6^rY7UA^H zgf?oetX*SK^A#{M`=|ibW*0f_Ha$)E0)wEdgGK&Tk){%ClxM$vwAUqp`}q~TwWfVH zt>sDW2zTolHQLY?!7SzP%N2kY*6QNR$*<8zm^Ep9j#J3B>uuvne6fAG)C?3T<(NZp zV#6T2UD+#4CJZP#OIW#BC&ecsgT*KJD%j)FetHplGffN?A=5~r_?&%`r$!c}AvzZ7 zNtwq#?W{X1!((|U*vY>RQkcm4_{o3c2$M2x`^hQses%V3e|l>!C=Xbej}N>r$ii$t zClxGOOW!%act>vkRC4v4hV%K1xM-`@R^o9@;|Lpo>+9wBM*3CMPe>Au2bDm`ny@1m zmL@Fc8_uO4C;ZpzEK4}wt}+_={;l;YSb)BmzSqd7arH&(>8jiMpqeMs=!=}vAwO15 z$MD~3rRH~i3IF1|$nl;|bT!QAfO)8IgL!pEL8~=%wXQOV#>VHdbTunlKVF+%g(r4d z4A#O(qECc)7tm6@aTa&V{8z~vr(I7L*C&O!IN}pd*=l;?a*Y*(996tk*xxk`T%UTS zgj6p#-LFt-jL@x`@H5kY7{btdaa{3LLF)4J#4x2n%KkoK&~!liI@DzTnePKA%wsoU zfkN0$!0mb6_x0;So(#Xa!9h1Nw#@KfcjOWda6I+Tlf9~*L1wEI?gBvcWy{c+v1wa& zo<>ovrhsu@>fCdjRB@`fd%Z1dK$H*1J3VmiJz3jtL&YhxzB|>FKiIKodRi}3%?s6e zCL2n4cw}ozMg@e;&Q|Gxr%$d2lj8)8s@hlpK6gygS%n=1{jKZ~D zdF)u)^eHXWzb0Enh!g=>=F$h-gdAEw$@ouq9}K1ykj6G~2?XP^5w#MS6AVHL=dP+i z)`B9@U(SM z+zrlM6nw4p(lH621c& zD7?Q?J}C&C=l$Be!^C$)vK9-<)NscmJVm|#cxr0bPL=wdQ zT#)>3!L5MGU}SzrNwgw3ZJFAl1d7&S3BRwX*+BftXO1(U90fTh>P^O9bD9v`XxOrw zX3!F*h2>FlUeu%;b<|C#)3NyoPg-;JM0qiigu)u&CU?JY6)!G<+M7VgS?+u#! z$ma3+uyPIR#X8L!bCp_7+Lv^}w*{ymx5XYTJyv+hnSkJ1&9MjIilg!*GurFal|*~E z36Tl;d)3Wxv%}hhl&@*SOeKqbB#V0f9~J|~zDRPPtP7{4@qMd1u4$r+Okg^rcmbe5 zo`Cm#yH1;DoczzTx|um2P0`gvRBdfUqJuH*?wQvc{O^8}b@(Djp# zy@pfj5!i*D^l1&$^Y7uAq({5X?^GU{|Eeo(Gmj$sIFx%nb1AoBoK8n)vl9hO*kZ@Z z=`B(+lC6K{=3Fse-4cO^XT56i7&hZJ z(~@9=$CYiH?Udl~sLNiBiYAOC2KIuFtOq`=rzpzHdhZ5!Puq%YPcP>)$62~Nd^I|u zBN1^C0|n+k^9JsH*7}HU6$f#%z&A~!PED?ASih&(yoqieogR-`3lTC&} z4@ECdJ^1+@o2k6PpxHuxF6u|T^_2Vt3R-H+c8_9Z5tKe;8O4{EKSRsuXw-e-L_cYv z9`f35YDPxw_uOGi>`0|W#~ly-v4_KuvL@T>!Y_(#(vj^8YhvEND*hn$+H)oYoWcp? zsQ9tx@h-cwdS|ghmxf#K72unE@dEw@W167J2_^ev-eEdKhpFK)G(Fg9dTC{o1jCO_ zhj#O-%i+lI%7Y`JQtA!xYaBCh=jRNjcFWBL zW*D4?YIbEl+x>Wc?fakvqmYV2sP|W`kz0i|lK+njzzKCOLufAM|6%JbqvCkBwr?!B zCAho0I|C%R1qg0~ySqDt;O_3O!JPoX-Q6L$XMlls{^vgTdCz*D=hLiStGlPFrlz}U z?|uC)UV_3OqrW`1=b6C0AoC_>wj|-yoH4xoz&Mx)l$ZI(SB9mna4=ySE&?5rPIb>L-Uc5 zcc_tDtRGxxYUcM<5Nbd$RIT^p8MP1qnhqX}wzvWN(`TGLY#INZC`IQp40MCFX7|_^ zaNM@~j^AZ_gR%9Bwu54^V!KtNc9C_XuC|Kfk!uX$HxGv{P)kcx_D?LA##+WNv&*-~ z)5o=)mr~0Qukt)1d=^{pVl#NQ7T%E6;f^2yF_6`I%TL5b zu0xH<_4{GE+s{yWW1x>yuuIOf2<`U{l|Mtm*`A!_sUwHhcU!Q)3)~PSN^l z`W#=eGnnqfwQ4`+3Y(c5YqpiqFZ(^;Yq*SuHC9m{uQ#)qEQJqlINJ;mbGRM-60WOc z4ioCj?o`xf=cqro1oUai_On(Jl+zu*@1 z-1P@p631@I(Vp|Us0XQ;)h59F&CO|9uCtvEf-tmJ z`Y$rd@Z=K&(=_q__Nb+O8%Nr)Uan=}b8ATsi`_P(u$jWwtSPjbbD5?)rnKHR6mNq+S~Br27WTjE zKO&FRQe76JbdI~d;r)&UX?5?WfWkfq3aHiGJl+LH3rw)h)cb>5YOl;T7xyIg!(v}D zL-@WGCevM6y%jeSzO$)6Z%>>VR;ngX1|-8w2oUkwE1hSrXOD&V_1Ul`2$bZ-!fqIE z)tt50YEIuR-jng;c25{Fv|3LtM+&SCJUv*%`a^7{N)w&;)3QV?GMLl~U$R_Z73v;TK zPit~Z0Ug@~{0N*%nVA0Jd>5O3na#qqDWV=Zp7Wx$+-&8NL%i*IN1`u6>VC#!tu*q3 zlni>x<<-gh6D6N}!%zeRT8yD|)o!DxQr${<+~CJxq>c(@afSHgPRG z`96rT#HCuizwu>=Gi(EKRlq2iFaX6R#kQ_YpeadMp*WZLs!k%!0+`sJhOt#mTlvY&*{xo8Wn}e&_YrG z@N1Hf_4ys8o=xP3QZkuHMT`=n=L(-+_l5q*p(FM?#9aMZuHDpu41iP|rBeaiX`>9p*!P^~Rp_F`Ulf2$DSrb5yZbu*`rIMJV^srBh ztOFZjcPMO&i8_b=> zPg_sr=hSx2XhaKcJT{BC>6~MAWTUm>A>kG$=s->Fhs2{qreQM7+^T9fv$RxRX2aU- zTk-+D^E|+}ztb#Lr~K}zCm}PW(me|)Wh}q*U%%C<$S3clxjvaR=?#h6{w6QMvtrb& zrN4M7V^$KrD3#A()MTXlu>;(M25Eb~rJLMY_7mYb}mx25Y+RMRAxE z0i7=@o?%Ymq9Oap-tL$AfPLmtl0qe9zwsY10j4@@vb{suXp)&uVI=K%2E=7YmUs`s z%75>fhx*eYTXCQEPo7;qXBQso?PQ{_yqn+J z8LUeA>GkF6&6X;fJuqZS{(3LU_Nz`__X!athNUOLGyMo}6=p}oOjB!_?yZ1oQ+R91{*dy?vhAlUcSQj63F;`D{c96e8n-6|)xHX$oTp9o^@)PVVE*`q*Rh+%7JFF2?X8mb zX+*k2TH26Q^=HRy`Cs>~Kki9}Sv_wdQ1)3TuhY4b+N>QWrUxLZ@i`E>UcGAR(n{d$ zxi)*%gyVinNc#8Rbr~9HX1cLt7B-Zc!%c7_=4ahaS2X~*htR9A&G?x>Tk%TrDYczar4%qgH4>NVUJG~SYDidE9a`YMJnKp@XJs&zZg zw*JlE*q@B&mX*XND8Wc}#BrEzSe5q^I&KQI4breAvFD?k2UIJ$aqu-{LEFieR_Aft zY+sHOA=cUXhPnRTIw_dUyan6@0DtRAbIr>7JH>Cuz^pc`pzX~a?(r6%L&UXC zSrZrKaVrVMemwG-kJgN9^>*Cy+FvW3c4t7`V@q58(W>74LTCA>582ZK)>9`;p-eoU zS%W+B?Yl0H&v={#zcL)@K2q$(K8+ru=gx@z z;-`xV{C-*_2^XBULY3nVlUh%Y&qd0Jx-7~acXI^%%mDE{F{RKK8ndCQ&o3>{Bn5*Q z00~RtYI_hUf%cqFI776%2X?w(;o0r!rZH1_HOAgwuN347CCXBO*7=~}K}P4*ujahj zp;ybLNSi6-ih5%NRO7ipi&1y3%IUnV46+{}VzcpEVQEJCJ)LJ9gkjMYm4~^_y#~ad zd7;R@L6Qy#=RKk$%Lc9L7XfsMo)2Zhx5r@7Lw?d3X-U=Zn?zxR56)$ftwd+{n;2Nw z$%}^S5})>u zR$nGhwgA7BM=m`SGOmO`>yMB2hcswYc?x}I3dIQ%L=+{$+35U(6;={&j;l!}t+%?~ zz4pb&(_;j~(wXdCyBupfPxBEs+Bt(HBW#-dhIhI|J5M*(1k@92`umcr^-*}fo?DaJ z+P||r?jp{HVL@8jHF`&MQv;||PZ5JM z7B^jYX$C}~3#eSj_64@x7Wo9`T-WgJJ(b@pU>4?M`LC}v3cn(DBa7ZCHVgnKrF{nq z3P}^7i;#^<{gE@F@b#TRf0U=ZzOT4vPouA)+TEUI-F~E8gfE_62)KB$d}~_#V`Oqw zAh2tCZ(;G_be^HpYTON_KTDFP)D(qA`No!ClT+y>J9S8b<(6Xxebw$V_w9bda-3Y3 zjehZYzZt(cSplgA-d@dn;&(~P-ddzD1$af!{ozp_RaM&%18)ok_w3mO;Xb>=4+#D! zt(=%~O|PHsa2?FGF8Paxn-;@!A=XXs1(nlDknm(Wmnx?9> z#qRo^Zi^}hV&DUqC+Kz#*hD%kG)n13ZLqJsC~O!g%OSLcJed0j(=N+>HBSWvc=?LC z!KN4a*X{mtWc(k<^V3#kB{;UF+@?zA`eDxTRC;x4o_cLP_=xNe?6LpFt=HNd>_ zN3pHlv8(_2X4f^f7wyyN9A-Ed{@{q(u8~3<-yr`dM+v|-$nmYSzj#?He0q-B4v&Ge zYHx`Z-lolq@Xht?Fa_@u+_E|Xo>+XUD?RmXffi4}(8d^C3pc+kk%P%NK#%kx;>5Ck zmrgEa7p0Z1UW2WwvjpSVYF9XNkY-Rid+6n%k$vvk-U{p?$p{G5Zj084ylvuVho}d- ze}(5@omh0*`s-|=0j?mpktA6? zh^XY#T`J-<13$21$RgY$)kT&;H(IDgo2|dstB3sOhA!5Y&!9-<`3M@LM(2}uDd7Hid2`<^g53M-tI6Gd^mM(nDA_n6@(3o4gXVV|KX(hNz;TUgJ7?s9;7v}HmtGD2 zG2b}VzO}5yl?nJj5uNyMC{XR(kNX#{7`uoejkos;+K9J*Q9gj%#eHwWEtgp=gp1Yz zWr3u~eG{QBSWTja#Z@|(hwnTYT)*R6YmBetV1uIW^m+<$LT~(Pc7%V`?!?W#Juv_; zCb^sm)PNRNk^zSf0c9LNG~H9`HhGq28)pIn973W6gnz`)*FUL{|5^4i%#x&urH{u! zrdFDtAH@*j=8q<$etk!(PQXk^DUAYBBERy{=fmr~_wMfXiihSf59Q*Y`DW95{!de{ z3dFc`FGcKdQn(?4lCNSo?Cx3U0$*zLS#+5jf}h{F*ssIB>sJ7i|E0GUQ3#R&tjM#G?0R$f)}*^?$B} zP-H@|#qcN29Wczv3S$2uYLI&wBHL#u#H>d!606hvBL>&c54;TIfOf$FXNOhkWh92V zNtl~)>r||M7?YBvLVk_wK7;z(@cc%nYYMUR*b>S@)MiNjVT-)Vm|RU+B2kD*!7w_O zYX+$lVD_myeg|bAcTc}`ZTHmONQ3vbZvAqPr(6IYIWE)fPd^d0;7Fn2V3whu_HL!~ zja!i8&|xqt)NTc-4(>>De|`K>9Id_YmbpXxWfEqh}h;gpMXDGH1_k1?_fAa zca7nFe1Ez#l*;))CQ(?sa2@7z(-)0b!8b>jP(i{%94vGG>y-bxLYN&+f^GNvb*M1Tovh*Tx4+sJ|Gv+E zo%GN6VIV`}^x1EA(99M|rl<}%Z$EyDMNluF9Qn@||JMb=v54hRQZ9qvKT^qcwKFHsZ-P zbf^18_(qr4=TCHU^c;g5p`P2Ib<}^&!~dhjfs*8KK{A(EgzV`QQZa;wJ%PJ+KaM2g zUdB!+XlVVoTMqz&b7KMiy*>=jM~bgB_WTAwh%{pGSE6f{JExW~>a)XcU8;06e*fT$ zc#62~-#80A(3KJY-sfymDFRvt<9GJwDe%rmeyK}3wg8 z`aR%Op9d)X?)LU7Dd4=OVm>}z80<$V`n}X4wQYNrrP$s%27`^__B%b05HdE3M&57P$pfGE=)dIv z0>qWF`H>=*afV;L(mmw*ZK1&E43yD^@e+z_L}$o>?%k00~jK^J6NcgH)sRoyl+NfPRRrHj{Gh+1O%LJ z54Kg|hS8!inKyRiQPZCqOh(KG!()C#0{rTm->$E>z^8wwI3bEr=8?F(_%jHEnq+<5 zl_kJ{Ic_`LKj{e~2R3`i{OP5N54c5EAdB})SB~*1dxj5~l+nOWbBZmEe4_tPkI$0L%m8 zNQJ^%5ar`~QHO?i{;(`T3hh$g zU_}R09@DtdGm>KBPceZLTWS0LT5)@p~`Oz`}fg67nSkdwOAzQa7m zx2)HRc7tp=bQ3OQ{BNzxe0(I~^I|J7xi-Uc?Rv0>^c0D*cqn<$!jjbf(?ciDAAt1& zeuki1M;e(G$LU08o;jQG@2Cpc42n_{&@hX^ZKv-W2y;3vIJ#gY*=R4b@pX41EA}*% z&5$8twm&9|&!OjFECmZ@Lh^yrm7VO)esAm2YD{v_QmDyS?Gl0pDY2;Y$NZ{nh3jwY zAYi}#+;FoznumdKJFJ*xw*E+B@N%`BfG~6@w*_WEJ9a zJSBfzyGfCKbw377Ct9|%0D$57_>`BXhw|>5dfyvt!y+b24a@NMnsU!MRLK0v2N+hiBGUB~aPz&TlUUlMf& zrL*UZ#wm9|RKBvy9$O=&vtHoG<11vk%PxrbqXYr3ZRk?cN3=~^Q9htfi#1&YdjP@l zuu-1#eir9octp$3(X)xwrn#Dzh=GRB$9q?E;|?KocXz#6>}t|UWMJ5ww5fZqiIjV; zsS=T7UcklqJnGXeV*gz6Pvw6<%RPNR?yLcqj@{09e@D3)q_tdhjG?gcB*%%8BJTdF z9wYqn9U1d>rb0C(6{04UiPCV`7fE5(YWod4)646X8#fb$3|#m$)CPloguHe zcDqfT?^C)VyH3cVw8BaH)gPX$?vAQ5(9MO2%DDF@34>YM#)|MX9S^MQk)_Cza! z;Q-oh!21llX3`l3murH?*?*PWpb=S5jz6yM}1V5P9}^ooLtx9L|8( z230BFyINnaR}@fjfWvBoON8*90tbdzQ@9Ul+=~2f8e-Fd`h8?`${%0e0yGm8zN#W} zpBZhn!06y*9xar=38xnmTL*Jn-#-DbTRvkw#6T+izsfM8$`!6iO`?`HHv4Wl z{5g$TTeXgLy~QrA%gb4&%hPEwPGJawc%e4j+V~{m?fOvE;mUdf0>>RDvg+$p=o|_d z~YOX7IX&p9jnRbShd73pP)tzZ{}Lz#vssRNM0PO0MmF6D;Az`<;hjCBoU& zIQmPk-C5my;uS5&G0b!-Sv=RTrK?ybL2n;(yo{WjK-y&l(w)&vo-=B@HSSyA#j$b^ zPBdCOA@}p-ZU3yI%-XpU`QJ@AV-?|N>j~SVwIT>+_a49eleq0SzA8#C*KN~BV$p?v z-Q_Iaa7!2R2%`Q@X2_^f3FXbnNQKs-a7Jc)T*6=fl{3v$^mx*c+~tTFYIC&s)&&QL z4=sQ)m|6~d+oX-nu!mVb^^GD5k8Q||O{GNVCu5?B?h>YLZal2zT?UuMXUlauh&^=@ zW4WOzdnW*VkHVfw$B;-T1>k3TFsxvL@Mu&Ntxq{=`thaJ;XTHe>^Qw{>*Q=sRcVSL z)!TAaMoP1xj`l*0B9Ql~k7>p>9Nsv%&QDC@8E8d>5-eP!V)$aJVo;5%`vNEr1vGhD=o2YXH zNhyswG?~j23fqL>B8SYEO(%m;a6kK`OCuLWtAB@hQb}(3{&{TL^m&9@U+F*@LRR|= z%&HDqwMV}Hsq@oXW*`))8KY4N;s}*UD&jpF#kQ2p-(XV2#+;0YNoPKRF9QyBL{$K} zWeRJaYDeM-;qD0^B2k_FZkJdu%6&rGXY#0J&L6>< zTitpsTVt!6{tN|U2bmdj?Z&%>G>rVc_r@%vxgtaqsuOt(*`ya|k8~|KVe^Ki3PZI0 z6u=x^K4Jcm^v5DGKC3y?O}NoKKwUDMCawf1i7@vQc%wuHJ59Uk_)n=ucL&=ay(YgG zC7_`CBsT<$!W4##GjsFntrf~Hi_uN)V%~yXgRuLiqdQFOXreQ42kLpOfk7w+S2nEKDAica~B zfhqMOVcUEmbw#TT1TkBe;`D!|t}v*ntew?MDw2+a7s%)T`y=#untX(3yjphn3Sv*N zjQMfmzGPg}bZc*s6)QM15w9I04{3WJ@iV1PfAa*2wwETY7CVZ;QyT^U#hm#Rm?6&? z+4oz;Gm?xgw^%+4TR}-e7Dg&Us3!pYkoIkGV7tT4!ffLcxqiYx*un9rS~4|f5-b3$ z=MTM~P3M8W`qQQLfcd&Q8x~8#JYTG#a_$bY)B0EpFi03O( zrp!ihEB~KLBKSvIEqecb;BZj| z^(n2CX(bk|0-GWFn-nr0DFdwIM{iq-dqX435BazE#1(64MU{eY$1|ASxUt13F$LVN``UsHqd zn~7g|96kfiSX#(TqW<(~v2q^51W2dkomPQIIZu>Hg@Szcr~Uj#r*SzcOLCLoRc4Kj z7S3B#AsCmIRvizx&)$dcsp9UCSK3;^|ELO5wDCHSB zrw`O5+iK^fYBl60Hd{^`4;du(hxE>|&nbC>?}>uKEnuvEjE+)h&rt)v+=(M*R-gX< zN(#71D=ixN?jTi|^Sc}wF3eW7#g-;R&@X)0EbnZ-wKraSD(0=tY95zCvjKN)pYt{r zZI`>^7rY&V8jU7loqi|!-9*sL^X1b0!cq6FwF%;1pAxYkUry5#M6V_{A)I7craOyX z4%axae^)Z|vY7MH@7iXINgXL%asGVBuDY_>7K}dU@hNk!R4GYkqTm8Y_Rx9~gv0>joQVtM5L`TqtO+qwVh$HU42P5t~ z@USFjV>cqFWenHT1(|;&hN{ZNEb#r1!{nIY81`O|bT5ikhmhBL+bX_RPsne1DQAkf z`jsL4;nMnn%~HN!qHwBnOHCWlLPv79*c0=noQ<~RL_zLxAwX>MfVGK9(OsNkr}zZ7 zmpk-9%9cv7#VkyY?IfKgwC5GvMpiQN((TI3rJS2k1KzXohSmBONm;gIQ}+@Gz)P69;hfWNWC^mv zaFk^A0x5V4oo&`j!t00Mc+n4MoUrn}##@|;@6e7fp!3iZo_rpc*mGt5h+L+WCVqlu zB8FqZDr;^hm9$g8rY0N+SKs~#>iiReF^Lk}Xw#a%E1sDI2KRC8G#yVMuqCLm1fGnb zt&Q(EwO?Y82qM%x`ZU3UoN^0@Q`U(OUn&9{&Hpr?y~ z%>@(aa_Yj-mL0O4R5Br6GDX|3r_V|r#~~QrXRTy(-eNw-$qbr{?amLC;djUTZ+U`w z0UTPrbc)ZbR$GlRJs}*aYEuB15NM}zF|3e-x zz%Rcq_It?zaXJ58aL>SHrPdX)f^%jR)tnC+{?ZF-@&zFuw==TwTTEv!x=(4=M>n}& z2%<&QAK9*T4Mhog-C~zL%GdqjQ_#j4gk+J=_|^&2I{DLq_ddIYL-bYQX}Cgw%+xp6 zO&{MAZim@5BIyZ8@L2SE_~UvY{+#%=nD!{~p2LR6c8nXRDMR#|lkAPT4+JMT4JXw5 z-lK3jXdZn0bhuM+9d#B%aAbHErb+xcX}x!d!)oQS$$awRPqXXkl~T=G9e*_n$@-r` zj2A%>!1;d44eMH)M_$~07B{AD%ZC?*R9i`6OQY_#Y#~N#Oo&k%-DOPOpE)tT%}cKb>b;H z*EBZ6*|&cGDaZNgfX_molr7J=NdtObE`9EMU(3g7a-ukkSk0$wHaoiKOKkXxdkby^ z+$9SIii0lwCJ(A7%=UAyS#1|o!8Y06zoRG}R+rp3D4K$o_Y$e2&R(gU*Cr#i-A{ajc)Od%$CDb?y<6_(7PCg&iOEpp}IwHrpbrHy&{>T$9n z%K!5BGWbw2I;`Wx7m| zk?P$r(XxYBk(0h+y%xkYaZnxrj{%ayod{dilOZ|`3pa*P6n?*u`O-7xqZO`F^Mtzs zCtN+qz$@4_)AR}YXKL2-imwAYTA!V>>BEo9y`T9}W58kf z6T*K@G06Pryu9t!WlNdtZw#X5w%PECAg4iix=e;_ki0-DA*=0bLSBC=(jhLf8VovJ zl&o@=u=8V?bA@I^B8X#6K3rw*#ien@k%VZ*9DaY|DieHQXph%5<)-}_W_)Z=;p6=8;W>eQ) z?H3CEeiU-mH7~2ENRZQvZ#VpCCsgc|L^v~WaNEd?!E#V*=i_L8&2J*#V3C`GN-*!U zyMXz4azoKfmmvbkR34U1UYOUrj;7`{rdE?m&m9;N*EjTR=;5~6(kK<5m!5CFJskIR zqZA>wDb-%lppnClNPXtBv$(Ve3)=N0!`QppzGyXA{y9NZB*7pNslqc-$m75&t-EV> zn1-zA4Js4J{b4HJt*I*Bz2!kTw9&*>3%PT`spv4o+_Mo*@G~Vm<_hV=1Fty2>0`4Aio zNw*P!qqc#=%mSA{u^~ieWBOjJK69O`fwlsQ()?L>tD5!E#9U@Fb5VHSAX6C~{KrMR z&5~hwfQLZj$inOJQ1GPlQn6mP!0Q4e&L^9~SrVH?J@e=fI{a!G+KCvdVcG25C}UX` zJ5DyfJf27QzR(`*m&(_{s?V+V)6Nzl)5VdMeQILYd}}v-(vV$*JMM!b_F|#i`HWO= z5}n6no{+0A0^v1H~_yTaG`Ii27#kEijK zq{At!694|0c6d&*VvGl*7@#QiI)r1SYOrj@llf;?M_aRPv`L$J0gR!YSHoIlJvltgc~mOYI@7)^TqzZ zcfn|agK#$_okN)crikJ~?w8+^ekwwY;A35I>Owx!T|`gQO&iAVRvR?sc4^fyz;(c~ zr^z#hMWuc&olpciYht@?6r)-U(mI69Dpp$q@8eaJKn$hn-AKbq@Cn_ocW zJIPlBqEXV1aXcP5oeLBY|!FNKiS#pfM|E8Y}An=dAdl6M6ry{kUNomPRNle ztC-^3P}=9@S&OVB|3`}s4)*!t84>ey40@(d3eAmY+H|QSO@T!{U^&7r1I=MyfXat* z=r*)u3*=J;L+YN|L6E?`53;;%S`}ua$%wN9IZvx=V{em^{aSpu)DN5GItI~`7K5JX zEEWr?$*7#*Q%ir#4VvhvU$UQ0%lac=)F$v%;v=%2YBxJ+>@t(Rw<14!(OUglHr%T= z@k=jPOyp)aD~=yc4zX@)UUQPpgzm1OqKxeE>vi`9%FX)K5c+N(Z5J4 z=3w&kL>5G^Mn!^0WQo{N;Ru&SkL0Fc1LaR&J`zKs7A9(s4Vi07u>;>6cgjM@wP+D? zH2uI3Wb(xNtBGhao8R*{Ou|ip(HV=Qq5ISM(_uNn`w;u9r}-Y>L{Gblo9PG)gBClR zeFs?LIGwCQkOZ7wsnORgU|rHw-@U$scYQ$sXKrz&iDH-)`r33>Ef*4~{Hv55iS z^Jh$c)1A)ti#1(+9ju36Yl0A~|AgWGij{x~W3+ZzaqlW8pHU&F|3=-tFm#A6+t!I8 z-K*A@n2Bp(?1*mRLvMQbDi78a9OpdWf)IJFF@TkHcX)5L1Hs6$fh})L5BG+72Ag3p z^3Zy;1F)sUx+>ynr)kAmgqWNg*jtUJ3KeO>Uq4IsCxGlWJM=$^eWkg(^bqE1cU~04 z5oVB?`&c$fl*(B1ONwU#p4r!;f3>GSL^`k~&8^Xd(16;-@=Bv_8j{OHO)F1c7L|DZ zo!ykz{pzd_ei9wl3csg$KsAO$IyZTP$Orswi81Ch>NK>01CS8XTZQ?|^+f}UFAM*63owM^;zuUsB)S93j^UJjSDz0)3} zBFkgkH^!YPGJ4r&Cc1a2ng%}x1m_@GJOp06xj!&T)J`zjA`k#fsH5$S-AcXebfHu% zw)V8*<2fkTfPX+VnOpml-d9zE0nX-zbd<^+V{#X0#Q9t2T*x!QhK%Qq4$QETbz^_B z13wz-MD@^8p>-m3f2^%#y#%uOSiWkW&0Dj*5YXisN~n-)vwsA8YPVG#`KBAzRPzD( zU|t~2C64L)sq-GLL%_ewA$A(X18pj_T^zopz6m+PtEc>D9*NBCctkz6J0?W$^Z@9dU=Q9>e6q zb&fV!OsYeFziEFVB9b7(^T{Nfy)hT)2x`L)nV=zn%Fe;e#!(Xw3C5(c$c9!i&q{OO z5Nw^aIp3v{`a^>~5fanwH1F;}m+NnP4+)G%v?u1`Y5MY>)15ym&%lO2#2{gT$tq!- zmzc}_iVj`)p#f@90rZy}r=h z0OdTJOv5NV0LZI0ydZOC5HX2DjtgzLCnLR;eIZfGfPsEcrjYxUt!8I&3tMnpy`134 z;hR-qJlUM2W|yZ5;xMti1VNzjFnJw?CZr|rqJVK?Q(}Pj9XC;cGmB=Q>1^uB~ zziU0a!zsb zV8zf89Vsojs|q#)&XVk#oWyqCa0!W-9NywMmnR5{V3rN|tX^jSxdwxWI_oj}n|Pp3 z2J>p-=P>_YIF~^9mCh$9M62VJime8dG6UMrNgT#TZ;u(X%-8UJhP29BdUYryiF8KWbEH@&-`l!(ejysuHG1$ z0|8KWhM$VtkrlUa>bDDO^;YLFmmDPI7d}reSuQOXxG0b2)CJB-_#RE^o@W#!(sCYl z4LRK;mQ)IWP@;Q&iz}l{tP{~ila=rhs5)|jgC*vq!QTA}_5~L3@^UNY*wwWL-N8{} zw>x_|*tbJ?pV>u~E9=(-`pV|=jZh}Y_}uLC^G9{jBI)?>PdrxEZ`8fV@7GTlkokx+wkMMg~cL;}Bb`lJ4qqr6x=H%m%=x|B*it;a=o{9Eey!GOA zKCtXA4mK%Y%(_^_W)lyF%Z$xbwHI}4It(EtaU_rtS+vH&GX{?a_O!*eCbqbZpgYLb zWG+5Ppdo{@rOVAkph!D0eOd97YHs# zQ%TXGR}m7-#Cp*cuYnzqKnEo4)E5LP z%11*Z6`(|*6*1svQzgHs{+!IOEX3~<6mm<)L)?0^D-osi9IFo<>L&U8MXCLE`s|Q& z(R!huhUSt64pT1&5>WMUgr8*4YO7W&($K$Bg)$F}jqy%#o-=1Gk2ut<)d`cAHCT>9 z!0)k`Hb6Ko%9fBE6SRs)u(xv|XXiX|h&WT!~yxzc5kK8(g5stLVz>4K4Dq|X7!ZZqQ4{zTY6ui8y3Nx4D>swg%D$DUPr9y0h z2TCk8bcNpL-gV^Df=t58kd5K}=w3+kyWl1O?AEcA zk!BfK;GsoJD;_gWmJL`4Y4}7F@;H59b;pnSn&KYblxHHb$eVG{i4OylWPmtdYKK5l z7A-#_59CL8Qc~=ts25Vq>OL%%OIv0Ld{etzwcZM&`(?+?iW`YZ)wGwv?xlp_zME-3 zo!gx+6sQrsT^A96qLaJucha#yHmg<0JI#@uf(;azMIDjEuI(NH@$n*Q=_YW1ryDjS zuu->0^u0dP~mzE$Xny4-`omp()o}HIm~lxKS6N!lEOmsQ&Mu zYvbU10s9S%-*ho*$S%5S3vnhcxd&9LI{*U51yNF+_-g@LLu&rxYCv8Fx=_Ri5HTD#=~2^+_rADM8q0OTT`;$SuPyakQ#jcIrquo(^ZLv`Ck_vqR_-i18`0{q1BbMW8w-#bnx4=6i9B(nw_M!l==C*7!y>-5EwA0PNI1|UB zH~De&tgm_}P+BBFGVhF#Yvq+1dz5)kh1OM@W1;f*sdED7R!V)G_kgUIDrW(maFTdD z-=w>ZYMR~Ee=@HbUuRWmK`I_SlY17_pb@#m`;@o=pxUu!i$uVeY7TipD9*s1 z$TJpm`Rt-GeUF05)BTp&tkMLW8p0>^JomRQklRZ|x5($kyMre?bKd!}F5(>>zim%sU~iQzukpCd`q;`JG^SA3~x1%QdJ zV??BDM$d%H7j7@p4T$)8&q01N9zxY=;IBjNQDYhd@GCVb7+6bKSbA_cBKk^%C2dFN z390S38L6e)`$S+t*y$@c3Oo=kokX_|-}+?rUU*u(9wBkcar3IY6mj2}LvDM@f2?O( zPm^0ph7TyU&@~LiWzaGNwprPPyG+bxh>kQ)bp3vI+RD%CkI(@}r2{}7v&O@&(^(%% zdD`I4gwCmmnX2)QVdw1j?nZfcSIhu>W{g39jaJiUuds}wGh9+>Ya&hZ{!=4Jxnqa{ z5#FO6Kbx`AP%*yoH~-k%PA~o`E3DN67hW|&^;`slpP@@mDeMdG-AQFJMCZz@ZS>sz z7AHWV|0abZWdY>Jc)5$~rX3Xc;d(k}^@)?K3W%Ia@!4Bs8Hhgz1kFMoO}V>6K40JZ z$B>SW+1Ru^*#QBB?>_Zy{jaZ913uDx&sj4rWnIDHRAeU7c-$M(V)fTR{~qdRLWAr+ z!BD*E1CQQa+Pq#7Km1T66l!(_;0eM9V&p<>;yDX8y1YlbD56)ns-4*i7rs}DbLP1^ z2R2*J>Tf|DOcR_}dU&mVu(CVmzb-dB7m3}^T5{U@_EB&`N6%kAV13rFcZRv+b^=dB z;uN_wE+>2G|BtP=3~RGn z*R|VX#oa0LQk>%MEd@%k7N@v7!QGwW?oe7>i@UpPaStQ}cMY(g&biiHYwz#-$w3Gq zFFQ-SX$odyc~pBHiQ#B%xbEVuFYfRISs z*$ctwMj@_~Fc{_Q3hYFQ%*OxC&<6-pZ?^I;5_*0BqZB87K%l%QN9shO@s6J|_+Y}( z8K%di4Up*iAN>Q-AKC@E_lQj>hupiIyDuV~3(Ld4uAzK5=%pTmSpIL+eUlCM%gZPX ze7C;Y0>x01%1swybv`$(;Ak`8R`8YAB;Eb&?xL(2@>cSTgvp6zJcQ05<8%deVPX2IK^=D1@HkB5Rkl{~ZVa zU$}d~ATa>_yW2l;*>P%L4tkzQba1M9dgoR1HvY@0_z$c7Uw2CM@??Zdui_0;!cBzo zQ@fl1r46C2-T!l|e|@>>hww7FsrcwSg{zJa}=f~XVa9+0u z(|%JOP7v&WbKn;3S9fq9 z75+kJ?Y({Il_!Oipq}BcH=glN8k{MlJzH+47v=H|{6fFv-k@KNb^-a^y54b(OEzyiG0}|(w`L1f|9pxz+Tjag;?}sRN|Vt3L=RUeW-B0 zyHm?OJ_q?UaobHVcgwUChsUh|ONFOG5x*u>ZjaNI;ET1~DpYP?cp>`O!WCvFpJony zj>r84?+L_m`;=7ABftS}n&Ip#o_KR~eld7fbd^eYYj^(3&wvbH+VA2x7J75>a3Pvz z?5z?id+^M6(mjKGe|Ld~fqrefooW7C;PN62P%JT027=FI&G!x9FevuL1NT^yfrA}! z>TcR;SKZhwmEFi|?-tmab~Wu@E+I`PRBzSf{JMzKH()nih`TZZtOWJr-+E%`ee}2m zKWr$Fby95r9snd020S(%?-``tNvgrzc?Def!jAd*J?M)1V^qwd70R@njCja4_AG@a1|<9et5oaa~X|S zF=rbIiPSiAYx&0=+W$l}?fGBS#D8BVa5tP6&wKupkwm;T-=wlz?X}!xUZk}@E52bZ zh<*EN_4SV_!iSPQ$K8FGX4mNNKb~FH)LwvJw0d4;l&{t3a^=hA2~#HVAXJsd;B2AF zCU7)->Unl8cz5-mSO32+tu5L(#wV36lx3X1*K`NYsomO---Pe12=vXK9j0eA@E@%H z_d4?5Hqa9>4zQm1g$sU88cJaBl2$sn($_e8WcRnW{P+F-KflHoaSkya5<2Hwpy&gY z6M#n?wf^rl=70R1Rnb?aFK5O3fL?e$yCt6+CR_RcYkm38{WdZDm3Ho`0DNn7|7xW@ z6SIV{_J7{S{&Ty(4~LTCl_A?!_?Zch{=_vN78S|$pa1V_@cZ>DKhRo9A%dXJsITsY zI_M*5#r^;L$8`T)OCh20XA1=?1)uOlQm+2`Y5yU3|J#=$3V4tPY@zmG@VS~+z1@M& zW4Du@x!(n3{DFSo&{X37)no(GMQiSPx;W>iej-26@}=G5czfcv#&m?e1<&o?-RSe@ zS*?Wol|^Ild5f{SO&*~sW2k$F@>gOWHGa5%=nOHWw#y&g^k{8)IFP;t5%d3!@&jjH zt~WV=D`6(BzZK)gP0h8-=bTxms}YnX+|&#g=s8{tm;n(GQ#rxtFr>uqHXM&u6J zzyJN*!8LF=4*cAm9@oZl-SDBEfrITcB@0s*crn2ArlElfFFO57)*&#esotJnV+^Lm z`(wozbWHHwMd1d%(ntU2wN$qv$DZKCDyjKUvBp}F0IuHqJ4>|0CqAk}5$CbYJFZy3 z-73w6CE?PplM*Y~6N|IPMr{X;&FYuuUO!_~(zB;3%2dA&9ev!f9cfA}%Ii+D?ognF z^F8+7KB`Q1i5XjX$L(giwjYQH@^R3^FxU>=o|w7~EY6?!IWHGRr%d7SOC%%f{eh

PX@K` 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 JPDHLkV1i5nYc~J@ literal 0 HcmV?d00001 diff --git a/docs/user/dashboard/images/dashboard_urlDrilldownGithub_8.3.png b/docs/user/dashboard/images/dashboard_urlDrilldownGithub_8.3.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7b9e42c936fd9827f16c99731707ad5f49fa99 GIT binary patch literal 50439 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�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�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%0A`~FPikYVSpefjy`D?g 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

Lcs1An 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 T(u#Y2HV}6e){KjB;3xkJoZ7yS literal 0 HcmV?d00001 diff --git a/docs/user/dashboard/images/dashboard_urlDrilldownPopup_8.3.png b/docs/user/dashboard/images/dashboard_urlDrilldownPopup_8.3.png new file mode 100644 index 0000000000000000000000000000000000000000..6556485259d6e6e9187437f975f6898517d68d9d GIT binary patch literal 125167 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 literal 0 HcmV?d00001 diff --git a/docs/user/dashboard/images/lens_areaPercentageNumberOfOrdersByCategory_8.3.png b/docs/user/dashboard/images/lens_areaPercentageNumberOfOrdersByCategory_8.3.png new file mode 100644 index 0000000000000000000000000000000000000000..01b20fe0a1a4cf4e9a248f91b95102c78179414d GIT binary patch literal 35536 zcmZ^~19T@%^C%qKb~d(cZR~9Di>-}qYh&BCZ9Cc6Ha9lE?DM>TobTQ{b^3HocU9MP zbx%!qbxo*(oH#rT4h#?w5WJ+scO@VoV6!iL1q$MC30PU}SAnFth=_uuh{!hudm9sT zOJg7)%2-1^Jrqe=$`O5iJ-v}h8Y&oj7o}gnB9!!ehI)p2#(PG4MsiY9w6wOdkhVdU z`+)Kldz&o;odj*wF^!U%U&CdSo|)n|HBt*N*DNXmN(sPi3kxtPKu-h&Gh($Al>2&m zQb3Gol9SPVm+=LgB#@^S1t0K`c<}o+fea{wmc@I13j1gHo#P5N3EGPhPs0si3O321 z#JO^#;QnNQx(X7-O2x&Z0c(eFYlA?wWh~7hZOjAv&U1vRjA2}4nn1}3B0{Co%fg^8 zFWx)SGxEz180`>gAv>T)f0VKbktnG<(64tF7ZmjNdmvyI4I=oD6&xH&Gm-)IEf&_3 zCKgr`KD7j`R3MMS}k(mq~TOgkNe~2=M)Yc+&L;X)`#5N=jY?@=jSIqM4C^! z-;N*|kZFltCkJc2&6jSIi~*7+va&$bUpN#HI4}wj=obe31wg&$L-|U9IUxT<4Q!SJ`d>KE%2yqb z&<_zw$*=r}p}n!OwS$?BqXg+c?LgZ~s5<}w!J__6z(8pkSU^A^eCEmkM}Vvhx1o&{ zy}pr+fib+toL)adPA%CjKkv zzpsCv)7aJgen=2qgJkNZA$mywlCLK+>7;!MCm4c1tb4ea1yz*MYD-e*^o%eo5M% zib*0BMKWl__6bVbIq*KZe@A4e20P4lLFkW!&BJjQ1gMZ1X%;X_>!T!P+8nC=jvU#tor5lth z6mJ`pt)&>%9?M%aJ($k#|B#^ig@uL1VXZmCx|^Gq79{18USvpEnoBIf=5f-}(_e6+ z4e+E-{&X*Fxa0XfO_JPGSA*vwQe~yS>fWI0c9YdP_4M!-8{ief+>lyF+GV(h8Yfef zkbYmY8RxH~p@s5+9+hJvoS2x{x9E3d6zBsN?n&X&m4XUn5@Gjjias^=h>=Kea`T~K z$Lcq{J-mB%``kp<9L96)GB$|Pc=GiAfqpRh3fDBTe&l)BRgK)4?SxczBwHW|H@ zX%Ah%N!7IM9A7e87c zBPVy-*|=*465Wf)goBNr`0)XZZ0bIfWQx5a1x=>7lK@N9aDWxfFmjabLqt2}%3F0X zc!v#u2s&zdb8YZ1iS5irhXPnG^RzClL3$RWOMCc;?#pT^tJZx0_C`9)#_df^#OSqO zWa3JaZ*T1+i{~_go1$tb07L4OR@qw=@szjE&(B(Tv-(<^7l`9$J z56ys=R9DBZHD5~U>UIbA>yLgD@$z~Us+I&!O-WI9H=2UU4_^?!xqE+P7>mSh-k(2- zSCR}mpiEpUCto~k|NbIdT2;098ZGT+3FGp;sRe22((CdSB{Zc) zoggKyJz!1=9bS_2czj{>D+I0i~FC0daMR={-_! zIE%!>&f(yOqBf~j&Gg(QVbQ%?p;4Gsm_-VkjaY%V$;bUU!UsuNO^G&loP~{E3}-Vl zfVEKWi>(ek1YlcR@9CDIYJ@bwoE0Oeuao4m<24K8BcNA^GCh5Eah2Mp^POHJA);wt z`4n|8o*8Z@7kz1S69M={Wzg~9R0X{vTA&qfT)yD7$1kJN3V0e%AWtClyAtuvFGm-b z1N)X#&$&#Ya5rdSr=#W%35d_f%dv^Xbfw!jbLd6oT-qI_zFW94|0Gp$@sNnfNOMuy z9E!Om4_$5Sii)MGt!apa$dhkv792L4N&O*+l4$T%iOG2Jo015?NtmC9dWChuOA8C9 z^^*xCx;gp-F4hn7V*=03m$S2XI9mkM3k)V%rDF-C(I)zTDiTKjP<@ zf01~!EmdvAaAOGrvo=+9v#``_Jb;2CDkNX#@Y5fAX}l~|>4uyK6`1Vk2+cI*iOEn_KrvHtgpBrA^@^VYfjU`t% zf=u{m1F1D{Ojuh^flY*ziHY1!z^TF(sRwsuCEX3C&$HL{E9lLAb!Qp6i-EmV6tD;N z6_3k>BufPi3>ofN;Q`s79bSZkng!lf`yZIYov+OBK`jfu3>+_~Pj~+7X_8WCohv*f z4mC-)g!AT<@bHl(aql3(D7YIZC+2jT4+^=G4R1-g=enLdTz@iW%ZjoSoGzcP4OjDx zy^P=Q`+kBQPhAG>Fh`0-^d?=Orabc$4(Ol9(V3B!R|<3D1o9Bm%R(C5%yP&}Ss5y) zqj+mcn9kmu(&!?$as2#gq3pKV=_0S=dhK=+#Ec(A_Rx1bB?%!s3oSZ+Ve3hRP`C!3 z9P$jf*$toSwI@)KP6H7+kbi_gXK6PLuPUWWNjWam!sTnY!9g!^tCkfj1yH0lZMyP029fW_bld53tDNZ7 zlep%0yvphL>f~QkNNu#$9RzMsZ2ZeUG<#t_z_ore?y~R<~xDNaIt)5{Y$X#1DGSdF; zSn*FReIMe-0Yhg2Uja@F{prl~?7=M1;KurVK@wlJdbYaHN~CF~WgkoM?}Jrvx&9(lJR0}<%X2Qx19Kw9Z30kN0VueFZ3rLdQ=h`Wv)qK~ z7Ag%)!tIe^1TxhVBu21kD(2IFJPuxy*bsWXLAwv#u2K#g)M|k$yj2b#L2HZp+!Sxc z|DcE-kC)HdQnh5S%-QhY=Qp*xYGYKe)5tYSj?kupp$zca;y>bhY%Mf3zZwyE%_<6J zb-T2Kp5XbU4c7e4F+LWl+1og{{KStLj+q% zY7Al0__5ED?Fg5+8C+s`KmJ`TJ%IRW-wNH%CE>r+V`AUW-u<%xTeg8pQT)Tx!?whI z0MJGl+;dzcmjfPN1;qjjY{VgM>-j}UV`?{|1699jS%cBkxp_Qdw}7K+?z3r|rA~aI z+UI4ReFW9ISzla!Tfc_SJCUU#z||qCHm$? z2m%pDXdAEOt4pyM+ov&7J}x4sE(V#mg0}WuH)~ce45W=W#xUY z7iVl!;roL_jl(L?J7O2=$T$|A{T{84>qiKY2A61EM^Q&bYFG@9mV7U+ssMUVM89(T zB!^`t@b}TeDJP~F9GRo8w-t1^ixmo{;%>D>_Qd-{3yy=4SP}bOvuJ9w@LQ9RXcawo zi|d-r`dypE=*n)DkEQW7Z|^32*90lUPFGE@!y#`zoD0`AyDoh5MA*ptD?s${eO9Ho zgH86IlyE~!OAx82V0y~|Yk6+^qIB?xV}G4Ngn_f^cSBKbCA|vFZ2HhuWAE0rc^mo>lRa zcTW*m=O)X}uxW`&sX1%@H0E}N#m!sq3Ub-J#9r^98nsi|e3fB(dU^os^^Slb7rAr- zs2hHMCcnhyAxB{B+1mE+3VzI2X-MGxz}SDX6L|<_C0}#fGKk5&JrUUN0>Om_%L+#! z;aW}Qc-MD5I;^s<=hp#8sXTPw8Kgw^_(%!a>Bcdu*b-te#U}R@Nwbr>{A;)wG;?#o zg~+A1Yv(&!_D;Bb@Ln!VxxDS_%~~rSEkSuz3kPwx^BF7epGNrV&AC_?`zw#@Wv3~} z_ME2$31CiGG@Byq-Ee3+2fY-!qsj|D*7`pGa_^V;kTuKb@kf-!1&Bbi1 z&Z^2kYUQy#T>6@5%+~s*r#vs<&@bZ}3{IxmX|*MFS?fmzRe#nBzU2mJ?}ijk^ava0 z7!OHUVwbK@I@$wO;tctY+|p{a4=w(TWg#jpjn?DSGz7+_mJ&A3TW;*sbtT2ExU>L& zWO;nnu=~?_zgzie>4ZQ#m^gfIzQ31*!|*wDT3cvokIyFdBabEPsMie|vj?j$R^;+JT8O}iewpIFZT?%eE!QKJ(oYc1 zCw}B@NwqDv>y{aPQLUWpaxX*%Jpl3%@u>!BX95zw8owUZ#CH+fozBy*Eo_ZEa*lA7 zRg~29%65)ceXRgG>$DLEnJRwVJPO_i-pWqu%mK9_fi3}vaS%|*U11zH*Slk}<6R0} z*@RwToxzXP6?DvDXOna~!r@GN&(i}J4`UO1p<#+73ru64+l!f-FSET20rsSbWW;Ie z$7cs``~q#UMP=qcY8R?Jl8lQa-A_@QA1iJ~f4?^mP{2<5 z#8y76V2_~W@$1Ki$?9d%&eCN3ymUpJvlm&RE72s23v z=9_$hcNv}MHPiVG#V8GTU1~Fp@mvYPs0^z?D1-|3M5d22*|6aUQ5Wj*e#iEvXzb|O zF7X~k;-RYXqoHNOrvsm#Sd?U&bN3ccOtSg*%vf?#Dgd{ec9){(00S`sPe5T@yzidK z9?Iua8Q8G+K~Io~lEYhuvYFFGildzdw!cqfhSZXpxMY2J==|KbQTQBhzOABc~J^fqv&<%Q>`kQn6 z8bSrjF}>kH6$&{x+?k>JVXe13jtod}Fc^At!XYEBKN>rLEOiF;Zxa!dNLUTLbrGy( zXF4AXd_0EOan&%i--?(;`9m`Uw(9tZb;oP)o{1u#zh=O9a!mYuOJRuQV-UTMRHxZx zI=6Y!OvhBtx#p*ML>=bs4wQ23xIr-0DyMX#H3yjUln+l% zxI&eKjIas6A!eEl8CcY)jM_v=7PURYIsGqqso{oz2tWY9Rq+@L>qWluxONy zf{d3B$Hn$z-%gnx_n^u}24y20!@yo8@=5SjAymkflR8ee0sHqMT~@edQVEJ=6)Y9t zdN8AhsY&Fpk>WS|V4cGb{BuAiR#|lH9r~ACwFED|`z^a9ae~+erbHtu?7*V&>|sWs zFhNVuPX#b7#uB>H`C#d1WD05|z?3xFXX$RibwxWd0y(rr1gxx<3u$HGd=#QrZz!i!6Ec&juDW> zge?$S^rGAv2vEd+e=3?7VzRvGlPu-81H57Ji@!`T*iF!rlJQ_B51y#2XY~H^Pj&OO z43vqIk@{0laWJywp`uo1_}0lt3R4eo?fiO?{q{lDk~iBau0tC;p0p?pFG)H1vyU$*Y5te`+N(Yel3p;sdVB72WgQH?Bs7F=}%kMnb5=4P)wEb@J3 zyz-rsw_a(Dw`dOlb<_)$prJ%fq5x=M_5-Kk*qipxN1=!bD|{YJPMmeTIi7CD;G$<>%UrhKr^o*!q0i^ue3Es>r|Yp zJkvu<%#Vw^*dAHaP`3vQ2@WH(>lMKKGHR7t4JUoIOr)+OF*19ep-jxTr6lIhcWW>0@7edQO5Yk4;b$eTf}%sx znODJCmkVhJbGExA(&|rQ|z5$tnT@Ec*YKXT-r39yLFog*+mPYxQGH;B_@|*>m zzXGxy=~UD16?VPe=8ju0OJ#>GpRBy}sdx3jj<*I}NFfLe$@DrU5v7&NGBSz#3)^Pt z`b5(Vj(gJ(BB}`MS{e*9kifg zoC$l@^xZI;5&DD@&Nsy0y+2E0Y=30J_>R$o!zB(q z9mB1L zRb^ZmBq>E}Ey4pz#_!OnMt&J3)l{lZY$`8NP%j#!T#4!8GH09X)Ngz8#*IFWr;vKG z7yNBjspvkdMW8}zg@cW3L6)iX#5~!|wEjr}xzU6%APFt{H(L;kDezoakOAqI*vid( z774>d(wWBIwkrKqYrnu09++zyPqBv~@}dk3ycUS|*Z^k~z|WS+HxyD~-fxlIaa=LB z%xp(kKL><~b49JIQ8<@Zwly`My#Rqc+)`r3mHYx;;^D#z+Vr~jNH1QQ&^qM)7X->! zdL%Y3NVq_vKf9{Jam7BZi-xW8Rrt0WG=141nulO`ix_A=2JwDmMD1YNz)jP6t^xro zqM4&!<4fr}73vsyjY@=_(8qI`p_6@>9gY;8-D?-^#z{QDO#L*r{ZjnUo88*suAb`0^|n)$FE#sxsE6tB1czum$2EArFh6DFC5%UVqj@I{j&*#DJMmr* z!Oes1M8LJJE$q)V!STgKblW@dlav5&SNnvNJ|3I zeh)r_r*=Y%dRYmg+~+g z%Z>qf0e(h1<_I^3b>ryP3Vjz)P(t3px6L(ZE81p}4MsmSxwo8yODSPbJ0&u+@$pWFCm(ozL(ac0G5|SwO1I=7&q8bKb<_ zWhVt8vmz|xvYZ9f1$-_Q^MT)COj|7lLrMiCW|6WS#}-0}lR1^EdG75g!H!oxeCOD2 zoMG)bH`n*9qJzugDm0c7N@Xi9_r_jP`Sn6?w7xA*22CKCZ4EZYG)@G|5ks)@W55l< zg2WWlmJlA*0~fBrSEQB^E+GXBPZZC0VkS~7XoR35aV`Voy9qqclhb%ifBucw?%6@e z6bEVstIA=fPpn4txtJ zJoZ3|-Wt1CRDg0`$}l}DPfw5hS>BIvS4s%m|^w#dh>F&qhW%y+l)QcvqEfKZ=@L7(#>+C2@-6l zfK_&1dLdP#UW|8$6=@JvGwv5u;xI0w<)vs(KgK>FMUgR z!6YG3RRS%)nV(F91m{g#bBzTMIxw5f&(@nUKI=nnm|esL$W9qSj|o=tQQJJ#pZvVZ ze?+Q;m7dIHza!9?@JhnI?pF*i0dTcaGdd)8&$FxpCk3KjR#V#O#FOtwi#Nh$@)lep zQ-=ogGeHFLMSA9_HGki70mX3}*TDDpo0*rhCjKGUy*e^n>Hc`{v6R zKrKJcGH0K_0gp~?1KwN9N_8gvv@DBsY`|ovH;tsru4>i+a26wq=fCdh#aG?16`&1p zfJ~Oul`*h#nw`}#Jhe)_{#vv(>_VnKZD;C)-t)y!ATCIq&m;dKC@%z|2_d`!sP7&x z4i4u;%pp~*YLpIaKaf%0jHP0SioGi>C^9f9Um&fM{B$bS%k!VR5uS#rUjPB6Q$bUn zKYqE%*9Tdgn^$=T=QSXiSyw)ns!v0Wq>Wt`5Wa5H!@jbZ@ zTuWbgnU6MTNGV+}`R2ls0+(X1*Oo?zM|CzPl|}K#>8AA-Vb3gany{UOO z$$FG$>n!oASvSt+eHMGrP#kA8#MkU=mw%YZ%o@!%n6&-FVyfs`pSFmu9R`P*n~wEe z7%_KuS>k>zN-kHLJD>`O_5vZo<2z=;1}jVsKFrW#W1VI3l^-PaPjA-(QEk7wY0dVB? zWZP-mu4e7!M{rj@HO8XLz5nI*?lC1ZK2sU{j=nf(gd)<4qHZ1xqB_h^LuFA_Nh>2m z1MAsWaqJl?96};6n-VQ{SN|uD?B{b{Be--5u-4V^RpHd6_Q$E$(r8yhQsO7w2NGge zm?6Ic^3i3Ym5A|pTEq{C(u`C@%HZKDyxSl(Ra06-9GP(VNTm(c@ZY7+a)NA%a=j5w z)D%&Rd*IB!H<020#8K(p<0L=8gPA``K^uKVG)N zZ-UY*(Xnij%g%UFnp;6qJt~@utFKN9e^wRKjV>Gkx#%ouNO9htohtLd< zC!C8K@!#B8|B3KG0{&wqlG+m&<^YXiszt!cktK(|@hyB5- zELL0M?8*$e*CS*>W1~9G*;zpohBZu1+^y2S989jiAtA{(@?nhqk3nxPTOh-v_SKR` z^n6lMBFAS&Q$_`gANhYakz;2N<@UE#P>u z;`A#n-%bt~3UKP5h0Q91#l;E_lu9WC=O13+~J+` zDQX~G5?qZt5v-f+59bOLW<}=%mtg@Egs-rT(NgmhE=Prz7f41wn07nD;{-R#Gb&n1 zbx_zedPM4FDYLnI@-n1vRpC6`oHTQYoP-<}2HHVVlYf2rtb4k|fTU99 zI^O{?;pNDx12rk?BQq1mNwxToLM~3uP@h;?oKD2a@6@!Oa}b2ApqkCI+e}h#i;0S< z9!FsfU2vbb4zgTno1y=Bzt4V4S z>Ms7*B|Z!bj5G7ph2C@1C;yf#FSWO#I_c9|8i%hoy{3K2np8}IK^oo|kZe)Q0_hT@ zSATSJ{3m!d|A^@77qQ?ib~wpSzivsTq}=<42uc;ZVeYtW?0HMLA&+#5DyNJ4({@O+ z@%HPbGz9F*8ktBlOQwD9pmT`k*ZCeIE#@XK|Cc+N4dmy1Z&^PxGD-GUV*8Rf8_$7> z&?OCcB~)J^f@qC2gEQ6+$U}75{e&XjIod!?q$j$w{e!~>(E1*su>}X{hEy7R$lA{O zm+gAR1ukxnH2&4#Kf% zY=klGnv-9%!q~iza<4vZP>Rr*_w@^s0O$C1ltyXg(8cn(=(dP?l5oM;Ed7tRpaFJQ z(NPiv+z{XTGsw9Gcn|peV37R{G{aKgBuJU;+(K=dDFIP&;un zXO(?NP!ft<`XC>^to$oPv2&5FGq?vvqJR5&04CE4)QyPCe?xPgZ!m-H6#@a}2Ag9# z9X%=WdAL|W%c{piFR?7okDUZ+8=q+%Iof;pvotg{QaKVf5H|y7P)=X#UdTBfL{3Ki zWKemoj6KIKgdfKR2_ z98LEbGRkq1Iuu0#mt*pgKF<8o2&l1qLxO92<77(}=?5S*U9Tf(JrJ)o5hw(|FT)@V z{uxou!lh&AG%8KkyQmE@t%~Gb9U330ZznTk&14MHPK^3ET_Ri8I-*_GeJNq4IKk&T z#|59f4h5zRiiNDVKWQwtCuL_?sOBX>Uv3i%vP)0nqxn|ENQ8$LW0j{}L8@NcLIYQM z$my)=y|-B6iKm;yf*Cbd` z=n3g6mIL6Q=(zD1>|&x??G(h>RGv>n+Qnh%CBNG{6c&0|??xZkCCFl>PnEz0pA2)ipFy%8ztln4 zM~F*Pb=z+UR43t9kYRfuJ!=GNa>k^tJ;X+ETrX+~#LUl1SGfU?6Vky*c!2Z}?GK>= z771(Nu(UsTPD^`S**>k3rGP>UH`kRWHMA1p4XB|7@aOaNYFN-Rq6_lzdqT(Y2Px5@ zMJ>IO?+<$|*S3|bcU`{$m%==gmf{YCDd*d9FU=8~A~cVnfjxd)HM~L9Qyuh{IEGLk z0DgQ&U>%x=-@VoM(wyEKg4oZ@P~sf*sO@n@+sAUYTO9MT(b~j|kQTKF@VqY{E<`6W zDfu=_!DD1kPu0KYaC10-=Pa5X3vn(zgMKT`v&*^=NCp#>xd#jnkq8EQ7FbC-__XcC z4v>)YFEIjE{w{af{i-KLpKEt9t}1~()`|T`$U{X?qg-SbXi1(8?Z>jB%m8b@{T!Qj zr0Brd_}d9#Z4KNv`sZ=IQzkjZ*j6u6T8@HpbX;VsZr|z{hIbL8KU}_QMZ*GKRgfQ8 z9jS6uZi~s`Z_9O|!VsL`&p$5Q$A|U$FB+sihZ0?-1Ku`?hCwU>c)w&I?9NM@ zL1ppVu-FKMrjT+gQS6#Rpv~s6@=F;tmrvObgvJ!~E+yA&o7hYsT2zgdd7pY{0HGP< zFu92_a8(Qve;ey-av^Ge68CAo5+Z^BHZUzGudn$o1h*;^K&K)OHjhFm`w`ChrVGKF zA6It7h>~_AL}OpUBlBfz*ms4L`sQuIUzu3;e2Lx)IlDnfzgduLp%-3caG-~m`P1^e zrKk@C12}6?7ta`PxU&_mqVc@0;0jZSfhcecSL`5aTjDGt2>@ky(a#wTA#duyFl@z&^CV+pm5uXj!F&X~VblEFPgB+h+G z3S~fQF-A;hNEv|4npMB7uo5yEiW?gZ%BHYP8BTuZJkrcgiy;4yagbl?pbj6fvVcs}$f7=KI=s9Km4@ZV&@ z+2J{XDK)o=i4RFHgzp6D8qR?yn`2F;iQ12b2gNlRqaNo8s*9vxDH+FR>H=Dzq;wt!hvKr0DKtK35;wY=_Ov1E7g)C)3m6}m4=xR6Pzp?7 z#|r)J^m0arorkbHjfg#r>P_u$ca=EhpAko@rxPrn*95q*)E25)q|}3O6|c~gp^{gz zX~DSE>9N*;rHzbtbOtY)>HTia~DrN&B2e z4Agi}4d-8Fku*r+#^2p?g))Uj*g_pmuakQr5EMQ2tOAmZlU)dmxuZuU6HbUL_FyOj zrSy;k3*{}cd21DO8pRL3b0E{PJ_yd1%`4{SE@NJYECMg$;MnL1e$6@!tV4WsZm+vW zeZnYj)(&7RPjhq##iF0RpfqE-8h!&vn5xj_2*N|IMtHjh?Z*Q76Lzgq+HjBjTjrn*K#{`LwXrflIR}V_>aAq~iTuSOU;pKru>!u2P(J5I0PH9(swH+{*=FLmKOg{tQDw)L1n=v~}0{aV5UQ6aLlU0ET#l3=+e7 zW^gqLJt8XYW0wcLgPN!zYOCXtmK0F-6hx#;RL_V4@P+9GN^u4Cbp898v?5{Cu5~|7 z=B;z+Sb0^$mpshrp4!};z9NwFAxISs^M-vA-n!hOanIz-SeJz`uHBY=4)cTSSjB>e z3{Trc(ODBvF;O{VF2ofHL7lqN2BVlqGG5r6T;H--9LMT417LF?2KX54mp`Q~%eXUd z7B~`!tfQ#7Ns55p%T1j4bajEnP+x=K-7tTjs0$)QWr+b_Kh_Znd0P4=+LCRQ7#9QK zy}&yaKO%zR5RyLuxWsirn7WsTTy!421Fr1)?bN_i-llg<$4W!;a zldmAzI^^87QwY!FOT?blVFOX|=!Q}KyQs2jE5EuJF*g>T{lbKvHyWs?+9Tf8W;f-E zD-p}mipx#H)Uiclu5s&Jv#9D!8!K@dJ5XX*} zj(Op$BtnIo=xkyC# zL_#td=~Q%kghX4EF&mhTGxawiR7v~_%e$yaYIV*${-2NW+6vTI8fnT<$dn&;l!MVG zb@sdGLR|1?F%RJ2aYA&Md~55`rRhVnBkIT#Xs)@&(rQq+LD1Vsf=iEBZJk%aBO$0% zr6<<0#Wg(c__WX#2bMvY1|~G3S&*duQn5v%9NBR~lsm{T()v5ixkqwaTmll_{JabS zi9#o0&v%aO+lH7pya}yN6zF@yndC}JZ_2$u76zqn+aVcLVj4}f2L0u9M+Ro`jevC02f~Ubpcqe(OK-L31B@kW{_NE6&MQ=n6f&; z)73?o-w*Mjrxw8tWQ)MSOu>Aid@#b1Jq|TppubshBtc*jN=V2S;dfAPzg9{JO;&Y8 z<&6E58^~T;0UEqg98#|?r!5gyMjRdR~lx?hU77UYI4&)s#Vir0= zm=wQ)8Koz!9?5ylc}c^}eP)OUsYtn0CCy8z-31h0`@~@Y{+nS9vl&|^*J>GI^DzYp zA+AabFD7m_)zUK|y0gX)$I$})%$l<`0bUXog%k=zHc4?2IBi!zNeNzs`I-vHuUZw* zfv5|r55>{15OrL<>}0=QNhkcf?Y*PiCU?()(h2=SF0w;+rB!);Nj@6aQBmmPs&ao< z3*AHWwWIPmg*1dI+8=LAb&WTDcKenUhq0e0&jpI>SgCP=2kOv4s^H0^cO9fozxF;DK;-}&wqRg zf!ET@3fl`+H-4StW2;Rq-Zn!loo(jrumS7H^?)xk@{{_!?YbPiwST7a-WoI)=PU{T zrYW)H8V>RdNb~09=R}tICWx!jA25(?lNYVSVBAioG z-swkjf)x%AqcD0vQ`pLCjs!l6)Jexn?Tb{jBlKJ^`pu_pLU@^oGJIvXQ9&Y*3UtOG}3 z<#tHAp3!T?kz(1V$#s#g?>vF0{A<0}EM&|Mj^bze5E5erIDD@TjRNCw*S2kq3;ExF z87Su8dvJt5_xi!QN7%-B=VeF|QEJ&x`alETZ0K{iPkCp!(@= za$C5T%gLaF3bM$q1j%FvJF*jFfgKO3lQ?fIqYklSi?i8+?Dc*iR(Fnp3NSCSsg>3h zMXMSceZ_YlF4DPZ$m@yD$q*6KS_}puyD%yIKKAFHSEW&5yi3YgJaH%3d&?KYk2|u5 zeiat7IB;TYzf-MteArA_)%8@R=B^>B*6=CcAswjz6X+2iG?d4iMPz|Ra@W{i!v|z> zDQYS<(a<;XtkBKP1?xwvlbBot*F~HTB-zp3iv|&3i(L}-qJgE`KbS1L-u%vAR4|u| zWy*h($#Sz{0HJ#(^_=EYm<}mVGqOV=3D#*Rl@4h;NUg?GOj_qQWpHgUx9)DLOK83} zqhSboI$psr_iPe>W2?;&)k;BY4|lZkwD*u9uPIza#gZSbKIh5JfSr4&;sa~)2U5XE z#7rE{FUe^3AC>DAIe<-Z8reYNf9T&LCh_^GU4P2iN+fNZ+zj!`&4G>wzYjGB0M+Qp>D>%)>Q=DCbI&h+^E%VH9g!hIcb0pc5?kG+Tz z7KZz-T6VIj&njRFA|cV;xY~D>gC4=1oD;>Mfv_HGF6Ec6-<9L+%#tPO)IBI_l)wPi z-o+2?r)88yY|(>#wYs-|opBrDzGcbmxZR3&AZjqWz-`?h6;Div{zCV^{xqFscD}A) zVz2_=g34SJ+-$ngj}Jr(%$t`4VJWFO5ceGc#0`Mv^r!URD8;1}Vm*3Adj0}&PCYi$ z{_UDBcd#+AFthhTmFL4D-Gt@$>W-eP`pfe{yE&LutJ(|l{<4CdHnY>RI9tdiYqmKP zIz+Gxx?MDg{%(GxWQr;0vox4HagWoLynTGWuPD$8{u~#yISfW5IK#ZHHd29?qf3Jw zDw!kkoLV&m{WdSPqL!&juE^hmlOBeCyO3 z0G3ojh)4e|drCkwwz*HeUwAUfiOwYK|hocWwP935t<`J zd$Mh?7MKO&rL!-guGh5sL#hB3~ndkLz7ws59nTML+x5PE|YR2O>z&NvLNZ6mLjofamQOr zRPm~n*M~@CXvfBp*d}i6svk@Ilz!q2VSgRhdm%vg2=D^d3X0*P=_oFj5C=T8c`IEv4wc|8hE=GOcde3g26VK{mB+Rs=rIS(p9~z{R!V9WHsk_pbTbYpQ$oIkmgauBu(o&M6~N${HnRstkcB;qQl* zRq`JNmQ}r`6u#cg?Y3vh|7@BT^Wm6)z`#`OpTi{HGqn$UC-d?RjJbV%Fiu{Yn#Y&l zOY_pt2kyq@cA;AN!aKZMYJ$vR%8EW4@PO34H!7ia39aaAK4dj|I>kDp4P7%HwR#?5g((?&O-0II)VQdsmlBc`4whWAY))i-C z9z=Wm5nq{QoO z9wl|Rb>{2!lHVz!dxgI6y`M(&w@1=@6iAz_8o`|3{&b;soDM{*8i{*6zS(@%))el@ zmmL0Vc_w`EV;>EiMs5>i zrq-<8bnZz~ty7!kK$WX$MlV@e}Vnfw2>0KlSq{CR$TQ_MRD=$?~e zz2LJAyI_6EzT6NXw#$fC1MpxQE;b>aV0oCTAo z-S)dIW+DqtW@f%_`T0AD_p@1>872B!86GLz?-)S;>zh5${l<6(ZRT)j*kzt}P;|k4 z4;wU4u$!PX8KF~ie$#fNB+ZSps7OZd?}eTv7Lvw#z4dWVa?rJ0V=d>tmh(MT)1!8! zq>*3*$#)ie^t1DJ!no>wadw5Y@li@kQ?rtx(D&Rt?P2A|++W|l+b?+d_=)=?UimxW zn4Qnf0JH?h zpXDdcL=&LM>^^%MU5LRZ2$g&0Z(ymu+9H(f%pEbZ;gDoaObnZKun^lUINsFP#H41V zyIEBwEp+;{f?U-NmKf5}t?Ih-YwDhD+ib^RQ;L?_&U#IW@a_5NOH$p zeXo1pZT4)rsJWZ;ouLIQX?AI6bRc-0>p2{(@7ix|EYoM|q)hnxshbOQ zmEXdhdUJ-EArd&v%PY(E)sAF6On$}=J6GZXQ9oWnbNTyYqfS86HWw4|eji_9sBul} zBc@s_15&H<{qHpWv>6TG^`>)p$&aRUl_@!&rCN!&cO7w_qeULqymoaZi{AUu?CndE zHGCZ5HBD8goWY!Vum8^d)67`mhbjx>F0ivT7lxt4`Nqpf>0#ItjYeR;7=6`rK`dxf z+*E+F)=sqrJmP2nC}k;3fNyVZrZ{TXioP_zz{3%DA_1fmm`$YR459WQmYAA&>OgNW zj7jDE+PX3CyWjJM;~R#Xbw2co#PylATbX+wI1#dKTptK z0dE@#2X+&OaO-a8y{YqKW;-R6_pR;#k~I#iY^#&C2=az|W8_BoqKzJi=m~eq21V=o zRZrJfuKRvZS=wZ8gLk`)+Qo&22u>NfW+4gdcJ#7r(e%^>bw90*19rfkTKp`oS0zpZ zy7&d;{spjD@tbf2c@rVS%6#}TP1@zx%;19Q^5@!01n@f|&V+Wj(nhk(29sZ3eO#u+ zAg>PX+#A%|a!pPna{@ntqvy8;Ntc=3UM>rQGs;wcRSWzv3F^OnDsFDCXEtyQjA2vd-tM8Cj$UUWVkl zf}oc1i{sL~6y++&H`UtQPhg6tdFj~O>y5BNp4sQAmbSIPLiq88rq4(S0=KVk=vkIH zL!UC=+t%~*IFbSju}DltPXONhbwVp>ZzG-2NS$L}t8Vz%z*(mudVkYnI~`*reqt<{ zs?HP52hf39=6$?pMCWn5DbRMSTRS%Y%Eys#Hvw8NboO^u2*QQ5!^vHRPV4;k&&7$! zp#E&-e|=v~kCWEb*E;v}!eNZlp4#oc6kgXjD5si{-F_2z>NEU6%KoF}gJ;Ys;RMD{ zguXxWJ=M}ij+R+6SL3a^08hHWrazLYV;5l=(Od9eG#rl#kv%830F?H@^;7~MxEc7k z@^*geGDsd_ot-6!3og0dH{AU}pf(-)KwNT=0YebnytGFe7Wvfly~Mo!ffU;sQLjxMbA|@g1R5RD#3K8oA-vI3~2DW7M=PJ##TtOy9-=~Pb z{5JXaVlJh*ICsLjq0%rtHy0mbII_>fiXSO)dtBh0lJa-M(G+&D3u|0Pv6jfy1AB8q z9MuTtB&TJ`0PM>nuW@grJ@hHc2*EPX zU#S21zs7&i<@}wx%df0&gdb4&#caEo0fTj`c9B9q#Q?XwjXMG%op&z}v`1oqz8Lw0 zHKR(n6{p#HMqX=h3#fKQX1Dx4b+)|TK!)=S(bPJd2g%Z z$LObs1mTYq3CqCTILvQuZR$v-_{_xA?!uXaO@&aCl2W~7t zsn;(e>qIT@!gGwJRXv7MWRBxFx?E@XLePIFaa$O0x59qZgR5#LnBv``#_Q^jR|?!* z@7nClcq9hPlVL9Z_o{3zC%OLJx^;z(h9RwW7gtgq@YUyU7oq1z2Oq24C{jP#%)hl3fr$x*>LFRtK!Q%a;I=$ud zPC`%QMlnj3R!=5IGS)lcx$pUgds;d_yA!ii$zi=MrPBe*q1BVkC!7a7?_V9AI&bGc zH$8qwW`F(Cb44VrWnXKd3rF*}<4o==1~Uo*_z8Lr{)iA!6}*ZhF)!ut30q2jrka1~ zwjT+0SDjggp3;u%{=J`F5c9n+zIHr0Y4D+1qnroaLlOYC4UkMaBT^t(%UhCpKS)+A zelW;0r%YziO}>CxPjxhPwD-A?d!sLgT|!#|=|)D5XIqpmE`Y^A+d6j~d|v4ls14vU4K_6$2I zz_n(`*`$GxhPq!ih&#eH>Q6WS``|jjIX1{ZV+Tx(KVh6XquVb&eC)^{cd!*aa7WoP z4TQn}m}GN2WlJaM0-kWZ_IEHRD?+?39LO)>)*{}newb!4DQd@MnJ{l+|DJU^P6``!zOQ=xRClISF?_PP2G^0 z{y{(APq>3SF@fMEqseXHV?PInCcNA%6| z;-VBB$st#}=m3lWOl1awFhi#SipexaHhyMm)FXr*y;eTSaw;x{sW-9rI=FVc%SGnr z+6IE1aG#LbRZlIRHP5m%X`RryrgHmJl%SD24sU;rVQ&-;m$s`s2DwSR$J8MDF~_Kh zAIxehNS7faG?MYz`lXDDzNVOf(E%9~Zv8(hKQyQFc%w5z!hh2mI7nhuW|t4tnq*ad zXQj||?DTpok&{yx!_llcng7|?=>EZ!h0wW^@mo(gMf`3$&mgV4=M@Zr!Wi-P4h;`C z3nwm+vU7;u5xb6kdJI8V`rYY{*Tp_fxw-th^*4mag6HBiLl`!R$9ojN>SxJp^pK1A z>LtMN2Yu;lY6%D(!XuQ`=RkF)r`gz9oV=>U5b&4$rgtY}2KgkpT2gIFFPT5WZOzRp zOpj=SPOv+ZDU^@sAyc_ms~^`44_QbVMnuX~`?+NJVCx`aaL&7?>QWl>;femwjm@Uv zcdtj6(qYyHv+7Qq(QpP)jCg_|H5qtWDZuj3!8#L3dSn))^HDU}KyFrD)~-I!_H0l~ zl>4XRR`=ah?F1Z*GYS%tthYCT&zu%BN!p#)uE0G@=j#wVz4Jjhxj^;%N%srn=Ruz6 z*wQAo=MHpq=az*Ws2&>CZyadB5>kWDOQa^bt0FvEP!4^}wUX^^!EGVKTg?R@oYBx+ z>~$1^k1YfSJ>GxBR(t`64n5U5_VR6l=~wEb=-dwiuUvm~u~+~#S?9b9pC0N&HD)KniO7Pv1-=jT#n!xs0 z&P~Y0XU3)G!?xP>_#gDGvFNR_Ys*da0SCK zBSwkzU@G&oj~UYv^+BBVQ6V+dkCdrMcuQ(#c5yK00qG3&R!1mUi+hSzTaLK$MoLTqsp)SD{s7Uugw$PbbYhj#w1sjeQ=e&#{w*{ea1UKO(Gv3>4Wy2*4|< z*TE0KD6D0XaPY~hjsSH6Sxgg|fVLVs$dmyeEb~@N<3RZ{5uBUMNQVfWcAN-o&_+0q2}wFO26v0x_BtdddAhX*iJTZ)9`xX*v@7(bE5jq-3r z1?++Q>bM=m2fp6mfhfMLbsl;T&M=U4DrVN3Wr?p14(qq*xyE#<{qmuhBlEO0nehE>1+%?GX8Ko?jB1m{Q^tUZm1yGvYfeU5-zu7PY@pz) zP5hFqOOb~4084r7upAJA&ZP2MST57TXsEr9XXM({fR2_ltCi#WR~00x!OLZC_K9^0 z8^c+Wur{nxi_Vc2O5Ho(@wquQ@aOpDWkl!w8p^?+Ir8i42}6}xPLnj~0hFjuL6&)B znFMBZ}nTdj%k>A?&h%=F^$=3@{7xS?Mky zMQ07{jiVaC<4TcrN*svv10P=|d{k#9g9-zu-Z3d&)&{~KRf*Q>Fm;(@Mh+`JfZaF9 z*3~GMegWUuBl$wPO~knOxL zq$+9SYA%TK5#P=1246j8k0=!zRw(D5VmHc_14dEks3+2$O(zm&@iPxOkvSA3l;3L3cYVUS+?>iX;Zx-Mvbr%I3OcR74JJa5(GtV+CT&Y$ChY{Y5# z@!-cIIkTg>Z!{Xcm2uLNcKjiQFwn&8OGsd)tj5KKmqP`Q7D))K;nK{Fe@do=+o+gx zI-OU;WrzaVl5i$sM6DiUpFXB^mo>n}XX&1d2Cr9~1To?Re(*%v?B1NMV&3hmX)|2g%d~UUXoXNO>swxBC?pew+n(rJ9 z_T)2BE2mgBGgXae!3V-;$z&{T>2Z*`MAKZRz{HC0&LTaB$HtYrFmf302bj}i95MxUhFq04l*gI~c}K~m`wxc3vN)Oea8wmZ<9%PVeVykjnIpX_ zv-*0dWuj5S`Y55+M$Mjx`d2x%Nn`n|KT9N(=nt4t<<}JK3D^&I2ZZAkImXHI-@I@X zJmI02S7EMV_(oStz1Lv`rpA~WwT23SUosxP$+V7pVtR6ra*zX1*HbPfyY@RzDXg+) zg4lVv`^y^UaE(LA-(7w5N__I4AOmZr!b?aiuh z_=65-O_5(wgv#tMx1M_wmwS_IzVfaDXN8w>!iNpL{D*{ArSnYaP$CXfY6M1C`*u__ z!|H8D>oMG=#A*|%$yIdaf+fThi?(gs0w18^rFwPD!CV7LE2ZHct`cX@Xm=D+#fmhf z{)tEdre8$yX7SBAv*7y-@s?l~YvEzW36?BTK^9dGHg;KspzRWehG9O?jRSCZj#i@i zQMqM}xj=*}Uu^F&OIC4A$yp2(GXATD@|(WpY+;`lwf3WWK}=a^roSLQc8Tdh#yB`O z(X|*fOKL{AI!<~)C|MiJ76LigrpfKBbsz=Scl=lbd?YkAQZ)erJ`QZX4+JD64ZCmC z#)rJN8^|qlUsT$7fTlU5JLlQ7!@aD{P^OTcDs$$SXA&UdE-}o&?m~tfgN&qtnLto2 z65)6<$rj{zcw(^VqvgGvI`0P7AENwjX5wmVTA?&6_;c`ZE{sv=Jq)Cs4rO08FMQ(y z+Cyo)ygYS;m$g@YtAV;r2NIwNej)o>z-+ZhcXLtzx|I^zdV*kKAoOc*FwEd?qjd_- z$#tZ8tE?=XtUNXuY-;r5Bc}4i`S$@&iv(Az6GI` zXeBja3{uwN%TM*nM8Wszym4=>s=TPvKXZj%dC)D&q(mNd%U-{Bw2eFIp*pci;Ci07 zJL%u0iWf`L540!m3r>RjeJs4RC}~STN7LCUFiqoYT_MH8@B zX!S-5$0+=Bmhi9}863ME+IL6k7-Qx^ypOQ>O|DHRv4Fcw6=;T=Z9S~)n}XdTxO7mo zWJzfc*KQ(eb?fw|saR}cwCVAV^qkQ1Q$j5irJZQ}jNLn&>iNbPru{L$!C`QlZ2+0X11j-Ze6qo~s^~h(z|5s-f~e5iC{< zzj7(DK;nw@kv}B|2F6FUXQ71U9Y7dIDm+TPW}7~UEt9W#@e~?@$msj z@S@n>sEkun(InVgeDuG+31B}f_a4j8=c~nT0*yhln#EXOzTkycB(*3vi02U)ADKqr zA}oKA@KYDNjf-OSoNT`5vY<}$dZ!WhaGUL@fvr&$Aun!RAV)yHty{&u4F?Nk-rwu)mY3AT}|kH||UDTp$o#c@n>_s;#&+)4*pKOT)l z!1dR;9zkN_L+u1xEpf8V0^XOO2=gJr2ilM5Z)h>N5p$xJ^dv^zC&JKrbQ#qq#SOij zoaUaJxF-TlJ{eLJ;?1?5BjFOg&QvM>tP5jI5@IqsFYR<45! z;t0fsH^$e1o#e2{PFcM&?xrLgnjf|fR}5$D@lA0YubMJ!O5a?z&KSszK>g1io09Gq+V^d&o6fWZJ!L+m zI*be@Suek?UgAve?9LYfrOj#k$$kv)p z{5o4~pM^J{KTe3#)ysjSoJ?h405|$DR%n4guHE(05z4nYL5j%LqL);DZll+7E$JF{nNue8?vpeAp;z^> zRO}b|?XZY=q2p!5(KcY8IIt09qO}nMd2~N7Sv2`SwhbP=RppL^go=QqJ+>UL4i+UT>+KpE$n)Bb_+D~UgdaRX za4D?haXs9qiISTjQ3cuC_wY)44*lQS1ty^d*za~m;`=N=FYPW&(~nV9vFxRj_-xP> z#7R62&tz*j|J^l8_d^j`rL_#|&kPCvB~c_0a$~8bVtE0fg+Uf_2aU|xLS6QX-x1FE zlb@QEN&4T~oe2f-J3Qy~xc>RpjsN@`g=nzp{XDE}(f_FlKw=|`$R_5*JHHMe+rY-Z zs#Ja#!!nCNczx|nGTPr;*Xag1U_5-}T7b{E=j*Z;*v<=gZQv%@0@3;q_a8S++Dmg$ zsKs$7pz(YEy5dSqCYNWGOwuOkdJLuZB!tVkLvy=rTtOHEaXl+PzU)P$@zL7ED|r(| z;PrcvCgsk?(GQ4RX!*havOaa%P-U*%!l5TR{zuQS6|$|bw&)0QcLo>f9{vwMza{B; zL&N_d>ANRQ$%!85?+u;jjyYfLxoM&|l|RN=ukYn;C(&bmjXXrQ>g@zFHmO7!vwX@1 z{>Kv2Ljb^@Gy>%YP|MFTNr~wj(KL{`G zwiAAN*ZzfL(V2*LEbe~ye-|UZmAA@0U3=`v>1%LtnuV3;gz*UB^7$#Qa;IoQ6-BYh zkkP?7xDzg*xggHQ8=l&o+;Oe&e>DR#qP^CMkj=64f-IE_J#7P1Cz^Az4!y%fE1O}) zwR&Y{rTGk1gaRXX+UexNk;d{Gf;w#g`oE25n=652<+9Kcw3B+kmpG6A2^}Ls0ASi& zubdG1xRkf6lQmmkp8xd!?0oddOH;5VojBeuJ|%9>bd``?o$uc2KPX08YkxZjs17Rm?z*U-*~vBo)rRVUcx9 zi!`NE;I3&^ksi8`R@W<+0l^ksW0umYOPiHn%eI7zMOIgQQ#oz;CY$zsLWer>D>ypT zmmt!6qCtURvK!x{t=u*bE;d{+wqWoT2DAm=j+fix+Lv4b-*$&z8(tnl&-QUL50}0^ zR3u3xcm6dVXx9N4C-k2UebK${Xge`EoL)zw%rn)DDu%NJ8U z$~+DNwcGQT`&n=!mK&YMwf>w&?RdmpR=;#+JOMwCfdd9ToPuv-!*=XBoO#P6`YoK( zC-JEYn$M(&84CL}F3c`WlM~6?{7+Sj2kEk;s42N^0k3PE@iJ&3Y(yU3-`9$NYY1UT z*w{1zI622bbek%=s<9Y9YwyBACp|YXwl?bPz3h#cn&Q_#l7*>?G(I*j9; znNnw&q+c6RpeCe^;}cG6P?Ke+0AJNAoAOS+V|_=Gl(!T?GCNmXg8~qQmPC6$gqfL} zYw+-{e>ZW)4+1LS6Z{1!X_i_qalSlnuJIIN+<^9FbH@^)pZ=uMT`v_2XBxnbmYVuH zTeuUpe9bjD>g0QM@`;DQe%ruV3b>FC2{@`Bsl4iTd<}@FF=SP`3iS{WisMz`Ff9$X%WOkla#M_(nh z74t+kMB92Bvdioz3JneAl3yTd+GouRi)hN^iqYqWMetKsPo0NT9sUasFb<=mQ-kYy zEIukm#Bb)&6qq%dF|R43PD*P;YM56G{nXDmxc>7g9i|~e7V@z6EE+I$Qrjzlym3gi z)1-aW?-1evzE5hjLd+MEW!-`Yc%&(nE(K_Pop**$K8cj2Lb`6$7cf~6%27Vfa0ADW zx!FU@3X6ty+;4+|sr2;ZlNnew!$?OF6Zu(&-07U5X=ctdE*w5)0`qfoa z8_VlRX-1v~1|w~=;!noBsL-xXPAtX zYpBzzh?Ysj`Pj`VM${g$ukWt^!fmiklV_CZc)MxvG)>a=ZAg8H*O}3EO^y%-m)r+S zEUxCxQFEZ7IPQ2|HLVCG=uX++$ZwMh{s{g^Ih^OqDT%JDSTpd8_rG8 zKk_l+z};tTAz~Wui$z-4uO>K@TcByDpFgdCyVw(l=zy-oPoJ@poB7LUjH{F4u2t7= z)(tQ-RA}B`m$`Pwy>W3qljqR~m+A49jvOZjbD$F5Yz~ZY;|)5W{U>>ycNM=QW7?&c z3GexrKDSTd>LxYzs44-yG`6X;_Q(zLk529C?XO0k*l&vm4sT3M?qs@`dk_|Nuu<^F z3M8^ID!ftY=uyFvVI$vkCd-=4a7Xe=ew~de6X6j=A;+J@fffg{wlaTFg;n@5kD|sk zt!?q&cSI!`%;L5)!pqZGVk?a3hi*{qTa{vsA-;^Aa8`cWrxA?KkmRtsJJ8CLyVY4$ zikaRX7gjHk@epvg+IBZ&$@KrMgn-%2g4@>eYHWWsYcpfz=%Ig`0O!{0b}?~2l8J+@ zu)**O@U4U9sv_waEG}#!Zuz5*ds**4x5l|gW|5~0MGvtq6wnab!D}r$QC!)sJzT0; z^f>5u?A5McJ`dIJQpk4Ppdf@%gc@=qDR`WCe5YRSUm`EkhTvROpp7HZy7$A1SBa8f zFwN}qc}|%j68iY}gH`mE7z}xr$z&H~AA4&oCGFM6Lu9!_(Z4xuGXDSv0`|E`J6zHW#n)U8H(J){ylx&27?1+h5T3L6{L2vDq8_{!wS9 z4MofgMIEv%BAluHBZVrSQ(8WdoRW)wvTvj)g~+iOodmMeOKE@FS-mLSfp3 zx%rf!6R-*GU+}UeCZyR$>d>mZ8_p@123ug(_O_qJ%EDTS<#%c~d!j{3UrU`*`}!`O zNgv*=N4z+-pKYLpF|y@DV_QuRu^I%1gsXQ!+aJ@_)+zE_T4J`l)=CIG&L1!dd!YHA z6B+!HCrcY$TwJbz?P$GO0p+-cIc?Hh5^H-rkcJZ7n=28(nsKj9x+>c}P1??kOrjCO#(!&}Hl#XRoU{XV$Ce+C*VV}? zH{1I?;sEDj5>&5k5q$VG0J*t;y;iw-&9p2SSnsE=sle9x#@yi*4I2J*t5IBtb{u@l zIB%DQ>*z7!#6)hqcJ6YJg;wCS0MfJYp8`OW`uKvGIO{TQ()_DP*BI$Qhc4?9o~`ib z3lq90>t$!k#o_O0p(p9|S2Y-CNN6cU^7>{)8S1*Un*W4lyo^!pOy47hT?dKJSr3l+ z0`$0dGoDBkH*)y8lffyXqO3;0&Esyc)#{@SU*RF4b}m=`Wi3^6I_6$c8u?xzodZjF zXy(8(HGqZS-wx-~fV+h6ulV`Z%DY0fq8;D8=v>=07P2l5B&=vea$K$${@ciqaE_HkL=HE8XA8t_&%69b!eJlgv5^Dx5Z8r$R6Txb(`h@N zJ)PnG6GUf6pW_6vTDYQnP2<2oXebvKW!4GXet&7c#KO2kC7v$i*GHRL8ADU8oVf^G zafq(Q^_n6yf5x-Kl2B!sVRhmKmWDNiyz^uQ<{Q!x1M9434H80G4jUvj7s<=I^xT2ed0e?IYiBu0tzW3X1diCh!0ne zcpS|Cjrn2;|DBk^IvZ`2($?MD(Y2z2Cb_?p&qr7)0^N3x88VY9@iU|%nrO^)rTkEc zhs-?WUcE*XSbs9p9=3x$+8k{x_n`Dc5;)|FEimVyH>Cz}Bdup+O7%^rT{75S9pU<%le4 z#QtqF9R{?4FjA+K5qzTsZiPvV57kBJv)J!|XhpZ@|Lp%$;~=f;`#g|&BRwKldIaDa zHuL?Oi<{#;i!oQ5)e5r1ld-&A(u|V5F*hN?U5!J!y~?tx5RO8giZ;(0LV_p)C6Y;V z-fU=(dsQHbI%nPuL+pl-DsOl7HH;23$H0nwNtTmGp35bLif5DD_#rTzLt3oVWene- zFgaY7{pnV}Pt_q0dE}~1m1rLLIGfY8a3QwqkU~yWGEgPZ6Xu6O!Wk}|(6HTvU}@dA zm~CNk^xelq2HugkZ}PNL@8mc&IOoiH_m#Ukrkpnr0b;D#jhO96rA`xyV-aPq3@6-Y z{u=KndbYSH%ueWzRx~V}f6~k>*~DG7BlbH)ieq&y3a5)l zs*H??oXc@x>q9Rqw{<+(m}v;tWtk8H_g;;R6o~ouuMfp64jk5?n~qZ&U2asgm60Ev z;J)}N5)0DvbJ|ZNissDEDwUp1a2hX?wFQEpu0e5<(2i%Py>-(hQJHP5?4D&R3d|w6+ zJ06uJel+5lFCC)9@rMx3#tVAv4-z>uILIu$z7ni~NQS+h(ZydG1dfUliWJ3jrO7|L z79Cwix05O|kG`e9DA_ZfTZ{1=7(Zp}J1zU<4Fop(>LeBB?|z_x`E6T z^#)Qu`Q{X#i-dK;U~XtNJcq&4k3dOgOUVi+5Dvs^rtj}Tht<@z&UO7yv-I8ctD&3DL!nz+kdA}MZbgm$3y;SRI4f_m=tQ}iRHTTA97z*tSlC;+_3<>GEAF$)Gg%ciD%Sey& z^i)$-Q)6sy5V@#8veb>t=R79(p6Cxs&)5+u?^KH0lSe-=+*cBRgGC1%xvdpLnKj&|ojFpuO&f%meW(eWZ(yMd(dMJRM!)Op`^mW6xJm7FDj@VpV`dTrFmNd#NJiocBU;+B_tHH%t^5I)7F13y; zj~IAsLp!bMelm}z67K?Q%8_T2a*b}S`ay9Pc>F_{#DS7#$D*33_h2J5BK#sXijmUK zrBjc&&X)ng@(U(IOZ4v+96 z1U}V5?ZE&gcyKLU)iY;;sm5QZf<33wiyIP>l5R@c`Uw41?B#sPxqxo`rKC3JKEqWh2b(s#zcH$x@2u0&92_sDZ%2nxjCV#p3RA$ zK1o~r{eDbsMMJ+RCkzn<_T5Ht7gS%M0`(i@1LpplJW|DR{UqgM8!|@UfSJs(_=nSR zhwJiODP(>()?yH=W(5z$wC8J2HaP zpwJ&_{Ey9cp&H=Ta7uS$oqS!&QOG zjg*)^BYO?;ds+gZk-fd2OFebWjj#`;`oWY%Rr%#*fm}Scxi_)OS$7*%@QVe;-KWs3 zTwLE2`GFG9l?8ZXkVX64oa2b7nBDB^>dq%i0WtB4W8>HG_?H2Q$Vd~owg+|$FZwd( zUy}n`q$8i_d{n@zjl8_Db&x^`0rf#a5O@Sxv&ahIcGS<>u_YHMCu&$3dQY9YB_$TF z@PaS}BjtuDN$=xB7OwT|0=e(=w>eHEAQNjoc5d?I#}S+h%rrF=RZcU zD$h@mKe4ecI>j(=CwlMFNeufS>eyQ8Ma!es`{V& zTc&=Sm%jhQF6i3~l_FuErXj59&S`b<^32-jgc3V0_MYGVIFP&g#o>F4gTuln$5e_Z zJ7<@ZK69>*G1E62cPe%Aatfw9_{*&A-u5QUdW0}pE^FgIwSg}W~=}J?To&s zN-CR4-(LwQ%d%%bXk049yN0BUL}oZ1G$@@ST7>u~9imfE2qvjCp2 zW}b89t9B#G(It_gL2*B*p7g9{`MT~ZwBPWxn%NO~tj4vXXB zG<>h9i)4G5*pZQAsunZ|n=!17Y}u^EeT>UOHAL%{G&D__30L8@r%azwS>F3yX39zo zBiwl-@Om#tGk#2Si1Hy4Y^hi~oRVYOzE(qB6h9hOAguumJ=;CsIFvI_7tBz5v(MyA zz-nu21AC;_>+OW0>3l@nAx)U&WawSML zHYc(5hL@zJFIosPyq>xLc2UF&P9|Rsz-#|8`X#Sq}?!x)`@}4W;Q1uPAYh-1Rl~jKi~j=c6nCOazQw zhGL0}YViJIM^Tdqds44wf12ppdNX z%)#1AN9W4KIWd9}&p;l(8&jNXBP%GJFPGbGk{wNGqRUU!@UbZK_S-k#wJvKG^_Ssg zgQTl5>GIlYbz!ymzyNdnM$aGg$YB=m*W!hV*C{ov*Nx(;V5*(+AJl>9E%|GSD!|ONVb2 zWPZ=9>fBM&g# zZ^YHc@tL6gXc^nXBup=6e@+eUa2Y-bw@2GYD$Rkc6VO}$yV1EX1nrz`&3`<7)3}236t!00t^aL_t*Y%58c6!qd8vZSsa|W<3@Gi-1L7mm`p| zebC9^L@kFS(AEb%TL~VSIQy4jZioF_F^O1I#~oP z0*@yGS+ft?3qS45{FIm4bUDrx;D&o@)BO5}U#M|&{yI0C<3y^;ipucE8eSUKZxOHv zSOj)E0$C}bcRQ$-e~W-cz#@u=LE#9Kt_6|Y%d?A?+tH- zw#{P^*e(KAKyMd8n?ET8DC~@I^=9C6a|jK$R~o@<(wG?%^ZL?KuzK=(=^Fw50Q4yO zqiGu2CY=e#`z2rG!^=POvdma6S-P?E+GiF4F9KFTd(p7|v>-r17EegBz{$xeoLIPu z6X{xGmha7f=gwUmTUsSm_<)IyLURF!saNt8vn@EDmU!!SKTdr+D8u+-bpmH?U$}5y zPx|ZYyDjZF1fNILT4xd12?Vm%2E7wt*fLX(fDx|LLf?4@TO+Y6r@fjw`6^E(^aqcn>!8&zPZr<$ET|3V|e^E7T?&Nvz{h!M#ue>VX{q7&? zF`X37t2npipZ@vZItpy8hDH{^*Y&dBi4 zkbVU9;)`FBYu!Ea=YR1%eDIMB-W!td{K4~l`kp)Ygzhv-J(`x{zgZ zpUKs$-TGnCYp?$p8nwt_2)mKdF?r(5N!)PLFK;6a1>N-_2?_QAJ%Sj*rd93#<^7^4AXrCvJACt4tW+`l^pn+0*<=ujfxE+KSE7anM z*(aYo8>Y;Q3ua-CFhcS2m1}ya7Vm511pzd3KzYTX@~wIa1Jm=scOD7A!{K=mL3LF% zZt|$nI{=@3_8Fy3`#10PBOibHy}y>%UjGR$Td2_+Rd|`f#pf>2h^m`|Psb zPaAOl z%4W`8;k8x6xPr`>E22niaI1X9q80rtowTFNvf;gpfECbtw{5eoX4InTj9r$CYJ5gv zX13EA!Ny;+{mxXxT=dEOj5oBrdH9U9Oc|ta{9IHt3who&d`?F?N(=dU!?*cZigBbt zS|%U!kOe-+|N3j_m^931okd_f2v`BV9rSG8v?4%ZxmBTOge`@obryl$ihvc+yS3#k z-xdLjz@A6Isuz2{iERZf0v3VYihvc+yS3#k-xdLjz@A6I3g|uG#I}MK0gJ$HMZgN^ z-P&@NZ;OCMV9z691@xY8Vp~CrfJI=pB47pdZf!Zsw?)7ru;&r@e|X_WelH7+$^ZZW M07*qoM6N<$f-H#E9j4|NTN17TlpW6xxTbeRk@G+&&!t0kCSN0d zIdnir$8E$mWjZG$ywM{hYydFHu_%NJeL5vkbV;km3H@m{-qq!M{ro&mjE;VQM@0Cf z^6>n8z483~%!Zg2^c}b^P77mIY~0SrUF-Cs+awDec}rzw7^aspGR!MjTp0M5670(t z29_A+)!#A;2P{ll zIw1@UoQTbP9d{jNB|$SM2R0LPCsPYHZwKc;d|-sV1z(B|7Vah#-VXMTZi3z-RDUr9 zU&?=~*{LZ0qPW|MQ0XYEQAjztT2Sz^ajLhE8*dAHU1=MK7gfJBO_Ya|NBFOp{|WM64gH7mgPVn`l#{~?p}XjR zjn%)z{~h>068;sb^IszQ|NkQY8|1%H{^^3Cs;kY5G?PC%6y+3V|DWpq#TRD(qu~Fh z@P9`0Z|%!)ilPd$|L4>YMQxs@$$)_ohmn_-c<&8+*lzXBT-TG#o2$2wFR`MHZ`ojG zB?f1B*ClN|wwF$zH%A=jqZ~6_WIw1?=imv~^Bu~)S-~q5RxM^^9W?|wOhypbno`XE zZt9i6VQb3|@L~l^{7M*j=~(D`Ih-IBCsjQ)E>S%Ws`akpxq2gkAsLwF`a|A@ym0qN03jUD*H1X^QM}(u zEdG*DQ*a<0Ss>seu=lW?v)M~Y^|sq*?sg2nNLzsb)(rVNCB(Z1y03lTYP|~zw0lKw z9;B~gP3xnOSXrlEaH}wb6K(e?+u|X{SxboTk0fI=oD`!JB-lvq;Bdudz~_jGtn;Rn zZDJAkWKM6V_3=;^yvS-GU?`1z-Kq9XVbe=6uvl|T-LJ?!oE zJFeRaAdNxyi)X|1MFp*`dJT?%Pi9bWnnVR42lZOqx4MRgk!Cljg{7qoneR>tNZ^z* zhYr^zH8WG|I5nE8cW0;A-NR!z^{v$wR4nL2;I-E?>||cb$)sengM&ktrwV<9C4XEp zn?cfk2p?qLDw8RVUklzz8ONQQIMLf)B6k8AxrHO;L1~6?)Vq{(dSsd&?s1s+w*N|W zetwz`iNkx|j*4(7tk!0JajCkbecL&5D(_oAM?hjqKA|?)i$H(Y+TJ>0ACLO%c=fR) z{W~GZ2@ojR;dwLB7NH-=|8&(_^V}8aEcagC6%}(eiFNtxbg(FNZ1v%(j{I@wUF!Gm@v`IrIxB%tk@@O??~pZtpp$Od$@%#l1i)3kqDdBC_UQ0J zzzJ8dHr~(FfWVbZxpD;|wDSen6Gwg zJy@zXkiUTpYo1+J2E2jVw8K*qz144a{eU|hDtx`fKCH<8sNdl3WpZ0DRYP%f{4nbT zp%+&9MzcK=`*y#CF}P524{kT&QP&AU0b|yG$yeKu_SPMl6Tw~lga}haLWFBfaEdAc z&8r|1_b39aQueq)?gZkStaZ%}i0l&&Jg7w1AF+nfecoXAH_>36twSSun^wcx`N5xL;@y4uhvoWJYJy{ zyB$_d-0}KU_Xv_VGGcE#cJVp?*$7$dhMz=FZS_2iwPE@Ga3U+FZon4OC-$%ts^8)N zZpH5z-asQqzw+(4HY!hjUp1&E$q<0>yFlQ*wos|IY~-E-ir>ik`QEJQBrhE7GsQ_Y z012Y{ywV7nolX&M3m{Lbsluafk|ic2RD+`{d5Q@-5!-Q92{Iy|O|Na)R%*Y$N4i*F zxpL6+Xur)tiZOi@_yMNa+}ylNk5t5?F#$0Q4)$V+G0>Q?C93gmaXK&Gf{lDJ?Z)5A z9ZwZRn{$=m^%0t18gm&N`p%Z+kqk;xFA+&Fn}3JK9D8f-3J_(aBB-|>9m_{$ z(1#(_9S-B~_OT(Oed&^+UPEC;l?;5{cMu{--1b@08S4gDq3qOKX;Us2{0f&Deh?v< z-e0E;-kbz^8Oe7Zou&8EI*?Fq4BfwKhn(%MEscV0IYawt4!Om(Y>&zc)6Q+;OSr%5 ze%iyB;%Xw>=n<#8{|&mWk)7Fl!xXZ_&VarBv(js^4+Om5aV|q(8WlmL%?Vo(LiPsy z(YJ&>F6(XU7biaaSmUV;I*66vL=-4i7JHK3a6OJYEyIjDStsgn(T2!GN?maFZfe!$ zTkg#}aqj3acJMKEIkntqf*&&MvIDO7Pv(;Ll=lQstfH{-WH5mWvo;+mxhPh0`9<3m z8Lrlk=B-jVI7eXb^Cg@}#J!ymG2EA~0SaS;cFv|b>GF%T%aAP$`>q~YXV%>BQ*bdY zbgy}6(Sgb@cI<-A!JDTwv~-jqz+Q*S;jNTK0|^`n@C6`~?db8s=M$wGES$`*H=oRP z|C-I;$OzxE`QSWC-5ikL-@FcTNYt^BGTy}b?Y?->#2#nVp~2*wN7R@#b4D>S$)ohoNe-OSMFCbAR=Tfu6HW*&fSuA z!qi^1fm+P0$!tUVJ8Fjzf1Ce14b=^jk+c)rdtb!ac!|}s27bVj)5a;Jx7% zDRDUgQ1}>#knGvii2Yj{;jlPak;vhuBZAJ~RYG?AQx4KHNyM&kM`N0Ed!2`OdGdt< z1f=&{{>&`(QO)l&w-<2u*b{pqFSd4NRpkswSJ&xd)68WQ*BzXEAY{onc$eIPwOz22`FRZ&1{GhgUdMGxh{2rjhx zX@QJL>ru!h#s40-6mEigX?{AfML0BKSK}BzQzCI!L8T8(X~h(Dt0=@cc!OY z!a)yKon6wP@K-K!0~==#@T$yYN@x@w$NHTx-!*)M zQo>d)(1#9dTQR{Cz-5J#Ejmll2Ws9(_)QY{agnm#4gZ;@6_9n@_?q^pP%g@&rQ`_2 zi3`&hNht`o^DZZ&E)+CVykuVXa$}0l))rC|93iu78|Q(ECUuyf^_ zzQR6AD;5cRtx-B~TrRj9zg|$?qKIx>0lzY^{It|cq(d?%_x(iN5jFI(CsFfkq|YJ1 zTLEr^$%;M+Eqaqc`|0GDrmLOf$ETY+qUJ2T#OMHF`~I_T<=CEyLeJZQ09853rQYUN z8(CV9Qyci8^tHXd@P|(5N+M3(GXC!*#F82Z)2^qGW|Z4X2ZQMBxXvZh7{@`DiT819 ze5vvWWlkbezM{{Ke6pN|e!^{)VoIx~iX*JU?I;3kB0vClaG&vYhwQ1ZfaO zubaV~J51yWD9DP~bqJeeh z0PM|w9dEE`Z|JWn^*EGIGd$<@HdO7=+rDF6r)rSj8BJ6&?F#c6@3ynU68S{Ucz}Qz zaIp}a{rf)h1jnbh=}Y|4fPj3wkjPO8#uSBhCpb6~pfH(I>@EAA>81hV7`r()HjHq@ zeZxHUG!~x3S>9N0Fi@4%3g6^%rq{U^*q`oY{}JPpg^}CyY^7FwTL-c|p~O9=p~JcR zP%_~qsWZBIU>H1Np<#t>Ta!rBl(%hWcbF>lwkqySvq@!BldVe7mXn{8$tdVi42;** zzYRihYV;8r;puI(q=&F)J+x3;@9a7@xHLrq1zlsOM33xky5iDKdX3og50}mc3cd-X z)4N=d<@TBwx~$E<`=S9BPWvP_CK>dGRIzR~m-LOk#+gEQ9MNJF`JM`{g`OIeu`ltv zzFeQ^vyln&DtUmfOlEgJcQ03Q14cvVSBu=$RTt@o2G8x`EQ{H<3H81Kr3R|;y!8jI zlE3CzcD?vxEeL-JK&x3J_j5x|3>TA6E&Y+a zGGjY)v5(4G?ZKvB6}MJ5iZ)jwH>z>Svs96UI*>y5n^cW|zAQpS@6Azv(nftIfv-Hq zs`h0by&;2YZ(NcP5Vt;{nWD`x^k(1^$T&4?yyL=trRQcHbLd^rfhL5$Bp3*k2#-JF z@2bZBPS9CFUq`!Y7>R)~bKsM7S8uX>JuF>o-yiyYz`VeV_+*qER<|)HO8%zePzvto zYIj4XW${ukpj6U$895CAYSfvUdVAJR-o_Aybrdg!bPcw1YAY903_RE|vFTP#up7iE z=~()75ki$967<779KF)uRyuI=W_1{vCb+ijYO0p?QG~h!|KVW;semNJ61A}|ur-mO zNA#dwxKOGg~${ANv+YQO<4M=yrO0tnxUk_SXrrb6A zc$2G&*Bgy`F(7VP25Onq+9Xo4c%b)_)NSvS(=bl#9O;5&1nMPD#?*Ym!vpwP4rM_s zbhH$g+Z~+-O5f_g0Lb*V1LNx@Q2GztKIi_l&ag`!Y+iF`3U`>T9CebW%NBhmH5EUJ4$?Z4NJmr2HDWT> zM{RM=4euEsbpgua!{2IRZk-p~{EABXJXMTdS;BX0?0qc>;PQ5%#`UV?g_dG+uSpz= z>#C&xh|^{t>g5kt$4W_IQ^0f;5b*aq<_Pz7(c{3oraR|3Sk%O8Nst7M^&pPeedFGf z=I0VAP}Cr*fM0fTHY}wcF8HjAndiLf+aO1VO5V>CUb|l^O4kl4GJdt?^Vhn3%+dW+Rj@)%vD+z~xXVH(S61kj4KlcdgqW%G%xcsIVpoJQ*p_Yhl@$?9U5+HsO|^oM zXVih%rX!ag{f4k^4&8ivg211PeC%NI&U?I!Y5q7IdJr-BlJfdGB-xWJ&Jp|J^F5%Y^$U8Xs7&nQIyq#U% z`=JYodgidqY5TMui?CPn#f%9O;KkIoMdlRY8KP!eZNaxQ1^TZUe8%c4RriW)BJ@>d z{vbgiqsE20@0%h7kp97VxjL zm7dPWq)Cll_pfE*B(mC|kc59CFW)bOlfUYE5@E_}Tr_zJ-goq#1_J;9T_LyF0XNl= zr5htQXMx~8Xs{SQ6cejyBcbQbpgLMZ)I_gCShB2BOkZ~wa7f!G8I1;~LepzAip_D+ zbgi#TqocM({!Sfu#`lW5OYvQ$ndaboJO}i zdm`?1$b#}E9QCoQKB^K3mODaAckI!<+1wOM_`H@TsA-PgC-$W^vZ(QB zuAoYC7`L7>?lFRT2&y-Bg^SB#3y-bi6^ywE8J_n-2g#)vb5|aVNJyBYe9nzj6Gkc7 zaaAT*GUSbndLF(F$K`J2?sropnmb8C8dw`_h3 z4aJ&j3q9hFu}z?gt@^5jDDkxlT<(bZ_%j(oJ)4Ym2`ExYOle(6tv-JxrnA@&<`3rT zqQ@pKaJTG5D@kDQ<+fLbqE0}fo#t^9n{1H@n$@;v`8LOu+!YTX1RrH-O))H{x8&2C z3ZUk?Z@of=L65DSp+mDPv0Lu(7633L@Wmkw@=@i?-)6_9?KPxB!9&;Auv|gQF$AZn z6v3cW+U0t|xI83$D`W8T=%?ZtJ9{9-_?m-E2ft*@55RtIj=}?|n=ajAdkUigWOT>BqX0MprS_Zur%_*}h39)X^%vS># zx1xHzCqGzVtHQ5qIEwo6yz}at#y5+|S%?D1eWhFeXwi8|dgwv0hVJabR-Liq9!mDr zvt1#2b1cFPu8dcWq;P?c-kj0?WIbWicePp!q~iK2O2ghqpI3veaEro_who3U0xt`y zSO(zQ%r>yzm{YdBa`@h}5`gv{4VHSxudcnhtb6Y3uI}!l9pPx(o7uUa)doLV0OZ~68GjsV4O}e+xx(*o+oTsOAC0}QM_9)?D2P8xP8Lf-2oEv(tgx}2%;^&3!cImNXf_8w8Nuq< zn<~(l?W4M>X0Rpjvi_h=Xe*~bcTsNVoC1vk1$_-XHxoUcdwbF^zMSSx@OhHXUSd3^ zsTv0r0X^dUtvFp=p{kz1`+y}7N=%y+RRoE^Dr3!M+$wU5=tA`nDyDtlsm9wO0ZhbS z$s!yFKBF7G+6&DDX}2s1GM_?`4X0bN*wE^?UEHt?Qdi*YQTA2lOwg}GU?xddq!jf-eAVYT(f+{ZNcM@9CM z3B9Bq$M#8P^`7o*ohIkLygb(~oaiM_u2{J`sk98fBQ0!uLq~bCBYE2mCe@eSLYrP1 z-E!=R4AK?EHVw1DS>u~|iK;YBi$Cm0w9+C4+8O1rCcUZoBE33mhi&riSobA%W>>b$ zPx^@W&~M~3Qg4pKMq*b;F<1Y4&X?>M(@T8O;1zZ$ZE$It zKX(5zet@^Z{kgY~2}$(B0AHaCimx9XqrvaNbVQq}O3OAqX(3NH-_=dUsN^BmsYwC>9qaj@_(AZ zQo5a2_dL58j)J8tFDl&w06*Zl!v~oz1pjUBm#!AdD%;>ObFTfu1Qg!C=}TJ|0=%h4e+ahQKyaB@rsD+MxXp`yx8Mgy$v1aJFP$6 zK?ho37yk~q;zC5cvw)5PCTACzGBO+^dW+^K{^jnAyu>NddAG3ddbH#tPZxhflTda@ zX>v*2NAov}yM|Nj9nl+qVkLH8R##UyG(BA>e74ieWL1!?<*#eRSV=H=%l%JxjFI^f zn9j203*+RZMQ{x|EgHCERuscD%>x9N){?W7X52OAgtbMK<6)!aYaz5>sKqY^hg zDk1s~L9rvKT1j@)-9I#nDnKbw(xz``4XTlpo$v1MAoX*rpwv_%A~Lc#z7=mpPUh>} zuk_HI9Gu&WyX@^p$f!@Vho9WI;^Qe6^)WX_t#}C)&l_!ukox_W^w6!zA4o%Ya~e^^ zTA*r;I|c9Z`UizGTJDM0cdAXVNwZHZn%!92xS=8(_9MD=j2p~U*1m1?_F65itq`w3 zs8CNbDs^0Og_ux65^o#5Rbl7ZoeNQ$3tFEjGXa}nQnF#7l&GM~4+s|$`1aH1*j!<> z^PIYOV48K;7hm2?Lb7D~GRkfUtDxSlIz6<&Mscwyz2I}r=UQ4HN|i-R`JRk-Wz&{m zYc-d5%){9LJCwu(BR!1I4b184X6*H_X8CYv2@wQQ^Z=jfX&V3!7?%dTb!lq4QRT zQv^^Ql@>)al-c+YbR(mV_t@Q1G7f8#s-pE9c;)bS>Vq0U)^6?vb!;O+r;@X8W{WOt z?@7NVAP`ZAzzqwS>#(XMNG$7QKBM|laUrLV{vME?EKw888t=T2+xQr(PgbKZpK4xRh_8SF=H({zf*~BrLIhuY? zY0>9sfEYJ<=$iJhDGvF49isB9`D}FUO2hc|IGkqRtsi~4oIWSrc_+otbA*ai$speb zckt@{s3zB2A!@vM%^C~EQKgogs5mMTUAx_ff>7*xnb$d_t4C~E)Knn4ExS9w(4~iuLmlgDuPhDz?L|0s zGWz=VSc}hZcZk>4xbPP%YqF6Szpsy(*M{y(6;pKqUHXCfKOA5=W)O)3!+=|_i)bxM zIEP5GkRh!NzluRYDc{HAh}}my6hoq=_Qp|+ZNgX?2dIv@;J~#X<%m=Z#{<@r&F$Tl z*bG}(vK|ktxWnj&)vg|FtYll=$?WEUqN1FPhYsb@6cdbXqcSzHa7eV{iQ;i%W*mXs z?VOO3w^12jB(Yx)9?fP=qZ`74gugUzomg}90ht#9DOx1_zjRvCqea`BFbA~oQPbXx z;U`a@qLYk3b@X#D>KjaUX`(#(Aa?83u0m}(Mhiv+dDE*H%A6x_g{+SBV(b7_hS{lVY!htEixfNA9>bzoV zV4Efl-?%CsgR*{9ZB7RUDY0_h>#_87GbWL#FPPHN9>c>6j`X*xkXU2+g zpR;}!+6s3NOfIFkw_&-9X0A-+54b-!=*sLfX{%>BxccK^FL-voDOtQ>_xZJG9G$rA=GW`(tJ;QvAD#|7@1G$;tAU0_*P`w> zFL|Rzr+EWXud=u|e~nHTwi<#KjWwv2em8HBEVd}iUuj@qaCw##{$IOcyo_CJjgdz4 zli+=W!!lFnwcj%#*?F*%l9HU0Y9-UQ$brYyB*H(w0t!xXcy@2oL-O;T*W~IdeT1}R z$8!%B_pnnp8no8!UvpVc={$(=xE3-9`Nh3uK$kI-XK#o`H!0+Y243a zZ4}O4=*)UYDCaZ&d?vR3!QpyK{#&W}_l#sS*?)PB{Iz;msO568F7(2nf2 z+dAc_e4>9Gv&6p*Vb9YajOjG&8rN~*8?0BYED_w6&~E;ql>T=Th-Xs;)4{$-6MMQ0 z0zKYek5ps`ZI$z_YGFrZm$U!1=4t^5Omx;q8{Wt5SmxH=I&2%s&0?aL5v2T8Mm%Ri z!apiA<+=ZEojRvdn;@>c&Wu@KJXkpS9_-Y9$s1V5L#3>&{GC9ccImHo;USYvg_R~~ zUaR{s;`zP_F(ANM4U=qv{pU}aU;9g3tt2JjbNjQ@xFI=i*C1u}a`xn8>CJwd8~uuB^v~<;7mD%z zY5(+v1K~$x7Xatt$Uw-#*Y~50>>woOsq$G0lU%TP;f4>Rv@}ir?O)};GzmxIKJ3#& zbLsOV*7F;~QXa;cD4kIkho zTRj$1kPMb(IBot;WNhG9 zrTn}4X32pZNhTxNwwIV^L8Q@xODZN`48()bkOfhL zR}z&+Dz-gs`s_uWE)FPb^C+u45hNkPkF(5N_jihuzb5Gbt2ar~_lP&X)jkt;vd#IS zeqXa~B=A?|MR>9jXK&L-kq`hjI)90CWaM>aXAR zK>HVFCq9UGy(K3l7`C9{)gN-Tx+;;o-Ar#!-pNJm zNO;q|7M3Zt@$`cNuBe!{b7=kigizE9NbACc7*w1$!g7E-Q6BJdVAybIF7Gpg3j8Kf z($Fk_)*K)MJvrIT7#0VuiR6TmMQSr;kba{W`ufdR^o%dA_y@@E_88Ag$#Q~kHD?K? zOK#!xiDX9&(lhrm(98nbgxED$D+_x)ZPF^|z~kUwcc`~MyJt-JQv{C4eOA!T-$=q_2Lo3iO!=`$D z+M1kOVl}R5yFtxN|o9packL#A(!DKR^*S z^1|(;$ujK(tvnMfTq?8&amL*XEnLXrWawdS)GxZt)kK4ZKbq2%{t4_*+C&@sTHOh;Y*Y9Kx1%<$kB0^pbB!TP*M z%8w5OHAQcxpG8=p!~LeT zXMc!)4j*F@H=kgkr=A_m71Jxwg>n`F4=#-cvVDcWaCU(G5T|01kx?Ea!8}~m0+?hx>$5|r7W+BRbP)w z6=B5MPt%D7)|TG5XQPXA&>dk`$m3-;3KD&OXQiy?(Qi6>F#-AvfJ2QP)RUHX``iQ;-kWkh zbRq;xFhDeWj>X(<^3%<{x1?c&%+{{=YZ@?VbPD3cz3(Qc{JJc{nCa~57cBV{gXj>d z5Z{jz>y~kWc((&;DdxST7o|;jkR?f#mvlE#%-}f}7bQ^$#Shsy{6XlU&ijvQgYQGn z0H@#hc!%)wtD__3j=wdL&ump~g^W(HFi9=DO~YC^Wp`9qqqmsEO39$g9x0jJ(LmZz ziL#`gQg3C-Lp;%WN5N)tuju2qJ)uB7F{Z_}~-i-0`W! zaV!rysgN4JSO@~HCzr^rR2v!v6cL-Fcht{GA-`RU*bkA$?X-^D^J?f}DIM3{%&qj| zY5ZAZTP3Ir0kFH{zLkvZK5^xB_;(gn*5HJ+7Zm7L7<5wNpclS8Rtos+eOn?UPLd@P zWLgp|B3b2Rpqej}c3j3y&3s?kr8k1&>)5gwH;rm^lp?X6P1H^on{oEqLynSyuj6Xci@!7Z z@>Hf={klz_K15@?hG;&K5SEi3(h0=W<8pkiZ%p*7zK2TCp>f`FxrYOP`y1bKBYG|B z%lM`_f;BhsxFXAeF0pX?YuWU>lk+*zaV6@v^u>8*(S|(jB(lnGRc_j@I_*or8JXTx zt~5NXew%rdJjwCwIhdw+KnEJSg_K|n*3)nHHXW=nF)?6t`{-98EBk4m0q{+UKi3-R z?+fWaeXk86oGgT|)l6GSPfIjXF9Y1Fqs?+gE^Y!qv4;MEXuIXbF%1G};urj?GMkfF z08x0rtyv$L)QEA%Yxf^tSQw zoD}~K4U7`jm@@bX63$I;xy4)+|2RIcYaMy@nywTQD;#pcawnUk`lF_cjvl@-4Dx%Y z=^!QJJ<%9y-RD`(0zuv}B?O1=z+;vz?w-Jv_5$vYQM_f>| zFWE_#?tBn}^kdS|FCFXf?M2J8BKD?-6l_bwryOa)7TRj8PQ{TuxKx#z$8vnQSBND^ zed5vA*|*Fr=R4*?4H(u!4cvU-Zg@WnUrQOsoK1|2>s>C`;np~SJ0U{GMlaIJ-D%|& zmCX>aOnu5oZx zKnfur{g@2W{`gU1tex-|P9jhq27VSilwIpZJCLYE8;6%eN@zlu$&E_yLGf#8c=@*mW!+Itw2S? z#F!3u9(>>89FV}H#SCvU32|GFUV@nshQ&9OW>uP{$WtTib@;CtzC0+)YaV=I_ z$VPBO7fHSlqi+du+eB>EH{4j zu#N2>;V?x?C95e{d_LK=OKmS_dMo!ODCB^od<)~#xtThoT+;2HyogTIUoY=A`E z-{-gg^qB!-i$aD?BB*C)7_A6owp2+9Ev(v5R=$~8uZ%=>;R(-9P^(@YCUuTP1M@d- z-92Tu9eOAp&yE7l^5i}iio3ThyW{pPUs+miWgRWjA1_6N{meM$;Z)~W*<7uoK6!W4 zcqF?IfX?)RP&(`%N8*77FDRTCV*gIA@~8? z3&-GBTs-BWT(I!?8r!D!z1NVqV$p-cW*M8)NmAytYC4^<6!{g1-t#b?Ag9+M*8Z(? zj__hl%G9|D}083p~&o5)Tg~!T{Kh9 z8qmSYV1>SGwA!I}cprpM2Z^(s!;j_)_mCmm-Ai7!j_H&L+WjqPHDESn*8a%JZ~7qi2$Gamt7=Ee-7`kf4b9wDi+XQaRKY$rrF2F-hPk1)I5EOYbKj~b6 zfePwgb(QEJi&zW)_T?QY@cHTkv2bVEs0nLndA&y*ZQC*$A4dy1k{`#Kf#okF>_H^C zovzj98~N8z|K9`WI?iL6Drb-r`k&4)=a$LjOKs~;5;AZ_W%R*V)~e^; zs8#|4yS>7sda+?=H`!4QTt=imI!Qhskoq`_8$&d=3!=+HEY?Z)<1B0l+%!awN%_&6 znTEI&GRxqhEO|a5ZiTfB5kRinPtm(7NJU7SjJ@lxrz3=agjB-&SigclJmEiqC9g)E zlUR(P_t<(}D#(RoVXMbaY8^JHzWCM}ZK2emzeb{2#@w@>|2~|2pTQPw8ma07*k3PO zAMI=ce=p7nE!|FUt(bQ$eDa2aeRj)beKO-|Ol4#HM9LFls>d%-F)ol^kC~`w5Qo`Z zG2Sc~&Qr8)If4qo(R2`6h`4ahvHDbFRIp~(o!`MO z$O^eg3cU#;wVvAOf(k{IJAnA_!j(Gj3n8ZQpyoj3G_pX+Rs4%vsHm^126-E0^RSD} z;{kyhqc4#KL6lL}V)Tsor%i8z5c)krvIACHD=h$>m41&I!}Vz^KYz+^oaHd6qqCr^ z8}yqS`S$tk#3`j%FjGR9E-V2WAJouX_;O4zZ8Oivq^fLG&B+$ht zs9g0(9qEu|2fHFf^(u!N@jLtGS#!}9i>i<=`BXc)6Z~eA+b6->v;I5KYkdLsyx8%1 z6_WQzqy}m6Tl;G1YGF>ym08KXc6&ROXk6)}v*3)^73r0EH$#F=Q&L`0kW1t<7!qY! zVfy`GQZGYmv<)?u#_V`%(GkW~d`w05aqvc5Kp2Q@Uru?8MBv zbAI$^LDa)N2P3XR3e8QmX#0-XG^v~vZjrl$Bd2Z7mI7`3;AH^K#%;6i?hR5W{lp4v z^X2%H&@g)7-jJ?^GmBm^FWmmNMA(~xL2;@I>s$-E=Tpg{bqUgzJm=NYqkzvkM-OYt z^kVv`CdzFVn*y6U3Edu2`jnkus6R@SRr<)uEgTU8L6Sr>@q5qMIqgpf$tt(gg9UFp zOW}8iz;1}MP(A%@;zP2Jc*+nc#z2DVaBZ8fOBG1_51X2PIu%Be5fG=?^w9Y>{bhZHCEZwl+wJ zrr-M;iWRyUz3Wh+mjqkuX&RoGfW)*(KhP&w03Ij|7WFCv3+Jao?@eQIVVD;c^eb*FLdADCXlNHl0&M4;ibUSnhU z7~eS{Up4w02ILqBVN6B}CVminJJKlp=o4|cM2+LUI4pIIaxN&~BXP9wq=oV4v3Vu3 zB5jsZqM${lq)9DKNYJ3XOk+!-Up>{?|E4V=m$@LBskSMa)`$Ntr0U}>i=oZ@oAb{X zr@qVOn;OeMDn};;lWHr}o--2kKzu2mz_XB2bDmu?!;j7-zxT5X<*_hBGVHb=6ypyEp zT#~5$mU67HS#dAb(`x$pgX!O-IN;A)tzl8Nbbs~-1pGK_A}zcIftVhoUXphe~QAzg>hN?^p&Sfk%>;r&5BT6;a^mEWJ5*3w@= zZzUeuW(R99(kgsnx4~okYHnQHl)ZD^)D|3HEd1vz+nyoZGsCV#I$_KqAxY;xj7S?F z$Okz2=T*q|DR70)@?>^-RO8}hn7-6y;4Tf$6={dhoux&y-0GJNC)$OgZ_fyFCo!t9 z5AYx)X|U}(*K-6pMdgvw?KcY#hgL&ReO`QZEu|9EV#w5dn-thrL*3Nm~_tN z?+2o4#~jtIVXX_K@89ycJaM81*J5t3cT!Yd5$T@?<*+3WZe5>BkC+h48RPihjDs

`fUX*YRC7)W+)lJZ9DcV3Qgtux?%7p5}1kmdndHQN27z!2aOf@nG}+h25pAF zv(jYODzGog7o{ebmRQPJe{u^tkEC>ZJINTi<<60PT%%71nrfms^CO>pW71A4^1wuT2wlTiH#!o1|f@-Xv7 zlzoBv&rU^f?-7SMcHo2L+i)5v*$?ge!_MR>P=2qzYEQ}XRS#o`UQr>F4@?*q^i~>& z(#R)b{^W&$!IS>;UjRO_>)40`{CUyeiu^Zn-~kp9oDTGe(-WKd{5@K;aZ?SSGJb{d zR+ZO8MF-o+;`8#il48yy{>Bn{F~qDc=F1f#Kse+s*sd;>1I_IAa=6ZFn&In_27x0%qvcb)NZcq#U@;IH~jU&ZZ zNZ812y)bDVSptioP-X5>X9~6Gjfsu|j~n`EVjith`*|KGc&&<2HtVa933_(g19qmO zx9#l3Wi13i4s2oFDdbVP7Aa1`BJ^UZMDenCKLvleg`3fLB&5dAO2;c%O`VM#G?7Nr zTVT2p{t}_ZkfgQ|11S#|G|LmobPzHbzuDQx4g2Ob`Sz?{U&gVpaLeNVYvew=n%dSj z0E3AM&Crx0gd$ShLXftlgeE9Wn&^f|Q4mCwAT@M^Afg8(kf5{>K&nbddXY}(p(xeR zLK6Z6LXqZ)`@BEk{X9R-vDTPlu4i5M-9uC{Vgq*iVmB`&Hfn3eTurdf0yL(Vx!(eF zfrq#T(s)@{qu2K>n!tenxF7%{&&5xOA$;n2l-Bi^b`gbP@%Dd-tHMHW6*pYYR}lV_$Ij{Q0SWJJWe-k zQWf}PPuAJxFM#l4>Bakx|CzLenLsa`OK^O+P>851oTE^!jFJg7S~)WulzQLg`p-jd-vGA1&9nNmnkJi3s}ba`hs%M)j9V9x zJ4jt8LH&u68yF#l-2gg zL&Xh5h)1TJ*2~y`h?yss9mmLzwtLs*b#3A3s#zeBRReM|vCLCeQ^hG!slCnF0%?U) zDzp&=n!t;sYipB=`Ga`eWy6?vBwSpFllRW|_;#<5<1%n=W05IqN-xxPkdQQS_txZn z+e(0?(kFh${7x|sBr@S^{c#gspbk{RM35LBt+?e%=y%Skt~K3@z>^!oMAB<4ow$!( z5Y*(YTRJ3ga8<8#b+IGYL#7YHZ=xa``Z&~g766RztM<}qyhxW=%R?P$%&cCIggmtYsA*9ie(EX^w)aDHhWg#UiVC z+Pvah9-Rd1+;*!~4dZoQV1ZBb0g9mIpBrr*e$yMUPk?^cG-KW*RVsHacr&Snge;U- zRkn4R7L2My8NKndyC{mCB1I5jR2`nfUUbfoXdK<$Ds868i*Ygk5_wo5cWA4gQ}NMM ztI1Dt^JX3+s5rav)~31>>+RVaju$>WzpXgwYC}L0qC%W#VxBc>DiDq696<7&V)mMa zltJPg0jd}s<`YQ&Crd8#0sLYDYy5sooYr`1qE%Z4_WQ1=SF9fR=Wy#AHY82UJ=1hO zng|p^uq!wJiYR9O(v!vJEnKZ8*n- z1pmgNg)Si5SV~7xdA#jS=MbTdKLq^cf(DHGZXm@Y4Y*sj7vFd#q|{=Nhb0_knbYfFe42x_0jYLE^2wc4Pz= zJ-rtPk<8%$F*SOPIbH!cW9p22C(k0@1DFjQDju1cnHitqHD-VBtV*(Ssh2ej4)><3Oqm3P zTDbi~_1yNOilo?6v%Fu6(K-~K7#Q68)9`>=AI~x|T4e%H4s0Kno*RYyEMm(HY1X_f zGf#SXn1-d3&Z?5CyPVIa89KnFVamWu=K&Cue?%2iV7_HuQKS7->x9k?Pk$p>CRXBr zh9o%L>8IJfYkr1OxMt>dmUJaSC+p?}{ekk!?w|+SRHyq=jInAQ>eI&)SrI@BHz&n0 z!%@uf4(t=L`Ydyvy^_+%q$rjo&K_u)==zlcb%+hsrM;9*%!jQ%lQkJ?e~Nkx32^a4 zU}&-i&~Yg^1{B)9%lI{hAhNoDh^<&2aKyVu#iFR}?gpUAmgYAxIPIx~dpj6uhsk8K z{L9e|az#kh5Arvpj@Z^b$MvjdJHp(us<>>bB_YqHk`xF*^W2iIJl6i!((13*#ua?; zf*=qOYVR_OBkbKU1ZUW;(lo417ZVy<9S?mDA!8$oLQVejSb@m9rQREL*#n%WAdoMW z?-%ax=g;TTA6{xiSUmIGo?qu7E5*@XxYRTPD$HdW|J&G6e=tDxw)WOGjH?1B`Khz4xN%m z^YFBHqM+K_c2v{;KBv~F*pyWS9dp_BX$pAaX40z3D8@#vPfzRn3ss}C!I>IeDCxSO zX)ACjY17i~Q}Yg5|IVEXA9Y7lGqZ?kpW%sbSzM*&urVn+ku-p~kKz_Dn(vFY3P$G_ z0U`NKP478$MgHnrU|xl)xBk#-ex56(Bco9qqv?Hna`OIcOJ7fii8X~0oGDKys2EN! z53)yb44k?JkbKt$9BP0i3m?`6$WpdCr4=jV!Tal2pJn-;iJc^h$%6wp%lS2LvdbOa zQ2>EOeOuO$wlLz#@GAOob-6GaF%yI)VjMo9~mLEqN}^Pp0i{VaHT zubOgm<#3zl+1d^C?X>M*gIbc2*FAa!2-H$}g~lb08!6A= zqfXn+o_Ej2DtU1Yf~s2qSFPzSI*-MSaCaflacS@#b*RBr2gcyF3H&b(+2CbYro9KA zA~L>;b;)Uz`iuzGZf@yv6c*qQDTQ|Re-}{9%%dnDT(SUu@`=m+IU^Bkua^~!V&Bg3 zK?!8#1{k&l4(c%?3PGX%)i~jHalyo9=8l$jmBS+lHA#Vz3pP4ZBb7KbLV{tRA-Saw z&vXYfQ@l@)T~;?IF1Z!1?Wn&>XAxX6Z(Ypks59w)2ygV`x%I%jS~x<4nw+d?Q$9Pn zY9OtZ;24jtm?=UoQ@4=Jf*kF!4oaKAan59nYQqlM!1$JXMF=9N)~DLHWt$#ed*tfw ze#3(-JS@pSsi>@cCRSe2#KFTRZqqup{x?xq&VTo3CVW38qs{sH$CGegzNwwQ3HF~X z*W{Ols+beR$)hira1&&EjT}I)&wloUc>LvY_(6-7+L*Ym4;SL%`S_hdoiZ{|}8Ou`qhAu4;@N55bt zvTNb`n-k_dFuwtA5c9Rv@^SYx z;MVg^LWHfBlln-N)m)y|zZJBlV~{paFKvXdblC1Z+OkV|?UWiWs-0x>4qFwhrK9f7PJZ4u;qQ77~8>i1=oXVW%b!`R4 zVWu?_P7ea;bJ`qpHmBNnz z3i#C2A&s7;rJNvAgT!k4Fehy`D6F=$rX;b~l~x(mT&I1xu-#7byl?A1IhfOyhFXi1 zM140Z1ngu9Ybb&N;HW`c<6`OPp&-9)867 zTxVe%RR;IVDA~LMGSSa=7ttk2D7z-_bDZqeEiou{l8BbYe58fBYA%HY;t|t)KsFv( z$dexQdsuZ&GlXoG#4cj+zCLiRYMsd=1f(l_keSR2l*TN+j#L!zn0d7v+fWp+6%_o$ zW(>WmhK)bqDmx!1yX=?QWEYv&WL*;asm{|oxzqciQJTrkMC+&9E{IMgd4+u8pKwNW z`|UceAR}=6y2->mGE?hIDBnqVZveehP&K7`ZsXdR z=gljBH`bLr{}+;5Ec@Mew&jXZ+yz(Ar(12Dy5UnUz3=6Mgu(=>ziXBHVDT%gUiPW& z^_E$};xBjSnsb^KZ%8WkymNtT$_KrQX}iA&d*8LT8;|%z_}2cd+~aeZYmo~Frt*@F z?c&&p_*{B&@4(H$*ts(z9K*p2BO9M>qVvGrU|YJP*5QG&$S8D3GV+c-QFX?$&Ef6- zW8*;MnB5%f_U7$l3z4x`Ms;Ch-Sdj4sevgN1CYN=7#HvN-XwNW`_O?jR|jkV2yE}W z{kkB8NJfWx;?>Pw8c~scr%}!UtgUwUQlv|(qRiM@%`~txM5|QJrZeeLL&=nADEW@T z4CHopb>TC5LwLm8_MDGYG{B4E&C2HXC26(y;1BKgc|U~eutZ8Xv&i-ycn4hTUv>-| z!~7@*j|haEoE9YPEfWkft5_~ZK6G}!Ek(0<%lRb0MDwjJr8lVr9lwd=hF=TbN$2#H z?hp{6C$cZ92T8WCyTAr|-IT z#S-!dvccDDWmd~Rda3E*2HTdyP5Y`i!9OjAX%{0>#h-i~=*&Nz9tm7nl55z0yD3(q z#exaE9TZ$mlw3CybKF_|t+uYTG_oeLKC-)3m{up*AMl45Y5fP=IOY;P=~g*?~f_24|4-ChSE%2MD3FCC&~@re(Ajz z`zNAnyvU8ofSrS*Lp1A5-x2V6Gwn#S>33U()8@x1Ox;kB?a99`w2=Rd%1(TIebj+P z+Vf*CC2iKU8JRAA;4%AON;aorx;xY>JZfJ@4Zj961@^}{l)#+4|A5(St^z@{gB%li z#{n65^M^|H$C=2N@@Xv0)xP%Rdp&VZ^qn&O^=!KB?$fyXib zno&pK(_zCT|LhTm;Ha& aj(?|h^~OV$xbOX`Vl}#HreA#HA^N}3T2PJv literal 0 HcmV?d00001 diff --git a/docs/user/dashboard/images/lens_dataViewDropDown_8.3.png b/docs/user/dashboard/images/lens_dataViewDropDown_8.3.png new file mode 100644 index 0000000000000000000000000000000000000000..857f28303b8cb4f178f434aa9c7f5c372af661b8 GIT binary patch literal 47601 zcmZ^~1yo$mvNwuPaCdiicPF^Jy99R|+#!MBuEE{i-8Ce*4+Mw7{pEk|x!*nSzVG#3 zJzcx1epS`owPnq!9iyuJ85w~90RjR7Sx#0;9RdQ9>@R)u3GVMNjqy|q1O&p4ous6y zoTMa~s++U5or4twgltS|IzUrn6-VsS|CqdxT1rg*kJ5K#2zv5nRhVNk26A|+6f||! zhC&X$Pz!Nsn4jpx*lP7i(hkwE>jk>?f@ERA94I&r<(UBB;PmU=hslTKW=@attT3q7 zyJ;3Wm}nF|uF2FBqEVVdPV+mdFgbfnygy3)_-ACcV8JLxY)(qbAqa}(=Sy%eqL{^V z>$z@q(8pU}EKLF{2nvFlGG{W`tqI*p`WKrHQzB%rK#SZ*856EC z)z$JWL+(%kx`Q7OrUNm94 z(Ky7gk!E;%(i4~O;$qeB(1{ev(eS5CwaFNOkIAt_gA0Wq9u8$9gU0BG3=#Vz70kNN zn)Ho(XcC<@?b8x0hX7`WD^S2-xFuWMyV=_V#`Nr6SqQ_~ZvO$J$SAk5rWUgQG+d&P zkKYQh1HOL&3nCg>gJ;SYqWl5cIELMFcXC(^Iytg7$O)7 zHdT>5umm7;!)nEH=b_611mRm^`DR#(p%wKa4k&Zs_-vRc5f(eXE&@4-M?(=;e(glH zk*EXTuJ|7bfVdZtCWDl8!Rq1*sxov2SkNO9(gjJXc69Jx_$%?WA}eK<3-wjc%h$`D zexjXV62z4j9NQW+(+c1b#~l{AFH9|*&SU?9{v&e>d+X?d>WBA+EIIne%z=#rkB0^_ zIbJWCelW%C-i&|^m))B^Amc%oDJ`<4ztb$NA!Y^X4C74T48=jX6?;AAd?bFyg^xG~ zc@_~jWPiu9onpglgM348gV~Vug3=h)Iof*|u$O#A@yY;5mgBQ@xq5+m zt(z36Q9fakHi>2;YnXyM`Jni&_^nub5qi;pBhx|oo|-n%>fr8x0PG9a0Dsnst;}UG zNGXi;xbyGuJ^{BS{?7k|k^l=C z@a@w#hi{$)0Pb2_B-=f%8E$AU->ir%f37+Edv#STOoX_>lIqg462szKwFXT@hU_eH z=0cKEFV(0Pu9lpZy=ELctuML1PD%@H54m`l<61+!zW$Pa5mE{wa3=^_TeI_Aa#DIJ z5H?!Z$*wc1HmVEId1*p1q7|dnut`=+KlKF^kh9jQ7Th@$eGPG7J6H` zjqquKp^RBMfMygV* zBG%@uF|)_D5AiIyLnd4qU6!$J8Y*>%vyOa0TKIZ`|KK3ks<6%)f8~Z>yP`w^wM*mK*U8XL8Q&!%-8MO>~$cZEwJTEAqXo_Vbnk6nVZRI0nubZCJ*_;OPSHVmka~prT!A2ykj?vaqt`P1py;617v~0Nri;VG zJMh=*65>xB7aSs$f#TsZBE_e{m>o@b8THi)t%@N-9B;x0>bdl`2;T9By>#%)Qum_# z65L|XB5xTg0uaV3l$=~ammHXjp3}g%FKI1x_^v3e4b%?c5fP+*376GKq3`@|@x6(z zOv8ba1;hKu@4#t>I4xZMUXJ`&$gb&YERy_hP#XC1K-hQ7H`SLEca&MESJooYcHwU1 zSKM!wi#gQk4?B22cyGCN^&cgS>Gw<)EbBc)`gxt*ju8{FgV+JE;;;a13?1v*SF6;w z%0;b9?Xfy1`k$;!bZ2iYf4bHvmMP>GdbsoKy#f;6jUNNX^vhb-e+M!iVw*5Gu+lR= zHO6;coS>qJrhF9W=C}4*gq=p_5;hP@6L#@DIS8m$s%4q1b@2n;_i>)n_LwhQSyuc? zraK&d^X&0FwO)Yh!H4Ii>%2}M>g46^2FE&jCM7y8ttUe$Tk!^h0p7pP7q_(p|wPnoTO+CKJ7NFVZhvs8Yo3s{7g+?y8qNk^1f0 z#)3X{PxCWF?@`&O4yRtfmrfMogDJt3tnsBp=K?r>)#rTsKAUsaqB`8F1hIsLqa)vj zltN1{4u=nCG0ADy^o0xvl-F`Mf+qiHg6wLR2xrmeu=3P$W<&)S8Jvg((gSPT9L3jv z+`u1Q8fLf`?wkJ^nM#LZ&2_eE&F?w$eENx(eA~y z<kEE3=6+I!nn^W{rR5D zci0bIuQBgvtyJ#vv_HPw*$1@QKOB>M z0r_u%x02VNa}xj}>>@2e@gEzaomYq#3Qsy!ba%IN+7SS zML9@mp~S?kKkaSAJoyyx(rXXLUKKvnZtxXDHhzMaqjWF^DC1UT?xOfEs(R`>peP>}F+-)(v z4AH)rV8s6mc88RM{pO=&Ea(fHb_nNV**m7lE9tM=SBm(*ue@nix^mV^N)QZx=}!=_ zkQflqe<{en2LvPm1nj?P2ncyd!v907L(=_Q2MPir$_@hN-#Yq#$A8-Qzx^-z-y?KV zBn05^8OGlpUI6vq+K^-g(Em+C-29b6h-*m7$^9KQEZnTDoZM}lJqWIcW&bkZU1as# zAs}$5|LKr&>Qq+{5KzDEG<7|6l@tXmoE=%rES=4*SbQ8^{;>lg&$5vKT;hQMF?A2urm*}qgg?1d?Gl~lh0~#;?2q8>}JEt&d<-!%ErOU!NL4jgW28J$-~Tt*~y*qzl{91 z9Vsh!3pYC#4?AZkvVZKFnLB%W2vbn}v?BMy&5^6cw zd5CZbvHsuK{~M+EKQIw?F0Oxr{*(K^5xW0Z#D8-CH$uhD?(aI7{S%r9`@cQ>C-2|- zLahI6{ePswf92V~xPKE(1VM=P|0Jyl0>9MiF9--R2stTnO&`cJBY-KkG$sjII1Yw{ z1S<9I7JBq2br|tjI&)ksbZIp;EJAYt;eF)$eIzmBqTph&w*(?L8q{$_@I%n{#(MhH zlmeuL+LpxD=Edy4+r=h!Y@A9X%s}Jqpn=JiYyTJ|DPR@>@QQ%TQjPtDHLthZR);|f z01~;lkZC~1P)B^<wU*wgqZ=qJ^mx5 zcj>QYIcpeBv`XNP@0#|f;Bozp{VRCO3@HmET;NFDQ))mJ5>`qob4J5joE}>S<3stC z5}Yu{#DM4YQg7%&wDZWI4wEdzH6i+w2G5?zu{Cx#mlMm4ktlvh!X*I`AX3$geZuxqIpkli7LNLIoGlDF;!Z^_os_hsmPjql#^%{AP$eAqz~h)UJW?iS zYRW#Zq01j2K!qi*G{t79E%ejj82@8@YsEuOP83q6KHJUw_pxRGc?x$Zki2=h>6=Z} zxlL!@(ugzsxAdaGh+_HGJq*>NXyMGG;IvT)fS2E>E58dH4q-_z{P^_*TRMgT7xbdiKh$jRLIh0fua4Rc(gmS zI}K;R0D;o{QbB(34ZTxWg4o? z(?Et4J<3#t<#o~hBC;LPD^etd4wpgJgiR!LOIHr35#kXzxuhGjA#K7?n0<;+7_Mc4 z)8+8w2&NzgH#>!#UR6Z8a8ogiGuxpc;P*`^^eW6Akp`%E%r^*bLO@|TM;o!+o-c24 zcakp)Xc+r~8&X7H94me7%^k{OBdYiug+hBg`2!{;0l(d&)2DTrQ<*||NpZtaNm6K^ zX7lFD&W6s03%;!VbnCdH@_lD+J4YeMZiY1})F3jY2On)Ii4G}RYJy#NhX8us)%QVH7;ju+1 zbU5kY>=N!7L3BgRhg3}{irEc1O34EtJG~x`#;kif`+O0b=0<#*b%X1lTE;>tKJJSuWnMH1GF-D^pydUk&V8-e+bu5NGuy#Pe?Poi{si zT{>g2Wn0x5bd_~AB#xpf;!tM{U4uO??H0&Ll+j)98~i&r?0x>|L|l2gK(T@~i|)=f zmrAUTbW^yHFMKuqnt$2}$c$6*#+EZj{o$bZeJ{TXnq|zIE>16JmO>Z@=G4zRI3Le) z9lcGYxDOtBTn;;4%q%y3<=phWgg^S~KM2Bkn0DX0?w&*D>GORGnS!S&^H34Me}Fsv zyVwrm{d}%`m+s|pWX;4r%c5ThbarZpnW+NVQro3CU7_8T>sZtg#j^#{O}*@ub2%O` z&VH&r%Kz)GcI*y816P9t^Lr#d$GMLxUK>>s6757ojE6CxPXr~$0>x5a@+jl`Mip%) z$`rHrPPcmi0-ZC-6B&?*uZrj~y}Sr&SB{5NHN^Ce{QB=LHN<@u@{W?fe1}rY`tCqh zqJ@bEc#2p@-v@HDW58qO$;7}28V}1eiX@*kUo7*`8})trv&XcXlW_HY)5?y z(Ol9(m|4f% zsiF0DXUemWLnZm???wY>D#1x7u&MYci8kEirnes zJyD9VfR*fX&9gV%>pmS=ZbZzTr6AIZvqTK4WZey(zSx6f$8m z)N0EFh?N!oIV0(v^G&a9z^qo;kY>g(*Y|MiAhSwt?vlF?1V%j4V|_Ad0>aZz91TPd zqbv5wkjAE)kC$;nUm1qg039ez2aA=G;s*q)y_qY})YX0EVVzkA5ah1S12OVF6#xFI zL4VUqJ!vmVAZI#JR0~hn=VrNU_ES^ntG>{-%22Y5aaUSe>Z$a&2YGe*ER?(trFF7PCF7Do z8N7FPzNcyb0vTiSnjy~oI}R5iy07?nSzq=kV0Ld&(P;y5GkzmZq0<^;SDd>*p#!QW z;aQh5FC!QH&a;&8_c)tf`ZFP&*CwAcRba9Fx#TWuG5Go4AUCcb3ZODE(s&ZKR#X{Mm_x?+ISzD3;Y$)c)K{r#NR!Q_ z5vMkPbEOz7O-_CeIuq+#+rOJ$uselk=`zk});c7TPgYhHX^1Y{TWx<;aN$8XM_~yc zm8((r>7P}Jh(?IO3E;@Hk&{zM|D`l!H5>OTdyn_E2s zH9fZxfEYUjo=Av@+H0L7cuu56zPp$a+2eW{QBg%^)2k+=`B@IM9J zEh-$88@3e3W1v}-r;MAU4QMj$Vp^?NQBN#Gfc|Rs=4G;b$6Rdk63f|^URdF=wo#3( zsVD*cdj84ut(}N!Thl3;Rs$am*LU!qGryZ+ZoJE)9zidefu!Fu_&COvvMvQOo7anb zD=-(h-uqHdq$I0_m{>n6^eqe}R&c%B-MO0Rn~E!=q;vb62Z2?wl&k0}YX00b@@Fg6 zhm$0vv76p7IgI=a6hr}HuF?tg*K2uLk3X`NXIuGXZvxuMo-Z1fH?@4A^UR{u{gAYa ztnncZJA))cq61o2RS``gQ_%5Cu%_Sj7FpIjR#AAf=9Al`{HiaXG)Zq^&+srw;_pBs zW{X;9#?-0wh2Ov{Ez&q`hvWw{WNhh#dwV0L&epoRI+B8oi#2bl!2CY7LkB?$$oZ83 zgGf2v0{|c`r5yV6!QEy0R4_`5rHV(+R}(Di-@jNGb&S@;PWp31UH8JNsLCd*sST_q zD|;}$WfpwSRXtv>fJ|d2*By1~Z#vElfl@Xr5o0xIQK0!~G2$UsN{*|7lMhO%(rGGk zxfk)_6E9_2p<3c4)&woq`C1*LtEn((eM;MWF$XPG*q5l?HM$W&-%jwaA2h_-%cjSj zjNflY9f0Twi@h@U+_a(u++3&h-Js+z+B#0DX~>nbmTSrK=Qij*CwghTxO8AyO{OwC zW{>V**Ptd%i?>-Fi9daL7FdOFZ&gZNT>Rn4Y^Tnu2q1$^3j2w_(prQTJoGu)>e(b4 z^aR^=AaGSBiOCXj-ge&b$z~im@#Wxmgn{M21xy9(w)n?AcZqwKpBs$!nZGDYvTb)x z?eu_D$3t!=M`aM=E{EULtnHKg0#0VjT|E{wYMrBjl0aJxV+bU*1L#CNp^%x_u_&p4 zf-x4rib@onYFGZ!=DDB_bvcW_g3>Ly2_%M1&%BQD%J1#6E#sosP^>-C)%oR=kO=l+ zok=w!sA@Fqv@TQBYn0SBh2TMErswsrr$hdtrM~66k8Gz_g~Tz6{~R{K2;%$W3;q?a z&QqRJY!TZ0_y_VGKSICRR!y&iT;2(27T@jf?0>vcijo&4P>2~xd#PkF_jCF7Jf#Fs ztPuA1MT$wbH@iin^gTcp>Y4%dyApF{2yQPCGdAjw_ArLa?H#g}%a}Ze`!ab2sqyGx zBH}L=HMTx9y?{rr<1{|BU|y*HJAbS?vUSv{D!fWQWW;fCvf_08c%0c`()985zR#0N zMr>?Tuo73vmJ6Y8ZeKYW!V@p?o_%l3o~&p8KC|SDJ?~6?&+b4RzQ6RRnF8JTSmbJb zJWF5OdGs&N7sP5E^rZ7%eOg}GgP>ES&?g}BD$o{nXzCUmyKOpuCe7(wB;)oPBa963 zj$tRM1RBs=7#q?A6tt6Etf~gCyQmsJx-}eDd5$a`BAiJvQ1!yQEtmGV9X-M>mTE@} zZT3|-gpr~8xRY2XY3ABR1+l3Zzj3Nx{886&I@Q$}RoY_ORyIPmk^-gyTSW9n#TSOd z;-l6hClG_2(gvL8l1AzYoGw*0P$XA3t|!!|Rb6%WaZ^`TV0<5%?l`Pmi*I|%J3Z=f z84`LLH3Ktyv`O`uVj-Dxn8{?N`?JT50H71zBLtI0woYeE`iKzsn|A(2zkMgBD%%Om z*0`A;CQ)I6`0|g0iU@OkZStdr>XKQ@NU3#44vC`LVyX&e%&5IiaRPL|zvZzsTvyoo zbK0pf%U%$+$!gcG(~GOV5)*vFnHQ=^0$cUSwina8&K3U6^xTy z4tzOc@O2w>!~a>7n!QGf<-Sdpc)s4ne@bqXY5smalr<4Ilr4;EIFC{<=@bQyqJ33hz)s)2gR*qV z4Th=@mSuyJ;IJMeEv-vRz`aPUBfVr`CeYR>qsLCx98QY+@kt!Om}7>zjaN837hcR2 zpfic+-lotN{d_fzo9=uO{k=Zcss!WRyzsmBMRY3iI_j~(Ub`}YqXUKW06Ad&gpAR6 z!{p+{BZ4S$9!8t7Ok4aT{;ovZhk8b(AA(5O4%r$^1rI-{&PIux#p`Y-y}P?pqQ{IK zJ2g^sD!X|VtKMd9wTc@cmC9%rWNpd_56?oqyUZX<@rMMR7}fsIccjq(b~*^fe2!{K zt&aUQlnlFgGt-iZbi(i3Z7n}5wMpWiIoyUA-Kh^{i!>uNGB3}PvPvv%`?TxLE58_Y zSo_#*p&V~kpc~6ZP|Hie3p(c&eVFG$T-gSz(YE87{ zP1$ag{6_0Wy%rkR5l{EtI=VnlFKeb^OhGl7@KEiDUJ??MFyqDPoeFmh zh3bXCdQC*cRD43z$x3DbRgseL@q8x>(-1L+Ho0o2w*%Ds8|4B!JoxSVr5AB&6)1{{)W9rr$Lq2hU!yxSbj_9SnHeOfh7bwGlzei-s2ulP_}U; z+WUtj=*GIjXAoX6ePikWbVTq=VTuKMYO%6##K>a>^9x3Rn5uFl4-4(;>|)8QYef0r zGtwvqAC~zG>cyNQ+nbY|08`!GJY;sf9!IT023N##D#|L~xw}}7`zhS>)Q7cW;++~i zhqai6-D-Vjap_u^`jO@Io*yjJcEnLrEqk?WI;@He&3I`(np$Wslk4Rqz)Z8=LKQ^|E-%Bb6CT z6%|RDYU+{xiVw)X)s0cHo-Bpj8o!cs-)=srh7M*ll z2V?^G`p1L>c1f)>#@hZlqtce-i;b5qq z)PbVj1-~X+M8PLa^>_v8aV%f)_nAjQee0Uo#H9BKt=gokyt*tcC`&r8art>V2+n!f z&V%Wm$fXHs*z#zuXA8NESSy`m^9ZZyhxN?>*ENLb19VrP%p&zNE$JtZ1r)ob;;f&M z)Po^40}D6ZCD_FT_)VmDA@;n+0oa1<_MZN?y!6m2Pr2ya2WtupawS@7ZV=ECHeN-R z`C$uK^enl}B*S*ZC8meOFAGGwosaQ(EyV^mUl!Sz#PdST)fkanXxdkPJpMt69HC#?BfphN)1eBy|g1e@pxek;PE*s4VaJDYfCjpwGXDpb#o^?G0e&u z9b;GS>*nVM+Gn-98yK}9P1jR#WmygJW(_e)*;t6=>DI?RuJFS|VU+g?>Wf#DSzKkb z;I)HbYY5hLq$1a@^fz81SR;}>z9+yGl17>s?O-@eOv>WF4jNWyh{`%$YJR35(20~> z@?yfwo3+v>AaeP-Bw*0ynQwUa4u!63redi5ndJ*!>1EVz6q2q=Yp}dt9sHRnTy#Qq z>tMzw-E=65ursy+V}uZ6PvB4t>T^eN8AZXz<&b~ZMApoUX^ZrfFeytqIF)zu$lEjN zi;dub#DE|U4G*^)`WU`Oy0EG4$I)SGcs41Jd3RewL zTY&DlaIV%S0srKtP^393*pOVWZffF&mcs*}m+;4kFKqBUcqbGb&nw;sk9tp0v9K$p zvs4m&I`~2s^JL*n@$1laMTDu;dL^soMOxz3Oh0|mUGi4*?QsX>Hiw*B?Af#yN?nYS z;y^@h43p~ldnbCxLDcHR$@j814isZ1e9##Gjhd^ySysq~Q3tXsBUW@`ub_xx$Lm2& zmqf=b6a3nvGyeI9z+_PiyG!iY9-2<~_%mPTtBa2B&aYYB(&c61Vn=}$B*JrY>0MK$ z>iDp<+g0u^Csq1=O|qNTv0dz(Yjuq7f_#UkQfP{jSC`qMVj~#HCO_K(c?El_T;~e9s`yCwtE07mIz8eQ_wkWrC<`Q z&G^vo`s_V`Pi zcJlR8y=+dL2VJq>*@&cG9c;sq{H)WsKD`)RgtAI;&!Ic%tzTj7Vfq}u`HQlqPZ|8~ z-w~m3erwl~*SHoM&0oyf^b0pcokE{mKuU*eq1T~~;&LKC zZ7i{?pEhd1G)Q@OgNWT`sbG9zz?Lj}MC(4ZrdVs{>6BpN+7oqUh;u)(ioSK?;) zd_f=|MZoZ&*@Jlso6O+_9?m0vMcNP;6vz=4aMXSTpp}>{~ks!@~Q+^!W>d zp9ug0i~QJX%mtp>g)H#x=u1pN(vS|?R#vkfNoPf2*4w(bSuk|G!46Q=Mf7ZZ^YIV} z|L&9K5m6T=XufZ3NR2A8qUh99ncJyPmm>32Pl8~CJ^e>gKqr|!zeYP^+?_IrX*1>_ zjARU^e{*V3U64t4YXD_(u#eIzz>+?*1sGMGLrR&>Q(YWLB>I?sq6ME6gZP80+q}SI zw3dn)(Fc1$C-LM%5BYTe#l&mU^R1F`^T0h4yrw-L(QomxB1SG3k|ZArJ~Z9oXw!H( z=h(ZU25W9xwp_>rHNnZ(glN*~$OM?G+*h*B0o(Q4R>GiSr`Cj9=c1Z#+97i1Q8$~# zNCK;{y^a{B8a>r0d?10T2phX0-0~m`nS$d2qS};iT)G+Ly5?JfO5qzD374*;WDz6M zLV1{aD7Ldc9LKWIsFYcQ&)KBR>6Z%MWp)Qn{(v;#N9tYKJ&yxdApuv>@1Dh2Jm?w5 z2naT$hJ>Wkf@G|QI-g(iF{d&=$y3r)z;TCJ86F{k|1?7{wi0cSmm>*NNRNKSf5Bor zgs>nb9w0N1MB%eOz_X3FFhFkdnjXNjGp;Mj^I%C>t@NS}%53pV_!*(P6w*n1QSRZ0 z%~C?n*HurwiL&0$3@N%7#hrwgP9f?4D^bKKt6ZZF$;T;O`fI7G9#loT_V4nePmP`wHEmz^jM{g{^Ra5!?!wXwsV$k!&at}-gKlpqB=isOV zZYp-ojpf^RN18nx>THs>aY6DrE^6pe#%z%eW2;zMQRy}4MqD3wp~m_=MtZreo(tNj zvD0T3>osnd4AgH@`2tA)o`)L|BZ{N!NT8(^crJ<-MqKLV!k4aLqI6rx2S3VlA^olD z*o)&$V8PW@cPm_cASI2u%1a)f4^_}S^KrNNTO&+w`pfgLbjF?FQs{K$n_{VH^?p5U zc`7WC5`~lS@r{<3gD7mZM#9ghq`@jh&grG~NQ+jSSQu?pt1KiC!g$%`U9sfikc(v9 z-6{8iEc@2ZxQOpXBIovU!a3Ur!5m-0&u<&++a+F=$5-$TtR5~X-CV$-x2A(%*f!#2E^NJwvj4i)FYaupZVCy(bYI1it>!H>f?{A_^NZ!S)V#^jYJE zPyD9#xfn_L^1i1Sk|>+r@9RFrRUh1|`?5Y(^0xL_>bCY}D$=JnT?YcLYUq3ds;t;q zxFcnMZpQ(Scuy38KCb>f)Y8_%b*H`|t&GAr~8@rCZ)}Jq|qc5lY5x zKGO~%vfSB64Vc7QZL@Z%*Y6B8l3?fl`hn*p5i>EMBrvezlQ*#ojtr2A%n%!O^-_%F zP=gzsP&kbgL2{4&?#t!b5hp%15a==+G4MmARN$1%NkGw#Uo{w?7R6~v^kYQg$>L3% zK4GaSD%b?NIw>)IImHZ`;%C-wh`{1pF5VwqCc*MLan5ONj{F36RdH3Z3>((=#zj-g zU*>u~k^=4A$~Is?GLATZ*~HC|Kg5`*OX!;5XC_lpRZB^|CT7KM`dGbhP1pfq4muD3 zy2T^rO$P6tCMk(Qd3h#qm6-2E7-omkjF_*J3xH1gY-7Mzag6s(I%h!-aJ)Xg8=(ei5-Qzy?Q?mw5Shs;%Oq-JN-wd$`HnY3sZ9qRX4n1bIQ85IIcjSi z3-5#7x$(tKJuUO1y30a1%sv-A?wG-w#t(C#0H%zF*}@G7$;Ove>IKb9kliI zrMG%)$k%ym9U8i}oB_vCbSLMwfhbH#(t15QE{$+qKEea$DD~&DZJ2!*|0lamm*8a7 z9LQDUG|HfvddnUp2huRL$JzS^qS&2;*8;a9u-hH>VyX$DNcM9~_5+iGysjuSn*O}d*zMxc4JgX43q+q|wY&HyfqLEQwW zU5pgvbjOr3=!_>z-$7s&#Ja9Gj}U!M-Uns+H2vn^2mD&1b>tV~$5YOcCsd$FG}^!Y z)#!v&dt}nHM$*zW-35gDGQT?Jdvo{`3+AE-~E{+%->$x_lgpm*;u+wOb$9G?wd2!3nKov-MP) zO9OAmdr-7>3dzNtT8Rh1cZEE1uQ-x)hUxqypHMW*1o}p+X{kx07k1ytz@X)VVvHVt zhyPlfFps4#pqOB8Cug!Wo!T{lQW3Y=M}qEIzphVW#eoXlX(z5nyNxc)I+&?0=0N1D zg)pTdkY~d*HFA*vYU>$p-6T+?oy(k!QOTDRnh+sF5zNVh z;?T9-bc?0`?k)y*+_x*Q0J-O9{9T?DASsSSvRClq5(p0~hw8d;Nrm(3s4C$=4Zy%o z9-Yg#&Ue3G0v9J-tu%PF#C~%akV)}4^ZU}*PSfiySKV;S$_MMgl9^X?aU*MH`Quzj zLG={tRsAJZ2JK?5b;K{Pf$Fnc3agX#h`?7u5~bxRnFBE|eQuFp9OcP@8<` zKnP|^&zY2SQBRh9JAYbpVnNVUWkoi$JrMBImBEIgapzdr8%;|DCd?hK{WUC8X&2N{r509b$s!xDa*y~jgxCoE-^~E)@0xWwM$uo-j+q#hm%B-zQDp`9hIP4)C&&)B!&ywmPxV5Z$5#KILD@vZ1OThRz7{ z8M1BRB`LU?Xp;~XgsRcQ5?xl|^@;IaQs+^C->ncM4&6Zn{Z(H#-Q$we@5oH}>@aJmQ=dp2kucrR+;Gp6peMJ#aAa zpmLol()%UcroGvpSgSs#&2({Q8Q$Wbiis{J0>#14!^etP^tp-#@bc-pzv$8R>tYN!ml$qxJ*E~_yAz%?@( zqz}E03&ggoBfy>8%C-eeW=59hx$jFN5^4^|2YBLtgHH5%W05ed8FvWNFmMszy6P}# z(iO9WVXPqf8ij!V6GL6v!k%ylY3BBk-R&Z=S`EYER*Pm}i;QzO<22mrX=5+kd+={f z$ka_ZXMMN8Dd%yXo#Gt5&(L`|_ft0qTH6*Qr(=Y3HHp5UCKIjlj+t(^Q3KP~z6PpF zQhI-rI(5|*f8%~5p)(Fs2!JOJYoLlU)|98^Y6ZTUoMr0PA^Hc!ebaqem9kA2l2P#l zzM^X>|1R>^3GX&a03Y<_`N{Au^ET%U{G7i=8}D>G_%tp2lty8j1?LT!loF;ZI z=z}_Dn)C)p+Q_6Y4Taqc;}cN<8jzP7qR~2Aqx(JjuX(uG7&>%E0;<;KRCiRI)!f)x zylM`3FT7NYHpk_9U3sEIN7B9@+< zUt9P38vGt1m;_&7l;89C5<|+am(F!;cOuL*MV{dxKhYAWXM2;(>lmjn49t;WN6fEX z3ai5w_mZcZe45tu%9G1eCz+)RTr#n#BGK5EGkO9VlLw%xpc!+FC7(3Q-yp!S_ZIjF znNIU!UHP`1&HVyJ9#drmVHBjyNOhyeq4uiR8fwtg@{^f0RwZbj2=yBxL^nBFTTC;f zDucH=sK&$HHhjsJiNeA`#07fJ?z0mJ-jKun2n=5LVQ(%a=a;+t1i-T$m^7W^<70I! zl|`Lu)!A0J0uQ?K`(iWi!NQE8q?DAedYE-TuEH=vO`>C?>wqoTiIVWXr)}N3Gb~do z9j}8REfeD>o2tC-KjY;2Ve#4!#PetC)i~lP5#Jq5?VkR)Wr5t`L_s+@#}ggNdZQJr z-CB9Db(H4ym8=-ZU=7e-%s@nLAensjk8avxVp_a+AND@KC>Z9`Ned8<;sx<;Dh?C5m?d9@AO+Q=M8DTi8zh-l&-o350hget$)S;fJbU|0S%hw`DuUT> zFkAG#4q00938@tG25OGg(AWn&DQa+cARYA^ShmNGVuj)G=oDFO7oHnWvM2%)Y~YJ* z?(5zY)rjE{md{1mtG=UC(o5d3Sf|Wn7Eh|mt&N)``fhm*>5Bs7S>tT?z)V6OqWjr? zM7rZiW=pPZ&$+!b&SVyreT(?^<#D#^`l)=+l`g+XRRnu7{kM*$m9L3$fXo<;817X3YFRf=3UV879iif}Wyz>;Iu~TQ12-B01bUMun4Ng1A0@BZj z*d`${N=te6W#C=MPFL80bA-KlV9?ZYHeBXq1rSNQ41)ocTI#)ws%)nuyme&X?}KuZ za%vEDspX?lg$wSe!h{~y2C9x$`frNP`OPVBxPQ;j)fcv(kdK(Grm?!OGq~5qaB=eogQv>>&0onAyc~>HSU%*Z{%>**%p*6@e%CXx=qN zRB2wnFai4cd6i)Oi$J|8RY-W~L>R*p4oAqrpY z2}&o;eTW4vBMdT^@ob%v(oziag)UI*rI}8*0m1@K(w=1?jgIy6VrF-^PZIxxKWy6U zL*&jLG?5G(#ivh!cdHDJm()N*von%Uc*DxnSOogof}*gOVfWs4q)T;9kgg@!;NGeP z=v98P)ID^?P!wSdGuLx>zb& zq3RYL74v@iO8mOi)fO&z4icOa)CwBX8M6N4|D!@^V{)wN1{{*dr-kS8P1p@9O|^2b z$$OZH^C$hz?B_d??;m7ly3p=3(T^(}Ysz0{E_S@|kqPDMwxWXBS>U6m>Z9Dkf7JQj{f9;NIeLn+T*9@4 zP!IIP6=<96HfBMl$Xf?jYR=&j!Q;3Nz5OadX;+TO7=mtQ#?6GPEAE~suSdEqB~c#8vFT3cr!9WU0zW!WI?hj z3b1YaMD#n8m+n*k&|QT4Xb5K^7lM3YE@$Z@!@G_fnTUuQDfS+v#OU+xaHRql$xYev z(2=0eURt4t9q zF|EQK0dxL!;Zh@X4!tA(p=#)l;#U}xkAIa~2W3IGMp(R%9KX=R_ei{%dmu9dw@y#_ zd?agzCGAG)@1}OLnLn1myY@K=&^8g!G6`3*@OOxJNO#{>CqkeanaO7Qh1+Zc2L7r4 z1`^T9qNvunl>Me7`w{MfvBndT(J#6kTSc~dF$CHVPJljuxQkU2xL=O%3J@FDf?%Nf z@6vIEBBunKRrZ>>Z2EKDbVRKir!@|4Wqchbz+)K(r^uUfC{?+R4lNrXof>S{~U>Txw z-X}gIpOIws8f_}YJwZ+QmL`NECIjl)IBWrYO0{%ZF9WL*b*3@m+cx&j(JqtnAzmS+VuB} zFTTV&?U^)}`?WOr)jGz2XwA$Mh(a3ISWN<+Vi1_F^Q#N^Pet-Cavfv72^S%B5N)mQ zM^PS)U5EMv1qErH*mU;5^(E&egOUddK|RGFEO#8>mXsx%VsN>TfvA|I zFd~`o^#yj1th+yAT^~{vw(A3)MaZmIf_!;1aa5(c(!d89V_+C%C8g9ck{}M1_8bTl z()d)9pf@7{&rYc?%as+Av-D_@PRXriLo}9`X6-wM?2iul6iBdutxbxd786Y2rv0b}vRDKLllz;2uDVEI^F)>;sf zk+PrfCD3%9GvPApu);fUc_%CkA0MB?e^#j5zq6am{+H%4nepNf@Yl;oy2&Xa?q#QY zIf`bU8|Wo2cVPZlabI|f6AxG&G&;Si-eld*<)FHqd!(1=D*2f~L{iEx7h!%!3#OJ- zg@|S@l3FC0Lcmq^czCyP(y81jxg^}woao17xmUr&krrWa$QLL(AM-Ol%w9&(RZdM>p9P{88O#i6aECfkxo#Uv*8hl zA4$%=Z_25NOXWYed><(F+O`fckI7INNa6PAwHmQVG+E9^ClV;EtCDjs(RF|I^Iv}p zx>g!rz=@#wTCvm*mLC}xJ3VOO-AX$b^s>znNG<;npT35G$m^BH~PH=@`-X zeXzrlP7Wc~u~E9xl(K2o5YVJQ{3#?h6&S!wXltMSIj(ANH4E%`i{EXuKKJ8yA=78j zsw@vn37t~5Ug`UQ=*3B-!Di4*F{KNR_G0GB6%F4_a^3EIJBee^YYcC8T2_>YO>rCI zb4HpC1E9*8n^WY)Fd}z@uu<1d!Sr8qu7B4W(Nf2~D0F!_QnRsrDrY)gZi-s8y=p`< zK_d;gA~UYhS7gwxF2I4l=?Fjn{UPwsf7tk~d%ed$VNkVD3;O?|>8zvLc>b@CQ=DSO zY0={DUW#jRcXx+C@B#&jy9Frj?(XjH?jGEK`Fx-A{FiL@>`Z2JCiA}c&TGkbcXv_w z&MDX(mn)8EExP&2zI{Gl-98U{S3;%2O>z+Z8x^IF65y6bl_T26#p2jt(B@fe8!+$g z^wYaor;+P~i5%@@Q9W2D#cs7hRz$>qW`bw*{&Z2t%1!%gon|ztV7NvYoHTEnK$e{c zcpNa9e0C|y9~2mvz)ZqqA1PF0#SM(={vx!qv(vRI@{(9rvA@Bk*=z!OQ#uJ)2*;)0 zN%2FnBeUXnJ;HoU%=UaD)S*Eu@Ew6$)oZZTO4K5O#VlM}(hRnEUVm82H^BR*fSuxZ zYe_BGC!aq=#j`56Y(aQh7-#xXUAa_fD=U2)37DAKYKy6uX!f@b1=512#B#I#sh%!! z#1i6YYNw`Pn+z=#&zcVg< zUXc0nLc-$rXyz7Rcg7Fr`5Of&HhRNHI*IW`M+Ol=>dnh7(Gnd>Xy;>AQFwIg8->|H z*>a7?gMApUtERHD%AWJwpx6ERD$VXdCpm@yn*vvvL2h7;$D}?|r4}q~83-Mnz=~Yu_ zIV}eX+0Za94%eHmRGSnEfREzACq&r$gIT`ub9-=hl1Qj&u$qBB59_AQ&m}_mECDi` zhgp8K>)xA;>D=WBy;U*fjptokD2ZHl+Vq8%Z!zXfIzk_>Hc!v3w4R|V2uXpX`DPIX zSj4&#4s`TdY8%36gupIm* zwFwKNw9hR;VwWs)J5ztS>ClLp4HY4_N~`-9D-tq4aH;^yiS*NXwAJ^UQdP84N=|E4 z4c}_}UVgfuQ~Nf(G)^l^hnVb3t7(i5yCz?7k#fEaoAVw87M8MliAHJ3d3q4lu@41V zB6G*{FGg^7Hk2NdGBg?i-wy*nol^k76F@#{dtO%3v`b(`8>Zb@L~E4g|DfQ9>LtvVBd7yz+m?6N_((OtF|06n`jGv2x#p_3$v?oM3L|( zE=ZD+9tiyTCi;>?7c^U$LDp*<1+B|98#30hBz} zX?9Mm|LB6Y+3EYRdWCdy2Ka7>*?d_|ghVQ6*#0;}kB5-h0AE`@-+IZpP!vj9U)5Jz zCD7n?+cx9nd{&FMI%-(aChWXdbT?93sY7w$tz@)}c(tw-EqtA@An0)cjNlP|e`Jqz zSSK7dUKp)xGmp(e)rkr5_^zo^Ag8t_{K2-|a(=(P(D8=Ik;ReD$2wKM?Xl_LcCv>3 z`lqf+wQ(SjYh<(yaD)3^*)Ln}g+@_UtWrpyWibf~dd0MPdqzvc7@cjY8^v8v6n=wQ zG3K;;e+^dOHBZ(|K)mmrvzq-?5CYDCvQ3Wnc=*?D3yag7WYFwfKU3xXU|%OZZoS%( z&gp%x%kMC6UCL()7)cOj9Ql|r8^v|+?h#M>ICI%88zdzwePH0fjoMD@H13y?Pv>?B zn6Hxl*)bS^_Z=86`I5!W~G*S6WMYP7Q;lOUnk4&nu?Ed z*b5u>u;H5r-7KwCd&QAM`}Kg1`b$Ks_Ip5m&hL;C%=kiuZ$kqn$-d+lvaR>-C|ya6 zvFh7hUL`*@scC7EGJ(-|?}%h(qM`vUc0(-kLBdkU%aDm>;Hg)X4$J)Q>5xO7J*WpN zFE3Bisc03BC%zn{p=&pu)hQCsvU;4@GbYl%SYr1DMfO{y%GIXti_hsiQl$;?LhyW% z)$ic^uz@ErBOIhE79vee>+OzkbaG_(e(Uja$iGsH(Y8UYeK3{}NgGFi8~?Gd(c0)j zVV19bP5E$9t=Xw8BZJJ1qwVs(&_=;3;Lt+kth zJvc&JG&qG%rx;c{=VItQn0VF;LG2L5d#nGsc=thR`}tE-+8ynZo=zvL@&!JhCQ4z? zhbqiFN!pRkLfI?_lS7N!B~8xbKR7dsrUe4lDle>+eUnLUL09W?4>AWXsYudQ>i`g zyeL><*yNqc&g(MW-)7_t0?lpS8prFch0g&j9XJDXNTpIt_M1QGx|qd(1=;=cjrG-V zRqaFyc#=uUmrd^N+pM2$;fQoHEpI-M0_yv51Z-EW`r@x_9?u-pcfEQ<4G|Oa2s=!F%dc`JcR$nb6+{?l zMTYVIQ?Q1=ecVnh-{}u;y^f*jlNC;9XR+r(;>kF^EtsJod5CJ#dA_}X&u{-+bCn4E z*sTO_v|?|G6&J7+I7H;=RaZ;iSwbK3(itFA<8~Y;lleYMSG3;~1|(8(8*YJB*u8r;lx5qT$#09`T+GcRoy~7`aPac#zuolYGbgj}qOgd~Orbh@2z4_!3mlp0Cle z<H4nzL{D&X7 z?ihc$Ta1HpiRdzj2{OP1NMEKfRwsnfDoS-~)(M^r|B!8b8P_sCo-tGUIasA8fLJ?h zFUakDoS#`WJEzQFu}eiVC!Ly-P*9ux`G!G!RxIl@N2wK{;oV=0ZutrBh=5ag6Edq52)?C4mrW064dZ@I4m zyK)v=%-4=0H#`Wh+}4@*=Pto*H}`N)H_@Apq;$$g@;U^?TBQZAx2Mi>Qlp&F!U6-= zv(W~ncm0oR0F>#=%OO3F^_&HG4+?Jk6$!h3TQuM}P11>%Vlb=S3PTR|b5u@aF-1DR zb?rfghv@2;S^FOL+asq``#4mB`>zwmZh`yuI@Pu$jC9(`YoE(h3Jd6dfx@iem+fa; zaH&D$e9|mgIqZAymY>tVQN(%OE+kBdTQfhUVZ}vG__tM{Awiqye@@SvXPVaed+UEuhn%Sla{Gd=wnA`JXg&qkl;^7Kl8C?H7dz_ioJNR z*;j1gS2^@^J)6me0{`8S%wDPpbCK93m~n=Q8P=sJbIa9x^5z-`4=bW+F@5iSt94NO zMT^Z|#rDH+E2EAjjjjGia^5z+=qI?R?OzW=xEi-}=bPI2MeOF|v5Z7X#%t>pk7LpC z2MbHQC!3vFOdijMSB(yv3Lw92Cj#e}cDDCmR_Dhnqvq#=X>jkC-QWc}*wLFwRH+N_ zy7Q+m8)6KyEN&LameE(9QN-#r4qt8e-lF0G zB!H0tHp_8Z&NqyWt+-a1eD}^R((w{rb6sk0@IK!hiXFyOl}+c0LP5rXskkGC3*01o zktzb7k4y;eyAo)sSDtBK_-SjrCrMMmr;89WoS2nnWx+&Hl-2G_NgBo3X)K<6u1p9j7}{awFV z=9t8N5Hk^4jN?fzBASDv$iP6mu|q0(4hiX+ZR>Fo>qYX0ZYuFdUP~@4oZr2mP&>4=uLlOfb7>#mS~*%R`gy@jieU zfx@C-vbk+%rnHwT(=n=~T}QgAd|wP!&G(06Q37(M%b~2Pa1_SWWI{p$Idc@*rO<`w z+F7U9-HB{6Q)V6)HAX|cMUC}hF-@}jNfA#1LY~2&0F$7@+$F?1LI71Xvbf}+X2x)_ z=J%NSQZ=VZ^$mRS?w99uX=k|5N`JA>)w)(7vYt)@zbv{=`S%I6y1%YROX>q%fTg#Z ziVK28BK?9?=xqr0;PST#DSU`5nT2Cd)ivntV$6cqVh!Nn=vA;!qkxah4{JqUd)VK_`px_ABGF za5qXP9L@DJWH+x zyhmiIc#&e)mm5TGK#t~Ihl22bU?+Ho!ZuK)kg+mBl-*rCr8H4zS64pSsEOr`TeOx6 zgh-cRvs1&OX(UOq+hbhIw=3t@5|!Mq8#Ab+y@)+LK{SzLH+kdi!7>lW0&jYgV=Ke9S93G|&~FDz==|^ajA4w4Ieh(zp?X0!qbcYTFV#t=+DjndFF9$e7sD z0s%ll!$f~+&|ytHdwD+a1x{U)+%{@A%77yq=sgx-R-2BT)h)-J3HQqbmxCK8i6qpr zZj0w`_RYHKbs_GFu@3fE7M@zYUkDj9T)a1^!h*BTyTwUPk%%f2M5OT^-}IJ~fBo{# z$E4O53j7KG6J^LqwuVB1dTHuRz(SN=hv1u8e+Iz~4xGk3pc`Jf8Nn6Kd&Jw&I(A21nXns z{;}x(KdgoyEh4gob*`Tk3efcBKj2VjAgsbe^a)8>8xU`*^WQ1(=QGdM=AOSI^c(lf z{30C$ZRCwUMGl69mpamcaQ}U{FM=f%uP!nb zmCpY;Vvm=O{)IjQ-0f?~MgGw+ZyrqtHevsBwLT#_9tr3u!S59()`&h~0g3;kCJWG{f_U`bk-}c+LBg@7bRWE_W0pCMh5uRyj|Y_b zn(M$r0#hB!hp@N*U21mQzZc3m_nP)AH$9MB2>p@Ak($>qNpFI0?Go0R`T#Kb_6j5= z1Op@VKutbS|2v`EaVr4_Gf~lZ^Qo7S+rc5D)sW}Rrs%&8n;!a)5|6aNjh;}A=no~v z8SIN)#RqWWf=7`Le7dN|0sG$BPbV6O02qt+&TEjJQM!u__KnN#=x`ms@LeWq$80c_ z;77fXpdRS;VT2#g$n{gsq~Zz;pVKQ`M|`^i*0m8IQ(uvxGZBZ`wVT$!QA?%#Pj?+o3GK_yS))uU=Z+*3|n#G;Lu&Xsev{sx) z&^A$NjlZG*pH(^5848OIzc;1OJT+PAiQaN<-|W|?^mawsxxUAE<-PlA_)WO>Wf#Ms z6;}-u2oEH9yvIUJ2XxleqF&Ngy+VBzW;h(Xkr)IdOZeuXNu;K957Kw?_H*$kVjXka z<;_U`di%6f+(2LWobjkj*%B{DAQl?d3hgPzdetx<3;*4_Z)>M7DJ7wZ>~Xeo8${l5 z#`&l`L4;mZGDXHM4e6P}=v@fR?A^?#=JST`<{s8~GS;Fz;3f-$HRevgjVU}jbDY5J>j!4p;+AR zHty~&_6fG%tRq2I6TksZDB9)!NT%hJIlE7m|Y+{ZZ*2HP9c*I*5LK5$bjW;FXye9 zB3-gCJua@qz!|L%@p}X={lP*0cEn6}mej~zX{mL4N=qgOTcq9APpo?HM%016`9fBlat7StnSB&)i2WWZI_f)X}(}17Ycqy5I5LxvSh?_briGX1Vya>}o(hJ$Q3b zzrnT{8B6$C(oSp}t%n9=GhdS5ldo_JREU1Pc)i-5gqqX`GI>V(79{tWjotM1{RCpa zN^7+ncdR+SiKvO-aK%p|;OCgMd{&Mh0AkAt?KUUUWc*SuC~Ibm4tPXESNU?2Vh5pK z@f!U(4JGqSQUcyTSOb$%zA-V8ZkqY2FO=EkI{9v9bkB`4OS_-UL1(!(bQ(YsSYISF z+|s;zSW?{iW{amJgoQ*4-Zy^YVj7{oF_;*RCyP9g@%*o>NRx zVU%Bv_9QcsLQk9CHHO>d-&1XBmFghgt(p+`CR-ol74aXdBA1&3My0>B%GJu^#cJ%j zH@r$x24PrKIFm_?I%-zet2+!92(r#H;kKerb8{ST_5z)=3fgN=U9CpD5|N9=dOGDy zbVfa?j#pdXmK*H&lRi`3rtd*RLnAw^OhQjULz5M`E{j_B5l zxQaZQBgTr1tzV1Kp(@K)WE(C8;l0+LeV?I&NFQMii8RuYC-c|k_jEF~1bKO*QU?|fj0@#D6mG}5NCIU@q->coe%-IZY<4TURuPv~jW!;ial`@T z5w9x^cIn!#Y9*=*YziHz&lo=?WwDZCwzoNPXl&*4zp*)|?~r$(lQ1Q9b&154AX8=D zW_RxF>~@D*E0=4l$sf+VLstJQ`o8g*Zf9%FC?m@TFHv_c%`F(4&NT9`4g4ISV}$<8 z7hYi=M;YYrf^R7kn(bb9bLzU6Ih1msg9kw0h6B4 zKi}3?Qa*2q7OQj0sh8{1L?l%tJ536FDEE(z@yLUIZTR1K=@=?|gU;D{vAX1wH~^H#GSS;gV}WcN9*AxVUV zVHS%C0l?LEbyZ7XzEKe0qisW{wqAwpay`9_zW19Q#2W%&O;;3`>5KB{9z!_~Zt_=a4$vWf){0t&4WQI!KYB1M)pVx}$izTQmmToMY_g zhB*|$>?}HEk`<}K0EG`hurC@qv3zojEt&8++EO9(8^yf$jpou>XVrC z%<~Hhv|SFy>I)Ro?d>*daF2)a%*kx7cc>Ol=4}{I^|{$T<-G_Mra%6MI~^&tuk!uy z33q#$+74gr`Z29pe^Os^NaCih@`}JB!XV5yMC|Nh5KJL6<2$HAA8J-}oXTa$&O;)vB{IJICJH!e;orcse z*!teHJ<3v}T{5*jrw#QN?GK_64|_Mi7dNV4M!D;hm6dVK`+RcC9)us2E;~QoB}-i` z#Zc6f`Gp|P;zG3v0byv3`vX-OYW@SH)>PJ2;#$b`STD7z`h@E{k~Lel?Gat)ezsJ6 zy+8g^eHd$2yreBUbPJ%PYBh@^?EEd5b`aM2<) zTA1aN1E^Z5Vm z#F*BCwDOj6XG;{4t_@L9LZ3>%sgGYtrR*v}&2;$iH(w0!n`)>goNcsAUZ*=Zt0O35 z8476x*Uz+iC;~o$qSv=-%_ovdE864;xvh)X|D~>b-=BS}Y~#}p3>xj?h@Ll-QF=o7 z@r>W3!hL`3&AQ4pwf_rJX2K(jp?7^AbyWN40QcM|o?c*$ei=}vZIg*%5`_u3Y(>2N&KFB_=8R$sg@M797@Szv#_L_?YZsN*1jax(Pq98N>x zR)I7TGA$P3sg~U!;InBDUFe8Bw;oL*y@s;(^X)MsgmxAzj;n|R5v!f*aXcrvs7NHN!v0g6O4<(#jJG zcJqnpnmY4B`ETiug|aurEB2z0<+gyr_! zrMXPIUi~u1&}2GT-#p3oqRyrgZZDh~$_%n}sICrC;B}41Ax^Mq{Zo36m1U5KZ!&0T)cm;fX<1 zP=VuJFD8RC`L>Rj2%Apwx!_kM*(@sAj}VN197!mx`B(_Bu(&}|1PtYLR>XK&=sN?E zghy-vVNOfa$mn#mS-#J_Ndc==dA3#PfkqxtQ~Tj~ebHJMm^5#UxBR?f%QXQb8u9ML zl4x`Z^rgrH3bmBDzGNX6$!_sT*q~VRaX#5XCOb2c4|>!WazrseE+fdIMCHMc&`Vx69-c-A)%wpg0o6H60c!H829Je)&FM+gQ!s zD{E3#Ld-EOf|uJ;@ZzggN_mR~-Pe;~;@27Cyo_>Brr$wUkAe>-t)49$ef}5~nxq{e z2UmK1(ju0exYo|jXG@1_1OglMhB5UW%M*aUL-Q3sxj)Jh9(kLRWF zc0a*0LcmkrpUPPgdX%Ic(=+k*CW?HnL?Z*K*3~l?_sBe2$IM|ygF`if;?iJHyerrE znxf!(mR}JQz9%`w#21|GdCY9L3V-lq%T~oxMZk($h<%EksKT!z=E>ZKVkBGmi96|E zS~)|)z$e9gIZt+|V|yxzn8UqqLPRfv41b;FXB+G!I03WnG^hzU%!Dw8l1XPpGn0~{ zsFbUa8Oy`M$l9pH9LUPhrS0u5*IPB-rI*TNVaW3wS0&-jlGqdi%mvq^({9HLA(o)% z4DkpAFRhvU_r;@prr}rEhSzE)+jf1UYhxH5oJWH2`BO%xN_vC9xs= zW2EaDS+p}WG_>??)a=`hB^tX@^-IswaDYmUe-Uw$`sMT+o83Gbw{GF0$7cHX(EEz` zxBWoV?!aKWAsw!ZfNbVO8^rt2z%DK}$;4#CzvRd#JpdKTH%Lm%`fvAogOA|T!Kvb2 zVsh3Z2VJY14c_sYT+aLEVAk*(MpQR%+^XyG)hm70cU^=8_}-0n#5~a;)AmD*QN_$w zgr4+&3*D;@oiq=TK)DM-u1~O+RRZ84p5Xoa1}S)gn?6ed_Is^kk9oA27BhBK@Xxzq zB>*dj!-AZ?uTg@d?EBk;a333`G-(eY)gp_CSue*k=hPJ{twH6fzISY+(1V#Ip%J55 zE!w5cNet&5F@)A2YDkEuEv{xbKzusDm{goZ>q8qRu z%>u?OcwbI!5uOJ+AH#L$3ToS4HcDH{UbhQ3^M5*uU7Z%$TWq?Y%7c%vArDBI6{cZ$ zdMzdMH_KX0%Q23$+*Hu_~9v zjU^@@O&?^}5a(tb$b5PrcD%-WMryV4FS1OpUg=kz-KO}0ePj|dwNRx_3-N2lxifN| zWz}u~K~?p{1x|Lo&0?{kb3|&udpIOPI)h#7DxmUfif*|M5Wy7jeNR`S9uknV7=Q#h zkIPm*P1qpNMRnpas}E97CQVhc+AI)f1T2TRtA^H;R36HuaoLr0&?Fg=_*H5a*ShwG zpqYX9Hcg3MF(w6V=w+Vc512K-LedfahF9@;S9VuFnaiOq(%nQ1MZjfq#5|`SlIKYQ zu!uzlHt(XF?gCG;DB}9Y>Vr-{P50imQjB!E3tzb zpNnt~p@olgl`C}$nG)nP_!fG5O8jYPyE=a=ros{)Gv6TnGq?^(0lf06xX=%Mn-IqFi62fXHI8+)PIl9ZE&i zgJW*$Ng%@6%Byx)d#OWPn-P`~{ z>rTk_sC;#<^+i?aVa12$fH{_9?-2)%S+Fz}b9g$8c<)e@B@KS!-p_=Y1pj4^mL<^U zPJU>TBPG83!a&mag5MXhu^?lJ|&|&vlIMx~v4cxF^Z(=`ZadP22 z&I^6$lYCF_YRXAP*50P2o13>p{74xPhG;Yp#&|p|O*@YVh~dmlkHwZ8pofT<$CTDay>i;K*?E6%d%Tv>mK`w| zp(=>Ro?y+2@aDbu8DEa1z?Y_ueHiq793Mf8U-)2 zEL%;W(TsW`w33uj*hF>j%Dwq{FG5?WIo)AYwQDr|O5XTfOh=bgBx-^}mzDxfWe%Gz zVr`%#G!Zf}<{&f?%f%!Lf~{mp`>6=P)MOWWajN6tCp z#HwKY1}~`r*3~i`#ml*%p*wO^fx7nTqx_qh9?}o@s%_2>ANU1_5>(<25+q_;Bv)jA zzMj8!TNhH`T|P9?KZascMpxpeJQef@EQeBC__AAnpr=?X7C+N=2##O=!8yTnqnrw& zGGu@Bc4W*f;l*;KbkvpUg3jIrSM$j6Vm-P`LEbnFy0}{(OKmkJ_``|}?wdHJI8#o+ zQcXGUN2ym)K^d)wviHuylC`N&Nx}?j!i3Z7FC;cwbo2BERZ`378v$BRfl*F+89O9M zJXnt*(p}oJp_xj0t?Bsp>rkfln13>k%_-0hkEFU{MLcA>W|3WBF+Ybh6H@Q!2q`#H zZvF4LY<5fBrlkXtD5H;Xs!@eYq5QvQcnGns zc7D4<9a(YgD zLlc=$eY;-%N?ZXsN&de>YqM7!Y9Xi3 zKPjtaK@DMEoXn-??4HK%I}=&a@cehDfl~famO+S~k?R%(eDESd$ulGb{&gAPUC_+` z#y#6YYU>Xy=JfPe)8wBBj`{a0+S&_LYzpT88!$2?Vpgb?&JTb4VY%|)4mwW2Ejo#r7n?<@&$A4Bf811d%>L}Q@(1FC^)wP9OVZb2+ zF6xh9@5E`dP0`aF{jTRmDsBQ?hM@O@mA>M$`|wLQ?Lb%5e5!NG;M64p8o%(pOVwQ9 zN7R%BVW67DzB%*e&02zA-pQ#J$mLwBiz&b!@vA!y*TKL5wHA0^*{Y|yBS*jIN3ZE^ zO6&|Xm3Tlm2auorJTu-NXj?Y7upq6X5>HK|8G|RLsafQHv9<=3Lkp2MHT|vl)zs74 z+IpZRgpYyy)4YO1KnUJ6IJEzH%Y*%vHa9IzyNnzyrmM>zPaut>;H%3zo=6G@wW4G+ zHCaG=b`}2Q_dS->R1T8-<2)D2tq8d1wb#|njqzf)G`S-rEE1CWl7+6QAvY0S$36L4 zLzDgQ?Iwc?fY;%|d;{mW+tV!a*w5QLhnF-4zRhwcr>ACHUC<-B+=OG$8qZ>2J+Qt^w_c$`^BMBWHt{ckpf1dG@!|U|9&njeCIo}bcpl|vWV0BlmO+I9 zOMnwKNWje8Y%~I8BW{`^RMycEbBCdPJg?DGME}!4#*=nwv~(}UKICRIRd!r=z#+oR z{P@w9B)?25AeENXJYoZuN`oss%g{ZBMFc7tW)oGRr-rGMf@cXa?w?snf~F-R!e#dw z_%D-(sxS$-7}R!CK(B0`2Y2pvGc`caYGvY|o7r3{C7ne+rm7uV46}XQ6(QafLc0zf z&aYe@BO@|^!}Vb2?FaKwBy5^G%;%VI#o!HZGRs1t>ptlf=&_*hls7J z4z15Qr)wjJkq%d-;4gmeLp`ojZ-P8 zuaoX+DpE(L3T@99y|!O@ zu&!c68euT4nBUJ(cz6HKu5I-q40jbFBnz-RlNBlpwa3dZ`+@@oUp zSq2Vakzp}NyAq`#JE;i=zq7K0Ili5)Cy?-a?H-QJzJm2Ars3ronO&E{A#*{{`U zv9Z;f^ z@q23WYuRd*G#HFb<#r_^+xq)nO+|-Zr_nw+A;DByL1s#z_2Dc&JX|J^pqSds$0sPy zP9gcHrN>(iG?CC6JP%D2oGz9n@2$r#298*F+fAf#(>CRQ;gb`VeAN6vO?;qeuH-P2 zs}#cM+0-oh8)g+D6n;Uxx4H2k;I;UR**?W?>*o!yIh&kl*$?vT98lYk)0BvvWN=*^!W?`+~UK<`#Ok(ymDA zb*rV-VO&pbCJ-b&dBdE<5HGy(!kpsXd^Bgp_7S{DS(z;r5O)pN!GFgd zUxs`cvF$#+99_91(#i;li&F-;ZbWF4&QADUb1p;qn|?=35qP@2*}9RZg%OSxev1>h zS%ZOZfb#PLytFHtK8=Xoy0Y$bH?|6?ZEMWbq9P-y$O!ebRT3MJyr9J7?%R zZ#P2)E$;WAbimfy(dryu@L||a)lav2(-Xm!dXcKtq(u238rD7Xw#452S-op z(@htw3bXZnzJ{)k(9E)N^j<62{n-w}_>v162M@ve&3VHIi-V^qK9V?XxQFIw<4t!S zf7QTmy}U(;i&B3f)I^fo{gHRN$*gsMF$y97C!pfT{JRDE45SS|J*i7&L*_Mj;$#O8 zVZI!}B_bnE2?=Y-Oe8qAXCRMFt+!$b*L`N|eTlh<7Xyf0w%r!Wb*3&1S?DiW9G{c| zh)X}*aE2w%VU@OaQb?;ibn*JyiS1=gOBro5POxYIem_L0VEHhUY8KiZe#)4udv0iG zEP!{O=)IC|+!!%i@aQkn^|W&VN?Bk~klDfTteMisPfO>>G+zd}ShCv*q+0 z4gyj6-`^NGRHJiJ@{P04KK)FdY*t$Q!8(bTBA(!+me?Nz4FvZ%_ViW9#U|1`!NYsC z`|jeU0(&e;P=*02Ki=*)sk#N&1-Cq*1}_Lh!c(8ZS+sV+gJ(OQI~@?S3bHreoi)Dp&uG;G(u z=%}W9i6%7j6=L+PPwt53vI}hn)2uoMo8P}o2+2yCSmVG6@%x;+GO0kGT&)kPFBwK3 zi52|XWiS@ua{Do*(cMMR^3}EH`&@u_lJxEY+>r#~sgXoGc;E*kH&t;ZB-3U^fMB{V zPC@a;K|72@=#VkulN~@w-B+?8y7Dyjbp!B0A-!6I{hs7|LR2#vEF$jli}95iwT!v@ z@~&|s8M15G%+lI#e-xvpAz40k>eUz@%0SN9IOA+RJ&X!@yM~)W@<7)aH1G={Z}?fc zHJ7@Mn?h&9_fX7ViE1WPMprHmm3T^VmZoFjrb3Rst)Dv9`NNQ8ylp9K?$UoA%7~bZRZ&c>aLaRf(n^skfhI4Hs5{uv{@36ms1v1c&9}@8&nO3K zf2rBOPxt#K?Re&#IZF{e=~3xM{tc$Nn127Bbd2ZO;^Og~IoMys?l^W3lt|69eclaO zP$4137RS@TP|nQ9X23xa^O;uB7ju3VVVocn0+pO-r@EcEa_W>Ck>2{U6I+2f|EtFu~* z;nzd`m`aWEBsm_+WBi8D%#>K8Y~I|JaKV~PmmUO3RrenVQ5%R;NUkLD8{N@H5|xZo ztiJ^AFM`m61yFM((c(2Wp5!F$^=CP}chALBE<%<~XffK((IYjXr2Ph~a)NMy)=+r5 z(Kw&JvUkG>(z9E{)VM^3d?Fp5%6sni`+=FO)%48{aY0Ax z>u9|^N6?WDYffF+4~q`vEr{Eikt!p*SuRT~M@Wk62u+H*YuK=FtZwrj;b1agTi4g^ zYMd>A#FRk$CbnB8V0iw_VZ%yYN5%9Ebl4trY`UDkef{R?)9jr4>|Z2`m0;PheslB# z{+HM)R6BpJ%Z^kRb%6b>e**OjF{bfzUGb5UbX-z{RzvSvnvf4&fq$rV9Q$Mjl^cq1 zLgBlh!TUp6mgVl@_vP4-5e~FRbT@n7>Zl>gB}Bs?BCG**$PpuJE3k!;NFI}>20zyA(YhbbFG}te3lAA7Xi0*)w5E{SsA;zvBU}d(`-9N zHw`v5Z!`SV&*viQzQ@N$%~ZgQ=~KTQ#%Pv3Q^?I1^z%y)?FS+$I45?RJ0V`DXw$6t z0m}P;`x{akmi$1Yu>Sr%K+8$96W*U)h=Ff3%ljR-`F^0)bS2Eh>^#I32@NSuMIp^v z>KF$oXNv!-Q+*<7{8O2{V88d(4Vq4L+^ZrK6v%&bpD z;Ncyx{t4&gl_9)CohBkWSe+UEI1f31lT=INzHj2*^pbo-bE!<3-Ra;?J0P{t@_h(x z-H%#z=(Z#(?;zxtFUUoTgC3;aZ7xZ#RdQWHcYI>@oZuADJr!dy%2to-u!H3CI(?ZjnR-AqlnOdC1I6kjbPXP)zmydP$Y|(RRFAhw3h!;BO z>Xyw+j*Y}-US<7;l0!f{tK3{G2pLM8K?QRD7I3!1TKx1&WyjmewQqKr-_cOm=RDY) z@QKxoz49%CU3)LlEG77lE`MS$xR+&~48s?{$jNTCT6Sb)<8ockz*1@r;3v1cf}ptXyJ`J??}q84eCbJRUS|;%{gP< zs>|6+b%bsEHk^>P_^h|S_rbY!8;ziTqvWg(sY^6~fbU;ynt*^;(lNkJ@igOs0qIK1 z1J6I|kMG!kjYtS#sMQ=!Yx5*U_aN!whRHI9yq(RnyGPA}fA7?sLf(POD0;pR>H~oy zp?Sfd->Djv<-SMt6f{8*C$)Pj=)E4fzre6Ne_S<=(W z)S>2+assDIco?9&tAwDOU1AcXC90`*p|AXA8Q7+6@EhEb%gG@!>=%K{hh7xRJNhVT zQ22`QgV;?);>%Ch5X>3zm-e$`(e`?;G++psN=V_tg1*2pOXTq6P1GLi{%SOJ)*I=h z;Hhmg(r)|wbbQhw=M8UntcVU4&p)U+_3liovfE=_r+zd0n#`Q-i8H4idPalU+NOK3 zD|JV^0O|bgF<5HmKI}7%Q*@%g2kt&kITQbHrwr0U20q*W1c|L6IN*Z+5xtTh^m$rR z1twYexvlaIW0nJsy?aBAf)GUQ>4fu#wU;}BYZQW2B6}28<~*P3B6RO06^pOzgw z_S$-(_UOc{i7avj8^UG$Bp-Is9hvSrR$BiofEE>KhtOC3=xA{m2k3Y^fpIi~WIsZo|8Rua zbM#K6Pa8Og4oZugwVOq;qJI=Hg&SbN;QUki~7LAhv`?4G6n7iu<@$%_?pD9+F@_wC0v;}B^E zBa_FZH%H#LpL@GDc|DK5=3{yjOuap6n0RyFwtgo||COnQJ=@bI*RX(`fD7p5A_L(wigW@CGM7h8HABvDQn|p6$_|zqNCp0Ei8* zv5DL6^wL62!L1Q@?mH52B+&CEupcY?_wPR_0sg+vPWuEvL^!-eAdSsD>DU|WJzxAz z4IK%5dnKT&^P!o*F!I^|L#g=$K+NF!j1JE5z7X{>CpZ#tB=D`30O!PMA3_1@RPY&q z4nXsvCZtAddqs9MU2Amg`R(VerSItd?xfXLnMb-DU+DXiwyip~6=yHQe%@A|uEv>i z%(1KVJo6tZy7qEfD}(osMW8duTWEt%PrsnI?B4GA3_xxTsH4K^XgY7)@t!@u{k*mG z9lhV3wAw23NSEUaeP7bHRj0P%>}A-`+sf0`I8%-}c9ouI{v$=#UXDi@G;NO6yLkNC zL#t(b@ae8XYxms=yr1|CK>8^O@3fq|jszSDbcY1cnax)|>2qy2m?W)fF6|Ovf zM?wdad6M!OfIJBtSJ!-iXv85w0n*U4U)Lsh0!s*9AK_xkx_az|)lS;us&2=U8OSvl z9f7i>T)R7j1X-P|5nsIQNFW%J7kxLeBN@D;u{wJ%3C1_An^11Ei>8;PN9~q@-x_E> zeer$e=tygI@lj*IRZsx-(aXpw#j93<=p)!`uA?B-2}XTiIn;?le96KscI=-x^(8M= zS9XwH*%jE=Yrg^v8=47xz`L@_WL}m+MfT7TQ4SrBx%PQ*Rf1gg1{E}KU(mrZp(ahp#NelJApYD_I zJiSG*HKCMO*2(2hY?R#M8f&j9i-gol>A^tmc01sUR?)9IWvwlG%fO4bPunC=Ngmt_Z{lNAH>Zhv8m z0&4);is6m4DAz;J-IQ|lj-6@$p4^$4EFMX(qXRqT;Py%I{0N4lXM$;^TCWMgCp0uz zvavnP*DF`b_b$2!4FD>6JNfJssg|?xtj@2~4x)lYg0Rp)ZA=ZI_tV)!<;t`7E8sLi zTiTIdFaBuQ;lWfj1Jnj@gl0sw+^F~=aLUm(XA31e&B#Yhi@qa2?B7MV2xl$KgJuV6 zL_8Zi)6>M@cFfwsaZTD9Plmk(W

-ZfV5E!&{Bm6RiofSq=eHwE*1bH5*q$L$fXp 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

rt0fT@+z#!m12q=lULPA3MLsdRf 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 G;Qs*$(^&!l literal 0 HcmV?d00001 diff --git a/docs/user/dashboard/images/lens_logsDashboard_8.3.png b/docs/user/dashboard/images/lens_logsDashboard_8.3.png new file mode 100644 index 0000000000000000000000000000000000000000..089fd5dcadb0c293d6fe06a073e60668d96d0e88 GIT binary patch literal 143659 zcmZ_!1yo$k(k~7V?j9t#1W9lo+(U2z3GVLhFbpmsxVu9V+?~Nma0%}2?hFino^#H< z?^*A6zdfs0*RHBxS4-`l+SNN!Raq7bofI7a0AR^|l2!u%;3oh8I9F8UR}L}1s009j zzHTigr79;SMXl=MXkl$<4gh?LOio4lqP{>Re&%~XlTR-#F2Ao7rwn*cQ?H76K>dLR z?OhVCnrclx7cj_FLI&|K9tGj&YD^is2&APvt!g3a-~cXcBD){yD1JR7Pd6`yFJ>!Q z9m-=OJC&YwV+aA{19(w&M(%)G87{dmaa1BSoRKlU*ww#fu{Z*R!kG!V>F9a^w26;r zmz@~mrjLy$TIJxEXUI2(SoR%w06ksSP@+p6o`cLRhbBurT!3KEyb{q+pQ#^;@h`;p zxEq0-%DL<8rdfhxRyWSMX-q^tC4hA~@|brNfCLef(mm(tcwo_|kP{i}m1Y+1vwCsJgT;6Tt5;A#Z-Z zTrHbv-sG9R8Fv?b)*c-VDXG{c0m)P3oaEz`QuBD2hJk%IsfeL*bL2>4xa zf#Rsr0qk4s3DLa0LwM{dsMAPXf&?wjeuBDv4Ve<2^`35sM#nH^VSGpHtvmbz{p{L` zO1Q405XpR?fH_7BTG!+oKm?XL->^5}#~p&x!y8SuKbh6}gPj}!5l`%@f!G`XhA#Yh zc-eJy;Xrm&01Y*KUw||Rl~W+Vj4qiSQK4I26;ZzHV>RKI0DU7IAOJhqG!HEcey@w( z32PbAvzu-L>#<9L19LU_Gis0%?%M)!!8jT-p<^qKf7AMi4GLxKccO0^tV=X~?R0uJIeipr6&EcG%+~Z#f9CLrvGcodmNm z_Ig9leVWND!*IHz&js#D{fJM)414I90@NfXRX;N6zCq}hl*vm_wPr%I5%@*&HSE{N znS349lOIbz9RA`S5|BofW=xQ|%u8Ew-JjOp3JjS*YX(U{V zJn4^FcLGvmVU1xB2X3vKHPbG8EYmD&FSF`VozfW~IYxN)p=>6e(>{Ihdkdq6VZw+y zsl?<}8Po8DQSlHdjX8}GjM?);oq{K1N$72GStAVkNKBBO>1(pIWZOUaDf*Qa6quB6 zR&vS8{7}nNt8|gxsg;i%VoYH8lhH>@pSWFgQ}kSvt&$CD4WDmP4w-p_GSW%a?K^ckbcj^%R$v92e^q zU4O3mg7G0ULxMG*vcy9*yn&}7t6{UA$oi{I_UvIvzSS-dA8S-&pvU)F8K|%lnADXN zytruXKJB0c%@fgI(#)*VFW0XEX+rC;^%=z()h!d16UPYj>nj^h$yY*Kh1}T>v6V`d z@3O|S4TPWPufu(+a~ceiR`EMTeCBRGUSnMcU-v&Q-HadMyq&=G!{WkhB+23=;VB~V zAw$P%BFW+Plb9>uKG42)c|>}wj?ejA9lvbV^f`R;M@^`6`NfAVpDjiPX@W4hj6Xz) ze2K>DQqxY;#U%|TIHRZ*nB0L2e03gmIJ-o<7rVA2nIkAH^{n$m4@3<_v8;bmL{nN) zW>P%Mt2Hpo6w4?y_$!QUiERVji*K;V<_BgzTGjQIxFTDGK`|%4AHKb_lWSC55?<0- zq7=%|Ph0uW#?Yq8tz^kCy3A7t+U55phO$6AZez)LC?v@>1nPn9&h;MKf*OLW&a^^E zf)!3S9zG{_TO*#U2YzdzoA{@-1I42|Wo4OVeGOyo6Qh4w`zwY{D1(P0%*svmJO-Pg zEmclpJFq{!Gg7L*ttbA73MZR1V3*8L+!lqQ{*b$5yPy!Rj@@9LBqo#)Rm30Oaj0xkot296L;1tA(? z8o?GJJXkL%1+f9yG)O9#A8F0>sIKLh^wudt_jhd^Mt;%6{=~NlOXFGNgz6M0pzu3C z*ZZvni#nOQOj>b7ArsfW#7|MbmwzX^R=d*feHrtn+`(<&`6ZHp-$DIobPXkeq+xN! zny{Mg)Yv=QIRA0xb*9>U-cs0VBd}m#QD{#2k;$ZJr`$u|Pk*97noh>yd9>VVmbzWA zUFl79MKs#RW$5WY`!tR5m&l2TT&26HuasQzp(k?vi|a?Vg`Z!4_UaLNlHJjdr#6N1 z|GwKyy@XD;PsvXsPjyW3m*SxNA({u#&?sop_+{f|)i7^KSxE1~6lFC0G(dc!LiEs( zPwGkUTjNaQ>X=H^?daI>J@%M=(l%Ly4xjfqz@m}>#_NF2p zU={BCWEyWZdDA}|HOF>3jx+LNjpl>qDYv9nSj?Py%VNs5)IqM3)7owy`sZ5@AqYtV z2}J{6)1vapJo)+8)YmhO!77LMf7w}>j-T1~+ZJhOXyqn5cynw$K(R1`d(faxX~WW- zKl3i3A!`l$d*+AQn6}eH9Bi?qmprZ9#!l1Vqp)nU8ZsHOHogZtLDgTMGYl8o1pHjL zh#pfmS$2hYB$PbeDAOF(u?DfG>nTn!n&l&i`mQIq5UsA))muaW4PmQaz1B`iV019 zaG(%O^{;HQmsl#iLfbpjOLNWNGTHARPK9UBcC>8F?KpOS_)8ee%vi})$*1qyG3&Lm z;I{`zdC~mWDJuTNxj=!C>g4rJo?m(;0 zfhgKI24W+=z{el!oV(5!1UHQ4DmOVAFE%%}peEb91Im}2qw#`Vk;9$a&L^eErPR)z zz3n~o=dfp9gcyWUWCRq)&NOJjS@HeOzUt%|DMYiQ*6-$usuQe7rA%__%j#X>Rd-r3 zw)A|Kwbl?V9U~0NefGbWx{%F|MG@r`Z2-r-EQ__CW1K2HXqHv6u1P{fG|ZUan8bu| zi=yYnA(a-xom+@;Q8B`cOIV<8E=NB2=;cLv206pOL^4{OJ3AxgVShF)#495Vp!?0m z4iFzD4ydVN8X)dcRvx-xk1r7rQ0}9pnWo<@l)TWO0_b4?4C&GP_pw7aj|__DQ2_P3 z$|EJsaSo1S)_F;F3zi$;z6(thejaxeJPAU^oeS=@`*O)HRMe(*OIeP zQUZKW8i4p89i7+upDXUQ zyrTb8BP4_YP+srwUrR_H{QuF0pU6Y_KQx@{s|+BaE+r@TTC1D7n43GeS~(~h*ctEr2%lbf}p1NA@c8k;z}yNS@!{$uF>UjOc=xtI0-SaNXv&#+zx$o`Ln zos*4&{r?4Xv$pvE1N%qvZ`i-a^>1^+|1>73YVBoirzLG||2oyLT@&Tv761zW%g+Cg z=zn_pZ|GN7a~CN``&Xo!=>II%f587O{NKQT+0_0Yo19$SJpXO;zeN89{bvw@YUZwv zcJBX7;#UW2H&HHO_Wu|Af1|Yj2PVqN^J?o~p#SFnZ-mzW6Y<~N|BX;_v3{Khn<706A%iFJ5rR9VkZn zvdJ&tWnXre#LQ)1h0W_e4lgj|nqx=)>Uuz+DiJ=s!Y7=A znMi`WReQqW6!Slg-)2~#FV9)f-Gf8z1bWW}$Kz5V&(o3gbZ*PBECE-GlF`6#hrQw0 z6pd2hHYexCIpO7vjkCG!nH0()!)pVE&mBr+9ZV5GFK6jHr#k{lP{d}@W1xbcS|bfH z3YZ7{M(A7aHRJGvbh9P0TfbZ+RdRW{`KLgsdSron#`-iVFNCN42MK|Sjh438QSkdw%|7ndEbYbam`+Kd zy*S>XPM7v0RF|~&OC&j47gAZkEH8tfFd%tx{{{btObF%0AT&Zyr7KZ0u%0sIlfqs? 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%0A#vF_YVLMP4vw6-# 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⁡bTep!Olr3d1xkXaJ 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�X|c}lP8;JC*>PSzNvDvwxvI*AD!)ghvBQgA?@ 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

Yi( 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ℜP4*;l&^6R>UlvGa4Qlg{8()dGVEfnx?e0IAV-+ z+Yqq21tHh1V!@0(&JOK-pk7Lga2^X|GE_`E&3sOZuWw|hev(hxr30EPPbp-0o4wm+)wh6 zj*~RHg6HuTYz*CjnusQA14Tte@*BVYt2lab4l++Qwj`D+j}3kz7(raXfq($(9d_y!=6 z0wvqt;1KQsYq=mBv8S3V7ZiMtpK8&ieJWy>E>@8kM`7~5d+$+LxiHDTW5>2wNfU-q z$=ZXv5W6rQHa6DlRSIX$w#sVUZJ32~K)j%tt8{Cd8gQqf+umpW#*LILi&Jtgt-{EQ z4wjpXe0QytTq-zNHK6c|6d^jef&tTZAwO3apf+d{P04sT>#KyxFoxo2;ffoG;KZFD2 zAnp7aey*7G4mp$HS=a{2)sakHWuub7l`SY8fJ=ozO9XNqY@<8O7b+d;UfF@vQKQk} zGz?@+h$aS*9zGXw9z1+5_TU;$<$)@84llzeVbFto&V;2zt|YLcO>cZNY&1&P(2f$)j8i+!m;e6;T*Opv#nHCWGT-Xe*Dxq*|U55 zqGT~Y*_WT6Cp&kz^s|tic=j`J0S5vO1RRLR0ULjKS7{aQSIo)D(WJNs?2-x#o7S(< zfMfmR-+|NHO#2l?hV{sck?@6w3%35Z8h5PqX@fQ^Sv+Xg;DbhKi4 zvZq}QYV=NFrXTlo?ZOtrN^CJS)A7392?`m-0_I9i)FJf11ssUY0UMu+aAn0B7?I%C zKCS{$5L&;sUT3(O)6y+~f~L$ku3kO$jlY%0AKxqI&$r1l&paoe`|PI{Bws9mt6Kb- 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. @@ -34,7 +34,7 @@ Open the visualization editor, then make sure the correct fields appear. . On the dashboard, click *Create visualization*. -. Make sure the *kibana_sample_data_ecommerce* {data-source} appears, then set the <> to *Last 30 days*. +. Make sure the *Kibana Sample Data eCommerce* {data-source} appears, then set the <> to *Last 30 days*. [discrete] [[custom-time-interval]] @@ -55,7 +55,7 @@ image::images/lens_clickAndDragZoom_7.16.gif[Cursor clicking and dragging across . In the layer pane, click *Count of Records*. -.. In the *Display name* field, enter `Number of orders`. +.. In the *Name* field, enter `Number of orders`. .. Click *Add advanced options > Normalize by unit*. @@ -63,7 +63,7 @@ image::images/lens_clickAndDragZoom_7.16.gif[Cursor clicking and dragging across + *Normalize unit* converts *Average sales per 12 hours* into *Average sales per 12 hours (per hour)* by dividing the number of hours. -. To hide the *Horizontal axis* label, open the *Bottom Axis* menu, then deselect *Show*. +. To hide the *Horizontal axis* label, open the *Bottom Axis* menu, then select *None* from the *Axis title* dropdown. To identify the 75th percentile of orders, add a reference line: @@ -71,13 +71,17 @@ To identify the 75th percentile of orders, add a reference line: . Click *Static value*. -. Click the *Percentile* function, then enter `75` in the *Percentile* field. +.. Click *Quick functions*, then click *Percentile*. + +.. From the *Field* dropdown, select *total_quantity*. + +.. In the *Percentile* field, enter `75`. . Configure the display options. -.. In the *Display name* field, enter `75th`. +.. In the *Name* field, enter `75th`. -.. Select *Show display name*. +.. To display the name, select *Name* from *Text decoration*. .. From the *Icon* dropdown, select *Tag*. @@ -86,7 +90,7 @@ To identify the 75th percentile of orders, add a reference line: . Click *Close*. + [role="screenshot"] -image::images/lens_barChartCustomTimeInterval_7.16.png[Orders per day] +image::images/lens_barChartCustomTimeInterval_8.3.png[Orders per day] . Click *Save and return*. @@ -110,7 +114,7 @@ Create the 95th price distribution percentile: . Click the *Percentile* function. -. In the *Display name* field, enter `95th`, then click *Close*. +. In the *Name* field, enter `95th`, then click *Close*. To copy a function, you drag it to the *Drop a field or click to add* field within the same group. To create the 90th percentile, duplicate the `95th` percentile: @@ -121,11 +125,11 @@ image::images/lens_advanced_2_2.gif[Easily duplicate the items with drag and dro . Click *95th [1]*, then enter `90` in the *Percentile* field. -. In the *Display name* field enter `90th`, then click *Close*. +. In the *Name* field enter `90th`, then click *Close*. . To create the `50th` and `10th` percentiles, repeat the duplication steps. -. Open the *Left Axis* menu, then enter `Percentiles for product prices` in the *Axis name* field. +. Open the *Left Axis* menu, select *Custom* from the *Axis title* dropdown, then enter `Percentiles for product prices` in the *Axis title* field. + [role="screenshot"] image::images/lens_lineChartMultipleDataSeries_7.16.png[Percentiles for product prices chart] @@ -148,7 +152,7 @@ To analyze multiple visualization types, create an area chart that displays the .. Click the *Average* function. -.. In the *Display name* field, enter `Average price`, then click *Close*. +.. In the *Name* field, enter `Average price`, then click *Close*. . Open the *Visualization type* dropdown, then select *Area*. @@ -160,7 +164,7 @@ Add a layer to display the customer traffic: . In the layer pane, click *Unique count of customer_id*. -.. In the *Display name* field, enter `Number of customers`. +.. In the *Name* field, enter `Number of customers`. .. In the *Series color* field, enter *#D36086*. @@ -223,7 +227,7 @@ For each order category, create a filter: . Open the *Legend* menu, then select the *Alignment* arrow that points up. + [role="screenshot"] -image::images/lens_areaPercentageNumberOfOrdersByCategory_7.16.png[Prices share by category] +image::images/lens_areaPercentageNumberOfOrdersByCategory_8.3.png[Prices share by category] . Click *Save and return*. @@ -245,7 +249,7 @@ Configure the cumulative sum of store orders: . Click the *Cumulative sum* function. -. In the *Display name* field, enter `Cumulative weekend orders`, then click *Close*. +. In the *Name* field, enter `Cumulative weekend orders`, then click *Close*. Filter the results to display the data for only Saturday and Sunday: @@ -261,7 +265,7 @@ Filter the results to display the data for only Saturday and Sunday: + The <> displays all documents where `day_of_week` matches `Saturday` or `Sunday`. -. Open the *Legend* menu, then click *Hide*. +. Open the *Legend* menu, then click *Hide* next to *Display*. + [role="screenshot"] image::images/lens_areaChartCumulativeNumberOfSalesOnWeekend_7.16.png[Area chart with cumulative sum of orders made on the weekend] @@ -318,7 +322,7 @@ To compare time range changes as a percent, create a bar chart that compares the . Open the *Value format* dropdown, select *Percent*, then enter `0` in the *Decimals* field. -. In the *Display name* field, enter `Percent of change`, then click *Close*. +. In the *Name* field, enter `Percent of change`, then click *Close*. + [role="screenshot"] image::images/lens_percent_chage.png[Bar chart with percent change in sales between the current time and the previous week] @@ -341,17 +345,15 @@ Create a date histogram table and group the customer count metric by category, s .. In the layer pane, click *Unique count of customer_id*. -.. In the *Display name* field, enter `Customers`, then click *Close*. +.. In the *Name* field, enter `Customers`, then click *Close*. . From the *Available fields* list, drag *order_date* to the *Rows* field in the layer pane. .. In the layer pane, click the *order_date*. -.. Select *Customize time interval*. - -.. Change the *Minimum interval* to *1 days*. +.. In the *Minimum interval* field, enter *1d*. -.. In the *Display name* field, enter `Sales`, then click *Close*. +.. In the *Name* field, enter `Sales`, then click *Close*. To split the metric, add columns for each continent using the *Columns* field: @@ -376,4 +378,4 @@ Now that you have a complete overview of your ecommerce sales data, save the das . Click *Save*. [role="screenshot"] -image::images/lens_timeSeriesDataTutorialDashboard_7.16.png[Final dashboard with ecommerce sample data] +image::images/lens_timeSeriesDataTutorialDashboard_8.3.png[Final dashboard with ecommerce sample data] diff --git a/docs/user/dashboard/lens.asciidoc b/docs/user/dashboard/lens.asciidoc index b062dcc3349ad..8e8ffe902a565 100644 --- a/docs/user/dashboard/lens.asciidoc +++ b/docs/user/dashboard/lens.asciidoc @@ -40,7 +40,7 @@ If you already know the visualization type you want to use, and how you want to Choose the visualization type. -. Before you drag fields to the workspace, open the *Chart type* dropdown, then select the visualization type. +. Before you drag fields to the workspace, open the *Visualization type* dropdown, then select the visualization you want to use. . To view more visualizations that *Lens* automatically created for the fields, click *Suggestions*. If one of the *Suggestions* meets your visualization needs, click *Save and return* to add it to the dashboard. @@ -66,14 +66,14 @@ TIP: You can manually apply the changes you make, which is helpful when creating Change the fields list to display a different {data-source}, different time range, or add your own fields. -* To create a visualization with fields in a different {data-source}, open the *Data view* dropdown, then select the {data-source}. +* To create a visualization with fields in a different {data-source}, open the {data-source} dropdown, then select the {data-source}. * If the fields list is empty, change the <>. -* To add fields, open the action menu (*...*) next to the *Data view* dropdown, then select *Add field to {data-source}*. +* To add fields, open the {data-source} dropdown, then select *Add a field to this {data-source}*. + [role="screenshot"] -image:images/runtime-field-menu.png[Dropdown menu located next to {data-source} field with items for adding and managing fields, width=50%] +image:images/lens_dataViewDropDown_8.3.png[Dropdown menu located next to {data-source} field with items for adding and managing fields] + For more information about adding fields to {data-sources} and examples, refer to <>. @@ -83,7 +83,7 @@ For more information about adding fields to {data-sources} and examples, refer t Tables are highly customizable, and provide you with text alignment, value formatting, coloring options, and more. -. From the *Chart type* dropdown, select *Table*. +. From the *Visualization type* dropdown, select *Table*. . Drag the fields you want to visualize to the workspace. @@ -91,9 +91,9 @@ Tables are highly customizable, and provide you with text alignment, value forma + All columns that belong to the same layer pane group are sorted in the table. -. To change the display options, click a *Metrics* field, then configure the following options: +. To change the display options, click a *Metrics* field in the layer pane, then configure the following options: -* *Display name* — Specifies the field display name. +* *Name* — Specifies the field display name. * *Value format* — Specifies how the field value displays in the table. @@ -111,9 +111,6 @@ All columns that belong to the same layer pane group are sorted in the table. To use a keyboard instead of a mouse, use the *Lens* fully accessible and continuously improved drag system. -[role="screenshot"] -image::images/lens_drag_drop_1.gif[Presented Lens drag and drop] - . Select the field in the fields list or layer pane. Most fields have an inner and outer select state. The inner state opens a panel with detailed information or options. The outer state allows you to drag the field. Tab through the fields until you get the outer state on the field. + @@ -197,7 +194,13 @@ image::images/lens_annotations_8.2.0.png[Lens annotations] . To open the annotation options, click *Event*. -. Specify the *Annotation date*, then change the *Appearance* options you want to display. +. Specify the *Annotation date*. + +. To display the annotation as a time range, select *Apply as range*, then specify the *From* and *To* time range. + +. Enter the annotation *Name*. + +. Change the *Appearance* options for how you want the annotation to display. . Click *Close*. diff --git a/docs/user/dashboard/make-dashboards-interactive.asciidoc b/docs/user/dashboard/make-dashboards-interactive.asciidoc index 0e20237c2ebc0..7c80fa8588538 100644 --- a/docs/user/dashboard/make-dashboards-interactive.asciidoc +++ b/docs/user/dashboard/make-dashboards-interactive.asciidoc @@ -172,12 +172,14 @@ To use saved search interactions, open the panel menu, then click *More > View s Panels have built-in interactive capabilities that apply filters to the dashboard data. For example, when you drag a time range or click a pie slice, a filter for the time range or pie slice is applied. Drilldowns let you customize the interactive behavior while keeping the context of the interaction. -There are two types of drilldowns you can add to dashboards: +There are three types of drilldowns you can add to dashboards: -* *Dashboard* — Navigates you from one dashboard to another dashboard. For example, when can create a drilldown for a *Lens* panel that navigates you from a summary dashboard to a dashboard with a filter for a specific host name. +* *Dashboard* — Navigates you from one dashboard to another dashboard. For example, create a drilldown for a *Lens* panel that navigates you from a summary dashboard to a dashboard with a filter for a specific host name. * *URL* — Navigates you from a dashboard to an external website. For example, a website with the specific host name as a parameter. +* *Discover* — Navigates you from a *Lens* dashboard panel to *Discover*. For example, create a drilldown for a *Lens* visualization that opens the visualization data in *Discover* for further exploration. + Third-party developers can create drilldowns. To learn how to code drilldowns, refer to {kib-repo}blob/{branch}/x-pack/examples/ui_actions_enhanced_examples[this example plugin]. [float] @@ -189,7 +191,7 @@ Dashboard drilldowns enable you to open a dashboard from another dashboard, taki For example, if you have a dashboard that shows the logs and metrics for multiple data centers, you can create a drilldown that navigates from the dashboard that shows multiple data centers, to a dashboard that shows a single data center or server. [role="screenshot"] -image:images/drilldown_on_data_table.gif[Drilldown on data table that navigates to another dashboard] +image:images/dashboard_drilldownOnDataTable_8.3.gif[Drilldown on data table that navigates to another dashboard] The panels you create using the following editors support dashboard drilldowns: @@ -220,7 +222,7 @@ Use the <> data to create a dashboard + [%hardbreaks] Search: `extension.keyword: ("gz" or "css" or "deb")` -Filter: `geo.src: CN` +Filter: `geo.src: US` [float] ===== Create the dashboard drilldown @@ -244,7 +246,7 @@ Create a drilldown that opens the *Detailed logs* dashboard from the *[Logs] Web . In the data table panel, hover over a value, click *+*, then select `View details`. + [role="screenshot"] -image::images/drilldown_on_panel.png[Drilldown on data table that navigates to another dashboard] +image::images/dashboard_drilldownOnPanel_8.3.png[Drilldown on data table that navigates to another dashboard] [float] [[url-drilldowns]] @@ -253,7 +255,7 @@ image::images/drilldown_on_panel.png[Drilldown on data table that navigates to a URL drilldowns enable you to navigate from a dashboard to external websites. Destination URLs can be dynamic, depending on the dashboard context or user interaction with a panel. To create URL drilldowns, you add <> to a URL template, which configures the behavior of the drilldown. All panels that you create with the visualization editors support dashboard drilldowns. [role="screenshot"] -image:images/url_drilldown_go_to_github.gif[Drilldown on pie chart that navigates to Github] +image:images/dashboard_urlDrilldownGoToGitHub_8.3.gif[Drilldown on pie chart that navigates to Github] Some panels support multiple interactions, also known as triggers. The <> you use to create a <> depends on the trigger you choose. URL drilldowns support these types of triggers: @@ -269,7 +271,7 @@ For example, *Single click* has `{{event.value}}` and *Range selection* has `{{e For example, if you have a dashboard that shows data from a Github repository, you can create a URL drilldown that opens Github from the dashboard panel. -. Add the *Sample web logs* data. +. Add the <> data. . Open the *[Logs] Web Traffic* dashboard. @@ -277,13 +279,11 @@ For example, if you have a dashboard that shows data from a Github repository, y . Create a donut chart -.. In the toolbar, click *Edit*. - .. Click *Create visualization*. .. From the *Chart type* dropdown, select *Donut*. -.. From the *Available fields* list, drag and drop the *machine.os.keyword* field onto the visualization builder. +.. From the *Available fields* list, drag *machine.os.keyword* to the workspace. .. Click *Save and return*. @@ -311,12 +311,47 @@ https://github.com/elastic/kibana/issues?q=is:issue+is:open+{{event.value}} . On the donut chart panel, click any chart slice, then select *Show on Github*. + [role="screenshot"] -image:images/url_drilldown_popup.png[URL drilldown popup] +image:images/dashboard_urlDrilldownPopup_8.3.png[URL drilldown popup] . In the list of {kib} repository issues, verify that the slice value appears. + [role="screenshot"] -image:images/url_drilldown_github.png[Github] +image:images/dashboard_urlDrilldownGithub_8.3.png[Open ios issues in the elastic/kibana repository on Github] + +[float] +[[discover-drilldowns]] +==== Create Discover drilldowns + +Discover drilldowns enable you to open *Discover* from a *Lens* dashboard panel, taking the time range, filters, and other parameters with you so the context remains the same. + +For example, when you create a Discover drilldown for a pie chart, you can click a slice in the pie chart, and only the documents for the slice appear in *Discover*. + +[role="screenshot"] +image:images/dashboard_discoverDrilldown_8.3.gif[Drilldown on bar vertical stacked chart that navigates to Discover] + +NOTE: Discover drilldowns are supported only by *Lens* panels. To open all of the *Lens* dashboard panel data in *Discover*, check <>. + +[float] +===== Create the Discover drilldown + +Create a drilldown that opens *Discover* from the <> data *[Logs] Web Traffic* dashboard. + +. Click *Edit*, open the panel menu for the *[Logs] Bytes distribution* bar vertical stacked chart, then select *Create drilldown*. + +. Click *Open in Discover*. + +. Give the drilldown a name. For example, `View bytes distribution in Discover`. + +. To open the Discover drilldown in a new tab, select *Open in new tab*. + +. Click *Create drilldown*. + +. Save the dashboard. + +. On the *[Logs] Bytes distribution* bar vertical stacked chart, click a bar, then select *View bytes distribution in Discover*. ++ +[role="screenshot"] +image::images/dashboard_discoverDrilldown_8.3.png[Drilldown on bar vertical stacked chart that navigates to Discover] [float] [[manage-drilldowns]] diff --git a/docs/user/dashboard/timelion.asciidoc b/docs/user/dashboard/timelion.asciidoc index 19962d11f7335..7e5b753973ea2 100644 --- a/docs/user/dashboard/timelion.asciidoc +++ b/docs/user/dashboard/timelion.asciidoc @@ -13,8 +13,6 @@ The syntax enables some features that classical point series charts don't offer, [role="screenshot"] image:dashboard/images/timelion.png[Timelion] -deprecated::[7.0.0,"*Timelion* is still supported. The *Timelion app* is deprecated in 7.0, replaced by dashboard features. In 7.16 and later, the *Timelion app* is removed from {kib}. To prepare for the removal of *Timelion app*, you must migrate *Timelion app* worksheets to a dashboard. For information on how to migrate *Timelion app* worksheets, refer to <>."] - [float] ==== Timelion expressions diff --git a/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc b/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc index 7437eb480e73f..1d4d5d70e879e 100644 --- a/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc +++ b/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc @@ -8,7 +8,7 @@ at website logs, but this type of dashboard works on any type of data. When you're done, you'll have a complete overview of the sample web logs data. [role="screenshot"] -image::images/lens_logsDashboard_7.16.png[Logs dashboard] +image::images/lens_logsDashboard_8.3.png[Logs dashboard] Before you begin, you should be familiar with the <>. @@ -38,10 +38,10 @@ Open the visualization editor, then make sure the correct fields appear. . On the dashboard, click *Create visualization*. -. Make sure the *kibana_sample_data_logs* index appears. +. Make sure the *kibana_sample_data_logs* data view appears. + [role="screenshot"] -image::images/lens_dataViewDropDown_8.0.png[Data view dropdown] +image::images/lens_dataViewDropDown_8.3.png[Data view dropdown] To create the visualizations in this tutorial, you'll use the following fields: @@ -79,12 +79,9 @@ In the layer pane, *Unique count of clientip* appears because the editor automat . In the layer pane, click *Unique count of clientip*. -.. In the *Display name* field, enter `Unique visitors`. +.. In the *Name* field, enter `Unique visitors`. .. Click *Close*. -+ -[role="screenshot"] -image::images/lens_metricUniqueVisitors_7.16.png[Metric visualization that displays number of unique visitors] . Click *Save and return*. + @@ -122,23 +119,21 @@ To increase the minimum time interval: . In the layer pane, click *timestamp*. -. Select *Customize time interval*. - -. Change the *Minimum interval* to *1 days*, then click *Close*. +. Change the *Minimum interval* to *1d*, then click *Close*. + -You can increase and decrease the minimum interval, but you are unable to decrease the interval below the <>. +You can increase and decrease the minimum interval, but you are unable to decrease the interval below the configured <>. To save space on the dashboard, hide the axis labels. -. Open the *Left axis* menu, then deselect *Show*. +. Open the *Left axis* menu, then select *None* from the *Axis title* dropdown. + [role="screenshot"] -image::images/lens_leftAxisMenu_7.16.png[Left axis menu] +image::images/lens_lineChartMetricOverTimeLeftAxis_8.3.png[Left axis menu] -. Open the *Bottom axis* menu, then deselect *Show*. +. Open the *Bottom axis* menu, then select *None* from the *Axis title* dropdown. + [role="screenshot"] -image::images/lens_lineChartMetricOverTime_7.16.png[Line chart that displays metric data over time] +image::images/lens_lineChartMetricOverTimeBottomAxis_8.3.png[Line chart that displays metric data over time] . Click *Save and return* @@ -183,7 +178,7 @@ image::images/lens_end_to_end_2_1_2.png[Table with top values of request.keyword .. In the *Number of values* field, enter `10`. -.. In the *Display name* field, enter `Page URL`. +.. In the *Name* field, enter `Page URL`. .. Click *Close*. + @@ -204,7 +199,9 @@ Create a proportional visualization that helps you determine if your users trans . From the *Available fields* list, drag *bytes* to the *Vertical axis* field in the layer pane. -. Click *Median of bytes*, click the *Sum* function, then click *Close*. +. In the layer pane, click *Median of bytes*. + +. Click the *Sum* function, then click *Close*. . From the *Available fields* list, drag *bytes* to the *Break down by* field in the layer pane. @@ -261,7 +258,7 @@ The distribution of a number can help you find patterns. For example, you can an .. Click the *Sum* function. -.. In the *Display name* field, enter `Transferred bytes`. +.. In the *Name* field, enter `Transferred bytes`. .. From the *Value format* dropdown, select *Bytes (1024)*, then click *Close*. @@ -292,11 +289,11 @@ Add a panel title: . From the *Available fields* list, drag *Records* to the *Size by* field in the layer pane. -. In the editor, click *Add or drag-and-drop a field* for *Group by*. +. In the layer pane, click *Add or drag-and-drop a field* for *Group by*. Create a filter for each website traffic source: -. From *Select a function*, click *Filters*. +. Click the *Filters* function. . Click *All records*, enter the following in the query bar, then press Return: @@ -331,7 +328,7 @@ Remove the documents that do not match the filter criteria: . In the layer pane, click *Top values of geo.srcdest*. -. Click *Advanced*, then deselect *Group other values as "Other"*, the click *Close*. +. Click *Advanced*, deselect *Group other values as "Other"*, then click *Close*. + [role="screenshot"] image::images/lens_treemapMultiLevelChart_7.16.png[Treemap visualization] @@ -361,7 +358,7 @@ Decrease the size of the following panels, then move the panels to the first row * *Website traffic* + [role="screenshot"] -image::images/lens_logsDashboard_7.16.png[Logs dashboard] +image::images/lens_logsDashboard_8.3.png[Logs dashboard] [discrete] === Save the dashboard

uEhqHcC+N*(%3^uB7G-kK}SH5mnr&xlEfFLaE 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