diff --git a/.eslintrc.js b/.eslintrc.js index 60d26cbfbab738..7af162f349b5c9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -142,7 +142,7 @@ module.exports = { }, }, { - files: ['x-pack/legacy/plugins/ml/**/*.{js,ts,tsx}'], + files: ['x-pack/plugins/ml/**/*.{js,ts,tsx}'], rules: { 'react-hooks/exhaustive-deps': 'off', }, diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a9af160d020841..accc99170bb709 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -26,7 +26,7 @@ /src/plugins/kibana_legacy/ @elastic/kibana-app /src/plugins/timelion/ @elastic/kibana-app /src/plugins/dev_tools/ @elastic/kibana-app -/src/plugins/dashboard_embeddable_container/ @elastic/kibana-app +/src/plugins/dashboard/ @elastic/kibana-app # App Architecture /packages/kbn-interpreter/ @elastic/kibana-app-arch diff --git a/.github/ISSUE_TEMPLATE/v8_breaking_change.md b/.github/ISSUE_TEMPLATE/v8_breaking_change.md new file mode 100644 index 00000000000000..99f779c288f5b9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/v8_breaking_change.md @@ -0,0 +1,36 @@ +--- +name: 8.0 Breaking change +about: Breaking changes from 7.x -> 8.0 +title: "[Breaking change]" +labels: Team:Elasticsearch UI, Feature:Upgrade Assistant +assignees: '' + +--- + +## Change description + +**Which release will ship the breaking change?** + + + +**Describe the change. How will it manifest to users?** + +**What percentage of users will be affected?** + + + +**What can users to do to address the change manually?** + + + +**How could we make migration easier with the Upgrade Assistant?** + +**Are there any edge cases?** + +## Test Data + +Provide test data. We can’t build a solution without data to test it against. + +## Cross links + +Cross-link to relevant [Elasticsearch breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-8.0.html). \ No newline at end of file diff --git a/.i18nrc.json b/.i18nrc.json index 6874d02304e490..07878ed3c15fb4 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -3,7 +3,7 @@ "common.ui": "src/legacy/ui", "console": "src/plugins/console", "core": "src/core", - "dashboardEmbeddableContainer": "src/plugins/dashboard_embeddable_container", + "dashboard": "src/plugins/dashboard", "data": [ "src/legacy/core_plugins/data", "src/plugins/data" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aec6d44ad4abfb..5c745f1611cce9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -171,6 +171,8 @@ Bootstrap Kibana and install all the dependencies yarn kbn bootstrap ``` +> Node.js native modules could be in use and node-gyp is the tool used to build them. There are tools you need to install per platform and python versions you need to be using. Please see https://github.com/nodejs/node-gyp#installation and follow the guide according your platform. + (You can also run `yarn kbn` to see the other available commands. For more info about this tool, see https://github.com/elastic/kibana/tree/master/packages/kbn-pm.) When switching branches which use different versions of npm packages you may need to run; diff --git a/Jenkinsfile b/Jenkinsfile index 742aec1d4e7ab4..d43da6e0bee04d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,7 +3,7 @@ library 'kibana-pipeline-library' kibanaLibrary.load() -kibanaPipeline(timeoutMinutes: 135) { +kibanaPipeline(timeoutMinutes: 135, checkPrChanges: true) { githubPr.withDefaultPrComments { catchError { retryable.enable() diff --git a/docs/development/core/public/kibana-plugin-core-public.icontextprovider.md b/docs/development/core/public/kibana-plugin-core-public.icontextprovider.md index 4778415ab2391c..97f7bad8e99115 100644 --- a/docs/development/core/public/kibana-plugin-core-public.icontextprovider.md +++ b/docs/development/core/public/kibana-plugin-core-public.icontextprovider.md @@ -9,7 +9,7 @@ A function that returns a context value for a specific key of given context type Signature: ```typescript -export declare type IContextProvider, TContextName extends keyof HandlerContextType> = (context: Partial>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; +export declare type IContextProvider, TContextName extends keyof HandlerContextType> = (context: PartialExceptFor, 'core'>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; ``` ## Remarks 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 new file mode 100644 index 00000000000000..d8f518ceebd646 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.corestart.elasticsearch.md @@ -0,0 +1,13 @@ + + +[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.md b/docs/development/core/server/kibana-plugin-core-server.corestart.md index 24a5c8f213d9fc..c50e8924c9dd40 100644 --- a/docs/development/core/server/kibana-plugin-core-server.corestart.md +++ b/docs/development/core/server/kibana-plugin-core-server.corestart.md @@ -17,6 +17,7 @@ export interface CoreStart | Property | Type | Description | | --- | --- | --- | | [capabilities](./kibana-plugin-core-server.corestart.capabilities.md) | CapabilitiesStart | [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md) | +| [elasticsearch](./kibana-plugin-core-server.corestart.elasticsearch.md) | ElasticsearchServiceStart | [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.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.elasticsearchservicesetup.adminclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md index 24bd42e83186fd..3fcb855586129a 100644 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md @@ -4,7 +4,12 @@ ## ElasticsearchServiceSetup.adminClient property -A client for the `admin` cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). +> Warning: This API is now obsolete. +> +> Use [ElasticsearchServiceStart.legacy.client](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) instead. +> +> A client for the `admin` cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). +> Signature: diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.createclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.createclient.md index b739578bbdd80d..75bf6c6aa461b1 100644 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.createclient.md +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.createclient.md @@ -4,7 +4,12 @@ ## ElasticsearchServiceSetup.createClient property -Create application specific Elasticsearch cluster API client with customized config. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). +> Warning: This API is now obsolete. +> +> Use [ElasticsearchServiceStart.legacy.createClient](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) instead. +> +> Create application specific Elasticsearch cluster API client with customized config. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). +> Signature: diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md index fae5cee79d6e6b..867cafa957f42b 100644 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md @@ -4,7 +4,12 @@ ## ElasticsearchServiceSetup.dataClient property -A client for the `data` cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). +> Warning: This API is now obsolete. +> +> Use [ElasticsearchServiceStart.legacy.client](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) instead. +> +> A client for the `data` cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). +> Signature: diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md index 4e4e8b837d909c..ee56f8b4a62847 100644 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md @@ -15,7 +15,7 @@ export interface ElasticsearchServiceSetup | Property | Type | Description | | --- | --- | --- | -| [adminClient](./kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md) | IClusterClient | A client for the admin cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). | -| [createClient](./kibana-plugin-core-server.elasticsearchservicesetup.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). | -| [dataClient](./kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md) | IClusterClient | A client for the data cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md). | +| [adminClient](./kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md) | IClusterClient | | +| [createClient](./kibana-plugin-core-server.elasticsearchservicesetup.createclient.md) | (type: string, clientConfig?: Partial<ElasticsearchClientConfig>) => ICustomClusterClient | | +| [dataClient](./kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md) | IClusterClient | | diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.legacy.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.legacy.md new file mode 100644 index 00000000000000..08765aaf93d3d5 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.legacy.md @@ -0,0 +1,14 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) > [legacy](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) + +## ElasticsearchServiceStart.legacy property + +Signature: + +```typescript +legacy: { + readonly createClient: (type: string, clientConfig?: Partial) => ICustomClusterClient; + readonly client: IClusterClient; + }; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.md new file mode 100644 index 00000000000000..39c794af2c881f --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.md @@ -0,0 +1,19 @@ + + +[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 | +| --- | --- | --- | +| [legacy](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) | {
readonly createClient: (type: string, clientConfig?: Partial<ElasticsearchClientConfig>) => ICustomClusterClient;
readonly client: IClusterClient;
} | | + diff --git a/docs/development/core/server/kibana-plugin-core-server.icontextprovider.md b/docs/development/core/server/kibana-plugin-core-server.icontextprovider.md index b2194c9ac0504d..7d124b266bcc1a 100644 --- a/docs/development/core/server/kibana-plugin-core-server.icontextprovider.md +++ b/docs/development/core/server/kibana-plugin-core-server.icontextprovider.md @@ -9,7 +9,7 @@ A function that returns a context value for a specific key of given context type Signature: ```typescript -export declare type IContextProvider, TContextName extends keyof HandlerContextType> = (context: Partial>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; +export declare type IContextProvider, TContextName extends keyof HandlerContextType> = (context: PartialExceptFor, 'core'>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; ``` ## Remarks diff --git a/docs/development/core/server/kibana-plugin-core-server.md b/docs/development/core/server/kibana-plugin-core-server.md index ec64851e39f784..8a88329031e1f8 100644 --- a/docs/development/core/server/kibana-plugin-core-server.md +++ b/docs/development/core/server/kibana-plugin-core-server.md @@ -74,6 +74,7 @@ The plugin integrates with the core system via lifecycle events: `setup` | [DiscoveredPlugin](./kibana-plugin-core-server.discoveredplugin.md) | Small container object used to expose information about discovered plugins that may or may not have been started. | | [ElasticsearchError](./kibana-plugin-core-server.elasticsearcherror.md) | | | [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) | | +| [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) | | | [EnvironmentMode](./kibana-plugin-core-server.environmentmode.md) | | | [ErrorHttpResponseOptions](./kibana-plugin-core-server.errorhttpresponseoptions.md) | HTTP response parameters | | [FakeRequest](./kibana-plugin-core-server.fakerequest.md) | Fake request object created manually by Kibana plugins. | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.agggroupnames.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.agggroupnames.md new file mode 100644 index 00000000000000..b62578ef96323a --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.agggroupnames.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggGroupNames](./kibana-plugin-plugins-data-public.agggroupnames.md) + +## AggGroupNames variable + +Signature: + +```typescript +AggGroupNames: Readonly<{ + Buckets: "buckets"; + Metrics: "metrics"; + None: "none"; +}> +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparam.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparam.md new file mode 100644 index 00000000000000..aa9f64e4d566de --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparam.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParam](./kibana-plugin-plugins-data-public.aggparam.md) + +## AggParam type + +Signature: + +```typescript +export declare type AggParam = BaseParamType; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.display.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.display.md new file mode 100644 index 00000000000000..9c6141a50c02fe --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.display.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamOption](./kibana-plugin-plugins-data-public.aggparamoption.md) > [display](./kibana-plugin-plugins-data-public.aggparamoption.display.md) + +## AggParamOption.display property + +Signature: + +```typescript +display: string; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.enabled.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.enabled.md new file mode 100644 index 00000000000000..5de2c2230d362f --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.enabled.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamOption](./kibana-plugin-plugins-data-public.aggparamoption.md) > [enabled](./kibana-plugin-plugins-data-public.aggparamoption.enabled.md) + +## AggParamOption.enabled() method + +Signature: + +```typescript +enabled?(agg: AggConfig): boolean; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| agg | AggConfig | | + +Returns: + +`boolean` + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.md new file mode 100644 index 00000000000000..7a38dbb0a44151 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.md @@ -0,0 +1,25 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamOption](./kibana-plugin-plugins-data-public.aggparamoption.md) + +## AggParamOption interface + +Signature: + +```typescript +export interface AggParamOption +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [display](./kibana-plugin-plugins-data-public.aggparamoption.display.md) | string | | +| [val](./kibana-plugin-plugins-data-public.aggparamoption.val.md) | string | | + +## Methods + +| Method | Description | +| --- | --- | +| [enabled(agg)](./kibana-plugin-plugins-data-public.aggparamoption.enabled.md) | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.val.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.val.md new file mode 100644 index 00000000000000..8cdf71c767211e --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamoption.val.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamOption](./kibana-plugin-plugins-data-public.aggparamoption.md) > [val](./kibana-plugin-plugins-data-public.aggparamoption.val.md) + +## AggParamOption.val property + +Signature: + +```typescript +val: string; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype._constructor_.md new file mode 100644 index 00000000000000..5fdcd53d57c654 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamType](./kibana-plugin-plugins-data-public.aggparamtype.md) > [(constructor)](./kibana-plugin-plugins-data-public.aggparamtype._constructor_.md) + +## AggParamType.(constructor) + +Constructs a new instance of the `AggParamType` class + +Signature: + +```typescript +constructor(config: Record); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| config | Record<string, any> | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.allowedaggs.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.allowedaggs.md new file mode 100644 index 00000000000000..9dc0b788f29a67 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.allowedaggs.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamType](./kibana-plugin-plugins-data-public.aggparamtype.md) > [allowedAggs](./kibana-plugin-plugins-data-public.aggparamtype.allowedaggs.md) + +## AggParamType.allowedAggs property + +Signature: + +```typescript +allowedAggs: string[]; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.makeagg.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.makeagg.md new file mode 100644 index 00000000000000..43f30d73ca6df3 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.makeagg.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamType](./kibana-plugin-plugins-data-public.aggparamtype.md) > [makeAgg](./kibana-plugin-plugins-data-public.aggparamtype.makeagg.md) + +## AggParamType.makeAgg property + +Signature: + +```typescript +makeAgg: (agg: TAggConfig, state?: any) => TAggConfig; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.md new file mode 100644 index 00000000000000..b75065da91abda --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggparamtype.md @@ -0,0 +1,25 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggParamType](./kibana-plugin-plugins-data-public.aggparamtype.md) + +## AggParamType class + +Signature: + +```typescript +export declare class AggParamType extends BaseParamType +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(config)](./kibana-plugin-plugins-data-public.aggparamtype._constructor_.md) | | Constructs a new instance of the AggParamType class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [allowedAggs](./kibana-plugin-plugins-data-public.aggparamtype.allowedaggs.md) | | string[] | | +| [makeAgg](./kibana-plugin-plugins-data-public.aggparamtype.makeagg.md) | | (agg: TAggConfig, state?: any) => TAggConfig | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.addfilter.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.addfilter.md new file mode 100644 index 00000000000000..c9d6772a13b8d5 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.addfilter.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggTypeFieldFilters](./kibana-plugin-plugins-data-public.aggtypefieldfilters.md) > [addFilter](./kibana-plugin-plugins-data-public.aggtypefieldfilters.addfilter.md) + +## AggTypeFieldFilters.addFilter() method + +Register a new with this registry. This will be used by the . + +Signature: + +```typescript +addFilter(filter: AggTypeFieldFilter): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| filter | AggTypeFieldFilter | | + +Returns: + +`void` + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.filter.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.filter.md new file mode 100644 index 00000000000000..038c339bf67745 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.filter.md @@ -0,0 +1,25 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggTypeFieldFilters](./kibana-plugin-plugins-data-public.aggtypefieldfilters.md) > [filter](./kibana-plugin-plugins-data-public.aggtypefieldfilters.filter.md) + +## AggTypeFieldFilters.filter() method + +Returns the filtered by all registered filters. + +Signature: + +```typescript +filter(fields: IndexPatternField[], aggConfig: IAggConfig): IndexPatternField[]; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| fields | IndexPatternField[] | | +| aggConfig | IAggConfig | | + +Returns: + +`IndexPatternField[]` + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.md new file mode 100644 index 00000000000000..c0b386efbf9c71 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefieldfilters.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggTypeFieldFilters](./kibana-plugin-plugins-data-public.aggtypefieldfilters.md) + +## AggTypeFieldFilters class + +A registry to store which are used to filter down available fields for a specific visualization and . + +Signature: + +```typescript +declare class AggTypeFieldFilters +``` + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [addFilter(filter)](./kibana-plugin-plugins-data-public.aggtypefieldfilters.addfilter.md) | | Register a new with this registry. This will be used by the . | +| [filter(fields, aggConfig)](./kibana-plugin-plugins-data-public.aggtypefieldfilters.filter.md) | | Returns the filtered by all registered filters. | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.addfilter.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.addfilter.md new file mode 100644 index 00000000000000..9df003377c4a10 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.addfilter.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggTypeFilters](./kibana-plugin-plugins-data-public.aggtypefilters.md) > [addFilter](./kibana-plugin-plugins-data-public.aggtypefilters.addfilter.md) + +## AggTypeFilters.addFilter() method + +Register a new with this registry. + +Signature: + +```typescript +addFilter(filter: AggTypeFilter): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| filter | AggTypeFilter | | + +Returns: + +`void` + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.filter.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.filter.md new file mode 100644 index 00000000000000..81e6e9b95d6559 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.filter.md @@ -0,0 +1,27 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggTypeFilters](./kibana-plugin-plugins-data-public.aggtypefilters.md) > [filter](./kibana-plugin-plugins-data-public.aggtypefilters.filter.md) + +## AggTypeFilters.filter() method + +Returns the filtered by all registered filters. + +Signature: + +```typescript +filter(aggTypes: IAggType[], indexPattern: IndexPattern, aggConfig: IAggConfig, aggFilter: string[]): IAggType[]; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| aggTypes | IAggType[] | | +| indexPattern | IndexPattern | | +| aggConfig | IAggConfig | | +| aggFilter | string[] | | + +Returns: + +`IAggType[]` + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.md new file mode 100644 index 00000000000000..c5e24bc0a78a06 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.aggtypefilters.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [AggTypeFilters](./kibana-plugin-plugins-data-public.aggtypefilters.md) + +## AggTypeFilters class + +A registry to store which are used to filter down available aggregations for a specific visualization and . + +Signature: + +```typescript +declare class AggTypeFilters +``` + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [addFilter(filter)](./kibana-plugin-plugins-data-public.aggtypefilters.addfilter.md) | | Register a new with this registry. | +| [filter(aggTypes, indexPattern, aggConfig, aggFilter)](./kibana-plugin-plugins-data-public.aggtypefilters.filter.md) | | Returns the filtered by all registered filters. | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.bucket_types.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.bucket_types.md new file mode 100644 index 00000000000000..4bd6070bf21255 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.bucket_types.md @@ -0,0 +1,28 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [BUCKET\_TYPES](./kibana-plugin-plugins-data-public.bucket_types.md) + +## BUCKET\_TYPES enum + +Signature: + +```typescript +export declare enum BUCKET_TYPES +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| DATE\_HISTOGRAM | "date_histogram" | | +| DATE\_RANGE | "date_range" | | +| FILTER | "filter" | | +| FILTERS | "filters" | | +| GEOHASH\_GRID | "geohash_grid" | | +| GEOTILE\_GRID | "geotile_grid" | | +| HISTOGRAM | "histogram" | | +| IP\_RANGE | "ip_range" | | +| RANGE | "range" | | +| SIGNIFICANT\_TERMS | "significant_terms" | | +| TERMS | "terms" | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstart.actions.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstart.actions.md new file mode 100644 index 00000000000000..3e966caa307995 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstart.actions.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [DataPublicPluginStart](./kibana-plugin-plugins-data-public.datapublicpluginstart.md) > [actions](./kibana-plugin-plugins-data-public.datapublicpluginstart.actions.md) + +## DataPublicPluginStart.actions property + +Signature: + +```typescript +actions: { + createFiltersFromEvent: typeof createFiltersFromEvent; + }; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstart.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstart.md index defc633b5d1ce0..a623e91388fd68 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstart.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstart.md @@ -14,6 +14,7 @@ export interface DataPublicPluginStart | Property | Type | Description | | --- | --- | --- | +| [actions](./kibana-plugin-plugins-data-public.datapublicpluginstart.actions.md) | {
createFiltersFromEvent: typeof createFiltersFromEvent;
} | | | [autocomplete](./kibana-plugin-plugins-data-public.datapublicpluginstart.autocomplete.md) | AutocompleteStart | | | [fieldFormats](./kibana-plugin-plugins-data-public.datapublicpluginstart.fieldformats.md) | FieldFormatsStart | | | [indexPatterns](./kibana-plugin-plugins-data-public.datapublicpluginstart.indexpatterns.md) | IndexPatternsContract | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.from.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.from.md new file mode 100644 index 00000000000000..245269af366bc0 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.from.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [DateRangeKey](./kibana-plugin-plugins-data-public.daterangekey.md) > [from](./kibana-plugin-plugins-data-public.daterangekey.from.md) + +## DateRangeKey.from property + +Signature: + +```typescript +from: number; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.md new file mode 100644 index 00000000000000..540d429dced48e --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [DateRangeKey](./kibana-plugin-plugins-data-public.daterangekey.md) + +## DateRangeKey interface + +Signature: + +```typescript +export interface DateRangeKey +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [from](./kibana-plugin-plugins-data-public.daterangekey.from.md) | number | | +| [to](./kibana-plugin-plugins-data-public.daterangekey.to.md) | number | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.to.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.to.md new file mode 100644 index 00000000000000..024a6c2105427d --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.daterangekey.to.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [DateRangeKey](./kibana-plugin-plugins-data-public.daterangekey.md) > [to](./kibana-plugin-plugins-data-public.daterangekey.to.md) + +## DateRangeKey.to property + +Signature: + +```typescript +to: number; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.fieldformats.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.fieldformats.md index 7fd4d03e1b0741..244633c3c4c9ef 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.fieldformats.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.fieldformats.md @@ -10,7 +10,7 @@ fieldFormats: { FieldFormat: typeof FieldFormat; FieldFormatsRegistry: typeof FieldFormatsRegistry; - serialize: (agg: import("../../../legacy/core_plugins/data/public/search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; + serialize: (agg: import("./search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; DEFAULT_CONVERTER_COLOR: { range: string; regex: string; diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iaggconfig.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iaggconfig.md new file mode 100644 index 00000000000000..9d07f610ba32ab --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iaggconfig.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IAggConfig](./kibana-plugin-plugins-data-public.iaggconfig.md) + +## IAggConfig type + + AggConfig + + This class represents an aggregation, which is displayed in the left-hand nav of the Visualize app. + +Signature: + +```typescript +export declare type IAggConfig = AggConfig; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iagggroupnames.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iagggroupnames.md new file mode 100644 index 00000000000000..07310a4219359a --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iagggroupnames.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IAggGroupNames](./kibana-plugin-plugins-data-public.iagggroupnames.md) + +## IAggGroupNames type + +Signature: + +```typescript +export declare type IAggGroupNames = $Values; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iaggtype.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iaggtype.md new file mode 100644 index 00000000000000..15505fed16bd46 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iaggtype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IAggType](./kibana-plugin-plugins-data-public.iaggtype.md) + +## IAggType type + +Signature: + +```typescript +export declare type IAggType = AggType; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ifieldparamtype.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ifieldparamtype.md new file mode 100644 index 00000000000000..1226106895bdb7 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ifieldparamtype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IFieldParamType](./kibana-plugin-plugins-data-public.ifieldparamtype.md) + +## IFieldParamType type + +Signature: + +```typescript +export declare type IFieldParamType = FieldParamType; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.imetricaggtype.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.imetricaggtype.md new file mode 100644 index 00000000000000..4f36d3ef7a16e3 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.imetricaggtype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IMetricAggType](./kibana-plugin-plugins-data-public.imetricaggtype.md) + +## IMetricAggType type + +Signature: + +```typescript +export declare type IMetricAggType = MetricAggType; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iprangekey.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iprangekey.md new file mode 100644 index 00000000000000..96903a5df98441 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iprangekey.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IpRangeKey](./kibana-plugin-plugins-data-public.iprangekey.md) + +## IpRangeKey type + +Signature: + +```typescript +export declare type IpRangeKey = { + type: 'mask'; + mask: string; +} | { + type: 'range'; + from: string; + to: string; +}; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md index ce1375d277b75f..f8516ec476e883 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md @@ -8,11 +8,15 @@ | Class | Description | | --- | --- | +| [AggParamType](./kibana-plugin-plugins-data-public.aggparamtype.md) | | +| [AggTypeFieldFilters](./kibana-plugin-plugins-data-public.aggtypefieldfilters.md) | A registry to store which are used to filter down available fields for a specific visualization and . | +| [AggTypeFilters](./kibana-plugin-plugins-data-public.aggtypefilters.md) | A registry to store which are used to filter down available aggregations for a specific visualization and . | | [FilterManager](./kibana-plugin-plugins-data-public.filtermanager.md) | | | [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) | | | [IndexPatternField](./kibana-plugin-plugins-data-public.indexpatternfield.md) | | | [IndexPatternFieldList](./kibana-plugin-plugins-data-public.indexpatternfieldlist.md) | | | [IndexPatternSelect](./kibana-plugin-plugins-data-public.indexpatternselect.md) | | +| [OptionedParamType](./kibana-plugin-plugins-data-public.optionedparamtype.md) | | | [Plugin](./kibana-plugin-plugins-data-public.plugin.md) | | | [SearchError](./kibana-plugin-plugins-data-public.searcherror.md) | | | [SearchSource](./kibana-plugin-plugins-data-public.searchsource.md) | | @@ -22,8 +26,10 @@ | Enumeration | Description | | --- | --- | +| [BUCKET\_TYPES](./kibana-plugin-plugins-data-public.bucket_types.md) | | | [ES\_FIELD\_TYPES](./kibana-plugin-plugins-data-public.es_field_types.md) | \* | | [KBN\_FIELD\_TYPES](./kibana-plugin-plugins-data-public.kbn_field_types.md) | \* | +| [METRIC\_TYPES](./kibana-plugin-plugins-data-public.metric_types.md) | | | [QuerySuggestionTypes](./kibana-plugin-plugins-data-public.querysuggestiontypes.md) | | | [SortDirection](./kibana-plugin-plugins-data-public.sortdirection.md) | | @@ -36,15 +42,16 @@ | [getQueryLog(uiSettings, storage, appName, language)](./kibana-plugin-plugins-data-public.getquerylog.md) | | | [getSearchErrorType({ message })](./kibana-plugin-plugins-data-public.getsearcherrortype.md) | | | [getTime(indexPattern, timeRange, forceNow)](./kibana-plugin-plugins-data-public.gettime.md) | | -| [parseInterval(interval)](./kibana-plugin-plugins-data-public.parseinterval.md) | | | [plugin(initializerContext)](./kibana-plugin-plugins-data-public.plugin.md) | | ## Interfaces | Interface | Description | | --- | --- | +| [AggParamOption](./kibana-plugin-plugins-data-public.aggparamoption.md) | | | [DataPublicPluginSetup](./kibana-plugin-plugins-data-public.datapublicpluginsetup.md) | | | [DataPublicPluginStart](./kibana-plugin-plugins-data-public.datapublicpluginstart.md) | | +| [DateRangeKey](./kibana-plugin-plugins-data-public.daterangekey.md) | | | [EsQueryConfig](./kibana-plugin-plugins-data-public.esqueryconfig.md) | | | [FetchOptions](./kibana-plugin-plugins-data-public.fetchoptions.md) | | | [FieldFormatConfig](./kibana-plugin-plugins-data-public.fieldformatconfig.md) | | @@ -66,6 +73,8 @@ | [ISearchStrategy](./kibana-plugin-plugins-data-public.isearchstrategy.md) | Search strategy interface contains a search method that takes in a request and returns a promise that resolves to a response. | | [ISyncSearchRequest](./kibana-plugin-plugins-data-public.isyncsearchrequest.md) | | | [KueryNode](./kibana-plugin-plugins-data-public.kuerynode.md) | | +| [OptionedParamEditorProps](./kibana-plugin-plugins-data-public.optionedparameditorprops.md) | | +| [OptionedValueProp](./kibana-plugin-plugins-data-public.optionedvalueprop.md) | | | [Query](./kibana-plugin-plugins-data-public.query.md) | | | [QueryState](./kibana-plugin-plugins-data-public.querystate.md) | All query state service state | | [QuerySuggestionBasic](./kibana-plugin-plugins-data-public.querysuggestionbasic.md) | \* | @@ -77,12 +86,15 @@ | [SavedQueryService](./kibana-plugin-plugins-data-public.savedqueryservice.md) | | | [SearchSourceFields](./kibana-plugin-plugins-data-public.searchsourcefields.md) | | | [SearchStrategyProvider](./kibana-plugin-plugins-data-public.searchstrategyprovider.md) | | +| [TabbedAggColumn](./kibana-plugin-plugins-data-public.tabbedaggcolumn.md) | \* | +| [TabbedTable](./kibana-plugin-plugins-data-public.tabbedtable.md) | \* | | [TimeRange](./kibana-plugin-plugins-data-public.timerange.md) | | ## Variables | Variable | Description | | --- | --- | +| [AggGroupNames](./kibana-plugin-plugins-data-public.agggroupnames.md) | | | [baseFormattersPublic](./kibana-plugin-plugins-data-public.baseformatterspublic.md) | | | [castEsToKbnFieldTypeName](./kibana-plugin-plugins-data-public.castestokbnfieldtypename.md) | Get the KbnFieldType name for an esType string | | [connectToQueryState](./kibana-plugin-plugins-data-public.connecttoquerystate.md) | Helper to setup two-way syncing of global data and a state container | @@ -96,6 +108,7 @@ | [getKbnTypeNames](./kibana-plugin-plugins-data-public.getkbntypenames.md) | Get the esTypes known by all kbnFieldTypes {Array} | | [indexPatterns](./kibana-plugin-plugins-data-public.indexpatterns.md) | | | [QueryStringInput](./kibana-plugin-plugins-data-public.querystringinput.md) | | +| [search](./kibana-plugin-plugins-data-public.search.md) | | | [SearchBar](./kibana-plugin-plugins-data-public.searchbar.md) | | | [SYNC\_SEARCH\_STRATEGY](./kibana-plugin-plugins-data-public.sync_search_strategy.md) | | | [syncQueryStateWithUrl](./kibana-plugin-plugins-data-public.syncquerystatewithurl.md) | Helper to setup syncing of global data with the URL | @@ -104,21 +117,29 @@ | Type Alias | Description | | --- | --- | +| [AggParam](./kibana-plugin-plugins-data-public.aggparam.md) | | | [CustomFilter](./kibana-plugin-plugins-data-public.customfilter.md) | | | [EsQuerySortValue](./kibana-plugin-plugins-data-public.esquerysortvalue.md) | | | [ExistsFilter](./kibana-plugin-plugins-data-public.existsfilter.md) | | | [FieldFormatId](./kibana-plugin-plugins-data-public.fieldformatid.md) | id type is needed for creating custom converters. | | [FieldFormatsContentType](./kibana-plugin-plugins-data-public.fieldformatscontenttype.md) | \* | | [FieldFormatsGetConfigFn](./kibana-plugin-plugins-data-public.fieldformatsgetconfigfn.md) | | +| [IAggConfig](./kibana-plugin-plugins-data-public.iaggconfig.md) | AggConfig This class represents an aggregation, which is displayed in the left-hand nav of the Visualize app. | +| [IAggGroupNames](./kibana-plugin-plugins-data-public.iagggroupnames.md) | | +| [IAggType](./kibana-plugin-plugins-data-public.iaggtype.md) | | | [IFieldFormat](./kibana-plugin-plugins-data-public.ifieldformat.md) | | | [IFieldFormatsRegistry](./kibana-plugin-plugins-data-public.ifieldformatsregistry.md) | | +| [IFieldParamType](./kibana-plugin-plugins-data-public.ifieldparamtype.md) | | +| [IMetricAggType](./kibana-plugin-plugins-data-public.imetricaggtype.md) | | | [IndexPatternAggRestrictions](./kibana-plugin-plugins-data-public.indexpatternaggrestrictions.md) | | | [IndexPatternsContract](./kibana-plugin-plugins-data-public.indexpatternscontract.md) | | | [InputTimeRange](./kibana-plugin-plugins-data-public.inputtimerange.md) | | +| [IpRangeKey](./kibana-plugin-plugins-data-public.iprangekey.md) | | | [ISearch](./kibana-plugin-plugins-data-public.isearch.md) | | | [ISearchGeneric](./kibana-plugin-plugins-data-public.isearchgeneric.md) | | | [ISearchSource](./kibana-plugin-plugins-data-public.isearchsource.md) | | | [MatchAllFilter](./kibana-plugin-plugins-data-public.matchallfilter.md) | | +| [ParsedInterval](./kibana-plugin-plugins-data-public.parsedinterval.md) | | | [PhraseFilter](./kibana-plugin-plugins-data-public.phrasefilter.md) | | | [PhrasesFilter](./kibana-plugin-plugins-data-public.phrasesfilter.md) | | | [QuerySuggestion](./kibana-plugin-plugins-data-public.querysuggestion.md) | \* | @@ -130,6 +151,7 @@ | [SearchRequest](./kibana-plugin-plugins-data-public.searchrequest.md) | | | [SearchResponse](./kibana-plugin-plugins-data-public.searchresponse.md) | | | [StatefulSearchBarProps](./kibana-plugin-plugins-data-public.statefulsearchbarprops.md) | | +| [TabbedAggRow](./kibana-plugin-plugins-data-public.tabbedaggrow.md) | \* | | [TimefilterContract](./kibana-plugin-plugins-data-public.timefiltercontract.md) | | | [TimeHistoryContract](./kibana-plugin-plugins-data-public.timehistorycontract.md) | | | [TSearchStrategyProvider](./kibana-plugin-plugins-data-public.tsearchstrategyprovider.md) | Search strategy provider creates an instance of a search strategy with the request handler context bound to it. This way every search strategy can use whatever information they require from the request context. | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.metric_types.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.metric_types.md new file mode 100644 index 00000000000000..637717692a38c1 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.metric_types.md @@ -0,0 +1,38 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [METRIC\_TYPES](./kibana-plugin-plugins-data-public.metric_types.md) + +## METRIC\_TYPES enum + +Signature: + +```typescript +export declare enum METRIC_TYPES +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| AVG | "avg" | | +| AVG\_BUCKET | "avg_bucket" | | +| CARDINALITY | "cardinality" | | +| COUNT | "count" | | +| CUMULATIVE\_SUM | "cumulative_sum" | | +| DERIVATIVE | "derivative" | | +| GEO\_BOUNDS | "geo_bounds" | | +| GEO\_CENTROID | "geo_centroid" | | +| MAX | "max" | | +| MAX\_BUCKET | "max_bucket" | | +| MEDIAN | "median" | | +| MIN | "min" | | +| MIN\_BUCKET | "min_bucket" | | +| MOVING\_FN | "moving_avg" | | +| PERCENTILE\_RANKS | "percentile_ranks" | | +| PERCENTILES | "percentiles" | | +| SERIAL\_DIFF | "serial_diff" | | +| STD\_DEV | "std_dev" | | +| SUM | "sum" | | +| SUM\_BUCKET | "sum_bucket" | | +| TOP\_HITS | "top_hits" | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparameditorprops.aggparam.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparameditorprops.aggparam.md new file mode 100644 index 00000000000000..68e4371acc2f36 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparameditorprops.aggparam.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedParamEditorProps](./kibana-plugin-plugins-data-public.optionedparameditorprops.md) > [aggParam](./kibana-plugin-plugins-data-public.optionedparameditorprops.aggparam.md) + +## OptionedParamEditorProps.aggParam property + +Signature: + +```typescript +aggParam: { + options: T[]; + }; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparameditorprops.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparameditorprops.md new file mode 100644 index 00000000000000..00a440a0a775a6 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparameditorprops.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedParamEditorProps](./kibana-plugin-plugins-data-public.optionedparameditorprops.md) + +## OptionedParamEditorProps interface + +Signature: + +```typescript +export interface OptionedParamEditorProps +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [aggParam](./kibana-plugin-plugins-data-public.optionedparameditorprops.aggparam.md) | {
options: T[];
} | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype._constructor_.md new file mode 100644 index 00000000000000..47272c7683e658 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedParamType](./kibana-plugin-plugins-data-public.optionedparamtype.md) > [(constructor)](./kibana-plugin-plugins-data-public.optionedparamtype._constructor_.md) + +## OptionedParamType.(constructor) + +Constructs a new instance of the `OptionedParamType` class + +Signature: + +```typescript +constructor(config: Record); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| config | Record<string, any> | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype.md new file mode 100644 index 00000000000000..911f9bdd171137 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedParamType](./kibana-plugin-plugins-data-public.optionedparamtype.md) + +## OptionedParamType class + +Signature: + +```typescript +export declare class OptionedParamType extends BaseParamType +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(config)](./kibana-plugin-plugins-data-public.optionedparamtype._constructor_.md) | | Constructs a new instance of the OptionedParamType class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [options](./kibana-plugin-plugins-data-public.optionedparamtype.options.md) | | OptionedValueProp[] | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype.options.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype.options.md new file mode 100644 index 00000000000000..3d99beaca47c46 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedparamtype.options.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedParamType](./kibana-plugin-plugins-data-public.optionedparamtype.md) > [options](./kibana-plugin-plugins-data-public.optionedparamtype.options.md) + +## OptionedParamType.options property + +Signature: + +```typescript +options: OptionedValueProp[]; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.disabled.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.disabled.md new file mode 100644 index 00000000000000..49516d7e426151 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.disabled.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedValueProp](./kibana-plugin-plugins-data-public.optionedvalueprop.md) > [disabled](./kibana-plugin-plugins-data-public.optionedvalueprop.disabled.md) + +## OptionedValueProp.disabled property + +Signature: + +```typescript +disabled?: boolean; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.iscompatible.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.iscompatible.md new file mode 100644 index 00000000000000..90fc6ac80b1fef --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.iscompatible.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedValueProp](./kibana-plugin-plugins-data-public.optionedvalueprop.md) > [isCompatible](./kibana-plugin-plugins-data-public.optionedvalueprop.iscompatible.md) + +## OptionedValueProp.isCompatible property + +Signature: + +```typescript +isCompatible: (agg: IAggConfig) => boolean; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.md new file mode 100644 index 00000000000000..11c907db5ead23 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedValueProp](./kibana-plugin-plugins-data-public.optionedvalueprop.md) + +## OptionedValueProp interface + +Signature: + +```typescript +export interface OptionedValueProp +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [disabled](./kibana-plugin-plugins-data-public.optionedvalueprop.disabled.md) | boolean | | +| [isCompatible](./kibana-plugin-plugins-data-public.optionedvalueprop.iscompatible.md) | (agg: IAggConfig) => boolean | | +| [text](./kibana-plugin-plugins-data-public.optionedvalueprop.text.md) | string | | +| [value](./kibana-plugin-plugins-data-public.optionedvalueprop.value.md) | string | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.text.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.text.md new file mode 100644 index 00000000000000..ce83780da63a93 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.text.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedValueProp](./kibana-plugin-plugins-data-public.optionedvalueprop.md) > [text](./kibana-plugin-plugins-data-public.optionedvalueprop.text.md) + +## OptionedValueProp.text property + +Signature: + +```typescript +text: string; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.value.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.value.md new file mode 100644 index 00000000000000..3403a080d75072 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.optionedvalueprop.value.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [OptionedValueProp](./kibana-plugin-plugins-data-public.optionedvalueprop.md) > [value](./kibana-plugin-plugins-data-public.optionedvalueprop.value.md) + +## OptionedValueProp.value property + +Signature: + +```typescript +value: string; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.parsedinterval.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.parsedinterval.md new file mode 100644 index 00000000000000..6a940fa9a78b78 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.parsedinterval.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [ParsedInterval](./kibana-plugin-plugins-data-public.parsedinterval.md) + +## ParsedInterval type + +Signature: + +```typescript +export declare type ParsedInterval = ReturnType; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.parseinterval.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.parseinterval.md deleted file mode 100644 index 1f5371fbf088a7..00000000000000 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.parseinterval.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [parseInterval](./kibana-plugin-plugins-data-public.parseinterval.md) - -## parseInterval() function - -Signature: - -```typescript -export declare function parseInterval(interval: string): moment.Duration | null; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| interval | string | | - -Returns: - -`moment.Duration | null` - diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.setup.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.setup.md index 98a954456d482c..51bc46bbdccc83 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.setup.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.setup.md @@ -7,7 +7,7 @@ Signature: ```typescript -setup(core: CoreSetup, { uiActions }: DataSetupDependencies): DataPublicPluginSetup; +setup(core: CoreSetup, { expressions, uiActions }: DataSetupDependencies): DataPublicPluginSetup; ``` ## Parameters @@ -15,7 +15,7 @@ setup(core: CoreSetup, { uiActions }: DataSetupDependencies): DataPublicPluginSe | Parameter | Type | Description | | --- | --- | --- | | core | CoreSetup | | -| { uiActions } | DataSetupDependencies | | +| { expressions, uiActions } | DataSetupDependencies | | Returns: diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md index d0d4cc491e1428..58690300b3bd62 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md @@ -7,5 +7,5 @@ Signature: ```typescript -QueryStringInput: React.FC> +QueryStringInput: React.FC> ``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.search.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.search.md new file mode 100644 index 00000000000000..7e65ef85c8becc --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.search.md @@ -0,0 +1,47 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [search](./kibana-plugin-plugins-data-public.search.md) + +## search variable + +Signature: + +```typescript +search: { + aggs: { + AggConfigs: typeof AggConfigs; + aggGroupNamesMap: () => Record<"buckets" | "metrics", string>; + aggTypeFilters: import("./search/aggs/filter/agg_type_filters").AggTypeFilters; + CidrMask: typeof CidrMask; + convertDateRangeToString: typeof convertDateRangeToString; + convertIPRangeToString: (range: import("./search").IpRangeKey, format: (val: any) => string) => string; + dateHistogramInterval: typeof dateHistogramInterval; + intervalOptions: ({ + display: string; + val: string; + enabled(agg: import("./search/aggs/buckets/_bucket_agg_type").IBucketAggConfig): boolean | "" | undefined; + } | { + display: string; + val: string; + })[]; + InvalidEsCalendarIntervalError: typeof InvalidEsCalendarIntervalError; + InvalidEsIntervalFormatError: typeof InvalidEsIntervalFormatError; + isDateHistogramBucketAggConfig: typeof isDateHistogramBucketAggConfig; + isStringType: (agg: import("./search").AggConfig) => boolean; + isType: (type: string) => (agg: import("./search").AggConfig) => boolean; + isValidEsInterval: typeof isValidEsInterval; + isValidInterval: typeof isValidInterval; + parentPipelineType: string; + parseEsInterval: typeof parseEsInterval; + parseInterval: typeof parseInterval; + propFilter: typeof propFilter; + siblingPipelineType: string; + termsAggFilter: string[]; + toAbsoluteDates: typeof toAbsoluteDates; + }; + getRequestInspectorStats: typeof getRequestInspectorStats; + getResponseInspectorStats: typeof getResponseInspectorStats; + tabifyAggResponse: typeof tabifyAggResponse; + tabifyGetColumns: typeof tabifyGetColumns; +} +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md index 89c5ca800a4d4a..5cdf938a9e47f7 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md @@ -7,7 +7,7 @@ Signature: ```typescript -SearchBar: React.ComponentClass, "query" | "isLoading" | "indexPatterns" | "filters" | "refreshInterval" | "screenTitle" | "dataTestSubj" | "customSubmitButton" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "onRefresh" | "timeHistory" | "onFiltersUpdated" | "onRefreshChange">, any> & { - WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; +SearchBar: React.ComponentClass, "query" | "isLoading" | "indexPatterns" | "filters" | "onQueryChange" | "customSubmitButton" | "screenTitle" | "dataTestSubj" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "refreshInterval" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "onRefresh" | "timeHistory" | "onFiltersUpdated" | "onRefreshChange">, any> & { + WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; } ``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsource.getfields.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsource.getfields.md index 4f4e575241e103..dce03e7e1a95c6 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsource.getfields.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsource.getfields.md @@ -11,7 +11,7 @@ getFields(): { type?: string | undefined; query?: import("../..").Query | undefined; filter?: Filter | Filter[] | (() => Filter | Filter[] | undefined) | undefined; - sort?: Record | Record[] | undefined; + sort?: Record | Record[] | undefined; highlight?: any; highlightAll?: boolean | undefined; aggs?: any; @@ -32,7 +32,7 @@ getFields(): { type?: string | undefined; query?: import("../..").Query | undefined; filter?: Filter | Filter[] | (() => Filter | Filter[] | undefined) | undefined; - sort?: Record | Record[] | undefined; + sort?: Record | Record[] | undefined; highlight?: any; highlightAll?: boolean | undefined; aggs?: any; diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.aggconfig.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.aggconfig.md new file mode 100644 index 00000000000000..b010667af79e46 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.aggconfig.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedAggColumn](./kibana-plugin-plugins-data-public.tabbedaggcolumn.md) > [aggConfig](./kibana-plugin-plugins-data-public.tabbedaggcolumn.aggconfig.md) + +## TabbedAggColumn.aggConfig property + +Signature: + +```typescript +aggConfig: IAggConfig; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.id.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.id.md new file mode 100644 index 00000000000000..86f8b01312047b --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedAggColumn](./kibana-plugin-plugins-data-public.tabbedaggcolumn.md) > [id](./kibana-plugin-plugins-data-public.tabbedaggcolumn.id.md) + +## TabbedAggColumn.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.md new file mode 100644 index 00000000000000..578a2b159f9eb3 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedAggColumn](./kibana-plugin-plugins-data-public.tabbedaggcolumn.md) + +## TabbedAggColumn interface + +\* + +Signature: + +```typescript +export interface TabbedAggColumn +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [aggConfig](./kibana-plugin-plugins-data-public.tabbedaggcolumn.aggconfig.md) | IAggConfig | | +| [id](./kibana-plugin-plugins-data-public.tabbedaggcolumn.id.md) | string | | +| [name](./kibana-plugin-plugins-data-public.tabbedaggcolumn.name.md) | string | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.name.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.name.md new file mode 100644 index 00000000000000..ce20c1c50b9842 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggcolumn.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedAggColumn](./kibana-plugin-plugins-data-public.tabbedaggcolumn.md) > [name](./kibana-plugin-plugins-data-public.tabbedaggcolumn.name.md) + +## TabbedAggColumn.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggrow.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggrow.md new file mode 100644 index 00000000000000..28519d95c43749 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedaggrow.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedAggRow](./kibana-plugin-plugins-data-public.tabbedaggrow.md) + +## TabbedAggRow type + +\* + +Signature: + +```typescript +export declare type TabbedAggRow = Record; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.columns.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.columns.md new file mode 100644 index 00000000000000..8256291d368c36 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.columns.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedTable](./kibana-plugin-plugins-data-public.tabbedtable.md) > [columns](./kibana-plugin-plugins-data-public.tabbedtable.columns.md) + +## TabbedTable.columns property + +Signature: + +```typescript +columns: TabbedAggColumn[]; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.md new file mode 100644 index 00000000000000..51b1bfa9b4362b --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedTable](./kibana-plugin-plugins-data-public.tabbedtable.md) + +## TabbedTable interface + +\* + +Signature: + +```typescript +export interface TabbedTable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [columns](./kibana-plugin-plugins-data-public.tabbedtable.columns.md) | TabbedAggColumn[] | | +| [rows](./kibana-plugin-plugins-data-public.tabbedtable.rows.md) | TabbedAggRow[] | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.rows.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.rows.md new file mode 100644 index 00000000000000..19a973b18d75c2 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.tabbedtable.rows.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [TabbedTable](./kibana-plugin-plugins-data-public.tabbedtable.md) > [rows](./kibana-plugin-plugins-data-public.tabbedtable.rows.md) + +## TabbedTable.rows property + +Signature: + +```typescript +rows: TabbedAggRow[]; +``` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.fieldformats.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.fieldformats.md index 1cc1d829d01cd6..2b986aee508e22 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.fieldformats.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.fieldformats.md @@ -10,7 +10,7 @@ fieldFormats: { FieldFormatsRegistry: typeof FieldFormatsRegistry; FieldFormat: typeof FieldFormat; - serializeFieldFormat: (agg: import("../../../legacy/core_plugins/data/public/search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; + serializeFieldFormat: (agg: import("../public/search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; BoolFormat: typeof BoolFormat; BytesFormat: typeof BytesFormat; ColorFormat: typeof ColorFormat; diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md index 507e60971526b7..12d53f1a35ea0f 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md @@ -60,6 +60,7 @@ | [esQuery](./kibana-plugin-plugins-data-server.esquery.md) | | | [fieldFormats](./kibana-plugin-plugins-data-server.fieldformats.md) | | | [indexPatterns](./kibana-plugin-plugins-data-server.indexpatterns.md) | | +| [search](./kibana-plugin-plugins-data-server.search.md) | | ## Type Aliases @@ -69,5 +70,6 @@ | [ICancel](./kibana-plugin-plugins-data-server.icancel.md) | | | [IFieldFormatsRegistry](./kibana-plugin-plugins-data-server.ifieldformatsregistry.md) | | | [ISearch](./kibana-plugin-plugins-data-server.isearch.md) | | +| [ParsedInterval](./kibana-plugin-plugins-data-server.parsedinterval.md) | | | [TSearchStrategyProvider](./kibana-plugin-plugins-data-server.tsearchstrategyprovider.md) | Search strategy provider creates an instance of a search strategy with the request handler context bound to it. This way every search strategy can use whatever information they require from the request context. | diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.parsedinterval.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.parsedinterval.md new file mode 100644 index 00000000000000..c31a4ec13b8379 --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.parsedinterval.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [ParsedInterval](./kibana-plugin-plugins-data-server.parsedinterval.md) + +## ParsedInterval type + +Signature: + +```typescript +export declare type ParsedInterval = ReturnType; +``` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.search.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.search.md new file mode 100644 index 00000000000000..6020498fdcb6d0 --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.search.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [search](./kibana-plugin-plugins-data-server.search.md) + +## search variable + +Signature: + +```typescript +search: { + aggs: { + dateHistogramInterval: typeof dateHistogramInterval; + InvalidEsCalendarIntervalError: typeof InvalidEsCalendarIntervalError; + InvalidEsIntervalFormatError: typeof InvalidEsIntervalFormatError; + isValidEsInterval: typeof isValidEsInterval; + isValidInterval: typeof isValidInterval; + parseEsInterval: typeof parseEsInterval; + parseInterval: typeof parseInterval; + toAbsoluteDates: typeof toAbsoluteDates; + }; +} +``` diff --git a/docs/epm/index.asciidoc b/docs/epm/index.asciidoc new file mode 100644 index 00000000000000..46d45b85690e30 --- /dev/null +++ b/docs/epm/index.asciidoc @@ -0,0 +1,146 @@ +[role="xpack"] +[[epm]] +== Elastic Package Manager + +These are the docs for the Elastic Package Manager (EPM). + + +=== Configuration + +The Elastic Package Manager by default access `epr.elastic.co` to retrieve the package. The url can be configured with: + +``` +xpack.epm.registryUrl: 'http://localhost:8080' +``` + +=== API + +The Package Manager offers an API. Here an example on how they can be used. + +List installed packages: + +``` +curl localhost:5601/api/ingest_manager/epm/packages +``` + +Install a package: + +``` +curl -X POST localhost:5601/api/ingest_manager/epm/packages/iptables-1.0.4 +``` + +Delete a package: + +``` +curl -X DELETE localhost:5601/api/ingest_manager/epm/packages/iptables-1.0.4 +``` + +=== Definitions + +This section is to define terms used across ingest management. + +==== Elastic Agent +A single, unified agent that users can deploy to hosts or containers. It controls which data is collected from the host or containers and where the data is sent. It will run Beats, Endpoint or other monitoring programs as needed. It can operate standalone or pull a configuration policy from Fleet. + +==== Namespace +A user-specified string that will be used to part of the index name in Elasticsearch. It helps users identify logs coming from a specific environment (like prod or test), an application, or other identifiers. + +==== Package + +A package contains all the assets for the Elastic Stack. A more detailed definition of a package can be found under https://github.com/elastic/package-registry . + + +== Indexing Strategy + +Ingest Management enforces an indexing strategy to allow the system to automically detect indices and run queries on it. In short the indexing strategy looks as following: + +``` +{type}-{dataset}-{namespace} +``` + +The `{type}` can be `logs` or `metrics`. The `{namespace}` is the part where the user can use free form. The only two requirement are that it has only characters allowed in an Elasticsearch index name and does NOT contain a `-`. The `dataset` is defined by the data that is indexed. The same requirements as for the namespace apply. It is expected that the fields for type, namespace and dataset are part of each event and are constant keywords. + +Note: More `{type}`s might be added in the future like `apm` and `endpoint`. + +This indexing strategy has a few advantages: + +* Each index contains only the fields which are relevant for the dataset. This leads to more dense indices and better field completion. +* ILM policies can be applied per namespace per dataset. +* Rollups can be specified per namespace per dataset. +* Having the namespace user configurable makes setting security permissions possible. +* Having a global metrics and logs template, allows to create new indices on demand which still follow the convention. This is common in the case of k8s as an example. +* Constant keywords allow to narrow down the indices we need to access for querying very efficiently. This is especially relevant in environments which a large number of indices or with indices on slower nodes. + +=== Ingest Pipeline + +The ingest pipelines for a specific dataset will have the following naming scheme: + +``` +{type}-{dataset}-{package.version} +``` + +As an example, the ingest pipeline for the Nginx access logs is called `logs-nginx.access-3.4.1`. The same ingest pipeline is used for all namespaces. It is possible that a dataset has multiple ingest pipelines in which case a suffix is added to the name. + +The version is included in each pipeline to allow upgrades. The pipeline itself is listed in the index template and is automatically applied at ingest time. + +=== Templates & ILM Policies + +To make the above strategy possible, alias templates are required. For each type there is a basic alias template with a default ILM policy. These default templates apply to all indices which follow the indexing strategy and do not have a more specific dataset alias template. + +The `metrics` and `logs` alias template contain all the basic fields from ECS. + +Each type template contains an ILM policy. Modifying this default ILM policy will affect all data covered by the default templates. + +The templates for a dataset are called as following: + +``` +{type}-{dataset} +``` + +The pattern used inside the index template is `{type}-{dataset}-*` to match all namespaces. + +=== Defaults + +If the Elastic Agent is used to ingest data and only the type is specified, `default` for the namespace is used and `generic` for the dataset. + +=== Data filtering + +Filtering for data in queries for example in visualizations or dashboards should always be done on the constant keyword fields. Visualizations needing data for the nginx.access dataset should query on `type:logs AND dataset:nginx.access`. As these are constant keywords the prefiltering is very efficient. + +=== Security permissions + +Security permissions can be set on different levels. To set special permissions for the access on the prod namespace an index pattern as below can be used: + +``` +/(logs|metrics)-[^-]+-prod-$/ +``` + +To set specific permissions on the logs index, the following can be used: + +``` +/^(logs|metrics)-.*/ +``` + +Todo: The above queries need to be tested. + + + +== Package Manager + +=== Package Upgrades + +When upgrading a package between a bugfix or a minor version, no breaking changes should happen. Upgrading a package has the following effect: + +* Removal of existing dashboards +* Installation of new dashboards +* Write new ingest pipelines with the version +* Write new Elasticsearch alias templates +* Trigger a rollover for all the affected indices + +The new ingest pipeline is expected to still work with the data coming from older configurations. In most cases this means some of the fields can be missing. For this to work, each event must contain the version of config / package it is coming from to make such a decision. + +In case of a breaking change in the data structure, the new ingest pipeline is also expected to deal with this change. In case there are breaking changes which cannot be dealt with in an ingest pipeline, a new package has to be created. + +Each package lists its minimal required agent version. In case there are agents enrolled with an older version, the user is notified to upgrade these agents as otherwise the new configs cannot be rolled out. + + diff --git a/package.json b/package.json index a97c21164d406d..b3dcfb2aa3b0a7 100644 --- a/package.json +++ b/package.json @@ -138,6 +138,7 @@ "@kbn/test-subj-selector": "0.2.1", "@kbn/ui-framework": "1.0.0", "@kbn/ui-shared-deps": "1.0.0", + "@types/tar": "^4.0.3", "JSONStream": "1.3.5", "abortcontroller-polyfill": "^1.4.0", "angular": "^1.7.9", @@ -225,7 +226,7 @@ "prop-types": "15.6.0", "proxy-from-env": "1.0.0", "pug": "^2.0.4", - "query-string": "6.10.1", + "query-string": "5.1.1", "raw-loader": "3.1.0", "react": "^16.12.0", "react-color": "^2.13.8", @@ -454,6 +455,7 @@ "listr": "^0.14.1", "load-grunt-config": "^3.0.1", "mocha": "^6.2.2", + "mock-http-server": "1.3.0", "multistream": "^2.1.1", "murmurhash3js": "3.0.1", "mutation-observer": "^1.0.3", diff --git a/renovate.json5 b/renovate.json5 index ca2cd2e6bcd932..e4836537df703f 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -431,6 +431,14 @@ '@types/jquery', ], }, + { + groupSlug: 'js-search', + groupName: 'js-search related packages', + packageNames: [ + 'js-search', + '@types/js-search', + ], + }, { groupSlug: 'js-yaml', groupName: 'js-yaml related packages', @@ -877,6 +885,14 @@ '@types/supertest-as-promised', ], }, + { + groupSlug: 'tar', + groupName: 'tar related packages', + packageNames: [ + 'tar', + '@types/tar', + ], + }, { groupSlug: 'tar-fs', groupName: 'tar-fs related packages', diff --git a/src/core/MIGRATION.md b/src/core/MIGRATION.md index e04d45f77db5d3..1ca9b63a51d187 100644 --- a/src/core/MIGRATION.md +++ b/src/core/MIGRATION.md @@ -45,7 +45,7 @@ - [UI Exports](#ui-exports) - [How to](#how-to) - [Configure plugin](#configure-plugin) - - [Handle plugin configuration deprecations](#handle-plugin-config-deprecations) + - [Handle plugin configuration deprecations](#handle-plugin-configuration-deprecations) - [Use scoped services](#use-scoped-services) - [Declare a custom scoped service](#declare-a-custom-scoped-service) - [Mock new platform services in tests](#mock-new-platform-services-in-tests) @@ -55,7 +55,7 @@ - [Provide Legacy Platform API to the New platform plugin](#provide-legacy-platform-api-to-the-new-platform-plugin) - [On the server side](#on-the-server-side) - [On the client side](#on-the-client-side) - - [Updates an application navlink at runtime](#updates-an-app-navlink-at-runtime) + - [Updates an application navlink at runtime](#updates-an-application-navlink-at-runtime) - [Logging config migration](#logging-config-migration) Make no mistake, it is going to take a lot of work to move certain plugins to the new platform. Our target is to migrate the entire repo over to the new platform throughout 7.x and to remove the legacy plugin system no later than 8.0, and this is only possible if teams start on the effort now. @@ -1157,33 +1157,32 @@ In client code, we have a series of plugins which house shared application servi The contracts for these plugins are exposed for you to consume in your own plugin; we have created dedicated exports for the `setup` and `start` contracts in a file called `legacy`. By passing these contracts to your plugin's `setup` and `start` methods, you can mimic the functionality that will eventually be provided in the new platform. ```ts -import { setup, start } from '../core_plugins/data/public/legacy'; -import { setup, start } from '../core_plugins/embeddables/public/legacy'; import { setup, start } from '../core_plugins/visualizations/public/legacy'; ``` | Legacy Platform | New Platform | Notes | | ------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| `import 'ui/management'` | `management.sections` | | | `import 'ui/apply_filters'` | N/A. Replaced by triggering an APPLY_FILTER_TRIGGER trigger. | Directive is deprecated. | | `import 'ui/filter_bar'` | `import { FilterBar } from '../data/public'` | Directive is deprecated. | | `import 'ui/query_bar'` | `import { QueryStringInput } from '../data/public'` | Directives are deprecated. | | `import 'ui/search_bar'` | `import { SearchBar } from '../data/public'` | Directive is deprecated. | | `import 'ui/kbn_top_nav'` | `import { TopNavMenu } from '../navigation/public'` | Directive was moved to `src/plugins/kibana_legacy`. | | `ui/saved_objects/components/saved_object_finder` | `import { SavedObjectFinder } from '../saved_objects/public'` | | -| `core_plugins/interpreter` | `data.expressions` | still in progress | -| `ui/courier` | `data.search` | still in progress | -| `ui/embeddable` | `embeddables` | still in progress | -| `ui/filter_manager` | `data.filter` | -- | -| `ui/index_patterns` | `data.indexPatterns` | still in progress | -| `ui/registry/field_formats` | `data.fieldFormats` | | -| `ui/registry/feature_catalogue` | `home.featureCatalogue.register` | Must add `home` as a dependency in your kibana.json. | -| `ui/registry/vis_types` | `visualizations` | -- | -| `ui/vis` | `visualizations` | -- | -| `ui/share` | `share` | `showShareContextMenu` is now called `toggleShareContextMenu`, `ShareContextMenuExtensionsRegistryProvider` is now called `register` | -| `ui/vis/vis_factory` | `visualizations` | -- | -| `ui/vis/vis_filters` | `visualizations.filters` | -- | -| `ui/utils/parse_es_interval` | `import { parseEsInterval } from '../data/public'` | `parseEsInterval`, `ParsedInterval`, `InvalidEsCalendarIntervalError`, `InvalidEsIntervalFormatError` items were moved to the `Data Plugin` as a static code | +| `core_plugins/interpreter` | `plugins.data.expressions` | +| `ui/courier` | `plugins.data.search` | +| `ui/agg_types` | `plugins.data.search.aggs` | Most code is available for static import. Stateful code is part of the `search` service. +| `ui/embeddable` | `plugins.embeddables` | +| `ui/filter_manager` | `plugins.data.filter` | -- | +| `ui/index_patterns` | `plugins.data.indexPatterns` | +| `import 'ui/management'` | `plugins.management.sections` | | +| `ui/registry/field_formats` | `plugins.data.fieldFormats` | | +| `ui/registry/feature_catalogue` | `plugins.home.featureCatalogue.register` | Must add `home` as a dependency in your kibana.json. | +| `ui/registry/vis_types` | `plugins.visualizations` | -- | +| `ui/vis` | `plugins.visualizations` | -- | +| `ui/share` | `plugins.share` | `showShareContextMenu` is now called `toggleShareContextMenu`, `ShareContextMenuExtensionsRegistryProvider` is now called `register` | +| `ui/vis/vis_factory` | `plugins.visualizations` | -- | +| `ui/vis/vis_filters` | `plugins.visualizations.filters` | -- | +| `ui/utils/parse_es_interval` | `import { search: { aggs: { parseEsInterval } } } from '../data/public'` | `parseEsInterval`, `ParsedInterval`, `InvalidEsCalendarIntervalError`, `InvalidEsIntervalFormatError` items were moved to the `Data Plugin` as a static code | #### Server-side @@ -1199,13 +1198,13 @@ In server code, `core` can be accessed from either `server.newPlatform` or `kbnS | `request.getBasePath()` | [`core.http.basePath.get`](/docs/development/core/server/kibana-plugin-server.httpservicesetup.basepath.md) | | | `server.plugins.elasticsearch.getCluster('data')` | [`context.core.elasticsearch.dataClient`](/docs/development/core/server/kibana-plugin-server.iscopedclusterclient.md) | | | `server.plugins.elasticsearch.getCluster('admin')` | [`context.core.elasticsearch.adminClient`](/docs/development/core/server/kibana-plugin-server.iscopedclusterclient.md) | | -| `server.plugins.elasticsearch.createCluster(...)` | [`core.elasticsearch.createClient`](/docs/development/core/server/kibana-plugin-server.elasticsearchservicesetup.createclient.md) | | +| `server.plugins.elasticsearch.createCluster(...)` | [`core.elasticsearch.legacy.createClient`](/docs/development/core/server/kibana-plugin-server.elasticsearchservicestart.legacy.md) | | | `server.savedObjects.setScopedSavedObjectsClientFactory` | [`core.savedObjects.setClientFactoryProvider`](/docs/development/core/server/kibana-plugin-server.savedobjectsservicesetup.setclientfactoryprovider.md) | | | `server.savedObjects.addScopedSavedObjectsClientWrapperFactory` | [`core.savedObjects.addClientWrapper`](/docs/development/core/server/kibana-plugin-server.savedobjectsservicesetup.addclientwrapper.md) | | | `server.savedObjects.getSavedObjectsRepository` | [`core.savedObjects.createInternalRepository`](/docs/development/core/server/kibana-plugin-server.savedobjectsservicestart.createinternalrepository.md) [`core.savedObjects.createScopedRepository`](/docs/development/core/server/kibana-plugin-server.savedobjectsservicestart.createscopedrepository.md) | | | `server.savedObjects.getScopedSavedObjectsClient` | [`core.savedObjects.getScopedClient`](/docs/development/core/server/kibana-plugin-server.savedobjectsservicestart.getscopedclient.md) | | | `request.getSavedObjectsClient` | [`context.core.savedObjects.client`](/docs/development/core/server/kibana-plugin-server.requesthandlercontext.core.md) | | -| `request.getUiSettingsService` | [`context.uiSettings.client`](/docs/development/core/server/kibana-plugin-server.iuisettingsclient.md) | | +| `request.getUiSettingsService` | [`context.core.uiSettings.client`](/docs/development/core/server/kibana-plugin-server.iuisettingsclient.md) | | | `kibana.Plugin.deprecations` | [Handle plugin configuration deprecations](#handle-plugin-config-deprecations) and [`PluginConfigDescriptor.deprecations`](docs/development/core/server/kibana-plugin-server.pluginconfigdescriptor.md) | Deprecations from New Platform are not applied to legacy configuration | | `kibana.Plugin.savedObjectSchemas` | [`core.savedObjects.registerType`](docs/development/core/server/kibana-plugin-server.savedobjectsservicesetup.registertype.md) | [Examples](./MIGRATION_EXAMPLES.md#saved-objects-types) | | `kibana.Plugin.mappings` | [`core.savedObjects.registerType`](docs/development/core/server/kibana-plugin-server.savedobjectsservicesetup.registertype.md) | [Examples](./MIGRATION_EXAMPLES.md#saved-objects-types) | @@ -1262,7 +1261,7 @@ This table shows where these uiExports have moved to in the New Platform. In mos | `validations` | | Part of SavedObjects, see [#33587](https://github.com/elastic/kibana/issues/33587) | | `visEditorTypes` | | | | `visTypeEnhancers` | | | -| `visTypes` | | | +| `visTypes` | `plugins.visualizations.types` | | | `visualize` | | | Examples: diff --git a/src/core/public/public.api.md b/src/core/public/public.api.md index f71a50e2927d88..69668176a397e7 100644 --- a/src/core/public/public.api.md +++ b/src/core/public/public.api.md @@ -735,8 +735,10 @@ export interface IContextContainer> { registerContext>(pluginOpaqueId: PluginOpaqueId, contextName: TContextName, provider: IContextProvider): this; } +// Warning: (ae-forgotten-export) The symbol "PartialExceptFor" needs to be exported by the entry point index.d.ts +// // @public -export type IContextProvider, TContextName extends keyof HandlerContextType> = (context: Partial>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; +export type IContextProvider, TContextName extends keyof HandlerContextType> = (context: PartialExceptFor, 'core'>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; // @public (undocumented) export interface IHttpFetchError extends Error { diff --git a/src/core/server/elasticsearch/elasticsearch_service.mock.ts b/src/core/server/elasticsearch/elasticsearch_service.mock.ts index b8ad3754965449..389d98a0818c8e 100644 --- a/src/core/server/elasticsearch/elasticsearch_service.mock.ts +++ b/src/core/server/elasticsearch/elasticsearch_service.mock.ts @@ -22,7 +22,11 @@ import { IClusterClient, ICustomClusterClient } from './cluster_client'; import { IScopedClusterClient } from './scoped_cluster_client'; import { ElasticsearchConfig } from './elasticsearch_config'; import { ElasticsearchService } from './elasticsearch_service'; -import { InternalElasticsearchServiceSetup, ElasticsearchServiceSetup } from './types'; +import { + InternalElasticsearchServiceSetup, + ElasticsearchServiceSetup, + ElasticsearchServiceStart, +} from './types'; import { NodesVersionCompatibility } from './version_check/ensure_es_version'; const createScopedClusterClientMock = (): jest.Mocked => ({ @@ -63,6 +67,26 @@ const createSetupContractMock = () => { return setupContract; }; +type MockedElasticSearchServiceStart = { + legacy: jest.Mocked; +} & { + legacy: { + client: jest.Mocked; + }; +}; + +const createStartContractMock = () => { + const startContract: MockedElasticSearchServiceStart = { + legacy: { + createClient: jest.fn(), + client: createClusterClientMock(), + }, + }; + startContract.legacy.createClient.mockReturnValue(createCustomClusterClientMock()); + startContract.legacy.client.asScoped.mockReturnValue(createScopedClusterClientMock()); + return startContract; +}; + type MockedInternalElasticSearchServiceSetup = jest.Mocked< InternalElasticsearchServiceSetup & { adminClient: jest.Mocked; @@ -95,6 +119,7 @@ const createMock = () => { stop: jest.fn(), }; mocked.setup.mockResolvedValue(createInternalSetupContractMock()); + mocked.start.mockResolvedValueOnce(createStartContractMock()); mocked.stop.mockResolvedValue(); return mocked; }; @@ -103,6 +128,7 @@ export const elasticsearchServiceMock = { create: createMock, createInternalSetup: createInternalSetupContractMock, createSetup: createSetupContractMock, + createStart: createStartContractMock, createClusterClient: createClusterClientMock, createCustomClusterClient: createCustomClusterClientMock, createScopedClusterClient: createScopedClusterClientMock, diff --git a/src/core/server/elasticsearch/elasticsearch_service.ts b/src/core/server/elasticsearch/elasticsearch_service.ts index 6616b42f136c04..b92a6edf778ed0 100644 --- a/src/core/server/elasticsearch/elasticsearch_service.ts +++ b/src/core/server/elasticsearch/elasticsearch_service.ts @@ -37,7 +37,7 @@ import { ClusterClient, ScopeableRequest } from './cluster_client'; import { ElasticsearchClientConfig } from './elasticsearch_client_config'; import { ElasticsearchConfig, ElasticsearchConfigType } from './elasticsearch_config'; import { InternalHttpServiceSetup, GetAuthHeaders } from '../http/'; -import { InternalElasticsearchServiceSetup } from './types'; +import { InternalElasticsearchServiceSetup, ElasticsearchServiceStart } from './types'; import { CallAPIOptions } from './api_types'; import { pollEsNodesVersion } from './version_check/ensure_es_version'; @@ -53,12 +53,16 @@ interface SetupDeps { } /** @internal */ -export class ElasticsearchService implements CoreService { +export class ElasticsearchService + implements CoreService { private readonly log: Logger; private readonly config$: Observable; private subscription: Subscription | undefined; private stop$ = new Subject(); private kibanaVersion: string; + createClient: InternalElasticsearchServiceSetup['createClient'] | undefined; + dataClient: InternalElasticsearchServiceSetup['dataClient'] | undefined; + adminClient: InternalElasticsearchServiceSetup['adminClient'] | undefined; constructor(private readonly coreContext: CoreContext) { this.kibanaVersion = coreContext.env.packageInfo.version; @@ -111,7 +115,7 @@ export class ElasticsearchService implements CoreService clients.adminClient)); const dataClient$ = clients$.pipe(map(clients => clients.dataClient)); - const adminClient = { + this.adminClient = { async callAsInternalUser( endpoint: string, clientParams: Record = {}, @@ -120,9 +124,9 @@ export class ElasticsearchService implements CoreService { return { - callAsInternalUser: adminClient.callAsInternalUser, + callAsInternalUser: this.adminClient!.callAsInternalUser, async callAsCurrentUser( endpoint: string, clientParams: Record = {}, @@ -136,6 +140,7 @@ export class ElasticsearchService implements CoreService = {}) => { + const finalConfig = merge({}, config, clientConfig); + return this.createClusterClient(type, finalConfig, deps.http.getAuthHeaders); + }; + return { legacy: { config$: clients$.pipe(map(clients => clients.config)) }, - - adminClient, - dataClient, esNodesCompatibility$, - - createClient: (type: string, clientConfig: Partial = {}) => { - const finalConfig = merge({}, config, clientConfig); - return this.createClusterClient(type, finalConfig, deps.http.getAuthHeaders); - }, + adminClient: this.adminClient, + dataClient, + createClient: this.createClient, }; } - public async start() {} + public async start() { + if (typeof this.adminClient === 'undefined' || typeof this.createClient === 'undefined') { + throw new Error('ElasticsearchService needs to be setup before calling start'); + } else { + return { + legacy: { + client: this.adminClient, + createClient: this.createClient, + }, + }; + } + } public async stop() { this.log.debug('Stopping elasticsearch service'); diff --git a/src/core/server/elasticsearch/types.ts b/src/core/server/elasticsearch/types.ts index 90cfdcc035d8e4..ef8edecfd26ec6 100644 --- a/src/core/server/elasticsearch/types.ts +++ b/src/core/server/elasticsearch/types.ts @@ -28,6 +28,9 @@ import { NodesVersionCompatibility } from './version_check/ensure_es_version'; */ export interface ElasticsearchServiceSetup { /** + * @deprecated + * Use {@link ElasticsearchServiceStart.legacy | ElasticsearchServiceStart.legacy.createClient} instead. + * * Create application specific Elasticsearch cluster API client with customized config. See {@link IClusterClient}. * * @param type Unique identifier of the client @@ -50,6 +53,9 @@ export interface ElasticsearchServiceSetup { ) => ICustomClusterClient; /** + * @deprecated + * Use {@link ElasticsearchServiceStart.legacy | ElasticsearchServiceStart.legacy.client} instead. + * * A client for the `admin` cluster. All Elasticsearch config value changes are processed under the hood. * See {@link IClusterClient}. * @@ -61,6 +67,9 @@ export interface ElasticsearchServiceSetup { readonly adminClient: IClusterClient; /** + * @deprecated + * Use {@link ElasticsearchServiceStart.legacy | ElasticsearchServiceStart.legacy.client} instead. + * * A client for the `data` cluster. All Elasticsearch config value changes are processed under the hood. * See {@link IClusterClient}. * @@ -72,6 +81,46 @@ export interface ElasticsearchServiceSetup { readonly dataClient: IClusterClient; } +/** + * @public + */ +export interface ElasticsearchServiceStart { + legacy: { + /** + * Create application specific Elasticsearch cluster API client with customized config. See {@link IClusterClient}. + * + * @param type Unique identifier of the client + * @param clientConfig A config consists of Elasticsearch JS client options and + * valid sub-set of Elasticsearch service config. + * We fill all the missing properties in the `clientConfig` using the default + * Elasticsearch config so that we don't depend on default values set and + * controlled by underlying Elasticsearch JS client. + * We don't run validation against the passed config and expect it to be valid. + * + * @example + * ```js + * const client = elasticsearch.createCluster('my-app-name', config); + * const data = await client.callAsInternalUser(); + * ``` + */ + readonly createClient: ( + type: string, + clientConfig?: Partial + ) => ICustomClusterClient; + + /** + * A pre-configured Elasticsearch client. All Elasticsearch config value changes are processed under the hood. + * See {@link IClusterClient}. + * + * @example + * ```js + * const client = core.elasticsearch.client; + * ``` + */ + readonly client: IClusterClient; + }; +} + /** @internal */ export interface InternalElasticsearchServiceSetup extends ElasticsearchServiceSetup { // Required for the BWC with the legacy Kibana only. diff --git a/src/core/server/index.ts b/src/core/server/index.ts index e2faf49ba7a9e0..4a1ac8988e4e5e 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -43,6 +43,7 @@ import { ElasticsearchServiceSetup, IScopedClusterClient, configSchema as elasticsearchConfigSchema, + ElasticsearchServiceStart, } from './elasticsearch'; import { HttpServiceSetup } from './http'; @@ -93,6 +94,7 @@ export { ElasticsearchError, ElasticsearchErrorHelpers, ElasticsearchServiceSetup, + ElasticsearchServiceStart, APICaller, FakeRequest, ScopeableRequest, @@ -366,6 +368,8 @@ export interface CoreSetup { export interface CoreStart { /** {@link CapabilitiesStart} */ capabilities: CapabilitiesStart; + /** {@link ElasticsearchServiceStart} */ + elasticsearch: ElasticsearchServiceStart; /** {@link SavedObjectsServiceStart} */ savedObjects: SavedObjectsServiceStart; /** {@link UiSettingsServiceStart} */ diff --git a/src/core/server/internal_types.ts b/src/core/server/internal_types.ts index 37d1061dc618dc..825deea99bc230 100644 --- a/src/core/server/internal_types.ts +++ b/src/core/server/internal_types.ts @@ -22,7 +22,7 @@ import { Type } from '@kbn/config-schema'; import { CapabilitiesSetup, CapabilitiesStart } from './capabilities'; import { ConfigDeprecationProvider } from './config'; import { ContextSetup } from './context'; -import { InternalElasticsearchServiceSetup } from './elasticsearch'; +import { InternalElasticsearchServiceSetup, ElasticsearchServiceStart } from './elasticsearch'; import { InternalHttpServiceSetup } from './http'; import { InternalSavedObjectsServiceSetup, @@ -49,6 +49,7 @@ export interface InternalCoreSetup { */ export interface InternalCoreStart { capabilities: CapabilitiesStart; + elasticsearch: ElasticsearchServiceStart; savedObjects: InternalSavedObjectsServiceStart; uiSettings: InternalUiSettingsServiceStart; } diff --git a/src/core/server/legacy/legacy_service.test.ts b/src/core/server/legacy/legacy_service.test.ts index 50468db8a504de..94e86c39289bcf 100644 --- a/src/core/server/legacy/legacy_service.test.ts +++ b/src/core/server/legacy/legacy_service.test.ts @@ -47,6 +47,7 @@ import { metricsServiceMock } from '../metrics/metrics_service.mock'; import { findLegacyPluginSpecs } from './plugins'; import { LegacyVars, LegacyServiceSetupDeps, LegacyServiceStartDeps } from './types'; import { LegacyService } from './legacy_service'; +import { coreMock } from '../mocks'; const MockKbnServer: jest.Mock = KbnServer as any; @@ -102,9 +103,8 @@ beforeEach(() => { startDeps = { core: { - capabilities: capabilitiesServiceMock.createStartContract(), + ...coreMock.createStart(), savedObjects: savedObjectsServiceMock.createInternalStartContract(), - uiSettings: uiSettingsServiceMock.createStartContract(), plugins: { contracts: new Map() }, }, plugins: {}, diff --git a/src/core/server/legacy/legacy_service.ts b/src/core/server/legacy/legacy_service.ts index f67148d720446a..b19a991fdf0d15 100644 --- a/src/core/server/legacy/legacy_service.ts +++ b/src/core/server/legacy/legacy_service.ts @@ -258,6 +258,7 @@ export class LegacyService implements CoreService { ) { const coreStart: CoreStart = { capabilities: startDeps.core.capabilities, + elasticsearch: startDeps.core.elasticsearch, savedObjects: { getScopedClient: startDeps.core.savedObjects.getScopedClient, createScopedRepository: startDeps.core.savedObjects.createScopedRepository, diff --git a/src/core/server/mocks.ts b/src/core/server/mocks.ts index a0bbe623289d8a..2aa35dff563f05 100644 --- a/src/core/server/mocks.ts +++ b/src/core/server/mocks.ts @@ -141,6 +141,7 @@ function createCoreSetupMock() { function createCoreStartMock() { const mock: MockedKeys = { capabilities: capabilitiesServiceMock.createStartContract(), + elasticsearch: elasticsearchServiceMock.createStart(), savedObjects: savedObjectsServiceMock.createStartContract(), uiSettings: uiSettingsServiceMock.createStartContract(), }; @@ -165,6 +166,7 @@ function createInternalCoreSetupMock() { function createInternalCoreStartMock() { const startDeps: InternalCoreStart = { capabilities: capabilitiesServiceMock.createStartContract(), + elasticsearch: elasticsearchServiceMock.createStart(), savedObjects: savedObjectsServiceMock.createInternalStartContract(), uiSettings: uiSettingsServiceMock.createStartContract(), }; diff --git a/src/core/server/plugins/plugin_context.ts b/src/core/server/plugins/plugin_context.ts index b430fd28fb896c..32662f07a86f02 100644 --- a/src/core/server/plugins/plugin_context.ts +++ b/src/core/server/plugins/plugin_context.ts @@ -206,6 +206,7 @@ export function createPluginStartContext( capabilities: { resolveCapabilities: deps.capabilities.resolveCapabilities, }, + elasticsearch: deps.elasticsearch, savedObjects: { getScopedClient: deps.savedObjects.getScopedClient, createInternalRepository: deps.savedObjects.createInternalRepository, diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index 5ede98a1e6e6da..9cd0c26ea24975 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -647,6 +647,8 @@ export interface CoreStart { // (undocumented) capabilities: CapabilitiesStart; // (undocumented) + elasticsearch: ElasticsearchServiceStart; + // (undocumented) savedObjects: SavedObjectsServiceStart; // (undocumented) uiSettings: UiSettingsServiceStart; @@ -774,11 +776,23 @@ export class ElasticsearchErrorHelpers { // @public (undocumented) export interface ElasticsearchServiceSetup { + // @deprecated (undocumented) readonly adminClient: IClusterClient; + // @deprecated (undocumented) readonly createClient: (type: string, clientConfig?: Partial) => ICustomClusterClient; + // @deprecated (undocumented) readonly dataClient: IClusterClient; } +// @public (undocumented) +export interface ElasticsearchServiceStart { + // (undocumented) + legacy: { + readonly createClient: (type: string, clientConfig?: Partial) => ICustomClusterClient; + readonly client: IClusterClient; + }; +} + // @public (undocumented) export interface EnvironmentMode { // (undocumented) @@ -882,8 +896,10 @@ export interface IContextContainer> { registerContext>(pluginOpaqueId: PluginOpaqueId, contextName: TContextName, provider: IContextProvider): this; } +// Warning: (ae-forgotten-export) The symbol "PartialExceptFor" needs to be exported by the entry point index.d.ts +// // @public -export type IContextProvider, TContextName extends keyof HandlerContextType> = (context: Partial>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; +export type IContextProvider, TContextName extends keyof HandlerContextType> = (context: PartialExceptFor, 'core'>, ...rest: HandlerParameters) => Promise[TContextName]> | HandlerContextType[TContextName]; // @public export interface ICspConfig { diff --git a/src/core/server/server.ts b/src/core/server/server.ts index 792227a05e248e..2402504f717ca4 100644 --- a/src/core/server/server.ts +++ b/src/core/server/server.ts @@ -177,19 +177,17 @@ export class Server { const savedObjectsStart = await this.savedObjects.start({}); const capabilitiesStart = this.capabilities.start(); const uiSettingsStart = await this.uiSettings.start(); - - const pluginsStart = await this.plugins.start({ - capabilities: capabilitiesStart, - savedObjects: savedObjectsStart, - uiSettings: uiSettingsStart, - }); + const elasticsearchStart = await this.elasticsearch.start(); this.coreStart = { capabilities: capabilitiesStart, + elasticsearch: elasticsearchStart, savedObjects: savedObjectsStart, uiSettings: uiSettingsStart, }; + const pluginsStart = await this.plugins.start(this.coreStart!); + await this.legacy.start({ core: { ...this.coreStart, diff --git a/src/core/utils/context.ts b/src/core/utils/context.ts index 775c8906754100..de311f91d56fa4 100644 --- a/src/core/utils/context.ts +++ b/src/core/utils/context.ts @@ -22,6 +22,11 @@ import { ShallowPromise } from '@kbn/utility-types'; import { pick } from '.'; import { CoreId, PluginOpaqueId } from '../server'; +/** + * Make all properties in T optional, except for the properties whose keys are in the union K + */ +type PartialExceptFor = Partial & Pick; + /** * A function that returns a context value for a specific key of given context type. * @@ -39,7 +44,8 @@ export type IContextProvider< THandler extends HandlerFunction, TContextName extends keyof HandlerContextType > = ( - context: Partial>, + // context.core will always be available, but plugin contexts are typed as optional + context: PartialExceptFor, 'core'>, ...rest: HandlerParameters ) => | Promise[TContextName]> @@ -261,7 +267,7 @@ export class ContextContainer> // registered that provider. const exposedContext = pick(resolvedContext, [ ...this.getContextNamesForSource(providerSource), - ]) as Partial>; + ]) as PartialExceptFor, 'core'>; return { ...resolvedContext, diff --git a/src/legacy/core_plugins/dashboard_embeddable_container/package.json b/src/legacy/core_plugins/dashboard_embeddable_container/package.json deleted file mode 100644 index 7555895e8d71ba..00000000000000 --- a/src/legacy/core_plugins/dashboard_embeddable_container/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "dashboard_embeddable_container", - "version": "kibana" -} diff --git a/src/legacy/core_plugins/dashboard_embeddable_container/public/initialize.ts b/src/legacy/core_plugins/dashboard_embeddable_container/public/initialize.ts deleted file mode 100644 index 9880b336e76e5c..00000000000000 --- a/src/legacy/core_plugins/dashboard_embeddable_container/public/initialize.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ diff --git a/src/legacy/core_plugins/data/index.ts b/src/legacy/core_plugins/data/index.ts index 428f0c305a375e..813eab00f72582 100644 --- a/src/legacy/core_plugins/data/index.ts +++ b/src/legacy/core_plugins/data/index.ts @@ -35,7 +35,6 @@ export default function DataPlugin(kibana: any) { }, init: (server: Legacy.Server) => ({}), uiExports: { - interpreter: ['plugins/data/search/expressions/boot'], injectDefaultVars: () => ({}), mappings, savedObjectsManagement: { diff --git a/src/legacy/core_plugins/data/public/index.ts b/src/legacy/core_plugins/data/public/index.ts index 61d8621a368433..27a3dd825485da 100644 --- a/src/legacy/core_plugins/data/public/index.ts +++ b/src/legacy/core_plugins/data/public/index.ts @@ -17,62 +17,10 @@ * under the License. */ -// /// Define plugin function import { DataPlugin as Plugin } from './plugin'; export function plugin() { return new Plugin(); } -// /// Export types & static code - -/** @public types */ export { DataSetup, DataStart } from './plugin'; -export { - // agg_types - AggParam, // only the type is used externally, only in vis editor - AggParamOption, // only the type is used externally - DateRangeKey, // only used in field formatter deserialization, which will live in data - IAggConfig, - IAggConfigs, - IAggType, - IFieldParamType, - IMetricAggType, - IpRangeKey, // only used in field formatter deserialization, which will live in data - OptionedParamEditorProps, // only type is used externally - OptionedValueProp, // only type is used externally -} from './search/types'; - -/** @public static code */ -export * from '../common'; -export { - // agg_types TODO need to group these under a namespace or prefix - AggConfigs, - AggParamType, - AggTypeFilters, // TODO convert to interface - aggTypeFilters, - AggTypeFieldFilters, // TODO convert to interface - AggGroupNames, - aggGroupNamesMap, - BUCKET_TYPES, - CidrMask, - convertDateRangeToString, - convertIPRangeToString, - intervalOptions, // only used in Discover - isDateHistogramBucketAggConfig, - isStringType, - isType, - isValidInterval, - METRIC_TYPES, - OptionedParamType, - parentPipelineType, - propFilter, - siblingPipelineType, - termsAggFilter, - toAbsoluteDates, - // search_source - getRequestInspectorStats, - getResponseInspectorStats, - tabifyAggResponse, - tabifyGetColumns, -} from './search'; diff --git a/src/legacy/core_plugins/data/public/legacy.ts b/src/legacy/core_plugins/data/public/legacy.ts index d37c17c2240727..370b412127db88 100644 --- a/src/legacy/core_plugins/data/public/legacy.ts +++ b/src/legacy/core_plugins/data/public/legacy.ts @@ -39,6 +39,6 @@ import { plugin } from '.'; const dataPlugin = plugin(); -export const setup = dataPlugin.setup(npSetup.core, npSetup.plugins); +export const setup = dataPlugin.setup(npSetup.core); -export const start = dataPlugin.start(npStart.core, npStart.plugins); +export const start = dataPlugin.start(npStart.core); diff --git a/src/legacy/core_plugins/data/public/plugin.ts b/src/legacy/core_plugins/data/public/plugin.ts index f40cda8760bc7a..76a3d92d202832 100644 --- a/src/legacy/core_plugins/data/public/plugin.ts +++ b/src/legacy/core_plugins/data/public/plugin.ts @@ -18,73 +18,20 @@ */ import { CoreSetup, CoreStart, Plugin } from 'kibana/public'; -import { DataPublicPluginStart, DataPublicPluginSetup } from '../../../../plugins/data/public'; -import { ExpressionsSetup } from '../../../../plugins/expressions/public'; - -import { - setIndexPatterns, - setQueryService, - setUiSettings, - setInjectedMetadata, - setFieldFormats, - setSearchService, - setOverlays, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../plugins/data/public/services'; -import { setSearchServiceShim } from './services'; -import { - selectRangeAction, - SelectRangeActionContext, - ACTION_SELECT_RANGE, -} from './actions/select_range_action'; -import { - valueClickAction, - ACTION_VALUE_CLICK, - ValueClickActionContext, -} from './actions/value_click_action'; -import { - SELECT_RANGE_TRIGGER, - VALUE_CLICK_TRIGGER, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../plugins/embeddable/public/lib/triggers'; -import { UiActionsSetup, UiActionsStart } from '../../../../plugins/ui_actions/public'; - -import { SearchSetup, SearchStart, SearchService } from './search/search_service'; - -export interface DataPluginSetupDependencies { - data: DataPublicPluginSetup; - expressions: ExpressionsSetup; - uiActions: UiActionsSetup; -} - -export interface DataPluginStartDependencies { - data: DataPublicPluginStart; - uiActions: UiActionsStart; -} /** * Interface for this plugin's returned `setup` contract. * * @public */ -export interface DataSetup { - search: SearchSetup; -} +export interface DataSetup {} // eslint-disable-line @typescript-eslint/no-empty-interface /** * Interface for this plugin's returned `start` contract. * * @public */ -export interface DataStart { - search: SearchStart; -} -declare module '../../../../plugins/ui_actions/public' { - export interface ActionContextMapping { - [ACTION_SELECT_RANGE]: SelectRangeActionContext; - [ACTION_VALUE_CLICK]: ValueClickActionContext; - } -} +export interface DataStart {} // eslint-disable-line @typescript-eslint/no-empty-interface /** * Data Plugin - public @@ -98,43 +45,13 @@ declare module '../../../../plugins/ui_actions/public' { * or static code. */ -export class DataPlugin - implements - Plugin { - private readonly search = new SearchService(); - - public setup(core: CoreSetup, { data, uiActions }: DataPluginSetupDependencies) { - setInjectedMetadata(core.injectedMetadata); - - uiActions.attachAction( - SELECT_RANGE_TRIGGER, - selectRangeAction(data.query.filterManager, data.query.timefilter.timefilter) - ); - - uiActions.attachAction( - VALUE_CLICK_TRIGGER, - valueClickAction(data.query.filterManager, data.query.timefilter.timefilter) - ); - - return { - search: this.search.setup(core), - }; +export class DataPlugin implements Plugin { + public setup(core: CoreSetup) { + return {}; } - public start(core: CoreStart, { data, uiActions }: DataPluginStartDependencies): DataStart { - const search = this.search.start(core); - setSearchServiceShim(search); - - setUiSettings(core.uiSettings); - setQueryService(data.query); - setIndexPatterns(data.indexPatterns); - setFieldFormats(data.fieldFormats); - setSearchService(data.search); - setOverlays(core.overlays); - - return { - search, - }; + public start(core: CoreStart): DataStart { + return {}; } public stop() {} diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/filters.ts b/src/legacy/core_plugins/data/public/search/aggs/buckets/filters.ts deleted file mode 100644 index 2852f3e4bdf464..00000000000000 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/filters.ts +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import _ from 'lodash'; -import { i18n } from '@kbn/i18n'; - -import chrome from 'ui/chrome'; - -import { createFilterFilters } from './create_filter/filters'; -import { toAngularJSON } from '../utils'; -import { BucketAggType } from './_bucket_agg_type'; -import { BUCKET_TYPES } from './bucket_agg_types'; -import { Storage } from '../../../../../../../plugins/kibana_utils/public'; - -import { getQueryLog, esQuery, Query } from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getUiSettings } from '../../../../../../../plugins/data/public/services'; - -const config = chrome.getUiSettingsClient(); - -const filtersTitle = i18n.translate('data.search.aggs.buckets.filtersTitle', { - defaultMessage: 'Filters', - description: - 'The name of an aggregation, that allows to specify multiple individual filters to group data by.', -}); - -interface FilterValue { - input: Query; - label: string; - id: string; -} - -export const filtersBucketAgg = new BucketAggType({ - name: BUCKET_TYPES.FILTERS, - title: filtersTitle, - createFilter: createFilterFilters, - customLabels: false, - params: [ - { - name: 'filters', - // TODO need to get rid of reference to `config` below - default: [{ input: { query: '', language: config.get('search:queryLanguage') }, label: '' }], - write(aggConfig, output) { - const uiSettings = getUiSettings(); - const inFilters: FilterValue[] = aggConfig.params.filters; - if (!_.size(inFilters)) return; - - inFilters.forEach(filter => { - const persistedLog = getQueryLog( - uiSettings, - new Storage(window.localStorage), - 'vis_default_editor', - filter.input.language - ); - persistedLog.add(filter.input.query); - }); - - const outFilters = _.transform( - inFilters, - function(filters, filter) { - const input = _.cloneDeep(filter.input); - - if (!input) { - console.log('malformed filter agg params, missing "input" query'); // eslint-disable-line no-console - return; - } - - const esQueryConfigs = esQuery.getEsQueryConfig(uiSettings); - const query = esQuery.buildEsQuery( - aggConfig.getIndexPattern(), - [input], - [], - esQueryConfigs - ); - - if (!query) { - console.log('malformed filter agg params, missing "query" on input'); // eslint-disable-line no-console - return; - } - - const matchAllLabel = filter.input.query === '' ? '*' : ''; - const label = - filter.label || - matchAllLabel || - (typeof filter.input.query === 'string' - ? filter.input.query - : toAngularJSON(filter.input.query)); - filters[label] = { query }; - }, - {} - ); - - if (!_.size(outFilters)) return; - - const params = output.params || (output.params = {}); - params.filters = outFilters; - }, - }, - ], -}); diff --git a/src/legacy/core_plugins/data/public/search/aggs/index.ts b/src/legacy/core_plugins/data/public/search/aggs/index.ts deleted file mode 100644 index 75d632a0f931f2..00000000000000 --- a/src/legacy/core_plugins/data/public/search/aggs/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { - AggTypesRegistry, - AggTypesRegistrySetup, - AggTypesRegistryStart, -} from './agg_types_registry'; -export { AggType } from './agg_type'; -export { aggTypes } from './agg_types'; -export { AggConfig } from './agg_config'; -export { AggConfigs } from './agg_configs'; -export { FieldParamType } from './param_types'; -export { getCalculateAutoTimeExpression } from './buckets/lib/date_utils'; -export { MetricAggType } from './metrics/metric_agg_type'; -export { AggTypeFilters } from './filter'; -export { aggTypeFieldFilters, AggTypeFieldFilters } from './param_types/filter'; -export { - parentPipelineAggHelper, - parentPipelineType, -} from './metrics/lib/parent_pipeline_agg_helper'; -export { - siblingPipelineAggHelper, - siblingPipelineType, -} from './metrics/lib/sibling_pipeline_agg_helper'; - -// static code -export { AggParamType } from './param_types/agg'; -export { AggGroupNames, aggGroupNamesMap } from './agg_groups'; -export { intervalOptions } from './buckets/_interval_options'; // only used in Discover -export { isDateHistogramBucketAggConfig } from './buckets/date_histogram'; -export { termsAggFilter } from './buckets/terms'; -export { isType, isStringType } from './buckets/migrate_include_exclude_format'; -export { CidrMask } from './buckets/lib/cidr_mask'; -export { convertDateRangeToString } from './buckets/date_range'; -export { toAbsoluteDates } from './buckets/lib/date_utils'; -export { convertIPRangeToString } from './buckets/ip_range'; -export { aggTypeFilters, propFilter } from './filter'; -export { OptionedParamType } from './param_types/optioned'; -export { isValidInterval } from './utils'; -export { BUCKET_TYPES } from './buckets/bucket_agg_types'; -export { METRIC_TYPES } from './metrics/metric_agg_types'; - -// types -export { CreateAggConfigParams, IAggConfig, IAggConfigs } from './types'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/types.ts b/src/legacy/core_plugins/data/public/search/aggs/types.ts deleted file mode 100644 index 069a933fd994a6..00000000000000 --- a/src/legacy/core_plugins/data/public/search/aggs/types.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { IAggConfig } from './agg_config'; -export { CreateAggConfigParams, IAggConfigs } from './agg_configs'; -export { IAggType } from './agg_type'; -export { AggParam, AggParamOption } from './agg_params'; -export { IFieldParamType } from './param_types'; -export { IMetricAggType } from './metrics/metric_agg_type'; -export { DateRangeKey } from './buckets/date_range'; -export { IpRangeKey } from './buckets/ip_range'; -export { OptionedValueProp, OptionedParamEditorProps } from './param_types/optioned'; diff --git a/src/legacy/core_plugins/data/public/search/index.ts b/src/legacy/core_plugins/data/public/search/index.ts deleted file mode 100644 index 96d2825559da26..00000000000000 --- a/src/legacy/core_plugins/data/public/search/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export * from './aggs'; -export { getRequestInspectorStats, getResponseInspectorStats } from './utils'; -export { serializeAggConfig } from './expressions/utils'; -export { tabifyAggResponse, tabifyGetColumns } from './tabify'; diff --git a/src/legacy/core_plugins/data/public/search/search_service.ts b/src/legacy/core_plugins/data/public/search/search_service.ts deleted file mode 100644 index 2d01ac446d9513..00000000000000 --- a/src/legacy/core_plugins/data/public/search/search_service.ts +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { CoreSetup, CoreStart } from '../../../../../core/public'; -import { IndexPattern } from '../../../../../plugins/data/public'; -import { - aggTypes, - AggType, - AggTypesRegistry, - AggTypesRegistrySetup, - AggTypesRegistryStart, - AggConfig, - AggConfigs, - CreateAggConfigParams, - FieldParamType, - getCalculateAutoTimeExpression, - MetricAggType, - aggTypeFieldFilters, - parentPipelineAggHelper, - siblingPipelineAggHelper, -} from './aggs'; - -interface AggsSetup { - calculateAutoTimeExpression: ReturnType; - types: AggTypesRegistrySetup; -} - -interface AggsStartLegacy { - AggConfig: typeof AggConfig; - AggType: typeof AggType; - aggTypeFieldFilters: typeof aggTypeFieldFilters; - FieldParamType: typeof FieldParamType; - MetricAggType: typeof MetricAggType; - parentPipelineAggHelper: typeof parentPipelineAggHelper; - siblingPipelineAggHelper: typeof siblingPipelineAggHelper; -} - -interface AggsStart { - calculateAutoTimeExpression: ReturnType; - createAggConfigs: ( - indexPattern: IndexPattern, - configStates?: CreateAggConfigParams[], - schemas?: Record - ) => InstanceType; - types: AggTypesRegistryStart; - __LEGACY: AggsStartLegacy; -} - -export interface SearchSetup { - aggs: AggsSetup; -} - -export interface SearchStart { - aggs: AggsStart; -} - -/** - * The contract provided here is a new platform shim for ui/agg_types. - * - * Once it has been refactored to work with new platform services, - * it will move into the existing search service in src/plugins/data/public/search - */ -export class SearchService { - private readonly aggTypesRegistry = new AggTypesRegistry(); - - public setup(core: CoreSetup): SearchSetup { - const aggTypesSetup = this.aggTypesRegistry.setup(); - aggTypes.buckets.forEach(b => aggTypesSetup.registerBucket(b)); - aggTypes.metrics.forEach(m => aggTypesSetup.registerMetric(m)); - - return { - aggs: { - calculateAutoTimeExpression: getCalculateAutoTimeExpression(core.uiSettings), - types: aggTypesSetup, - }, - }; - } - - public start(core: CoreStart): SearchStart { - const aggTypesStart = this.aggTypesRegistry.start(); - return { - aggs: { - calculateAutoTimeExpression: getCalculateAutoTimeExpression(core.uiSettings), - createAggConfigs: (indexPattern, configStates = [], schemas) => { - return new AggConfigs(indexPattern, configStates, { - typesRegistry: aggTypesStart, - }); - }, - types: aggTypesStart, - __LEGACY: { - AggConfig, // TODO make static - AggType, - aggTypeFieldFilters, - FieldParamType, - MetricAggType, - parentPipelineAggHelper, // TODO make static - siblingPipelineAggHelper, // TODO make static - }, - }, - }; - } - - public stop() {} -} diff --git a/src/legacy/core_plugins/data/public/search/types.ts b/src/legacy/core_plugins/data/public/search/types.ts deleted file mode 100644 index 47ea1d168f379f..00000000000000 --- a/src/legacy/core_plugins/data/public/search/types.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export * from './aggs/types'; -export * from './utils/types'; diff --git a/src/legacy/core_plugins/data/public/services.ts b/src/legacy/core_plugins/data/public/services.ts deleted file mode 100644 index 7ecd041c70e22e..00000000000000 --- a/src/legacy/core_plugins/data/public/services.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { createGetterSetter } from '../../../../plugins/kibana_utils/public'; -import { SearchStart } from './search/search_service'; - -export const [getSearchServiceShim, setSearchServiceShim] = createGetterSetter( - 'searchShim' -); diff --git a/src/legacy/core_plugins/kibana/public/dashboard/legacy_imports.ts b/src/legacy/core_plugins/kibana/public/dashboard/legacy_imports.ts index beadcda5952880..0c5329d8b259f8 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/legacy_imports.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/legacy_imports.ts @@ -25,7 +25,7 @@ */ export { npSetup, npStart } from 'ui/new_platform'; -export { subscribeWithScope } from 'ui/utils/subscribe_with_scope'; + export { KbnUrl } from 'ui/url/kbn_url'; // @ts-ignore export { KbnUrlProvider, RedirectWhenMissingProvider } from 'ui/url/index'; @@ -38,4 +38,5 @@ export { migrateLegacyQuery, PrivateProvider, PromiseServiceCreator, + subscribeWithScope, } from '../../../../../plugins/kibana_legacy/public'; diff --git a/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.test.ts b/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.test.ts index ad4feacde08156..2189b53ac81ee5 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.test.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.test.ts @@ -48,7 +48,7 @@ import { import { DEFAULT_PANEL_WIDTH, DEFAULT_PANEL_HEIGHT, -} from '../../../../dashboard_embeddable_container/public/np_ready/public'; +} from '../../../../../../plugins/dashboard/public'; test('6.0 migrates uiState, sort, scales, and gridData', async () => { const uiState = { diff --git a/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.ts b/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.ts index b0d20b44827281..6b037fa63cf685 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/migrations/migrate_to_730_panels.ts @@ -18,7 +18,7 @@ */ import { i18n } from '@kbn/i18n'; import semver from 'semver'; -import { GridData } from 'src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public'; +import { GridData } from 'src/plugins/dashboard/public'; import uuid from 'uuid'; import { @@ -113,7 +113,7 @@ function migratePre61PanelToLatest( ? PANEL_HEIGHT_SCALE_FACTOR_WITH_MARGINS : PANEL_HEIGHT_SCALE_FACTOR; - // These are snapshotted here instead of imported form dashboard_embeddable_container because + // These are snapshotted here instead of imported from dashboard because // this function is called from both client and server side, and having an import from a public // folder will cause errors for the server side version. Also, this is only run for the point in time // from panels created in < 7.3 so maybe using a snapshot of the default values when this migration was diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx index af3347afa9c5f2..d1e4c9d2d2a0c0 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx @@ -51,7 +51,7 @@ import { DashboardContainerFactory, DashboardContainerInput, DashboardPanelState, -} from '../../../../dashboard_embeddable_container/public/np_ready/public'; +} from '../../../../../../plugins/dashboard/public'; import { EmbeddableFactoryNotFoundError, ErrorEmbeddable, @@ -78,7 +78,11 @@ import { removeQueryParam, unhashUrl, } from '../../../../../../plugins/kibana_utils/public'; -import { KibanaLegacyStart } from '../../../../../../plugins/kibana_legacy/public'; +import { + addFatalError, + AngularHttpError, + KibanaLegacyStart, +} from '../../../../../../plugins/kibana_legacy/public'; export interface DashboardAppControllerDependencies extends RenderDeps { $scope: DashboardAppScope; @@ -115,6 +119,7 @@ export class DashboardAppController { overlays, chrome, injectedMetadata, + fatalErrors, uiSettings, savedObjects, http, @@ -592,21 +597,31 @@ export class DashboardAppController { $scope.timefilterSubscriptions$ = new Subscription(); $scope.timefilterSubscriptions$.add( - subscribeWithScope($scope, timefilter.getRefreshIntervalUpdate$(), { - next: () => { - updateState(); - refreshDashboardContainer(); + subscribeWithScope( + $scope, + timefilter.getRefreshIntervalUpdate$(), + { + next: () => { + updateState(); + refreshDashboardContainer(); + }, }, - }) + (error: AngularHttpError | Error | string) => addFatalError(fatalErrors, error) + ) ); $scope.timefilterSubscriptions$.add( - subscribeWithScope($scope, timefilter.getTimeUpdate$(), { - next: () => { - updateState(); - refreshDashboardContainer(); + subscribeWithScope( + $scope, + timefilter.getTimeUpdate$(), + { + next: () => { + updateState(); + refreshDashboardContainer(); + }, }, - }) + (error: AngularHttpError | Error | string) => addFatalError(fatalErrors, error) + ) ); function updateViewMode(newMode: ViewMode) { diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts index fe7beafcad18c2..f29721e3c3d5c8 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts @@ -23,7 +23,7 @@ import { Observable, Subscription } from 'rxjs'; import { Moment } from 'moment'; import { History } from 'history'; -import { DashboardContainer } from 'src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public'; +import { DashboardContainer } from 'src/plugins/dashboard/public'; import { ViewMode } from '../../../../../../plugins/embeddable/public'; import { migrateLegacyQuery } from '../legacy_imports'; import { diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.test.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.test.ts index 3f04cad4f322b6..b2a2f43b9152d2 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.test.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.test.ts @@ -23,7 +23,7 @@ import { convertPanelStateToSavedDashboardPanel, } from './embeddable_saved_object_converters'; import { SavedDashboardPanel } from '../types'; -import { DashboardPanelState } from 'src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public'; +import { DashboardPanelState } from 'src/plugins/dashboard/public'; import { EmbeddableInput } from 'src/legacy/core_plugins/embeddable_api/public/np_ready/public'; interface CustomInput extends EmbeddableInput { diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.ts index 2d42609e1e25fe..7d5a378885470a 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/embeddable_saved_object_converters.ts @@ -17,7 +17,7 @@ * under the License. */ import { omit } from 'lodash'; -import { DashboardPanelState } from 'src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public'; +import { DashboardPanelState } from 'src/plugins/dashboard/public'; import { SavedDashboardPanel } from '../types'; export function convertSavedDashboardPanelToPanelState( diff --git a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_add_filter.js b/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_add_filter.js deleted file mode 100644 index 87eb283639c789..00000000000000 --- a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_add_filter.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; -import { createStateStub } from './_utils'; -import { getQueryParameterActions } from '../../np_ready/angular/context/query_parameters/actions'; -import { pluginInstance } from 'plugins/kibana/discover/legacy'; -import { npStart } from 'ui/new_platform'; - -describe('context app', function() { - beforeEach(() => pluginInstance.initializeInnerAngular()); - beforeEach(() => pluginInstance.initializeServices()); - beforeEach(ngMock.module('app/discover')); - - describe('action addFilter', function() { - let addFilter; - - beforeEach( - ngMock.inject(function createPrivateStubs() { - addFilter = getQueryParameterActions().addFilter; - }) - ); - - it('should pass the given arguments to the filterManager', function() { - const state = createStateStub(); - const filterManagerAddStub = npStart.plugins.data.query.filterManager.addFilters; - - addFilter(state)('FIELD_NAME', 'FIELD_VALUE', 'FILTER_OPERATION'); - - //get the generated filter - const generatedFilter = filterManagerAddStub.firstCall.args[0][0]; - const queryKeys = Object.keys(generatedFilter.query.match_phrase); - expect(filterManagerAddStub.calledOnce).to.be(true); - expect(queryKeys[0]).to.eql('FIELD_NAME'); - expect(generatedFilter.query.match_phrase[queryKeys[0]]).to.eql('FIELD_VALUE'); - }); - - it('should pass the index pattern id to the filterManager', function() { - const state = createStateStub(); - const filterManagerAddStub = npStart.plugins.data.query.filterManager.addFilters; - - addFilter(state)('FIELD_NAME', 'FIELD_VALUE', 'FILTER_OPERATION'); - - const generatedFilter = filterManagerAddStub.firstCall.args[0][0]; - expect(generatedFilter.meta.index).to.eql('INDEX_PATTERN_ID'); - }); - }); -}); diff --git a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_predecessor_count.js b/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_predecessor_count.js deleted file mode 100644 index 9ba425bb0e489e..00000000000000 --- a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_predecessor_count.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; -import { pluginInstance } from 'plugins/kibana/discover/legacy'; -import { createStateStub } from './_utils'; -import { getQueryParameterActions } from '../../np_ready/angular/context/query_parameters/actions'; - -describe('context app', function() { - beforeEach(() => pluginInstance.initializeInnerAngular()); - beforeEach(() => pluginInstance.initializeServices()); - beforeEach(ngMock.module('app/discover')); - - describe('action setPredecessorCount', function() { - let setPredecessorCount; - - beforeEach( - ngMock.inject(function createPrivateStubs() { - setPredecessorCount = getQueryParameterActions().setPredecessorCount; - }) - ); - - it('should set the predecessorCount to the given value', function() { - const state = createStateStub(); - - setPredecessorCount(state)(20); - - expect(state.queryParameters.predecessorCount).to.equal(20); - }); - - it('should limit the predecessorCount to 0 as a lower bound', function() { - const state = createStateStub(); - - setPredecessorCount(state)(-1); - - expect(state.queryParameters.predecessorCount).to.equal(0); - }); - - it('should limit the predecessorCount to 10000 as an upper bound', function() { - const state = createStateStub(); - - setPredecessorCount(state)(20000); - - expect(state.queryParameters.predecessorCount).to.equal(10000); - }); - }); -}); diff --git a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_query_parameters.js b/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_query_parameters.js deleted file mode 100644 index 39dde2d8bb7cf0..00000000000000 --- a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_query_parameters.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; -import { pluginInstance } from 'plugins/kibana/discover/legacy'; - -import { createStateStub } from './_utils'; -import { getQueryParameterActions } from '../../np_ready/angular/context/query_parameters/actions'; - -describe('context app', function() { - beforeEach(() => pluginInstance.initializeInnerAngular()); - beforeEach(() => pluginInstance.initializeServices()); - beforeEach(ngMock.module('app/discover')); - - describe('action setQueryParameters', function() { - let setQueryParameters; - - beforeEach( - ngMock.inject(function createPrivateStubs() { - setQueryParameters = getQueryParameterActions().setQueryParameters; - }) - ); - - it('should update the queryParameters with valid properties from the given object', function() { - const state = createStateStub({ - queryParameters: { - additionalParameter: 'ADDITIONAL_PARAMETER', - }, - }); - - setQueryParameters(state)({ - anchorId: 'ANCHOR_ID', - columns: ['column'], - defaultStepSize: 3, - filters: ['filter'], - indexPatternId: 'INDEX_PATTERN', - predecessorCount: 100, - successorCount: 100, - sort: ['field'], - }); - - expect(state.queryParameters).to.eql({ - additionalParameter: 'ADDITIONAL_PARAMETER', - anchorId: 'ANCHOR_ID', - columns: ['column'], - defaultStepSize: 3, - filters: ['filter'], - indexPatternId: 'INDEX_PATTERN', - predecessorCount: 100, - successorCount: 100, - sort: ['field'], - }); - }); - - it('should ignore invalid properties', function() { - const state = createStateStub(); - - setQueryParameters(state)({ - additionalParameter: 'ADDITIONAL_PARAMETER', - }); - - expect(state.queryParameters).to.eql(createStateStub().queryParameters); - }); - }); -}); diff --git a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_successor_count.js b/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_successor_count.js deleted file mode 100644 index c05f5b4aff3bc7..00000000000000 --- a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/action_set_successor_count.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; -import { pluginInstance } from 'plugins/kibana/discover/legacy'; - -import { createStateStub } from './_utils'; -import { getQueryParameterActions } from '../../np_ready/angular/context/query_parameters/actions'; - -describe('context app', function() { - beforeEach(() => pluginInstance.initializeInnerAngular()); - beforeEach(() => pluginInstance.initializeServices()); - beforeEach(ngMock.module('app/discover')); - - describe('action setSuccessorCount', function() { - let setSuccessorCount; - - beforeEach( - ngMock.inject(function createPrivateStubs() { - setSuccessorCount = getQueryParameterActions().setSuccessorCount; - }) - ); - - it('should set the successorCount to the given value', function() { - const state = createStateStub(); - - setSuccessorCount(state)(20); - - expect(state.queryParameters.successorCount).to.equal(20); - }); - - it('should limit the successorCount to 0 as a lower bound', function() { - const state = createStateStub(); - - setSuccessorCount(state)(-1); - - expect(state.queryParameters.successorCount).to.equal(0); - }); - - it('should limit the successorCount to 10000 as an upper bound', function() { - const state = createStateStub(); - - setSuccessorCount(state)(20000); - - expect(state.queryParameters.successorCount).to.equal(10000); - }); - }); -}); diff --git a/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts b/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts index 8a8b5d8e0e3ea3..57a9e4966d6d6f 100644 --- a/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts +++ b/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts @@ -50,13 +50,15 @@ export function setServices(newServices: any) { // EXPORT legacy static dependencies, should be migrated when available in a new version; export { angular }; export { wrapInI18nContext } from 'ui/i18n'; -export { getRequestInspectorStats, getResponseInspectorStats } from '../../../data/public'; +import { search } from '../../../../../plugins/data/public'; +export const { getRequestInspectorStats, getResponseInspectorStats, tabifyAggResponse } = search; +// @ts-ignore +export { shortenDottedString } from '../../common/utils/shorten_dotted_string'; // @ts-ignore export { intervalOptions } from 'ui/agg_types'; -export { subscribeWithScope } from 'ui/utils/subscribe_with_scope'; +export { subscribeWithScope } from '../../../../../plugins/kibana_legacy/public'; // @ts-ignore export { timezoneProvider } from 'ui/vis/lib/timezone'; -export { tabifyAggResponse } from '../../../data/public'; export { unhashUrl } from '../../../../../plugins/kibana_utils/public'; export { ensureDefaultIndexPattern, diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/_stubs.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/_stubs.js similarity index 97% rename from src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/_stubs.js rename to src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/_stubs.js index 53be4e5bd0f2d0..f6ed570be2c373 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/_stubs.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/_stubs.js @@ -19,7 +19,7 @@ import sinon from 'sinon'; import moment from 'moment'; -import { SearchSource } from '../../../../../kibana_services'; +import { SearchSource } from '../../../../../../../../../plugins/data/public'; export function createIndexPatternsStub() { return { diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/anchor.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/anchor.test.js similarity index 73% rename from src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/anchor.js rename to src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/anchor.test.js index 63834fb750e214..0bc2cbacc1eeec 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/anchor.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/anchor.test.js @@ -17,28 +17,19 @@ * under the License. */ -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; -import { pluginInstance } from 'plugins/kibana/discover/legacy'; - import { createIndexPatternsStub, createSearchSourceStub } from './_stubs'; -import { fetchAnchorProvider } from '../anchor'; +import { fetchAnchorProvider } from './anchor'; describe('context app', function() { - beforeEach(() => pluginInstance.initializeInnerAngular()); - beforeEach(ngMock.module('app/discover')); - describe('function fetchAnchor', function() { let fetchAnchor; let searchSourceStub; - beforeEach( - ngMock.inject(function createPrivateStubs() { - searchSourceStub = createSearchSourceStub([{ _id: 'hit1' }]); - fetchAnchor = fetchAnchorProvider(createIndexPatternsStub(), searchSourceStub); - }) - ); + beforeEach(() => { + searchSourceStub = createSearchSourceStub([{ _id: 'hit1' }]); + fetchAnchor = fetchAnchorProvider(createIndexPatternsStub(), searchSourceStub); + }); afterEach(() => { searchSourceStub._restore(); @@ -49,7 +40,7 @@ describe('context app', function() { { '@timestamp': 'desc' }, { _doc: 'desc' }, ]).then(() => { - expect(searchSourceStub.fetch.calledOnce).to.be(true); + expect(searchSourceStub.fetch.calledOnce).toBe(true); }); }); @@ -59,8 +50,8 @@ describe('context app', function() { { _doc: 'desc' }, ]).then(() => { const setParentSpy = searchSourceStub.setParent; - expect(setParentSpy.calledOnce).to.be(true); - expect(setParentSpy.firstCall.args[0]).to.be(undefined); + expect(setParentSpy.calledOnce).toBe(true); + expect(setParentSpy.firstCall.args[0]).toBe(undefined); }); }); @@ -70,7 +61,7 @@ describe('context app', function() { { _doc: 'desc' }, ]).then(() => { const setFieldSpy = searchSourceStub.setField; - expect(setFieldSpy.firstCall.args[1].id).to.eql('INDEX_PATTERN_ID'); + expect(setFieldSpy.firstCall.args[1].id).toEqual('INDEX_PATTERN_ID'); }); }); @@ -80,8 +71,8 @@ describe('context app', function() { { _doc: 'desc' }, ]).then(() => { const setVersionSpy = searchSourceStub.setField.withArgs('version'); - expect(setVersionSpy.calledOnce).to.be(true); - expect(setVersionSpy.firstCall.args[1]).to.eql(true); + expect(setVersionSpy.calledOnce).toBe(true); + expect(setVersionSpy.firstCall.args[1]).toEqual(true); }); }); @@ -91,8 +82,8 @@ describe('context app', function() { { _doc: 'desc' }, ]).then(() => { const setSizeSpy = searchSourceStub.setField.withArgs('size'); - expect(setSizeSpy.calledOnce).to.be(true); - expect(setSizeSpy.firstCall.args[1]).to.eql(1); + expect(setSizeSpy.calledOnce).toBe(true); + expect(setSizeSpy.firstCall.args[1]).toEqual(1); }); }); @@ -102,8 +93,8 @@ describe('context app', function() { { _doc: 'desc' }, ]).then(() => { const setQuerySpy = searchSourceStub.setField.withArgs('query'); - expect(setQuerySpy.calledOnce).to.be(true); - expect(setQuerySpy.firstCall.args[1]).to.eql({ + expect(setQuerySpy.calledOnce).toBe(true); + expect(setQuerySpy.firstCall.args[1]).toEqual({ query: { constant_score: { filter: { @@ -124,8 +115,8 @@ describe('context app', function() { { _doc: 'desc' }, ]).then(() => { const setSortSpy = searchSourceStub.setField.withArgs('sort'); - expect(setSortSpy.calledOnce).to.be(true); - expect(setSortSpy.firstCall.args[1]).to.eql([{ '@timestamp': 'desc' }, { _doc: 'desc' }]); + expect(setSortSpy.calledOnce).toBe(true); + expect(setSortSpy.firstCall.args[1]).toEqual([{ '@timestamp': 'desc' }, { _doc: 'desc' }]); }); }); @@ -140,7 +131,7 @@ describe('context app', function() { expect().fail('expected the promise to be rejected'); }, error => { - expect(error).to.be.an(Error); + expect(error).toBeInstanceOf(Error); } ); }); @@ -152,8 +143,8 @@ describe('context app', function() { { '@timestamp': 'desc' }, { _doc: 'desc' }, ]).then(anchorDocument => { - expect(anchorDocument).to.have.property('property1', 'value1'); - expect(anchorDocument).to.have.property('$$_isAnchor', true); + expect(anchorDocument).toHaveProperty('property1', 'value1'); + expect(anchorDocument).toHaveProperty('$$_isAnchor', true); }); }); }); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/predecessors.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.predecessors.test.js similarity index 74% rename from src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/predecessors.js rename to src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.predecessors.test.js index 02d998e8f4529f..d6e91e57b22a8c 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/predecessors.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.predecessors.test.js @@ -17,15 +17,10 @@ * under the License. */ -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; import moment from 'moment'; import * as _ from 'lodash'; -import { pluginInstance } from 'plugins/kibana/discover/legacy'; - import { createIndexPatternsStub, createContextSearchSourceStub } from './_stubs'; - -import { fetchContextProvider } from '../context'; +import { fetchContextProvider } from './context'; const MS_PER_DAY = 24 * 60 * 60 * 1000; const ANCHOR_TIMESTAMP = new Date(MS_PER_DAY).toJSON(); @@ -34,46 +29,41 @@ const ANCHOR_TIMESTAMP_1000 = new Date(MS_PER_DAY * 1000).toJSON(); const ANCHOR_TIMESTAMP_3000 = new Date(MS_PER_DAY * 3000).toJSON(); describe('context app', function() { - beforeEach(() => pluginInstance.initializeInnerAngular()); - beforeEach(ngMock.module('app/discover')); - describe('function fetchPredecessors', function() { let fetchPredecessors; let searchSourceStub; - beforeEach( - ngMock.inject(function createPrivateStubs() { - searchSourceStub = createContextSearchSourceStub([], '@timestamp', MS_PER_DAY * 8); - fetchPredecessors = ( + beforeEach(() => { + searchSourceStub = createContextSearchSourceStub([], '@timestamp', MS_PER_DAY * 8); + fetchPredecessors = ( + indexPatternId, + timeField, + sortDir, + timeValIso, + timeValNr, + tieBreakerField, + tieBreakerValue, + size + ) => { + const anchor = { + _source: { + [timeField]: timeValIso, + }, + sort: [timeValNr, tieBreakerValue], + }; + + return fetchContextProvider(createIndexPatternsStub()).fetchSurroundingDocs( + 'predecessors', indexPatternId, + anchor, timeField, - sortDir, - timeValIso, - timeValNr, tieBreakerField, - tieBreakerValue, - size - ) => { - const anchor = { - _source: { - [timeField]: timeValIso, - }, - sort: [timeValNr, tieBreakerValue], - }; - - return fetchContextProvider(createIndexPatternsStub()).fetchSurroundingDocs( - 'predecessors', - indexPatternId, - anchor, - timeField, - tieBreakerField, - sortDir, - size, - [] - ); - }; - }) - ); + sortDir, + size, + [] + ); + }; + }); afterEach(() => { searchSourceStub._restore(); @@ -99,8 +89,8 @@ describe('context app', function() { 3, [] ).then(hits => { - expect(searchSourceStub.fetch.calledOnce).to.be(true); - expect(hits).to.eql(searchSourceStub._stubHits.slice(0, 3)); + expect(searchSourceStub.fetch.calledOnce).toBe(true); + expect(hits).toEqual(searchSourceStub._stubHits.slice(0, 3)); }); }); @@ -132,14 +122,14 @@ describe('context app', function() { expect( intervals.every(({ gte, lte }) => (gte && lte ? moment(gte).isBefore(lte) : true)) - ).to.be(true); + ).toBe(true); // should have started at the given time - expect(intervals[0].gte).to.eql(moment(MS_PER_DAY * 3000).toISOString()); + expect(intervals[0].gte).toEqual(moment(MS_PER_DAY * 3000).toISOString()); // should have ended with a half-open interval - expect(_.last(intervals)).to.only.have.keys('gte', 'format'); - expect(intervals.length).to.be.greaterThan(1); + expect(Object.keys(_.last(intervals))).toEqual(['format', 'gte']); + expect(intervals.length).toBeGreaterThan(1); - expect(hits).to.eql(searchSourceStub._stubHits.slice(0, 3)); + expect(hits).toEqual(searchSourceStub._stubHits.slice(0, 3)); }); }); @@ -169,11 +159,11 @@ describe('context app', function() { ); // should have started at the given time - expect(intervals[0].gte).to.eql(moment(MS_PER_DAY * 1000).toISOString()); + expect(intervals[0].gte).toEqual(moment(MS_PER_DAY * 1000).toISOString()); // should have stopped before reaching MS_PER_DAY * 1700 - expect(moment(_.last(intervals).lte).valueOf()).to.be.lessThan(MS_PER_DAY * 1700); - expect(intervals.length).to.be.greaterThan(1); - expect(hits).to.eql(searchSourceStub._stubHits.slice(-3)); + expect(moment(_.last(intervals).lte).valueOf()).toBeLessThan(MS_PER_DAY * 1700); + expect(intervals.length).toBeGreaterThan(1); + expect(hits).toEqual(searchSourceStub._stubHits.slice(-3)); }); }); @@ -189,7 +179,7 @@ describe('context app', function() { 3, [] ).then(hits => { - expect(hits).to.eql([]); + expect(hits).toEqual([]); }); }); @@ -206,8 +196,8 @@ describe('context app', function() { [] ).then(() => { const setParentSpy = searchSourceStub.setParent; - expect(setParentSpy.alwaysCalledWith(undefined)).to.be(true); - expect(setParentSpy.called).to.be(true); + expect(setParentSpy.alwaysCalledWith(undefined)).toBe(true); + expect(setParentSpy.called).toBe(true); }); }); @@ -225,7 +215,7 @@ describe('context app', function() { ).then(() => { expect( searchSourceStub.setField.calledWith('sort', [{ '@timestamp': 'asc' }, { _doc: 'asc' }]) - ).to.be(true); + ).toBe(true); }); }); }); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/successors.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.successors.test.js similarity index 74% rename from src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/successors.js rename to src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.successors.test.js index d4c00930c93839..cc2b6d31cb43b5 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/__tests__/successors.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.successors.test.js @@ -17,15 +17,12 @@ * under the License. */ -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; import moment from 'moment'; import * as _ from 'lodash'; -import { pluginInstance } from 'plugins/kibana/discover/legacy'; import { createIndexPatternsStub, createContextSearchSourceStub } from './_stubs'; -import { fetchContextProvider } from '../context'; +import { fetchContextProvider } from './context'; const MS_PER_DAY = 24 * 60 * 60 * 1000; const ANCHOR_TIMESTAMP = new Date(MS_PER_DAY).toJSON(); @@ -33,47 +30,42 @@ const ANCHOR_TIMESTAMP_3 = new Date(MS_PER_DAY * 3).toJSON(); const ANCHOR_TIMESTAMP_3000 = new Date(MS_PER_DAY * 3000).toJSON(); describe('context app', function() { - beforeEach(() => pluginInstance.initializeInnerAngular()); - beforeEach(ngMock.module('app/discover')); - describe('function fetchSuccessors', function() { let fetchSuccessors; let searchSourceStub; - beforeEach( - ngMock.inject(function createPrivateStubs() { - searchSourceStub = createContextSearchSourceStub([], '@timestamp'); + beforeEach(() => { + searchSourceStub = createContextSearchSourceStub([], '@timestamp'); + + fetchSuccessors = ( + indexPatternId, + timeField, + sortDir, + timeValIso, + timeValNr, + tieBreakerField, + tieBreakerValue, + size + ) => { + const anchor = { + _source: { + [timeField]: timeValIso, + }, + sort: [timeValNr, tieBreakerValue], + }; - fetchSuccessors = ( + return fetchContextProvider(createIndexPatternsStub()).fetchSurroundingDocs( + 'successors', indexPatternId, + anchor, timeField, - sortDir, - timeValIso, - timeValNr, tieBreakerField, - tieBreakerValue, - size - ) => { - const anchor = { - _source: { - [timeField]: timeValIso, - }, - sort: [timeValNr, tieBreakerValue], - }; - - return fetchContextProvider(createIndexPatternsStub()).fetchSurroundingDocs( - 'successors', - indexPatternId, - anchor, - timeField, - tieBreakerField, - sortDir, - size, - [] - ); - }; - }) - ); + sortDir, + size, + [] + ); + }; + }); afterEach(() => { searchSourceStub._restore(); @@ -99,8 +91,8 @@ describe('context app', function() { 3, [] ).then(hits => { - expect(searchSourceStub.fetch.calledOnce).to.be(true); - expect(hits).to.eql(searchSourceStub._stubHits.slice(-3)); + expect(searchSourceStub.fetch.calledOnce).toBe(true); + expect(hits).toEqual(searchSourceStub._stubHits.slice(-3)); }); }); @@ -132,14 +124,14 @@ describe('context app', function() { expect( intervals.every(({ gte, lte }) => (gte && lte ? moment(gte).isBefore(lte) : true)) - ).to.be(true); + ).toBe(true); // should have started at the given time - expect(intervals[0].lte).to.eql(moment(MS_PER_DAY * 3000).toISOString()); + expect(intervals[0].lte).toEqual(moment(MS_PER_DAY * 3000).toISOString()); // should have ended with a half-open interval - expect(_.last(intervals)).to.only.have.keys('lte', 'format'); - expect(intervals.length).to.be.greaterThan(1); + expect(Object.keys(_.last(intervals))).toEqual(['format', 'lte']); + expect(intervals.length).toBeGreaterThan(1); - expect(hits).to.eql(searchSourceStub._stubHits.slice(-3)); + expect(hits).toEqual(searchSourceStub._stubHits.slice(-3)); }); }); @@ -171,12 +163,12 @@ describe('context app', function() { ); // should have started at the given time - expect(intervals[0].lte).to.eql(moment(MS_PER_DAY * 3000).toISOString()); + expect(intervals[0].lte).toEqual(moment(MS_PER_DAY * 3000).toISOString()); // should have stopped before reaching MS_PER_DAY * 2200 - expect(moment(_.last(intervals).gte).valueOf()).to.be.greaterThan(MS_PER_DAY * 2200); - expect(intervals.length).to.be.greaterThan(1); + expect(moment(_.last(intervals).gte).valueOf()).toBeGreaterThan(MS_PER_DAY * 2200); + expect(intervals.length).toBeGreaterThan(1); - expect(hits).to.eql(searchSourceStub._stubHits.slice(0, 4)); + expect(hits).toEqual(searchSourceStub._stubHits.slice(0, 4)); }); }); @@ -192,7 +184,7 @@ describe('context app', function() { 3, [] ).then(hits => { - expect(hits).to.eql([]); + expect(hits).toEqual([]); }); }); @@ -209,8 +201,8 @@ describe('context app', function() { [] ).then(() => { const setParentSpy = searchSourceStub.setParent; - expect(setParentSpy.alwaysCalledWith(undefined)).to.be(true); - expect(setParentSpy.called).to.be(true); + expect(setParentSpy.alwaysCalledWith(undefined)).toBe(true); + expect(setParentSpy.called).toBe(true); }); }); @@ -228,7 +220,7 @@ describe('context app', function() { ).then(() => { expect( searchSourceStub.setField.calledWith('sort', [{ '@timestamp': 'desc' }, { _doc: 'desc' }]) - ).to.be(true); + ).toBe(true); }); }); }); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts index b91ef5a6b79fbb..507f927c608e1b 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts @@ -17,14 +17,18 @@ * under the License. */ -import { IndexPattern, SearchSource } from '../../../../kibana_services'; import { reverseSortDir, SortDirection } from './utils/sorting'; import { extractNanos, convertIsoToMillis } from './utils/date_conversion'; import { fetchHitsInInterval } from './utils/fetch_hits_in_interval'; import { generateIntervals } from './utils/generate_intervals'; import { getEsQuerySearchAfter } from './utils/get_es_query_search_after'; import { getEsQuerySort } from './utils/get_es_query_sort'; -import { Filter, IndexPatternsContract } from '../../../../../../../../../plugins/data/public'; +import { + Filter, + IndexPatternsContract, + IndexPattern, + SearchSource, +} from '../../../../../../../../../plugins/data/public'; export type SurrDocType = 'successors' | 'predecessors'; export interface EsHitRecord { diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/fetch_hits_in_interval.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/fetch_hits_in_interval.ts index e7df44e6fe61c7..8eed5d33ab004b 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/fetch_hits_in_interval.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/fetch_hits_in_interval.ts @@ -16,7 +16,11 @@ * specific language governing permissions and limitations * under the License. */ -import { EsQuerySortValue, SortDirection, ISearchSource } from '../../../../../kibana_services'; +import { + ISearchSource, + EsQuerySortValue, + SortDirection, +} from '../../../../../../../../../../plugins/data/public'; import { convertTimeValueToIso } from './date_conversion'; import { EsHitRecordList } from '../context'; import { IntervalValue } from './generate_intervals'; diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/generate_intervals.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/generate_intervals.ts index 373dc37e56f6f3..b14180d32b4f24 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/generate_intervals.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/utils/generate_intervals.ts @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { SortDirection } from '../../../../../kibana_services'; +import { SortDirection } from '../../../../../../../../../../plugins/data/public'; export type IntervalValue = number | null; diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query/actions.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query/actions.js index 1cebb88cbda5a0..674f40d0186e54 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query/actions.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query/actions.js @@ -29,9 +29,13 @@ import { FAILURE_REASONS, LOADING_STATUS } from './constants'; import { MarkdownSimple } from '../../../../../../../kibana_react/public'; export function QueryActionsProvider(Promise) { - const fetchAnchor = fetchAnchorProvider(getServices().indexPatterns, new SearchSource()); - const { fetchSurroundingDocs } = fetchContextProvider(getServices().indexPatterns); - const { setPredecessorCount, setQueryParameters, setSuccessorCount } = getQueryParameterActions(); + const { filterManager, indexPatterns } = getServices(); + const fetchAnchor = fetchAnchorProvider(indexPatterns, new SearchSource()); + const { fetchSurroundingDocs } = fetchContextProvider(indexPatterns); + const { setPredecessorCount, setQueryParameters, setSuccessorCount } = getQueryParameterActions( + filterManager, + indexPatterns + ); const setFailedStatus = state => (subject, details = {}) => (state.loadingStatus[subject] = { diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js index 5be1179a9ae09c..5c1700e7763610 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js @@ -18,14 +18,11 @@ */ import _ from 'lodash'; -import { getServices } from '../../../../kibana_services'; import { esFilters } from '../../../../../../../../../plugins/data/public'; import { MAX_CONTEXT_SIZE, MIN_CONTEXT_SIZE, QUERY_PARAMETER_KEYS } from './constants'; -export function getQueryParameterActions() { - const filterManager = getServices().filterManager; - +export function getQueryParameterActions(filterManager, indexPatterns) { const setPredecessorCount = state => predecessorCount => (state.queryParameters.predecessorCount = clamp( MIN_CONTEXT_SIZE, @@ -57,8 +54,10 @@ export function getQueryParameterActions() { indexPatternId ); filterManager.addFilters(newFilters); - const indexPattern = await getServices().indexPatterns.get(indexPatternId); - indexPattern.popularizeField(field.name, 1); + if (indexPatterns) { + const indexPattern = await indexPatterns.get(indexPatternId); + indexPattern.popularizeField(field.name, 1); + } }; return { diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.test.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.test.ts new file mode 100644 index 00000000000000..35fbd33fb4bc97 --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.test.ts @@ -0,0 +1,157 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// @ts-ignore +import { getQueryParameterActions } from './actions'; +import { FilterManager } from '../../../../../../../../../plugins/data/public'; +import { coreMock } from '../../../../../../../../../core/public/mocks'; +const setupMock = coreMock.createSetup(); + +let state: { + queryParameters: { + defaultStepSize: number; + indexPatternId: string; + predecessorCount: number; + successorCount: number; + }; +}; +let filterManager: FilterManager; +let filterManagerSpy: jest.SpyInstance; + +beforeEach(() => { + filterManager = new FilterManager(setupMock.uiSettings); + filterManagerSpy = jest.spyOn(filterManager, 'addFilters'); + + state = { + queryParameters: { + defaultStepSize: 3, + indexPatternId: 'INDEX_PATTERN_ID', + predecessorCount: 10, + successorCount: 10, + }, + }; +}); + +describe('context query_parameter actions', function() { + describe('action addFilter', () => { + it('should pass the given arguments to the filterManager', () => { + const { addFilter } = getQueryParameterActions(filterManager); + + addFilter(state)('FIELD_NAME', 'FIELD_VALUE', 'FILTER_OPERATION'); + + // get the generated filter + const generatedFilter = filterManagerSpy.mock.calls[0][0][0]; + const queryKeys = Object.keys(generatedFilter.query.match_phrase); + expect(filterManagerSpy.mock.calls.length).toBe(1); + expect(queryKeys[0]).toBe('FIELD_NAME'); + expect(generatedFilter.query.match_phrase[queryKeys[0]]).toBe('FIELD_VALUE'); + }); + + it('should pass the index pattern id to the filterManager', () => { + const { addFilter } = getQueryParameterActions(filterManager); + addFilter(state)('FIELD_NAME', 'FIELD_VALUE', 'FILTER_OPERATION'); + const generatedFilter = filterManagerSpy.mock.calls[0][0][0]; + expect(generatedFilter.meta.index).toBe('INDEX_PATTERN_ID'); + }); + }); + describe('action setPredecessorCount', () => { + it('should set the predecessorCount to the given value', () => { + const { setPredecessorCount } = getQueryParameterActions(filterManager); + setPredecessorCount(state)(20); + expect(state.queryParameters.predecessorCount).toBe(20); + }); + + it('should limit the predecessorCount to 0 as a lower bound', () => { + const { setPredecessorCount } = getQueryParameterActions(filterManager); + setPredecessorCount(state)(-1); + expect(state.queryParameters.predecessorCount).toBe(0); + }); + + it('should limit the predecessorCount to 10000 as an upper bound', () => { + const { setPredecessorCount } = getQueryParameterActions(filterManager); + setPredecessorCount(state)(20000); + expect(state.queryParameters.predecessorCount).toBe(10000); + }); + }); + describe('action setSuccessorCount', () => { + it('should set the successorCount to the given value', function() { + const { setSuccessorCount } = getQueryParameterActions(filterManager); + setSuccessorCount(state)(20); + + expect(state.queryParameters.successorCount).toBe(20); + }); + + it('should limit the successorCount to 0 as a lower bound', () => { + const { setSuccessorCount } = getQueryParameterActions(filterManager); + setSuccessorCount(state)(-1); + expect(state.queryParameters.successorCount).toBe(0); + }); + + it('should limit the successorCount to 10000 as an upper bound', () => { + const { setSuccessorCount } = getQueryParameterActions(filterManager); + setSuccessorCount(state)(20000); + expect(state.queryParameters.successorCount).toBe(10000); + }); + }); + describe('action setQueryParameters', function() { + const { setQueryParameters } = getQueryParameterActions(filterManager); + + it('should update the queryParameters with valid properties from the given object', function() { + const newState = { + ...state, + queryParameters: { + additionalParameter: 'ADDITIONAL_PARAMETER', + }, + }; + + const actualState = setQueryParameters(newState)({ + anchorId: 'ANCHOR_ID', + columns: ['column'], + defaultStepSize: 3, + filters: ['filter'], + indexPatternId: 'INDEX_PATTERN', + predecessorCount: 100, + successorCount: 100, + sort: ['field'], + }); + + expect(actualState).toEqual({ + additionalParameter: 'ADDITIONAL_PARAMETER', + anchorId: 'ANCHOR_ID', + columns: ['column'], + defaultStepSize: 3, + filters: ['filter'], + indexPatternId: 'INDEX_PATTERN', + predecessorCount: 100, + successorCount: 100, + sort: ['field'], + }); + }); + + it('should ignore invalid properties', function() { + const newState = { ...state }; + + setQueryParameters(newState)({ + additionalParameter: 'ADDITIONAL_PARAMETER', + }); + + expect(state.queryParameters).toEqual(newState.queryParameters); + }); + }); +}); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_app.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_app.js index b5ba2844e8b06e..345717cafee9af 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_app.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_app.js @@ -18,7 +18,7 @@ */ import _ from 'lodash'; -import { getAngularModule } from '../../kibana_services'; +import { getAngularModule, getServices } from '../../kibana_services'; import contextAppTemplate from './context_app.html'; import './context/components/action_bar'; import { getFirstSortableField } from './context/api/utils/sorting'; @@ -58,7 +58,8 @@ module.directive('contextApp', function ContextApp() { }); function ContextAppController($scope, config, Private) { - const queryParameterActions = getQueryParameterActions(); + const { filterManager, indexpatterns } = getServices(); + const queryParameterActions = getQueryParameterActions(filterManager, indexpatterns); const queryActions = Private(QueryActionsProvider); this.state = createInitialState( parseInt(config.get('context:step'), 10), diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.test.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.test.tsx index 93b0c1827806f2..7659d4fe95bab9 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.test.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.test.tsx @@ -20,6 +20,8 @@ import React from 'react'; import { render } from 'enzyme'; import { FieldName } from './field_name'; +jest.mock('ui/new_platform'); + // Note that it currently provides just 2 basic tests, there should be more, but // the components involved will soon change test('FieldName renders a string field by providing fieldType and fieldName', () => { diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.tsx index e2aa33179f6326..26d8a5abb24719 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/field_name/field_name.tsx @@ -21,7 +21,7 @@ import classNames from 'classnames'; import { EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; import { FieldIcon, FieldIconProps } from '../../../../../../../../../plugins/kibana_react/public'; -import { shortenDottedString } from '../../../../../../../../../plugins/data/common/utils'; +import { shortenDottedString } from '../../../../kibana_services'; import { getFieldTypeName } from './field_type_name'; // property field is provided at discover's field chooser diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js index 5ccee2b92ce336..f3334c9211e4bd 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js @@ -76,6 +76,7 @@ import { getDefaultQuery, } from '../../../../../../../plugins/data/public'; import { getIndexPatternId } from '../helpers/get_index_pattern_id'; +import { addFatalError } from '../../../../../../../plugins/kibana_legacy/public'; const fetchStatuses = { UNINITIALIZED: 'uninitialized', @@ -237,28 +238,9 @@ function discoverController( $scope.state = { ...newState }; // detect changes that should trigger fetching of new data - const changes = ['interval', 'sort', 'index', 'query'].filter( + const changes = ['interval', 'sort', 'query'].filter( prop => !_.isEqual(newStatePartial[prop], oldStatePartial[prop]) ); - if (changes.indexOf('index') !== -1) { - try { - $scope.indexPattern = await indexPatterns.get(newStatePartial.index); - $scope.opts.timefield = getTimeField(); - $scope.enableTimeRangeSelector = !!$scope.opts.timefield; - // is needed to rerender the histogram - $scope.vis = undefined; - - // Taking care of sort when switching index pattern: - // Old indexPattern: sort by A - // If A is not available in the new index pattern, sort has to be adapted and propagated to URL - const sort = getSortArray(newStatePartial.sort, $scope.indexPattern); - if (newStatePartial.sort && !_.isEqual(sort, newStatePartial.sort)) { - return await replaceUrlAppState({ sort }); - } - } catch (e) { - toastNotifications.addWarning({ text: getIndexPatternWarning(newStatePartial.index) }); - } - } if (changes.length) { $fetchObservable.next(); @@ -267,17 +249,23 @@ function discoverController( } }); - $scope.setIndexPattern = id => { - setAppState({ index: id }); + $scope.setIndexPattern = async id => { + await replaceUrlAppState({ index: id }); + $route.reload(); }; // update data source when filters update subscriptions.add( - subscribeWithScope($scope, filterManager.getUpdates$(), { - next: () => { - $scope.updateDataSource(); + subscribeWithScope( + $scope, + filterManager.getUpdates$(), + { + next: () => { + $scope.updateDataSource(); + }, }, - }) + error => addFatalError(core.fatalErrors, error) + ) ); const inspectorAdapters = { @@ -639,16 +627,26 @@ function discoverController( ).pipe(debounceTime(100)); subscriptions.add( - subscribeWithScope($scope, searchBarChanges, { - next: $scope.fetch, - }) + subscribeWithScope( + $scope, + searchBarChanges, + { + next: $scope.fetch, + }, + error => addFatalError(core.fatalErrors, error) + ) ); subscriptions.add( - subscribeWithScope($scope, timefilter.getTimeUpdate$(), { - next: () => { - $scope.updateTime(); + subscribeWithScope( + $scope, + timefilter.getTimeUpdate$(), + { + next: () => { + $scope.updateTime(); + }, }, - }) + error => addFatalError(core.fatalErrors, error) + ) ); //Handling change oft the histogram interval $scope.$watch('state.interval', function(newInterval, oldInterval) { diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/helpers.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/helpers.tsx index 68ba508ffebdd6..a2ad18d59d935c 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/helpers.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/helpers.tsx @@ -16,8 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { IndexPattern } from '../../../../../kibana_services'; -import { shortenDottedString } from '../../../../../../../../../../plugins/data/common/utils'; +import { IndexPattern, shortenDottedString } from '../../../../../kibana_services'; export type SortOrder = [string, string]; export interface ColumnProps { diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/table_header.test.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/table_header.test.tsx index b201bea26503ea..89f73022627c50 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/table_header.test.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header/table_header.test.tsx @@ -25,6 +25,8 @@ import { findTestSubject } from '@elastic/eui/lib/test'; import { SortOrder } from './helpers'; import { IndexPattern, IFieldType } from '../../../../../kibana_services'; +jest.mock('ui/new_platform'); + function getMockIndexPattern() { return ({ id: 'test', diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js index 0cbac20a947bfc..6d302ac5a74f35 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js @@ -28,6 +28,7 @@ import uiRoutes from 'ui/routes'; import { uiModules } from 'ui/modules'; import template from './edit_index_pattern.html'; import { fieldWildcardMatcher } from '../../../../../../../../plugins/kibana_utils/public'; +import { subscribeWithScope } from '../../../../../../../../plugins/kibana_legacy/public'; import { setup as managementSetup } from '../../../../../../management/public/legacy'; import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; @@ -37,7 +38,6 @@ import { ScriptedFieldsTable } from './scripted_fields_table'; import { i18n } from '@kbn/i18n'; import { I18nContext } from 'ui/i18n'; import { npStart } from 'ui/new_platform'; -import { subscribeWithScope } from 'ui/utils/subscribe_with_scope'; import { getEditBreadcrumbs } from '../breadcrumbs'; import { createEditIndexPatternPageStateContainer } from './edit_index_pattern_state_container'; @@ -214,11 +214,16 @@ uiModules $scope.getCurrentTab = getCurrentTab; $scope.setCurrentTab = setCurrentTab; - const stateChangedSub = subscribeWithScope($scope, state$, { - next: ({ tab }) => { - handleTabChange($scope, tab); + const stateChangedSub = subscribeWithScope( + $scope, + state$, + { + next: ({ tab }) => { + handleTabChange($scope, tab); + }, }, - }); + fatalError + ); handleTabChange($scope, getCurrentTab()); // setup initial tab depending on initial tab state diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap index 49f3b83ca28790..f3aa2c5da4b67b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap @@ -81,6 +81,7 @@ exports[`Table should render normally 1`] = ` Object { "actions": Array [ Object { + "data-test-subj": "editFieldFormat", "description": "Edit", "icon": "pencil", "name": "Edit", diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/table.js index 4b59a096c44405..29e160cf1c1826 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/table.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/components/table/table.js @@ -217,6 +217,7 @@ export class Table extends PureComponent { icon: 'pencil', onClick: editField, type: 'icon', + 'data-test-subj': 'editFieldFormat', }, ], width: '40px', diff --git a/src/legacy/core_plugins/kibana/public/visualize/legacy_imports.ts b/src/legacy/core_plugins/kibana/public/visualize/legacy_imports.ts index 66a7bd6f333737..0ddf3ee67aa94a 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/legacy_imports.ts +++ b/src/legacy/core_plugins/kibana/public/visualize/legacy_imports.ts @@ -24,7 +24,6 @@ * directly where they are needed. */ -export { subscribeWithScope } from 'ui/utils/subscribe_with_scope'; // @ts-ignore export { KbnUrlProvider, RedirectWhenMissingProvider } from 'ui/url'; export { absoluteToParsedUrl } from 'ui/url/absolute_to_parsed_url'; @@ -39,4 +38,5 @@ export { migrateLegacyQuery, PrivateProvider, PromiseServiceCreator, + subscribeWithScope, } from '../../../../../plugins/kibana_legacy/public'; diff --git a/src/legacy/core_plugins/kibana/public/visualize/np_ready/editor/editor.js b/src/legacy/core_plugins/kibana/public/visualize/np_ready/editor/editor.js index 3fab650002c177..c023c402f5fead 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/np_ready/editor/editor.js +++ b/src/legacy/core_plugins/kibana/public/visualize/np_ready/editor/editor.js @@ -31,7 +31,7 @@ import { getEditBreadcrumbs } from '../breadcrumbs'; import { addHelpMenuToAppChrome } from '../help_menu/help_menu_util'; import { unhashUrl } from '../../../../../../../plugins/kibana_utils/public'; -import { kbnBaseUrl } from '../../../../../../../plugins/kibana_legacy/public'; +import { addFatalError, kbnBaseUrl } from '../../../../../../../plugins/kibana_legacy/public'; import { SavedObjectSaveModal, showSaveModal, @@ -88,7 +88,7 @@ function VisualizeAppController( toastNotifications, chrome, getBasePath, - core: { docLinks }, + core: { docLinks, fatalErrors }, savedQueryService, uiSettings, I18nContext, @@ -455,16 +455,26 @@ function VisualizeAppController( const subscriptions = new Subscription(); subscriptions.add( - subscribeWithScope($scope, timefilter.getRefreshIntervalUpdate$(), { - next: () => { - $scope.refreshInterval = timefilter.getRefreshInterval(); + subscribeWithScope( + $scope, + timefilter.getRefreshIntervalUpdate$(), + { + next: () => { + $scope.refreshInterval = timefilter.getRefreshInterval(); + }, }, - }) + error => addFatalError(fatalErrors, error) + ) ); subscriptions.add( - subscribeWithScope($scope, timefilter.getTimeUpdate$(), { - next: updateTimeRange, - }) + subscribeWithScope( + $scope, + timefilter.getTimeUpdate$(), + { + next: updateTimeRange, + }, + error => addFatalError(fatalErrors, error) + ) ); subscriptions.add( @@ -487,16 +497,26 @@ function VisualizeAppController( // update the searchSource when filters update subscriptions.add( - subscribeWithScope($scope, filterManager.getUpdates$(), { - next: () => { - $scope.filters = filterManager.getFilters(); + subscribeWithScope( + $scope, + filterManager.getUpdates$(), + { + next: () => { + $scope.filters = filterManager.getFilters(); + }, }, - }) + error => addFatalError(fatalErrors, error) + ) ); subscriptions.add( - subscribeWithScope($scope, filterManager.getFetches$(), { - next: $scope.fetch, - }) + subscribeWithScope( + $scope, + filterManager.getFetches$(), + { + next: $scope.fetch, + }, + error => addFatalError(fatalErrors, error) + ) ); $scope.$on('$destroy', () => { diff --git a/src/legacy/core_plugins/telemetry/server/collectors/application_usage/telemetry_application_usage_collector.ts b/src/legacy/core_plugins/telemetry/server/collectors/application_usage/telemetry_application_usage_collector.ts index 04b549c9d2b32a..5c862686a37d9a 100644 --- a/src/legacy/core_plugins/telemetry/server/collectors/application_usage/telemetry_application_usage_collector.ts +++ b/src/legacy/core_plugins/telemetry/server/collectors/application_usage/telemetry_application_usage_collector.ts @@ -20,12 +20,8 @@ import moment from 'moment'; import { APPLICATION_USAGE_TYPE } from '../../../common/constants'; import { UsageCollectionSetup } from '../../../../../../plugins/usage_collection/server'; -import { - ISavedObjectsRepository, - SavedObjectAttributes, - SavedObjectsFindOptions, - SavedObject, -} from '../../../../../../core/server'; +import { ISavedObjectsRepository, SavedObjectAttributes } from '../../../../../../core/server'; +import { findAll } from '../find_all'; /** * Roll indices every 24h @@ -63,22 +59,6 @@ interface ApplicationUsageTelemetryReport { }; } -async function findAll( - savedObjectsClient: ISavedObjectsRepository, - opts: SavedObjectsFindOptions -): Promise>> { - const { page = 1, perPage = 100, ...options } = opts; - const { saved_objects: savedObjects, total } = await savedObjectsClient.find({ - ...options, - page, - perPage, - }); - if (page * perPage >= total) { - return savedObjects; - } - return [...savedObjects, ...(await findAll(savedObjectsClient, { ...opts, page: page + 1 }))]; -} - export function registerApplicationUsageCollector( usageCollection: UsageCollectionSetup, getSavedObjectsClient: () => ISavedObjectsRepository | undefined diff --git a/src/legacy/core_plugins/telemetry/server/collectors/find_all.test.ts b/src/legacy/core_plugins/telemetry/server/collectors/find_all.test.ts new file mode 100644 index 00000000000000..012cda395bc6c2 --- /dev/null +++ b/src/legacy/core_plugins/telemetry/server/collectors/find_all.test.ts @@ -0,0 +1,55 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { savedObjectsRepositoryMock } from '../../../../../core/server/mocks'; + +import { findAll } from './find_all'; + +describe('telemetry_application_usage', () => { + test('when savedObjectClient is initialised, return something', async () => { + const savedObjectClient = savedObjectsRepositoryMock.create(); + savedObjectClient.find.mockImplementation( + async () => + ({ + saved_objects: [], + total: 0, + } as any) + ); + + expect(await findAll(savedObjectClient, { type: 'test-type' })).toStrictEqual([]); + }); + + test('paging in findAll works', async () => { + const savedObjectClient = savedObjectsRepositoryMock.create(); + let total = 201; + const doc = { id: 'test-id', attributes: { test: 1 } }; + savedObjectClient.find.mockImplementation(async opts => { + if ((opts.page || 1) > 2) { + return { saved_objects: [], total } as any; + } + const savedObjects = new Array(opts.perPage).fill(doc); + total = savedObjects.length * 2 + 1; + return { saved_objects: savedObjects, total }; + }); + + expect(await findAll(savedObjectClient, { type: 'test-type' })).toStrictEqual( + new Array(total - 1).fill(doc) + ); + }); +}); diff --git a/src/legacy/core_plugins/telemetry/server/collectors/find_all.ts b/src/legacy/core_plugins/telemetry/server/collectors/find_all.ts new file mode 100644 index 00000000000000..e6363551eba9c6 --- /dev/null +++ b/src/legacy/core_plugins/telemetry/server/collectors/find_all.ts @@ -0,0 +1,41 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + SavedObjectAttributes, + ISavedObjectsRepository, + SavedObjectsFindOptions, + SavedObject, +} from 'kibana/server'; + +export async function findAll( + savedObjectsClient: ISavedObjectsRepository, + opts: SavedObjectsFindOptions +): Promise>> { + const { page = 1, perPage = 100, ...options } = opts; + const { saved_objects: savedObjects, total } = await savedObjectsClient.find({ + ...options, + page, + perPage, + }); + if (page * perPage >= total) { + return savedObjects; + } + return [...savedObjects, ...(await findAll(savedObjectsClient, { ...opts, page: page + 1 }))]; +} diff --git a/src/legacy/core_plugins/telemetry/server/collectors/ui_metric/index.test.ts b/src/legacy/core_plugins/telemetry/server/collectors/ui_metric/index.test.ts new file mode 100644 index 00000000000000..ddb58a7d09bbda --- /dev/null +++ b/src/legacy/core_plugins/telemetry/server/collectors/ui_metric/index.test.ts @@ -0,0 +1,86 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { UsageCollectionSetup } from '../../../../../../plugins/usage_collection/server'; +import { savedObjectsRepositoryMock } from '../../../../../../core/server/mocks'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { CollectorOptions } from '../../../../../../plugins/usage_collection/server/collector/collector'; + +import { registerUiMetricUsageCollector } from './'; + +describe('telemetry_ui_metric', () => { + let collector: CollectorOptions; + + const usageCollectionMock: jest.Mocked = { + makeUsageCollector: jest.fn().mockImplementation(config => (collector = config)), + registerCollector: jest.fn(), + } as any; + + const getUsageCollector = jest.fn(); + const callCluster = jest.fn(); + + beforeAll(() => registerUiMetricUsageCollector(usageCollectionMock, getUsageCollector)); + + test('registered collector is set', () => { + expect(collector).not.toBeUndefined(); + }); + + test('if no savedObjectClient initialised, return undefined', async () => { + expect(await collector.fetch(callCluster)).toBeUndefined(); + }); + + test('when savedObjectClient is initialised, return something', async () => { + const savedObjectClient = savedObjectsRepositoryMock.create(); + savedObjectClient.find.mockImplementation( + async () => + ({ + saved_objects: [], + total: 0, + } as any) + ); + getUsageCollector.mockImplementation(() => savedObjectClient); + + expect(await collector.fetch(callCluster)).toStrictEqual({}); + expect(savedObjectClient.bulkCreate).not.toHaveBeenCalled(); + }); + + test('results grouped by appName', async () => { + const savedObjectClient = savedObjectsRepositoryMock.create(); + savedObjectClient.find.mockImplementation(async () => { + return { + saved_objects: [ + { id: 'testAppName:testKeyName1', attributes: { count: 3 } }, + { id: 'testAppName:testKeyName2', attributes: { count: 5 } }, + { id: 'testAppName2:testKeyName3', attributes: { count: 1 } }, + ], + total: 3, + } as any; + }); + + getUsageCollector.mockImplementation(() => savedObjectClient); + + expect(await collector.fetch(callCluster)).toStrictEqual({ + testAppName: [ + { key: 'testKeyName1', value: 3 }, + { key: 'testKeyName2', value: 5 }, + ], + testAppName2: [{ key: 'testKeyName3', value: 1 }], + }); + }); +}); diff --git a/src/legacy/core_plugins/telemetry/server/collectors/ui_metric/telemetry_ui_metric_collector.ts b/src/legacy/core_plugins/telemetry/server/collectors/ui_metric/telemetry_ui_metric_collector.ts index 73157abce86292..a7b6850b0b20a3 100644 --- a/src/legacy/core_plugins/telemetry/server/collectors/ui_metric/telemetry_ui_metric_collector.ts +++ b/src/legacy/core_plugins/telemetry/server/collectors/ui_metric/telemetry_ui_metric_collector.ts @@ -17,24 +17,33 @@ * under the License. */ +import { ISavedObjectsRepository, SavedObjectAttributes } from 'kibana/server'; import { UI_METRIC_USAGE_TYPE } from '../../../common/constants'; import { UsageCollectionSetup } from '../../../../../../plugins/usage_collection/server'; +import { findAll } from '../find_all'; -export function registerUiMetricUsageCollector(usageCollection: UsageCollectionSetup, server: any) { +interface UIMetricsSavedObjects extends SavedObjectAttributes { + count: number; +} + +export function registerUiMetricUsageCollector( + usageCollection: UsageCollectionSetup, + getSavedObjectsClient: () => ISavedObjectsRepository | undefined +) { const collector = usageCollection.makeUsageCollector({ type: UI_METRIC_USAGE_TYPE, fetch: async () => { - const { SavedObjectsClient, getSavedObjectsRepository } = server.savedObjects; - const { callWithInternalUser } = server.plugins.elasticsearch.getCluster('admin'); - const internalRepository = getSavedObjectsRepository(callWithInternalUser); - const savedObjectsClient = new SavedObjectsClient(internalRepository); + const savedObjectsClient = getSavedObjectsClient(); + if (typeof savedObjectsClient === 'undefined') { + return; + } - const { saved_objects: rawUiMetrics } = await savedObjectsClient.find({ + const rawUiMetrics = await findAll(savedObjectsClient, { type: 'ui-metric', fields: ['count'], }); - const uiMetricsByAppName = rawUiMetrics.reduce((accum: any, rawUiMetric: any) => { + const uiMetricsByAppName = rawUiMetrics.reduce((accum, rawUiMetric) => { const { id, attributes: { count }, @@ -42,18 +51,16 @@ export function registerUiMetricUsageCollector(usageCollection: UsageCollectionS const [appName, metricType] = id.split(':'); - if (!accum[appName]) { - accum[appName] = []; - } - const pair = { key: metricType, value: count }; - accum[appName].push(pair); - return accum; - }, {}); + return { + ...accum, + [appName]: [...(accum[appName] || []), pair], + }; + }, {} as Record>); return uiMetricsByAppName; }, - isReady: () => true, + isReady: () => typeof getSavedObjectsClient() !== 'undefined', }); usageCollection.registerCollector(collector); diff --git a/src/legacy/core_plugins/telemetry/server/plugin.ts b/src/legacy/core_plugins/telemetry/server/plugin.ts index d859c0cfd46785..0b9f0526988c8a 100644 --- a/src/legacy/core_plugins/telemetry/server/plugin.ts +++ b/src/legacy/core_plugins/telemetry/server/plugin.ts @@ -59,7 +59,7 @@ export class TelemetryPlugin { registerTelemetryPluginUsageCollector(usageCollection, server); registerLocalizationUsageCollector(usageCollection, server); registerTelemetryUsageCollector(usageCollection, server); - registerUiMetricUsageCollector(usageCollection, server); + registerUiMetricUsageCollector(usageCollection, getSavedObjectsClient); registerManagementUsageCollector(usageCollection, server); registerApplicationUsageCollector(usageCollection, getSavedObjectsClient); } diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_common_props.ts b/src/legacy/core_plugins/vis_default_editor/public/components/agg_common_props.ts index b43894e74689f0..1a97cc5c4d967f 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_common_props.ts +++ b/src/legacy/core_plugins/vis_default_editor/public/components/agg_common_props.ts @@ -18,7 +18,7 @@ */ import { VisState, VisParams } from 'src/legacy/core_plugins/visualizations/public'; -import { IAggType, IAggConfig, AggGroupNames } from '../legacy_imports'; +import { IAggType, IAggConfig, IAggGroupNames } from '../legacy_imports'; import { Schema } from '../schemas'; type AggId = IAggConfig['id']; @@ -29,7 +29,7 @@ export type ReorderAggs = (sourceAgg: IAggConfig, destinationAgg: IAggConfig) => export interface DefaultEditorCommonProps { formIsTouched: boolean; - groupName: AggGroupNames; + groupName: IAggGroupNames; metricAggs: IAggConfig[]; state: VisState; setAggParamValue: ( diff --git a/src/legacy/core_plugins/vis_default_editor/public/legacy_imports.ts b/src/legacy/core_plugins/vis_default_editor/public/legacy_imports.ts index 33a5c0fe660c4a..50028d8c970f45 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/legacy_imports.ts +++ b/src/legacy/core_plugins/vis_default_editor/public/legacy_imports.ts @@ -18,25 +18,25 @@ */ /* `ui/agg_types` dependencies */ +export { BUCKET_TYPES, METRIC_TYPES } from '../../../../plugins/data/public'; export { - AggType, - IAggType, - IAggConfig, - IAggConfigs, - AggParam, AggGroupNames, aggGroupNamesMap, + AggParam, + AggParamType, + AggType, aggTypes, createAggConfigs, FieldParamType, + IAggConfig, + IAggConfigs, + IAggGroupNames, + IAggType, IFieldParamType, - BUCKET_TYPES, - METRIC_TYPES, termsAggFilter, } from 'ui/agg_types'; export { aggTypeFilters, propFilter } from 'ui/agg_types'; export { aggTypeFieldFilters } from 'ui/agg_types'; -export { AggParamType } from 'ui/agg_types'; export { MetricAggType, IMetricAggType } from 'ui/agg_types'; export { parentPipelineType } from 'ui/agg_types'; export { siblingPipelineType } from 'ui/agg_types'; @@ -45,5 +45,3 @@ export { OptionedValueProp, OptionedParamEditorProps, OptionedParamType } from ' export { isValidInterval } from 'ui/agg_types'; export { AggParamOption } from 'ui/agg_types'; export { CidrMask } from 'ui/agg_types'; - -export * from 'ui/vis/lib'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/schemas.ts b/src/legacy/core_plugins/vis_default_editor/public/schemas.ts index 5849d9d80011e2..94e3ad6023f4e4 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/schemas.ts +++ b/src/legacy/core_plugins/vis_default_editor/public/schemas.ts @@ -22,8 +22,7 @@ import _ from 'lodash'; import { Optional } from '@kbn/utility-types'; import { IndexedArray } from 'ui/indexed_array'; -import { AggGroupNames } from '../../data/public/search/aggs/agg_groups'; -import { AggParam } from '../../data/public/search/aggs/agg_params'; +import { AggGroupNames, AggParam, IAggGroupNames } from '../../../../plugins/data/public'; export interface ISchemas { [AggGroupNames.Buckets]: Schema[]; @@ -34,7 +33,7 @@ export interface ISchemas { export interface Schema { aggFilter: string[]; editor: boolean | string; - group: AggGroupNames; + group: IAggGroupNames; max: number; min: number; name: string; diff --git a/src/legacy/core_plugins/vis_default_editor/public/utils.test.tsx b/src/legacy/core_plugins/vis_default_editor/public/utils.test.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/utils.test.tsx rename to src/legacy/core_plugins/vis_default_editor/public/utils.test.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/utils.tsx b/src/legacy/core_plugins/vis_default_editor/public/utils.ts similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/utils.tsx rename to src/legacy/core_plugins/vis_default_editor/public/utils.ts index 4f82298aaca41f..60eeb49e201a06 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/utils.tsx +++ b/src/legacy/core_plugins/vis_default_editor/public/utils.ts @@ -39,7 +39,7 @@ export type ComboBoxGroupedOptions = Array>; * * @returns An array of grouped and sorted alphabetically `objects` that are compatible with EuiComboBox options. */ -function groupAndSortBy< +export function groupAndSortBy< T extends Record, TGroupBy extends string = 'type', TLabelName extends string = 'title' @@ -78,5 +78,3 @@ function groupAndSortBy< function sortByLabel(a: GroupOrOption, b: GroupOrOption) { return (a.label || '').toLowerCase().localeCompare((b.label || '').toLowerCase()); } - -export { groupAndSortBy }; diff --git a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts index 4094cd4eff0601..3bddc94929cf57 100644 --- a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts +++ b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts @@ -23,6 +23,23 @@ import { functionWrapper } from '../../../../plugins/expressions/common/expressi jest.mock('ui/new_platform'); +jest.mock('../../vis_default_editor/public/legacy_imports', () => ({ + propFilter: jest.fn(), + AggGroupNames: { + Buckets: 'buckets', + Metrics: 'metrics', + }, + aggTypeFilters: { + addFilter: jest.fn(), + }, + BUCKET_TYPES: { + DATE_HISTOGRAM: 'date_histogram', + }, + METRIC_TYPES: { + TOP_HITS: 'top_hits', + }, +})); + describe('interpreter/functions#metric', () => { const fn = functionWrapper(createMetricVisFn()); const context = { diff --git a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts index 5dbd59f3f1709f..5813465cc3f00a 100644 --- a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts +++ b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts @@ -36,6 +36,23 @@ import { createMetricVisTypeDefinition } from './metric_vis_type'; jest.mock('ui/new_platform'); +jest.mock('../../vis_default_editor/public/legacy_imports', () => ({ + propFilter: jest.fn(), + AggGroupNames: { + Buckets: 'buckets', + Metrics: 'metrics', + }, + aggTypeFilters: { + addFilter: jest.fn(), + }, + BUCKET_TYPES: { + DATE_HISTOGRAM: 'date_histogram', + }, + METRIC_TYPES: { + TOP_HITS: 'top_hits', + }, +})); + describe('metric_vis - createMetricVisTypeDefinition', () => { let vis: Vis; diff --git a/src/legacy/core_plugins/vis_type_table/public/legacy_imports.ts b/src/legacy/core_plugins/vis_type_table/public/legacy_imports.ts index 90929150de9c39..7b584f8069338e 100644 --- a/src/legacy/core_plugins/vis_type_table/public/legacy_imports.ts +++ b/src/legacy/core_plugins/vis_type_table/public/legacy_imports.ts @@ -24,7 +24,8 @@ export { IAggConfig, AggGroupNames, Schemas } from 'ui/agg_types'; export { PaginateDirectiveProvider } from 'ui/directives/paginate'; // @ts-ignore export { PaginateControlsDirectiveProvider } from 'ui/directives/paginate'; -export { tabifyAggResponse, tabifyGetColumns } from '../../data/public'; +import { search } from '../../../../plugins/data/public'; +export const { tabifyAggResponse, tabifyGetColumns } = search; export { configureAppAngularModule, KbnAccessibleClickProvider, diff --git a/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx b/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx index 13a57296bab7ac..6e29b111d422ac 100644 --- a/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx +++ b/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx @@ -21,7 +21,8 @@ import React, { useMemo, useCallback } from 'react'; import { EuiFormRow, EuiComboBox, EuiComboBoxOptionOption } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { isValidEsInterval } from '../../../../core_plugins/data/common'; +import { search } from '../../../../../plugins/data/public'; +const { isValidEsInterval } = search.aggs; import { useValidation } from '../../../vis_default_editor/public'; const intervalOptions = [ diff --git a/src/legacy/core_plugins/vis_type_timeseries/public/components/lib/get_interval.js b/src/legacy/core_plugins/vis_type_timeseries/public/components/lib/get_interval.js index a6aefe067dd62b..f6ea90a3891d80 100644 --- a/src/legacy/core_plugins/vis_type_timeseries/public/components/lib/get_interval.js +++ b/src/legacy/core_plugins/vis_type_timeseries/public/components/lib/get_interval.js @@ -19,7 +19,8 @@ import moment from 'moment'; import { i18n } from '@kbn/i18n'; import { get } from 'lodash'; -import { parseEsInterval } from '../../../../data/public'; +import { search } from '../../../../../../plugins/data/public'; +const { parseEsInterval } = search.aggs; import { GTE_INTERVAL_RE } from '../../../../../../plugins/vis_type_timeseries/common/interval_regexp'; export const AUTO_INTERVAL = 'auto'; diff --git a/src/legacy/core_plugins/vis_type_timeseries/public/lib/validate_interval.js b/src/legacy/core_plugins/vis_type_timeseries/public/lib/validate_interval.js index 2992549d38e308..40fd4d871a96a2 100644 --- a/src/legacy/core_plugins/vis_type_timeseries/public/lib/validate_interval.js +++ b/src/legacy/core_plugins/vis_type_timeseries/public/lib/validate_interval.js @@ -19,7 +19,8 @@ import { GTE_INTERVAL_RE } from '../../../../../plugins/vis_type_timeseries/common/interval_regexp'; import { i18n } from '@kbn/i18n'; -import { parseInterval } from '../../../../../plugins/data/public'; +import { search } from '../../../../../plugins/data/public'; +const { parseInterval } = search.aggs; export function validateInterval(bounds, panel, maxBuckets) { const { interval } = panel; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/legacy_imports.ts b/src/legacy/core_plugins/vis_type_vislib/public/legacy_imports.ts index 1c8e679f7d61f3..343fda44340d11 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/legacy_imports.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/legacy_imports.ts @@ -17,9 +17,12 @@ * under the License. */ +import { npStart } from 'ui/new_platform'; +export const { createFiltersFromEvent } = npStart.plugins.data.actions; export { AggType, AggGroupNames, IAggConfig, IAggType, Schemas } from 'ui/agg_types'; export { getFormat } from 'ui/visualize/loader/pipeline_helpers/utilities'; -export { tabifyAggResponse, tabifyGetColumns } from '../../data/public'; +import { search } from '../../../../plugins/data/public'; +export const { tabifyAggResponse, tabifyGetColumns } = search; // @ts-ignore export { buildHierarchicalData } from 'ui/agg_response/hierarchical/build_hierarchical_data'; // @ts-ignore diff --git a/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.test.tsx b/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.test.tsx index e66dff01b6bf21..7f06bdddb48057 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.test.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.test.tsx @@ -32,10 +32,8 @@ jest.mock('@elastic/eui', () => ({ })); jest.mock('../../../legacy_imports', () => ({ - getTableAggs: jest.fn(), -})); -jest.mock('../../../../../data/public/actions/filters/create_filters_from_event', () => ({ createFiltersFromEvent: jest.fn().mockResolvedValue(['yes']), + getTableAggs: jest.fn(), })); const vis = { diff --git a/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx b/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx index cfe3b0c6571477..d82941b7b8cee6 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx @@ -22,15 +22,14 @@ import { compact, uniq, map, every, isUndefined } from 'lodash'; import { i18n } from '@kbn/i18n'; import { EuiPopoverProps, EuiIcon, keyCodes, htmlIdGenerator } from '@elastic/eui'; -import { IAggConfig } from '../../../../../data/public'; -import { createFiltersFromEvent } from '../../../../../data/public/actions/filters/create_filters_from_event'; +import { IAggConfig } from '../../../../../../../plugins/data/public'; import { CUSTOM_LEGEND_VIS_TYPES, LegendItem } from './models'; import { VisLegendItem } from './legend_item'; import { getPieNames } from './pie_utils'; import { Vis } from '../../../../../visualizations/public'; -import { tabifyGetColumns } from '../../../legacy_imports'; +import { createFiltersFromEvent, tabifyGetColumns } from '../../../legacy_imports'; const getTableAggs = (vis: Vis): IAggConfig[] => { if (!vis.aggs || !vis.aggs.getResponseAggs) { diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy.ts index fdbd1d5a61ce7f..216e523b071419 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy.ts @@ -17,21 +17,12 @@ * under the License. */ -/* eslint-disable @kbn/eslint/no-restricted-paths */ +// eslint-disable-next-line import { npSetup, npStart } from 'ui/new_platform'; -import { start as legacyDataStart } from '../../../../data/public/legacy'; -/* eslint-enable @kbn/eslint/no-restricted-paths */ - import { PluginInitializerContext } from '../../../../../../core/public'; - import { plugin } from '.'; const pluginInstance = plugin({} as PluginInitializerContext); export const setup = pluginInstance.setup(npSetup.core, npSetup.plugins); -export const start = pluginInstance.start(npStart.core, { - ...npStart.plugins, - __LEGACY: { - aggs: legacyDataStart.search.aggs, - }, -}); +export const start = pluginInstance.start(npStart.core, npStart.plugins); diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.test.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.test.ts index 33b2da75b547e5..9446069182e19b 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.test.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.test.ts @@ -28,7 +28,7 @@ import { } from './build_pipeline'; import { Vis } from '..'; import { searchSourceMock, dataPluginMock } from '../../../../../../../plugins/data/public/mocks'; -import { IAggConfig } from '../../../../../data/public'; +import { IAggConfig } from '../../../../../../../plugins/data/public'; jest.mock('ui/new_platform'); diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.ts index 069b5814908a8f..de974e6e969efa 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/legacy/build_pipeline.ts @@ -22,11 +22,13 @@ import moment from 'moment'; import { SerializedFieldFormat } from '../../../../../../../plugins/expressions/public'; import { fieldFormats, + IAggConfig, ISearchSource, + search, TimefilterContract, } from '../../../../../../../plugins/data/public'; +const { isDateHistogramBucketAggConfig } = search.aggs; import { Vis, VisParams } from '../types'; -import { IAggConfig, isDateHistogramBucketAggConfig } from '../../../../../data/public'; interface SchemaConfigParams { precision?: number; diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/mocks.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/mocks.ts index 9e8eac08c33eac..2785247296ff4a 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/mocks.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/mocks.ts @@ -57,11 +57,6 @@ const createInstance = async () => { data: dataPluginMock.createStartContract(), expressions: expressionsPluginMock.createStartContract(), uiActions: uiActionsPluginMock.createStartContract(), - __LEGACY: { - aggs: { - createAggConfigs: jest.fn(), - } as any, - }, }); return { diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/plugin.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/plugin.ts index b8db611f30815f..5a8a55d470540e 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/plugin.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/plugin.ts @@ -55,7 +55,6 @@ import { createSavedVisLoader, SavedVisualizationsLoader } from './saved_visuali import { VisImpl } from './vis_impl'; import { showNewVisModal } from './wizard'; import { UiActionsStart } from '../../../../../../plugins/ui_actions/public'; -import { DataStart as LegacyDataStart } from '../../../../data/public'; import { VisState } from './types'; /** @@ -83,9 +82,6 @@ export interface VisualizationsStartDeps { data: DataPublicPluginStart; expressions: ExpressionsStart; uiActions: UiActionsStart; - __LEGACY: { - aggs: LegacyDataStart['search']['aggs']; - }; } /** @@ -128,7 +124,7 @@ export class VisualizationsPlugin public start( core: CoreStart, - { data, expressions, uiActions, __LEGACY: { aggs } }: VisualizationsStartDeps + { data, expressions, uiActions }: VisualizationsStartDeps ): VisualizationsStart { const types = this.types.start(); setI18n(core.i18n); @@ -141,7 +137,7 @@ export class VisualizationsPlugin setExpressions(expressions); setUiActions(uiActions); setTimeFilter(data.query.timefilter.timefilter); - setAggs(aggs); + setAggs(data.search.aggs); const savedVisualizationsLoader = createSavedVisLoader({ savedObjectsClient: core.savedObjects.client, indexPatterns: data.indexPatterns, diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/services.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/services.ts index 05fb106bf99402..b2eebe8b5b57d3 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/services.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/services.ts @@ -27,6 +27,7 @@ import { import { TypesStart } from './vis_types'; import { createGetterSetter } from '../../../../../../plugins/kibana_utils/public'; import { + DataPublicPluginStart, FilterManager, IndexPatternsContract, TimefilterContract, @@ -35,7 +36,6 @@ import { UsageCollectionSetup } from '../../../../../../plugins/usage_collection import { ExpressionsStart } from '../../../../../../plugins/expressions/public'; import { UiActionsStart } from '../../../../../../plugins/ui_actions/public'; import { SavedVisualizationsLoader } from './saved_visualizations'; -import { DataStart as LegacyDataStart } from '../../../../data/public'; export const [getUISettings, setUISettings] = createGetterSetter('UISettings'); @@ -73,6 +73,6 @@ export const [getSavedVisualizationsLoader, setSavedVisualizationsLoader] = crea SavedVisualizationsLoader >('SavedVisualisationsLoader'); -export const [getAggs, setAggs] = createGetterSetter( +export const [getAggs, setAggs] = createGetterSetter( 'AggConfigs' ); diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/vis.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/vis.ts index ba86125f2e246e..eb262966a4a22e 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/vis.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/vis.ts @@ -19,7 +19,7 @@ import { VisType } from './vis_types'; import { Status } from './legacy/update_status'; -import { IAggConfigs } from '../../../../data/public'; +import { IAggConfigs } from '../../../../../../plugins/data/public'; export interface Vis { type: VisType; diff --git a/src/legacy/core_plugins/visualizations/public/np_ready/public/vis_impl.d.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/vis_impl.d.ts index 0c4ea1572c4cdc..0e759c3d9872c3 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/vis_impl.d.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/vis_impl.d.ts @@ -19,9 +19,8 @@ import { Vis, VisState, VisParams } from './vis'; import { VisType } from './vis_types'; -import { IIndexPattern } from '../../../../../../plugins/data/common'; +import { IAggConfig, IIndexPattern } from '../../../../../../plugins/data/public'; import { Schema } from '../../../../vis_default_editor/public'; -import { IAggConfig } from '../../../../data/public/search/aggs'; type InitVisStateType = | Partial diff --git a/src/legacy/ui/public/agg_response/index.js b/src/legacy/ui/public/agg_response/index.js index 139a124356de21..982c1c25a81010 100644 --- a/src/legacy/ui/public/agg_response/index.js +++ b/src/legacy/ui/public/agg_response/index.js @@ -19,10 +19,10 @@ import { buildHierarchicalData } from './hierarchical/build_hierarchical_data'; import { buildPointSeriesData } from './point_series/point_series'; -import { tabifyAggResponse } from '../../../core_plugins/data/public'; +import { search } from '../../../../plugins/data/public'; export const aggResponseIndex = { hierarchical: buildHierarchicalData, pointSeries: buildPointSeriesData, - tabify: tabifyAggResponse, + tabify: search.tabifyAggResponse, }; diff --git a/src/legacy/ui/public/agg_types/index.ts b/src/legacy/ui/public/agg_types/index.ts index d066e61df18e90..75c2cd43178726 100644 --- a/src/legacy/ui/public/agg_types/index.ts +++ b/src/legacy/ui/public/agg_types/index.ts @@ -20,16 +20,16 @@ /** * Nothing to see here! * - * Agg Types have moved to the data plugin, and are being + * Agg Types have moved to the new platform, and are being * re-exported from ui/agg_types for backwards compatibility. */ -import { start as dataStart } from '../../../core_plugins/data/public/legacy'; +import { npStart } from 'ui/new_platform'; // runtime contracts -const { types } = dataStart.search.aggs; +const { types } = npStart.plugins.data.search.aggs; export const aggTypes = types.getAll(); -export const { createAggConfigs } = dataStart.search.aggs; +export const { createAggConfigs } = npStart.plugins.data.search.aggs; export const { AggConfig, AggType, @@ -38,33 +38,36 @@ export const { MetricAggType, parentPipelineAggHelper, siblingPipelineAggHelper, -} = dataStart.search.aggs.__LEGACY; +} = npStart.plugins.data.search.__LEGACY; // types export { + AggGroupNames, + AggParam, + AggParamOption, + AggParamType, + AggTypeFieldFilters, + AggTypeFilters, + BUCKET_TYPES, + DateRangeKey, IAggConfig, IAggConfigs, + IAggGroupNames, IAggType, IFieldParamType, IMetricAggType, - AggParam, - AggParamOption, - BUCKET_TYPES, - DateRangeKey, IpRangeKey, METRIC_TYPES, OptionedParamEditorProps, + OptionedParamType, OptionedValueProp, -} from '../../../core_plugins/data/public'; +} from '../../../../plugins/data/public'; // static code -export { - AggParamType, - AggTypeFilters, - aggTypeFilters, - AggTypeFieldFilters, - AggGroupNames, +import { search } from '../../../../plugins/data/public'; +export const { aggGroupNamesMap, + aggTypeFilters, CidrMask, convertDateRangeToString, convertIPRangeToString, @@ -73,11 +76,10 @@ export { isStringType, isType, isValidInterval, - OptionedParamType, parentPipelineType, propFilter, siblingPipelineType, termsAggFilter, -} from '../../../core_plugins/data/public'; +} = search.aggs; export { ISchemas, Schemas, Schema } from '../../../core_plugins/vis_default_editor/public/schemas'; diff --git a/src/legacy/ui/public/chrome/directives/kbn_chrome.js b/src/legacy/ui/public/chrome/directives/kbn_chrome.js index 4c5d7981e962ac..45da4ab6b7472e 100644 --- a/src/legacy/ui/public/chrome/directives/kbn_chrome.js +++ b/src/legacy/ui/public/chrome/directives/kbn_chrome.js @@ -20,6 +20,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import $ from 'jquery'; +import { fatalError } from 'ui/notify/fatal_error'; import { uiModules } from '../../modules'; import template from './kbn_chrome.html'; @@ -30,7 +31,7 @@ import { chromeHeaderNavControlsRegistry, NavControlSide, } from '../../registry/chrome_header_nav_controls'; -import { subscribeWithScope } from '../../utils/subscribe_with_scope'; +import { subscribeWithScope } from '../../../../../plugins/kibana_legacy/public'; export function kbnChromeProvider(chrome, internals) { uiModules.get('kibana').directive('kbnChrome', () => { @@ -84,11 +85,16 @@ export function kbnChromeProvider(chrome, internals) { ); } - const chromeVisibility = subscribeWithScope($scope, chrome.visible$, { - next: () => { - // just makes sure change detection is triggered when chrome visibility changes + const chromeVisibility = subscribeWithScope( + $scope, + chrome.visible$, + { + next: () => { + // just makes sure change detection is triggered when chrome visibility changes + }, }, - }); + fatalError + ); $scope.$on('$destroy', () => { chromeVisibility.unsubscribe(); }); diff --git a/src/legacy/ui/public/config/config.js b/src/legacy/ui/public/config/config.js index 28379c4feb94d4..80a9d39221b2c2 100644 --- a/src/legacy/ui/public/config/config.js +++ b/src/legacy/ui/public/config/config.js @@ -18,10 +18,11 @@ */ import angular from 'angular'; +import { fatalError } from 'ui/notify/fatal_error'; import chrome from '../chrome'; import { isPlainObject } from 'lodash'; import { uiModules } from '../modules'; -import { subscribeWithScope } from '../utils/subscribe_with_scope'; +import { subscribeWithScope } from '../../../../plugins/kibana_legacy/public'; const module = uiModules.get('kibana/config'); @@ -52,12 +53,17 @@ module.service(`config`, function($rootScope, Promise) { //* angular specific methods * ////////////////////////////// - const subscription = subscribeWithScope($rootScope, uiSettings.getUpdate$(), { - next: ({ key, newValue, oldValue }) => { - $rootScope.$broadcast('change:config', newValue, oldValue, key, this); - $rootScope.$broadcast(`change:config.${key}`, newValue, oldValue, key, this); + const subscription = subscribeWithScope( + $rootScope, + uiSettings.getUpdate$(), + { + next: ({ key, newValue, oldValue }) => { + $rootScope.$broadcast('change:config', newValue, oldValue, key, this); + $rootScope.$broadcast(`change:config.${key}`, newValue, oldValue, key, this); + }, }, - }); + fatalError + ); $rootScope.$on('$destroy', () => subscription.unsubscribe()); this.watchAll = function(handler, scope = $rootScope) { diff --git a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js index 89617c20a31b7f..ea84ba1ad28387 100644 --- a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js +++ b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js @@ -20,6 +20,24 @@ import sinon from 'sinon'; import { getFieldFormatsRegistry } from '../../../../test_utils/public/stub_field_formats'; import { METRIC_TYPE } from '@kbn/analytics'; +import { + setIndexPatterns, + setQueryService, + setUiSettings, + setInjectedMetadata, + setFieldFormats, + setSearchService, + setOverlays, + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../plugins/data/public/services'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { setAggs } from '../../../../../src/legacy/core_plugins/visualizations/public/np_ready/public/services'; +import { + AggTypesRegistry, + getAggTypes, + AggConfigs, + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../../src/plugins/data/public/search/aggs'; import { ComponentRegistry } from '../../../../../src/plugins/advanced_settings/public/'; const mockObservable = () => { @@ -61,6 +79,18 @@ const mockCore = { }, }; +const mockAggTypesRegistry = () => { + const registry = new AggTypesRegistry(); + const registrySetup = registry.setup(); + const aggTypes = getAggTypes({ uiSettings: mockCore.uiSettings }); + aggTypes.buckets.forEach(type => registrySetup.registerBucket(type)); + aggTypes.metrics.forEach(type => registrySetup.registerMetric(type)); + + return registry; +}; + +const aggTypesRegistry = mockAggTypesRegistry(); + let refreshInterval = undefined; let isTimeRangeSelectorEnabled = true; let isAutoRefreshSelectorEnabled = true; @@ -169,10 +199,16 @@ export const npSetup = { getSavedQueryCount: sinon.fake(), }, }, - __LEGACY: { - esClient: { - search: sinon.fake(), - msearch: sinon.fake(), + search: { + aggs: { + calculateAutoTimeExpression: sinon.fake(), + types: aggTypesRegistry.setup(), + }, + __LEGACY: { + esClient: { + search: sinon.fake(), + msearch: sinon.fake(), + }, }, }, fieldFormats: getFieldFormatsRegistry(mockCore), @@ -233,6 +269,9 @@ export const npSetup = { }), }, }, + visTypeVega: { + config: sinon.fake(), + }, }, }; @@ -284,6 +323,9 @@ export const npStart = { }, }, data: { + actions: { + createFiltersFromEvent: Promise.resolve(['yes']), + }, autocomplete: { getProvider: sinon.fake(), }, @@ -355,7 +397,27 @@ export const npStart = { }, }, search: { + aggs: { + calculateAutoTimeExpression: sinon.fake(), + createAggConfigs: sinon.fake(), + createAggConfigs: (indexPattern, configStates = []) => { + return new AggConfigs(indexPattern, configStates, { + typesRegistry: aggTypesRegistry.start(), + }); + }, + types: aggTypesRegistry.start(), + }, __LEGACY: { + AggConfig: sinon.fake(), + AggType: sinon.fake(), + aggTypeFieldFilters: { + addFilter: sinon.fake(), + filter: sinon.fake(), + }, + FieldParamType: sinon.fake(), + MetricAggType: sinon.fake(), + parentPipelineAggHelper: sinon.fake(), + siblingPipelineAggHelper: sinon.fake(), esClient: { search: sinon.fake(), msearch: sinon.fake(), @@ -404,8 +466,22 @@ export function __setup__(coreSetup) { // no-op application register calls (this is overwritten to // bootstrap an LP plugin outside of tests) npSetup.core.application.register = () => {}; + + // Services that need to be set in the legacy platform since the legacy data plugin + // which previously provided them has been removed. + setInjectedMetadata(npSetup.core.injectedMetadata); } export function __start__(coreStart) { npStart.core = coreStart; + + // Services that need to be set in the legacy platform since the legacy data plugin + // which previously provided them has been removed. + setUiSettings(npStart.core.uiSettings); + setQueryService(npStart.plugins.data.query); + setIndexPatterns(npStart.plugins.data.indexPatterns); + setFieldFormats(npStart.plugins.data.fieldFormats); + setSearchService(npStart.plugins.data.search); + setAggs(npStart.plugins.data.search.aggs); + setOverlays(npStart.core.overlays); } diff --git a/src/legacy/ui/public/new_platform/new_platform.ts b/src/legacy/ui/public/new_platform/new_platform.ts index c5369b00f9f762..ce4e1b05518817 100644 --- a/src/legacy/ui/public/new_platform/new_platform.ts +++ b/src/legacy/ui/public/new_platform/new_platform.ts @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + import { IScope } from 'angular'; import { UiActionsStart, UiActionsSetup } from 'src/plugins/ui_actions/public'; @@ -29,6 +30,16 @@ import { ScopedHistory, } from '../../../../core/public'; import { Plugin as DataPlugin } from '../../../../plugins/data/public'; +import { + setIndexPatterns, + setQueryService, + setUiSettings, + setInjectedMetadata, + setFieldFormats, + setSearchService, + setOverlays, + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../plugins/data/public/services'; import { Plugin as ExpressionsPlugin } from '../../../../plugins/expressions/public'; import { Setup as InspectorSetup, @@ -118,11 +129,24 @@ export function __setup__(coreSetup: LegacyCoreSetup, plugins: PluginsSetup) { // Setup compatibility layer for AppService in legacy platform npSetup.core.application.register = legacyAppRegister; + + // Services that need to be set in the legacy platform since the legacy data plugin + // which previously provided them has been removed. + setInjectedMetadata(npSetup.core.injectedMetadata); } export function __start__(coreStart: LegacyCoreStart, plugins: PluginsStart) { npStart.core = coreStart; npStart.plugins = plugins; + + // Services that need to be set in the legacy platform since the legacy data plugin + // which previously provided them has been removed. + setUiSettings(npStart.core.uiSettings); + setQueryService(npStart.plugins.data.query); + setIndexPatterns(npStart.plugins.data.indexPatterns); + setFieldFormats(npStart.plugins.data.fieldFormats); + setSearchService(npStart.plugins.data.search); + setOverlays(npStart.core.overlays); } /** Flag used to ensure `legacyAppRegister` is only called once. */ diff --git a/src/legacy/ui/public/notify/fatal_error.ts b/src/legacy/ui/public/notify/fatal_error.ts index 7fa2ae7ac6fe6a..5614ffea7913e7 100644 --- a/src/legacy/ui/public/notify/fatal_error.ts +++ b/src/legacy/ui/public/notify/fatal_error.ts @@ -18,23 +18,8 @@ */ import { npSetup } from 'ui/new_platform'; -import { - AngularHttpError, - formatAngularHttpError, - isAngularHttpError, -} from '../../../../plugins/kibana_legacy/public'; - -export function addFatalErrorCallback(callback: () => void) { - npSetup.core.fatalErrors.get$().subscribe(() => { - callback(); - }); -} +import { AngularHttpError, addFatalError } from '../../../../plugins/kibana_legacy/public'; export function fatalError(error: AngularHttpError | Error | string, location?: string) { - // add support for angular http errors to newPlatformFatalErrors - if (isAngularHttpError(error)) { - error = formatAngularHttpError(error); - } - - npSetup.core.fatalErrors.add(error, location); + addFatalError(npSetup.core.fatalErrors, error, location); } diff --git a/src/legacy/ui/public/notify/index.js b/src/legacy/ui/public/notify/index.js index 7ec6a394d7e885..51394033e4d2e0 100644 --- a/src/legacy/ui/public/notify/index.js +++ b/src/legacy/ui/public/notify/index.js @@ -17,6 +17,6 @@ * under the License. */ -export { fatalError, addFatalErrorCallback } from './fatal_error'; +export { fatalError } from './fatal_error'; export { toastNotifications } from './toasts'; export { banners } from './banners'; diff --git a/src/legacy/ui/public/timefilter/setup_router.test.js b/src/legacy/ui/public/timefilter/setup_router.test.js index 46465f3a89ef08..2ae9a053ae2db1 100644 --- a/src/legacy/ui/public/timefilter/setup_router.test.js +++ b/src/legacy/ui/public/timefilter/setup_router.test.js @@ -18,7 +18,7 @@ */ import { registerTimefilterWithGlobalState } from './setup_router'; -jest.mock('ui/utils/subscribe_with_scope', () => ({ +jest.mock('../../../../plugins/kibana_legacy/public', () => ({ subscribeWithScope: jest.fn(), })); diff --git a/src/legacy/ui/public/timefilter/setup_router.ts b/src/legacy/ui/public/timefilter/setup_router.ts index 64105b016fb44c..a7492e538b3af1 100644 --- a/src/legacy/ui/public/timefilter/setup_router.ts +++ b/src/legacy/ui/public/timefilter/setup_router.ts @@ -20,10 +20,11 @@ import _ from 'lodash'; import { IScope } from 'angular'; import moment from 'moment'; -import { subscribeWithScope } from 'ui/utils/subscribe_with_scope'; import chrome from 'ui/chrome'; import { RefreshInterval, TimeRange, TimefilterContract } from 'src/plugins/data/public'; import { Subscription } from 'rxjs'; +import { fatalError } from 'ui/notify/fatal_error'; +import { subscribeWithScope } from '../../../../plugins/kibana_legacy/public'; // TODO // remove everything underneath once globalState is no longer an angular service @@ -79,15 +80,25 @@ export const registerTimefilterWithGlobalStateFactory = ( const subscriptions = new Subscription(); subscriptions.add( - subscribeWithScope($rootScope, timefilter.getRefreshIntervalUpdate$(), { - next: updateGlobalStateWithTime, - }) + subscribeWithScope( + $rootScope, + timefilter.getRefreshIntervalUpdate$(), + { + next: updateGlobalStateWithTime, + }, + fatalError + ) ); subscriptions.add( - subscribeWithScope($rootScope, timefilter.getTimeUpdate$(), { - next: updateGlobalStateWithTime, - }) + subscribeWithScope( + $rootScope, + timefilter.getTimeUpdate$(), + { + next: updateGlobalStateWithTime, + }, + fatalError + ) ); $rootScope.$on('$destroy', () => { diff --git a/src/legacy/ui/public/utils/subscribe_with_scope.test.mocks.ts b/src/legacy/ui/public/utils/subscribe_with_scope.test.mocks.ts deleted file mode 100644 index 815d2f09150c7a..00000000000000 --- a/src/legacy/ui/public/utils/subscribe_with_scope.test.mocks.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export const mockFatalError = jest.fn(); -jest.mock('ui/notify/fatal_error', () => ({ - fatalError: mockFatalError, -})); diff --git a/src/legacy/ui/public/vis/lib/index.ts b/src/legacy/ui/public/vis/lib/index.ts deleted file mode 100644 index ce44ad71e4bd87..00000000000000 --- a/src/legacy/ui/public/vis/lib/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { leastCommonInterval } from './least_common_interval'; -export { leastCommonMultiple } from './least_common_multiple'; diff --git a/src/plugins/dashboard_embeddable_container/kibana.json b/src/plugins/dashboard/kibana.json similarity index 81% rename from src/plugins/dashboard_embeddable_container/kibana.json rename to src/plugins/dashboard/kibana.json index 70e37ea6a6d7dc..e5a657555819a4 100644 --- a/src/plugins/dashboard_embeddable_container/kibana.json +++ b/src/plugins/dashboard/kibana.json @@ -1,5 +1,5 @@ { - "id": "dashboard_embeddable_container", + "id": "dashboard", "version": "kibana", "requiredPlugins": [ "data", diff --git a/src/plugins/dashboard_embeddable_container/public/actions/expand_panel_action.test.tsx b/src/plugins/dashboard/public/actions/expand_panel_action.test.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/actions/expand_panel_action.test.tsx rename to src/plugins/dashboard/public/actions/expand_panel_action.test.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/actions/expand_panel_action.tsx b/src/plugins/dashboard/public/actions/expand_panel_action.tsx similarity index 87% rename from src/plugins/dashboard_embeddable_container/public/actions/expand_panel_action.tsx rename to src/plugins/dashboard/public/actions/expand_panel_action.tsx index cf245178306d50..27d4078411564e 100644 --- a/src/plugins/dashboard_embeddable_container/public/actions/expand_panel_action.tsx +++ b/src/plugins/dashboard/public/actions/expand_panel_action.tsx @@ -53,18 +53,12 @@ export class ExpandPanelAction implements ActionByType { } this.lastToast = this.props.notifications.toasts.addSuccess({ - title: i18n.translate( - 'dashboardEmbeddableContainer.addPanel.savedObjectAddedToContainerSuccessMessageTitle', - { - defaultMessage: '{savedObjectName} was added', - values: { - savedObjectName: name, - }, - } - ), + title: i18n.translate('dashboard.addPanel.savedObjectAddedToContainerSuccessMessageTitle', { + defaultMessage: '{savedObjectName} was added', + values: { + savedObjectName: name, + }, + }), 'data-test-subj': 'addObjectToContainerSuccess', }); }; @@ -97,12 +94,9 @@ export class ReplacePanelFlyout extends React.Component { const SavedObjectFinder = this.props.savedObjectsFinder; const savedObjectsFinder = ( diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_constants.ts b/src/plugins/dashboard/public/embeddable/dashboard_constants.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_constants.ts rename to src/plugins/dashboard/public/embeddable/dashboard_constants.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_container.test.tsx b/src/plugins/dashboard/public/embeddable/dashboard_container.test.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_container.test.tsx rename to src/plugins/dashboard/public/embeddable/dashboard_container.test.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_container.tsx b/src/plugins/dashboard/public/embeddable/dashboard_container.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_container.tsx rename to src/plugins/dashboard/public/embeddable/dashboard_container.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_container_factory.tsx b/src/plugins/dashboard/public/embeddable/dashboard_container_factory.tsx similarity index 97% rename from src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_container_factory.tsx rename to src/plugins/dashboard/public/embeddable/dashboard_container_factory.tsx index d08fcfef3529ee..a358e41f7b5074 100644 --- a/src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_container_factory.tsx +++ b/src/plugins/dashboard/public/embeddable/dashboard_container_factory.tsx @@ -65,7 +65,7 @@ export class DashboardContainerFactory extends EmbeddableFactory< } public getDisplayName() { - return i18n.translate('dashboardEmbeddableContainer.factory.displayName', { + return i18n.translate('dashboard.factory.displayName', { defaultMessage: 'dashboard', }); } diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/grid/_dashboard_grid.scss b/src/plugins/dashboard/public/embeddable/grid/_dashboard_grid.scss similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/grid/_dashboard_grid.scss rename to src/plugins/dashboard/public/embeddable/grid/_dashboard_grid.scss diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/grid/_index.scss b/src/plugins/dashboard/public/embeddable/grid/_index.scss similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/grid/_index.scss rename to src/plugins/dashboard/public/embeddable/grid/_index.scss diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/grid/dashboard_grid.test.tsx b/src/plugins/dashboard/public/embeddable/grid/dashboard_grid.test.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/grid/dashboard_grid.test.tsx rename to src/plugins/dashboard/public/embeddable/grid/dashboard_grid.test.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/grid/dashboard_grid.tsx b/src/plugins/dashboard/public/embeddable/grid/dashboard_grid.tsx similarity index 99% rename from src/plugins/dashboard_embeddable_container/public/embeddable/grid/dashboard_grid.tsx rename to src/plugins/dashboard/public/embeddable/grid/dashboard_grid.tsx index 40db43427339d9..3f1f1056cf1b48 100644 --- a/src/plugins/dashboard_embeddable_container/public/embeddable/grid/dashboard_grid.tsx +++ b/src/plugins/dashboard/public/embeddable/grid/dashboard_grid.tsx @@ -164,7 +164,7 @@ class DashboardGridUi extends React.Component { isLayoutInvalid = true; this.props.kibana.notifications.toasts.danger({ title: this.props.intl.formatMessage({ - id: 'dashboardEmbeddableContainer.dashboardGrid.toast.unableToLoadDashboardDangerMessage', + id: 'dashboard.dashboardGrid.toast.unableToLoadDashboardDangerMessage', defaultMessage: 'Unable to load dashboard.', }), body: error.message, diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/grid/index.ts b/src/plugins/dashboard/public/embeddable/grid/index.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/grid/index.ts rename to src/plugins/dashboard/public/embeddable/grid/index.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/index.ts b/src/plugins/dashboard/public/embeddable/index.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/index.ts rename to src/plugins/dashboard/public/embeddable/index.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/panel/_dashboard_panel.scss b/src/plugins/dashboard/public/embeddable/panel/_dashboard_panel.scss similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/panel/_dashboard_panel.scss rename to src/plugins/dashboard/public/embeddable/panel/_dashboard_panel.scss diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/panel/_index.scss b/src/plugins/dashboard/public/embeddable/panel/_index.scss similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/panel/_index.scss rename to src/plugins/dashboard/public/embeddable/panel/_index.scss diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/panel/create_panel_state.test.ts b/src/plugins/dashboard/public/embeddable/panel/create_panel_state.test.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/panel/create_panel_state.test.ts rename to src/plugins/dashboard/public/embeddable/panel/create_panel_state.test.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/panel/create_panel_state.ts b/src/plugins/dashboard/public/embeddable/panel/create_panel_state.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/panel/create_panel_state.ts rename to src/plugins/dashboard/public/embeddable/panel/create_panel_state.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/panel/index.ts b/src/plugins/dashboard/public/embeddable/panel/index.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/panel/index.ts rename to src/plugins/dashboard/public/embeddable/panel/index.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/types.ts b/src/plugins/dashboard/public/embeddable/types.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/types.ts rename to src/plugins/dashboard/public/embeddable/types.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/viewport/_dashboard_viewport.scss b/src/plugins/dashboard/public/embeddable/viewport/_dashboard_viewport.scss similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/viewport/_dashboard_viewport.scss rename to src/plugins/dashboard/public/embeddable/viewport/_dashboard_viewport.scss diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/viewport/_index.scss b/src/plugins/dashboard/public/embeddable/viewport/_index.scss similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/viewport/_index.scss rename to src/plugins/dashboard/public/embeddable/viewport/_index.scss diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/viewport/dashboard_viewport.test.tsx b/src/plugins/dashboard/public/embeddable/viewport/dashboard_viewport.test.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/viewport/dashboard_viewport.test.tsx rename to src/plugins/dashboard/public/embeddable/viewport/dashboard_viewport.test.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable/viewport/dashboard_viewport.tsx b/src/plugins/dashboard/public/embeddable/viewport/dashboard_viewport.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable/viewport/dashboard_viewport.tsx rename to src/plugins/dashboard/public/embeddable/viewport/dashboard_viewport.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable_plugin.ts b/src/plugins/dashboard/public/embeddable_plugin.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable_plugin.ts rename to src/plugins/dashboard/public/embeddable_plugin.ts diff --git a/src/plugins/dashboard_embeddable_container/public/embeddable_plugin_test_samples.ts b/src/plugins/dashboard/public/embeddable_plugin_test_samples.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/embeddable_plugin_test_samples.ts rename to src/plugins/dashboard/public/embeddable_plugin_test_samples.ts diff --git a/src/plugins/dashboard_embeddable_container/public/index.scss b/src/plugins/dashboard/public/index.scss similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/index.scss rename to src/plugins/dashboard/public/index.scss diff --git a/src/plugins/dashboard_embeddable_container/public/index.ts b/src/plugins/dashboard/public/index.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/index.ts rename to src/plugins/dashboard/public/index.ts diff --git a/src/plugins/dashboard_embeddable_container/public/plugin.tsx b/src/plugins/dashboard/public/plugin.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/plugin.tsx rename to src/plugins/dashboard/public/plugin.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/test_helpers/get_sample_dashboard_input.ts b/src/plugins/dashboard/public/test_helpers/get_sample_dashboard_input.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/test_helpers/get_sample_dashboard_input.ts rename to src/plugins/dashboard/public/test_helpers/get_sample_dashboard_input.ts diff --git a/src/plugins/dashboard_embeddable_container/public/test_helpers/index.ts b/src/plugins/dashboard/public/test_helpers/index.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/test_helpers/index.ts rename to src/plugins/dashboard/public/test_helpers/index.ts diff --git a/src/plugins/dashboard_embeddable_container/public/tests/dashboard_container.test.tsx b/src/plugins/dashboard/public/tests/dashboard_container.test.tsx similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/tests/dashboard_container.test.tsx rename to src/plugins/dashboard/public/tests/dashboard_container.test.tsx diff --git a/src/plugins/dashboard_embeddable_container/public/types.ts b/src/plugins/dashboard/public/types.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/types.ts rename to src/plugins/dashboard/public/types.ts diff --git a/src/plugins/dashboard_embeddable_container/public/ui_actions_plugin.ts b/src/plugins/dashboard/public/ui_actions_plugin.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/ui_actions_plugin.ts rename to src/plugins/dashboard/public/ui_actions_plugin.ts diff --git a/src/plugins/dashboard_embeddable_container/public/url_generator.test.ts b/src/plugins/dashboard/public/url_generator.test.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/url_generator.test.ts rename to src/plugins/dashboard/public/url_generator.test.ts diff --git a/src/plugins/dashboard_embeddable_container/public/url_generator.ts b/src/plugins/dashboard/public/url_generator.ts similarity index 100% rename from src/plugins/dashboard_embeddable_container/public/url_generator.ts rename to src/plugins/dashboard/public/url_generator.ts diff --git a/src/plugins/data/common/field_formats/converters/source.ts b/src/plugins/data/common/field_formats/converters/source.ts index 702e1579e945f2..7f13d5526cc157 100644 --- a/src/plugins/data/common/field_formats/converters/source.ts +++ b/src/plugins/data/common/field_formats/converters/source.ts @@ -18,13 +18,29 @@ */ import { template, escape, keys } from 'lodash'; -// @ts-ignore -import { noWhiteSpace } from '../../../../../legacy/core_plugins/kibana/common/utils/no_white_space'; import { shortenDottedString } from '../../utils'; import { KBN_FIELD_TYPES } from '../../kbn_field_types/types'; import { FieldFormat } from '../field_format'; import { TextContextTypeConvert, HtmlContextTypeConvert, FIELD_FORMAT_IDS } from '../types'; +/** + * Remove all of the whitespace between html tags + * so that inline elements don't have extra spaces. + * + * If you have inline elements (span, a, em, etc.) and any + * amount of whitespace around them in your markup, then the + * browser will push them apart. This is ugly in certain + * scenarios and is only fixed by removing the whitespace + * from the html in the first place (or ugly css hacks). + * + * @param {string} html - the html to modify + * @return {string} - modified html + */ +function noWhiteSpace(html: string) { + const TAGS_WITH_WS = />\s+<'); +} + const templateHtml = `
<% defPairs.forEach(function (def) { %> diff --git a/src/plugins/data/common/index.ts b/src/plugins/data/common/index.ts index 7fa6e88b427a95..cf8c0bfe3d4345 100644 --- a/src/plugins/data/common/index.ts +++ b/src/plugins/data/common/index.ts @@ -17,12 +17,12 @@ * under the License. */ -export * from './query'; +export * from './constants'; +export * from './es_query'; export * from './field_formats'; -export * from './kbn_field_types'; export * from './index_patterns'; -export * from './es_query'; -export * from './utils'; -export * from './types'; +export * from './kbn_field_types'; +export * from './query'; export * from './search'; -export * from './constants'; +export * from './search/aggs'; +export * from './types'; diff --git a/src/plugins/data/common/index_patterns/fields/utils.ts b/src/plugins/data/common/index_patterns/fields/utils.ts index e587c0fe632f11..58f348b24d92e1 100644 --- a/src/plugins/data/common/index_patterns/fields/utils.ts +++ b/src/plugins/data/common/index_patterns/fields/utils.ts @@ -17,7 +17,8 @@ * under the License. */ -import { getFilterableKbnTypeNames, IFieldType } from '../..'; +import { getFilterableKbnTypeNames } from '../../kbn_field_types'; +import { IFieldType } from './types'; const filterableTypes = getFilterableKbnTypeNames(); diff --git a/src/legacy/core_plugins/data/common/date_histogram_interval.test.ts b/src/plugins/data/common/search/aggs/date_interval_utils/date_histogram_interval.test.ts similarity index 100% rename from src/legacy/core_plugins/data/common/date_histogram_interval.test.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/date_histogram_interval.test.ts diff --git a/src/legacy/core_plugins/data/common/date_histogram_interval.ts b/src/plugins/data/common/search/aggs/date_interval_utils/date_histogram_interval.ts similarity index 100% rename from src/legacy/core_plugins/data/common/date_histogram_interval.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/date_histogram_interval.ts diff --git a/src/legacy/core_plugins/data/common/index.ts b/src/plugins/data/common/search/aggs/date_interval_utils/index.ts similarity index 70% rename from src/legacy/core_plugins/data/common/index.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/index.ts index 403ea4821ffbc3..67b9cfecba00fb 100644 --- a/src/legacy/core_plugins/data/common/index.ts +++ b/src/plugins/data/common/search/aggs/date_interval_utils/index.ts @@ -17,13 +17,11 @@ * under the License. */ -/** @public static code */ -export { dateHistogramInterval } from './date_histogram_interval'; -/** @public static code */ -export { - isValidEsInterval, - InvalidEsCalendarIntervalError, - InvalidEsIntervalFormatError, - parseEsInterval, - ParsedInterval, -} from './parse_es_interval'; +export * from './date_histogram_interval'; +export * from './invalid_es_calendar_interval_error'; +export * from './invalid_es_interval_format_error'; +export * from './is_valid_es_interval'; +export * from './is_valid_interval'; +export * from './parse_interval'; +export * from './parse_es_interval'; +export * from './to_absolute_dates'; diff --git a/src/legacy/core_plugins/data/common/parse_es_interval/invalid_es_calendar_interval_error.ts b/src/plugins/data/common/search/aggs/date_interval_utils/invalid_es_calendar_interval_error.ts similarity index 100% rename from src/legacy/core_plugins/data/common/parse_es_interval/invalid_es_calendar_interval_error.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/invalid_es_calendar_interval_error.ts diff --git a/src/legacy/core_plugins/data/common/parse_es_interval/invalid_es_interval_format_error.ts b/src/plugins/data/common/search/aggs/date_interval_utils/invalid_es_interval_format_error.ts similarity index 100% rename from src/legacy/core_plugins/data/common/parse_es_interval/invalid_es_interval_format_error.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/invalid_es_interval_format_error.ts diff --git a/src/legacy/core_plugins/data/common/parse_es_interval/is_valid_es_interval.ts b/src/plugins/data/common/search/aggs/date_interval_utils/is_valid_es_interval.ts similarity index 100% rename from src/legacy/core_plugins/data/common/parse_es_interval/is_valid_es_interval.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/is_valid_es_interval.ts diff --git a/src/plugins/data/common/search/aggs/date_interval_utils/is_valid_interval.ts b/src/plugins/data/common/search/aggs/date_interval_utils/is_valid_interval.ts new file mode 100644 index 00000000000000..03d84c5e2c97b7 --- /dev/null +++ b/src/plugins/data/common/search/aggs/date_interval_utils/is_valid_interval.ts @@ -0,0 +1,41 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { isValidEsInterval } from './is_valid_es_interval'; +import { leastCommonInterval } from './least_common_interval'; + +// When base interval is set, check for least common interval and allow +// input the value is the same. This means that the input interval is a +// multiple of the base interval. +function _parseWithBase(value: string, baseInterval: string) { + try { + const interval = leastCommonInterval(baseInterval, value); + return interval === value.replace(/\s/g, ''); + } catch (e) { + return false; + } +} + +export function isValidInterval(value: string, baseInterval?: string) { + if (baseInterval) { + return _parseWithBase(value, baseInterval); + } else { + return isValidEsInterval(value); + } +} diff --git a/src/legacy/ui/public/vis/lib/least_common_interval.test.ts b/src/plugins/data/common/search/aggs/date_interval_utils/least_common_interval.test.ts similarity index 99% rename from src/legacy/ui/public/vis/lib/least_common_interval.test.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/least_common_interval.test.ts index 3f780665a949f6..f9ff4bfea222b0 100644 --- a/src/legacy/ui/public/vis/lib/least_common_interval.test.ts +++ b/src/plugins/data/common/search/aggs/date_interval_utils/least_common_interval.test.ts @@ -19,8 +19,6 @@ import { leastCommonInterval } from './least_common_interval'; -jest.mock('ui/new_platform'); - describe('leastCommonInterval', () => { it('should correctly return lowest common interval for fixed units', () => { expect(leastCommonInterval('1ms', '1s')).toBe('1s'); diff --git a/src/legacy/ui/public/vis/lib/least_common_interval.ts b/src/plugins/data/common/search/aggs/date_interval_utils/least_common_interval.ts similarity index 96% rename from src/legacy/ui/public/vis/lib/least_common_interval.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/least_common_interval.ts index 72426855f70af5..9df17b4c24a982 100644 --- a/src/legacy/ui/public/vis/lib/least_common_interval.ts +++ b/src/plugins/data/common/search/aggs/date_interval_utils/least_common_interval.ts @@ -19,7 +19,7 @@ import dateMath from '@elastic/datemath'; import { leastCommonMultiple } from './least_common_multiple'; -import { parseEsInterval } from '../../../../core_plugins/data/common/parse_es_interval/parse_es_interval'; +import { parseEsInterval } from './parse_es_interval'; /** * Finds the lowest common interval between two given ES date histogram intervals diff --git a/src/legacy/ui/public/vis/lib/least_common_multiple.test.ts b/src/plugins/data/common/search/aggs/date_interval_utils/least_common_multiple.test.ts similarity index 100% rename from src/legacy/ui/public/vis/lib/least_common_multiple.test.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/least_common_multiple.test.ts diff --git a/src/legacy/ui/public/vis/lib/least_common_multiple.ts b/src/plugins/data/common/search/aggs/date_interval_utils/least_common_multiple.ts similarity index 100% rename from src/legacy/ui/public/vis/lib/least_common_multiple.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/least_common_multiple.ts diff --git a/src/legacy/core_plugins/data/common/parse_es_interval/parse_es_interval.test.ts b/src/plugins/data/common/search/aggs/date_interval_utils/parse_es_interval.test.ts similarity index 100% rename from src/legacy/core_plugins/data/common/parse_es_interval/parse_es_interval.test.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/parse_es_interval.test.ts diff --git a/src/legacy/core_plugins/data/common/parse_es_interval/parse_es_interval.ts b/src/plugins/data/common/search/aggs/date_interval_utils/parse_es_interval.ts similarity index 100% rename from src/legacy/core_plugins/data/common/parse_es_interval/parse_es_interval.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/parse_es_interval.ts diff --git a/src/plugins/data/common/utils/parse_interval.test.ts b/src/plugins/data/common/search/aggs/date_interval_utils/parse_interval.test.ts similarity index 100% rename from src/plugins/data/common/utils/parse_interval.test.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/parse_interval.test.ts diff --git a/src/plugins/data/common/utils/parse_interval.ts b/src/plugins/data/common/search/aggs/date_interval_utils/parse_interval.ts similarity index 100% rename from src/plugins/data/common/utils/parse_interval.ts rename to src/plugins/data/common/search/aggs/date_interval_utils/parse_interval.ts diff --git a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/_utils.js b/src/plugins/data/common/search/aggs/date_interval_utils/to_absolute_dates.ts similarity index 68% rename from src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/_utils.js rename to src/plugins/data/common/search/aggs/date_interval_utils/to_absolute_dates.ts index 63f8ced97e9dc4..98d752a72e28ae 100644 --- a/src/legacy/core_plugins/kibana/public/discover/__tests__/query_parameters/_utils.js +++ b/src/plugins/data/common/search/aggs/date_interval_utils/to_absolute_dates.ts @@ -17,18 +17,19 @@ * under the License. */ -import _ from 'lodash'; +import dateMath from '@elastic/datemath'; +import { TimeRange } from '../../../../common'; -export function createStateStub(overrides) { - return _.merge( - { - queryParameters: { - defaultStepSize: 3, - indexPatternId: 'INDEX_PATTERN_ID', - predecessorCount: 10, - successorCount: 10, - }, - }, - overrides - ); +export function toAbsoluteDates(range: TimeRange) { + const fromDate = dateMath.parse(range.from); + const toDate = dateMath.parse(range.to, { roundUp: true }); + + if (!fromDate || !toDate) { + return; + } + + return { + from: fromDate.toDate(), + to: toDate.toDate(), + }; } diff --git a/src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public/legacy.ts b/src/plugins/data/common/search/aggs/index.ts similarity index 95% rename from src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public/legacy.ts rename to src/plugins/data/common/search/aggs/index.ts index 9880b336e76e5c..09ea958ccaa85e 100644 --- a/src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public/legacy.ts +++ b/src/plugins/data/common/search/aggs/index.ts @@ -16,3 +16,5 @@ * specific language governing permissions and limitations * under the License. */ + +export * from './date_interval_utils'; diff --git a/src/plugins/data/common/utils/index.ts b/src/plugins/data/common/utils/index.ts index c5f1276feb81dd..8b8686c51b9c19 100644 --- a/src/plugins/data/common/utils/index.ts +++ b/src/plugins/data/common/utils/index.ts @@ -17,5 +17,5 @@ * under the License. */ +/** @internal */ export { shortenDottedString } from './shorten_dotted_string'; -export { parseInterval } from './parse_interval'; diff --git a/src/plugins/data/kibana.json b/src/plugins/data/kibana.json index 6553ce8ce4d915..f5df747f17e1ea 100644 --- a/src/plugins/data/kibana.json +++ b/src/plugins/data/kibana.json @@ -3,6 +3,9 @@ "version": "kibana", "server": true, "ui": true, - "requiredPlugins": ["uiActions"], + "requiredPlugins": [ + "expressions", + "uiActions" + ], "optionalPlugins": ["usageCollection"] } diff --git a/src/legacy/core_plugins/data/public/actions/filters/brush_event.test.ts b/src/plugins/data/public/actions/filters/brush_event.test.ts similarity index 93% rename from src/legacy/core_plugins/data/public/actions/filters/brush_event.test.ts rename to src/plugins/data/public/actions/filters/brush_event.test.ts index eb29530f92fee7..60244354f06e4b 100644 --- a/src/legacy/core_plugins/data/public/actions/filters/brush_event.test.ts +++ b/src/plugins/data/public/actions/filters/brush_event.test.ts @@ -21,11 +21,10 @@ import moment from 'moment'; import { onBrushEvent, BrushEvent } from './brush_event'; -import { mockDataServices } from '../../search/aggs/test_helpers'; -import { IndexPatternsContract } from '../../../../../../plugins/data/public'; -import { dataPluginMock } from '../../../../../../plugins/data/public/mocks'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { setIndexPatterns } from '../../../../../../plugins/data/public/services'; +import { IndexPatternsContract } from '../../../public'; +import { dataPluginMock } from '../../../public/mocks'; +import { setIndexPatterns } from '../../../public/services'; +import { mockDataServices } from '../../../public/search/aggs/test_helpers'; describe('brushEvent', () => { const DAY_IN_MS = 24 * 60 * 60 * 1000; diff --git a/src/legacy/core_plugins/data/public/actions/filters/brush_event.ts b/src/plugins/data/public/actions/filters/brush_event.ts similarity index 89% rename from src/legacy/core_plugins/data/public/actions/filters/brush_event.ts rename to src/plugins/data/public/actions/filters/brush_event.ts index 00990d21ccf378..714f005fbeb6dd 100644 --- a/src/legacy/core_plugins/data/public/actions/filters/brush_event.ts +++ b/src/plugins/data/public/actions/filters/brush_event.ts @@ -19,11 +19,9 @@ import { get, last } from 'lodash'; import moment from 'moment'; -import { esFilters, IFieldType, RangeFilterParams } from '../../../../../../plugins/data/public'; +import { esFilters, IFieldType, RangeFilterParams } from '../../../public'; +import { getIndexPatterns } from '../../../public/services'; import { deserializeAggConfig } from '../../search/expressions/utils'; -// should be removed after moving into new platform plugins data folder -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getIndexPatterns } from '../../../../../../plugins/data/public/services'; export interface BrushEvent { data: { diff --git a/src/legacy/core_plugins/data/public/actions/filters/create_filters_from_event.test.ts b/src/plugins/data/public/actions/filters/create_filters_from_event.test.ts similarity index 89% rename from src/legacy/core_plugins/data/public/actions/filters/create_filters_from_event.test.ts rename to src/plugins/data/public/actions/filters/create_filters_from_event.test.ts index bfba4d7f4c8dad..1ed09002816d1f 100644 --- a/src/legacy/core_plugins/data/public/actions/filters/create_filters_from_event.test.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_event.test.ts @@ -22,14 +22,11 @@ import { FieldFormatsGetConfigFn, esFilters, IndexPatternsContract, -} from '../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { setIndexPatterns } from '../../../../../../plugins/data/public/services'; -import { dataPluginMock } from '../../../../../../plugins/data/public/mocks'; +} from '../../../public'; +import { dataPluginMock } from '../../../public/mocks'; +import { setIndexPatterns } from '../../../public/services'; +import { mockDataServices } from '../../../public/search/aggs/test_helpers'; import { createFiltersFromEvent, EventData } from './create_filters_from_event'; -import { mockDataServices } from '../../search/aggs/test_helpers'; - -jest.mock('ui/new_platform'); const mockField = { name: 'bytes', diff --git a/src/legacy/core_plugins/data/public/actions/filters/create_filters_from_event.ts b/src/plugins/data/public/actions/filters/create_filters_from_event.ts similarity index 89% rename from src/legacy/core_plugins/data/public/actions/filters/create_filters_from_event.ts rename to src/plugins/data/public/actions/filters/create_filters_from_event.ts index 3713c781b0958d..e62945a5920728 100644 --- a/src/legacy/core_plugins/data/public/actions/filters/create_filters_from_event.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_event.ts @@ -17,11 +17,10 @@ * under the License. */ -import { KibanaDatatable } from '../../../../../../plugins/expressions/public'; -import { esFilters, Filter } from '../../../../../../plugins/data/public'; -import { deserializeAggConfig } from '../../search/expressions/utils'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getIndexPatterns } from '../../../../../../plugins/data/public/services'; +import { KibanaDatatable } from '../../../../../plugins/expressions/public'; +import { deserializeAggConfig } from '../../search/expressions'; +import { esFilters, Filter } from '../../../public'; +import { getIndexPatterns } from '../../../public/services'; export interface EventData { table: Pick; @@ -113,7 +112,8 @@ const createFilter = async (table: EventData['table'], columnIndex: number, rowI return filter; }; -const createFiltersFromEvent = async (dataPoints: EventData[], negate?: boolean) => { +/** @public */ +export const createFiltersFromEvent = async (dataPoints: EventData[], negate?: boolean) => { const filters: Filter[] = []; await Promise.all( @@ -135,5 +135,3 @@ const createFiltersFromEvent = async (dataPoints: EventData[], negate?: boolean) return filters; }; - -export { createFilter, createFiltersFromEvent }; diff --git a/src/plugins/data/public/actions/index.ts b/src/plugins/data/public/actions/index.ts index e3dc9760aa8b83..cdb84ff13f25ef 100644 --- a/src/plugins/data/public/actions/index.ts +++ b/src/plugins/data/public/actions/index.ts @@ -18,3 +18,6 @@ */ export { ACTION_GLOBAL_APPLY_FILTER, createFilterAction } from './apply_filter_action'; +export { createFiltersFromEvent } from './filters/create_filters_from_event'; +export { selectRangeAction } from './select_range_action'; +export { valueClickAction } from './value_click_action'; diff --git a/src/legacy/core_plugins/data/public/actions/select_range_action.ts b/src/plugins/data/public/actions/select_range_action.ts similarity index 96% rename from src/legacy/core_plugins/data/public/actions/select_range_action.ts rename to src/plugins/data/public/actions/select_range_action.ts index 21046f8bb834fb..6e1f16a09e803f 100644 --- a/src/legacy/core_plugins/data/public/actions/select_range_action.ts +++ b/src/plugins/data/public/actions/select_range_action.ts @@ -22,9 +22,9 @@ import { createAction, IncompatibleActionError, ActionByType, -} from '../../../../../plugins/ui_actions/public'; +} from '../../../../plugins/ui_actions/public'; import { onBrushEvent } from './filters/brush_event'; -import { FilterManager, TimefilterContract, esFilters } from '../../../../../plugins/data/public'; +import { FilterManager, TimefilterContract, esFilters } from '..'; export const ACTION_SELECT_RANGE = 'ACTION_SELECT_RANGE'; diff --git a/src/legacy/core_plugins/data/public/actions/value_click_action.ts b/src/plugins/data/public/actions/value_click_action.ts similarity index 86% rename from src/legacy/core_plugins/data/public/actions/value_click_action.ts rename to src/plugins/data/public/actions/value_click_action.ts index 4c69bc82629227..01c32e27da07d0 100644 --- a/src/legacy/core_plugins/data/public/actions/value_click_action.ts +++ b/src/plugins/data/public/actions/value_click_action.ts @@ -18,24 +18,16 @@ */ import { i18n } from '@kbn/i18n'; -import { toMountPoint } from '../../../../../plugins/kibana_react/public'; +import { toMountPoint } from '../../../../plugins/kibana_react/public'; import { ActionByType, createAction, IncompatibleActionError, -} from '../../../../../plugins/ui_actions/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getOverlays, getIndexPatterns } from '../../../../../plugins/data/public/services'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { applyFiltersPopover } from '../../../../../plugins/data/public/ui/apply_filters'; -// @ts-ignore +} from '../../../../plugins/ui_actions/public'; +import { getOverlays, getIndexPatterns } from '../services'; +import { applyFiltersPopover } from '../ui/apply_filters'; import { createFiltersFromEvent } from './filters/create_filters_from_event'; -import { - Filter, - FilterManager, - TimefilterContract, - esFilters, -} from '../../../../../plugins/data/public'; +import { Filter, FilterManager, TimefilterContract, esFilters } from '..'; export const ACTION_VALUE_CLICK = 'ACTION_VALUE_CLICK'; diff --git a/src/plugins/data/public/field_formats/utils/deserialize.ts b/src/plugins/data/public/field_formats/utils/deserialize.ts index c10ebfbe3eb1ed..c735ad196fbee7 100644 --- a/src/plugins/data/public/field_formats/utils/deserialize.ts +++ b/src/plugins/data/public/field_formats/utils/deserialize.ts @@ -19,14 +19,8 @@ import { identity } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { - convertDateRangeToString, - DateRangeKey, -} from '../../../../../legacy/core_plugins/data/public/search/aggs/buckets/lib/date_range'; -import { - convertIPRangeToString, - IpRangeKey, -} from '../../../../../legacy/core_plugins/data/public/search/aggs/buckets/lib/ip_range'; +import { convertDateRangeToString, DateRangeKey } from '../../search/aggs/buckets/lib/date_range'; +import { convertIPRangeToString, IpRangeKey } from '../../search/aggs/buckets/lib/ip_range'; import { SerializedFieldFormat } from '../../../../expressions/common/types'; import { FieldFormatId, FieldFormatsContentType, IFieldFormat } from '../..'; import { FieldFormat } from '../../../common'; diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts index 7d739103eb2bbb..58bd9a5ab05d73 100644 --- a/src/plugins/data/public/index.ts +++ b/src/plugins/data/public/index.ts @@ -26,27 +26,27 @@ import { PluginInitializerContext } from '../../../core/public'; */ import { - FILTERS, buildEmptyFilter, - buildPhrasesFilter, buildExistsFilter, buildPhraseFilter, + buildPhrasesFilter, buildQueryFilter, buildRangeFilter, - toggleFilterNegated, disableFilter, + FILTERS, FilterStateStore, + getDisplayValueFromFilter, getPhraseFilterField, getPhraseFilterValue, - isPhraseFilter, isExistsFilter, - isPhrasesFilter, - isRangeFilter, + isFilterPinned, isMatchAllFilter, isMissingFilter, + isPhraseFilter, + isPhrasesFilter, isQueryStringFilter, - getDisplayValueFromFilter, - isFilterPinned, + isRangeFilter, + toggleFilterNegated, } from '../common'; import { FilterLabel } from './ui/filter_bar'; @@ -283,7 +283,65 @@ export { * Search: */ +import { + // aggs + AggConfigs, + aggTypeFilters, + aggGroupNamesMap, + CidrMask, + convertDateRangeToString, + convertIPRangeToString, + intervalOptions, // only used in Discover + isDateHistogramBucketAggConfig, + isStringType, + isType, + parentPipelineType, + propFilter, + siblingPipelineType, + termsAggFilter, + // expressions utils + getRequestInspectorStats, + getResponseInspectorStats, + // tabify + tabifyAggResponse, + tabifyGetColumns, +} from './search'; + +import { + dateHistogramInterval, + InvalidEsCalendarIntervalError, + InvalidEsIntervalFormatError, + isValidEsInterval, + isValidInterval, + parseEsInterval, + parseInterval, + toAbsoluteDates, +} from '../common'; + +export { ParsedInterval } from '../common'; + export { + // aggs + AggGroupNames, + AggParam, // only the type is used externally, only in vis editor + AggParamOption, // only the type is used externally + AggParamType, + AggTypeFieldFilters, // TODO convert to interface + AggTypeFilters, // TODO convert to interface + BUCKET_TYPES, + DateRangeKey, // only used in field formatter deserialization, which will live in data + IAggConfig, + IAggConfigs, + IAggGroupNames, + IAggType, + IFieldParamType, + IMetricAggType, + IpRangeKey, // only used in field formatter deserialization, which will live in data + METRIC_TYPES, + OptionedParamEditorProps, // only type is used externally + OptionedParamType, + OptionedValueProp, // only type is used externally + // search ES_SEARCH_STRATEGY, SYNC_SEARCH_STRATEGY, getEsPreference, @@ -311,8 +369,44 @@ export { EsQuerySortValue, SortDirection, FetchOptions, + // tabify + TabbedAggColumn, + TabbedAggRow, + TabbedTable, } from './search'; +// Search namespace +export const search = { + aggs: { + AggConfigs, + aggGroupNamesMap, + aggTypeFilters, + CidrMask, + convertDateRangeToString, + convertIPRangeToString, + dateHistogramInterval, + intervalOptions, // only used in Discover + InvalidEsCalendarIntervalError, + InvalidEsIntervalFormatError, + isDateHistogramBucketAggConfig, + isStringType, + isType, + isValidEsInterval, + isValidInterval, + parentPipelineType, + parseEsInterval, + parseInterval, + propFilter, + siblingPipelineType, + termsAggFilter, + toAbsoluteDates, + }, + getRequestInspectorStats, + getResponseInspectorStats, + tabifyAggResponse, + tabifyGetColumns, +}; + /* * UI components */ @@ -354,8 +448,6 @@ export { // kbn field types castEsToKbnFieldTypeName, getKbnTypeNames, - // utils - parseInterval, } from '../common'; /* diff --git a/src/plugins/data/public/index_patterns/fields/field.ts b/src/plugins/data/public/index_patterns/fields/field.ts index f59fbefbea451e..1554565d1403ee 100644 --- a/src/plugins/data/public/index_patterns/fields/field.ts +++ b/src/plugins/data/public/index_patterns/fields/field.ts @@ -22,13 +22,8 @@ import { i18n } from '@kbn/i18n'; import { ObjDefine } from './obj_define'; import { IndexPattern } from '../index_patterns'; import { getNotifications, getFieldFormats } from '../../services'; -import { - IFieldType, - getKbnFieldType, - IFieldSubType, - shortenDottedString, - FieldFormat, -} from '../../../common'; +import { IFieldType, getKbnFieldType, IFieldSubType, FieldFormat } from '../../../common'; +import { shortenDottedString } from '../../../common/utils'; export type FieldSpec = Record; diff --git a/src/plugins/data/public/mocks.ts b/src/plugins/data/public/mocks.ts index 013b2f393b60be..c5cff1c5c68d91 100644 --- a/src/plugins/data/public/mocks.ts +++ b/src/plugins/data/public/mocks.ts @@ -17,13 +17,12 @@ * under the License. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { coreMock } from '../../../../src/core/public/mocks'; import { Plugin, DataPublicPluginSetup, DataPublicPluginStart, IndexPatternsContract } from '.'; import { fieldFormatsMock } from '../common/field_formats/mocks'; import { searchSetupMock } from './search/mocks'; +import { AggTypeFieldFilters } from './search/aggs'; +import { searchAggsStartMock } from './search/aggs/mocks'; import { queryServiceMock } from './query/mocks'; -import { getCalculateAutoTimeExpression } from './search/aggs/buckets/lib/date_utils'; export type Setup = jest.Mocked>; export type Start = jest.Mocked>; @@ -53,17 +52,24 @@ const createSetupContract = (): Setup => { }; const createStartContract = (): Start => { - const coreStart = coreMock.createStart(); const queryStartMock = queryServiceMock.createStartContract(); const startContract = { + actions: { + createFiltersFromEvent: jest.fn().mockResolvedValue(['yes']), + }, autocomplete: autocompleteMock, getSuggestions: jest.fn(), search: { - aggs: { - calculateAutoTimeExpression: getCalculateAutoTimeExpression(coreStart.uiSettings), - }, + aggs: searchAggsStartMock(), search: jest.fn(), __LEGACY: { + AggConfig: jest.fn() as any, + AggType: jest.fn(), + aggTypeFieldFilters: new AggTypeFieldFilters(), + FieldParamType: jest.fn(), + MetricAggType: jest.fn(), + parentPipelineAggHelper: jest.fn() as any, + siblingPipelineAggHelper: jest.fn() as any, esClient: { search: jest.fn(), msearch: jest.fn(), @@ -95,7 +101,7 @@ const createStartContract = (): Start => { }; export { searchSourceMock } from './search/mocks'; -export { getCalculateAutoTimeExpression } from './search/aggs/buckets/lib/date_utils'; +export { getCalculateAutoTimeExpression } from './search/aggs'; export const dataPluginMock = { createSetupContract, diff --git a/src/plugins/data/public/plugin.ts b/src/plugins/data/public/plugin.ts index a199a0419aea64..183ef23e25f7c4 100644 --- a/src/plugins/data/public/plugin.ts +++ b/src/plugins/data/public/plugin.ts @@ -38,20 +38,40 @@ import { QueryService } from './query'; import { createIndexPatternSelect } from './ui/index_pattern_select'; import { IndexPatternsService } from './index_patterns'; import { - setNotifications, setFieldFormats, - setOverlays, setIndexPatterns, + setInjectedMetadata, + setNotifications, + setOverlays, + setQueryService, + setSearchService, setUiSettings, } from './services'; -import { createFilterAction, ACTION_GLOBAL_APPLY_FILTER } from './actions'; -import { APPLY_FILTER_TRIGGER } from '../../embeddable/public'; import { createSearchBar } from './ui/search_bar/create_search_bar'; +import { esaggs } from './search/expressions'; +import { + APPLY_FILTER_TRIGGER, + SELECT_RANGE_TRIGGER, + VALUE_CLICK_TRIGGER, +} from '../../embeddable/public'; +import { ACTION_GLOBAL_APPLY_FILTER, createFilterAction, createFiltersFromEvent } from './actions'; import { ApplyGlobalFilterActionContext } from './actions/apply_filter_action'; +import { + selectRangeAction, + SelectRangeActionContext, + ACTION_SELECT_RANGE, +} from './actions/select_range_action'; +import { + valueClickAction, + ACTION_VALUE_CLICK, + ValueClickActionContext, +} from './actions/value_click_action'; declare module '../../ui_actions/public' { export interface ActionContextMapping { [ACTION_GLOBAL_APPLY_FILTER]: ApplyGlobalFilterActionContext; + [ACTION_SELECT_RANGE]: SelectRangeActionContext; + [ACTION_VALUE_CLICK]: ValueClickActionContext; } } @@ -71,7 +91,14 @@ export class DataPublicPlugin implements Plugin; + +// Warning: (ae-forgotten-export) The symbol "BaseParamType" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "AggParam" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type AggParam = BaseParamType; + +// Warning: (ae-missing-release-tag) "AggParamOption" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AggParamOption { + // (undocumented) + display: string; + // Warning: (ae-forgotten-export) The symbol "AggConfig" needs to be exported by the entry point index.d.ts + // + // (undocumented) + enabled?(agg: AggConfig): boolean; + // (undocumented) + val: string; +} + +// Warning: (ae-missing-release-tag) "AggParamType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class AggParamType extends BaseParamType { + constructor(config: Record); + // (undocumented) + allowedAggs: string[]; + // (undocumented) + makeAgg: (agg: TAggConfig, state?: any) => TAggConfig; +} + +// Warning: (ae-missing-release-tag) "AggTypeFieldFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "AggTypeFieldFilter" +// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "AggType" +// +// @public +export class AggTypeFieldFilters { + // Warning: (ae-forgotten-export) The symbol "AggTypeFieldFilter" needs to be exported by the entry point index.d.ts + // Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "AggTypeFieldFilter" + addFilter(filter: AggTypeFieldFilter): void; + // Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "any" + filter(fields: IndexPatternField_2[], aggConfig: IAggConfig): IndexPatternField_2[]; + } + +// Warning: (ae-missing-release-tag) "AggTypeFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "AggTypeFilter" +// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "AggConfig" +// +// @public +export class AggTypeFilters { + // Warning: (ae-forgotten-export) The symbol "AggTypeFilter" needs to be exported by the entry point index.d.ts + // Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "AggTypeFilter" + addFilter(filter: AggTypeFilter): void; + // Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "AggType" + filter(aggTypes: IAggType[], indexPattern: IndexPattern, aggConfig: IAggConfig, aggFilter: string[]): IAggType[]; + } + // Warning: (ae-forgotten-export) The symbol "DateFormat" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "baseFormattersPublic" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const baseFormattersPublic: (import("../../common").IFieldFormatType | typeof DateFormat)[]; +// Warning: (ae-missing-release-tag) "BUCKET_TYPES" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum BUCKET_TYPES { + // (undocumented) + DATE_HISTOGRAM = "date_histogram", + // (undocumented) + DATE_RANGE = "date_range", + // (undocumented) + FILTER = "filter", + // (undocumented) + FILTERS = "filters", + // (undocumented) + GEOHASH_GRID = "geohash_grid", + // (undocumented) + GEOTILE_GRID = "geotile_grid", + // (undocumented) + HISTOGRAM = "histogram", + // (undocumented) + IP_RANGE = "ip_range", + // (undocumented) + RANGE = "range", + // (undocumented) + SIGNIFICANT_TERMS = "significant_terms", + // (undocumented) + TERMS = "terms" +} + // Warning: (ae-missing-release-tag) "castEsToKbnFieldTypeName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -123,6 +222,10 @@ export interface DataPublicPluginSetup { // // @public (undocumented) export interface DataPublicPluginStart { + // (undocumented) + actions: { + createFiltersFromEvent: typeof createFiltersFromEvent; + }; // Warning: (ae-forgotten-export) The symbol "AutocompleteStart" needs to be exported by the entry point index.d.ts // // (undocumented) @@ -148,6 +251,16 @@ export interface DataPublicPluginStart { }; } +// Warning: (ae-missing-release-tag) "DateRangeKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface DateRangeKey { + // (undocumented) + from: number; + // (undocumented) + to: number; +} + // @public (undocumented) export enum ES_FIELD_TYPES { // (undocumented) @@ -345,7 +458,7 @@ export type FieldFormatId = FIELD_FORMAT_IDS | string; export const fieldFormats: { FieldFormat: typeof FieldFormat; FieldFormatsRegistry: typeof FieldFormatsRegistry; - serialize: (agg: import("../../../legacy/core_plugins/data/public/search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; + serialize: (agg: import("./search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; DEFAULT_CONVERTER_COLOR: { range: string; regex: string; @@ -473,6 +586,27 @@ export function getSearchErrorType({ message }: Pick): " // @public (undocumented) export function getTime(indexPattern: IIndexPattern | undefined, timeRange: TimeRange, forceNow?: Date): import("../..").RangeFilter | undefined; +// Warning: (ae-missing-release-tag) "IAggConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type IAggConfig = AggConfig; + +// Warning: (ae-forgotten-export) The symbol "AggConfigs" needs to be exported by the entry point index.d.ts +// +// @internal +export type IAggConfigs = AggConfigs; + +// Warning: (ae-missing-release-tag) "IAggGroupNames" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type IAggGroupNames = $Values; + +// Warning: (ae-forgotten-export) The symbol "AggType" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "IAggType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type IAggType = AggType; + // Warning: (ae-missing-release-tag) "IDataPluginServices" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -521,6 +655,12 @@ export type IFieldFormat = PublicMethodsOf; // @public (undocumented) export type IFieldFormatsRegistry = PublicMethodsOf; +// Warning: (ae-forgotten-export) The symbol "FieldParamType" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "IFieldParamType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type IFieldParamType = FieldParamType; + // Warning: (ae-missing-release-tag) "IFieldSubType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -613,6 +753,12 @@ export interface IKibanaSearchResponse { total?: number; } +// Warning: (ae-forgotten-export) The symbol "MetricAggType" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "IMetricAggType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type IMetricAggType = MetricAggType; + // Warning: (ae-missing-release-tag) "IndexPattern" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -878,6 +1024,18 @@ export type InputTimeRange = TimeRange | { to: Moment; }; +// Warning: (ae-missing-release-tag) "IpRangeKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type IpRangeKey = { + type: 'mask'; + mask: string; +} | { + type: 'range'; + from: string; + to: string; +}; + // Warning: (ae-missing-release-tag) "IRequestTypesMap" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1005,10 +1163,92 @@ export type MatchAllFilter = Filter & { match_all: any; }; -// Warning: (ae-missing-release-tag) "parseInterval" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// Warning: (ae-missing-release-tag) "METRIC_TYPES" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export function parseInterval(interval: string): moment.Duration | null; +export enum METRIC_TYPES { + // (undocumented) + AVG = "avg", + // (undocumented) + AVG_BUCKET = "avg_bucket", + // (undocumented) + CARDINALITY = "cardinality", + // (undocumented) + COUNT = "count", + // (undocumented) + CUMULATIVE_SUM = "cumulative_sum", + // (undocumented) + DERIVATIVE = "derivative", + // (undocumented) + GEO_BOUNDS = "geo_bounds", + // (undocumented) + GEO_CENTROID = "geo_centroid", + // (undocumented) + MAX = "max", + // (undocumented) + MAX_BUCKET = "max_bucket", + // (undocumented) + MEDIAN = "median", + // (undocumented) + MIN = "min", + // (undocumented) + MIN_BUCKET = "min_bucket", + // (undocumented) + MOVING_FN = "moving_avg", + // (undocumented) + PERCENTILE_RANKS = "percentile_ranks", + // (undocumented) + PERCENTILES = "percentiles", + // (undocumented) + SERIAL_DIFF = "serial_diff", + // (undocumented) + STD_DEV = "std_dev", + // (undocumented) + SUM = "sum", + // (undocumented) + SUM_BUCKET = "sum_bucket", + // (undocumented) + TOP_HITS = "top_hits" +} + +// Warning: (ae-missing-release-tag) "OptionedParamEditorProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface OptionedParamEditorProps { + // (undocumented) + aggParam: { + options: T[]; + }; +} + +// Warning: (ae-missing-release-tag) "OptionedParamType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class OptionedParamType extends BaseParamType { + constructor(config: Record); + // (undocumented) + options: OptionedValueProp[]; +} + +// Warning: (ae-missing-release-tag) "OptionedValueProp" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface OptionedValueProp { + // (undocumented) + disabled?: boolean; + // (undocumented) + isCompatible: (agg: IAggConfig) => boolean; + // (undocumented) + text: string; + // (undocumented) + value: string; +} + +// Warning: (ae-forgotten-export) The symbol "parseEsInterval" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ParsedInterval" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ParsedInterval = ReturnType; // Warning: (ae-missing-release-tag) "PhraseFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1039,7 +1279,7 @@ export class Plugin implements Plugin_2>; +export const QueryStringInput: React.FC>; // @public (undocumented) export type QuerySuggestion = QuerySuggestionBasic | QuerySuggestionField; @@ -1247,11 +1487,52 @@ export type SavedQueryTimeFilter = TimeRange & { refreshInterval: RefreshInterval; }; +// Warning: (ae-missing-release-tag) "search" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const search: { + aggs: { + AggConfigs: typeof AggConfigs; + aggGroupNamesMap: () => Record<"buckets" | "metrics", string>; + aggTypeFilters: import("./search/aggs/filter/agg_type_filters").AggTypeFilters; + CidrMask: typeof CidrMask; + convertDateRangeToString: typeof convertDateRangeToString; + convertIPRangeToString: (range: import("./search").IpRangeKey, format: (val: any) => string) => string; + dateHistogramInterval: typeof dateHistogramInterval; + intervalOptions: ({ + display: string; + val: string; + enabled(agg: import("./search/aggs/buckets/_bucket_agg_type").IBucketAggConfig): boolean | "" | undefined; + } | { + display: string; + val: string; + })[]; + InvalidEsCalendarIntervalError: typeof InvalidEsCalendarIntervalError; + InvalidEsIntervalFormatError: typeof InvalidEsIntervalFormatError; + isDateHistogramBucketAggConfig: typeof isDateHistogramBucketAggConfig; + isStringType: (agg: import("./search").AggConfig) => boolean; + isType: (type: string) => (agg: import("./search").AggConfig) => boolean; + isValidEsInterval: typeof isValidEsInterval; + isValidInterval: typeof isValidInterval; + parentPipelineType: string; + parseEsInterval: typeof parseEsInterval; + parseInterval: typeof parseInterval; + propFilter: typeof propFilter; + siblingPipelineType: string; + termsAggFilter: string[]; + toAbsoluteDates: typeof toAbsoluteDates; + }; + getRequestInspectorStats: typeof getRequestInspectorStats; + getResponseInspectorStats: typeof getResponseInspectorStats; + tabifyAggResponse: typeof tabifyAggResponse; + tabifyGetColumns: typeof tabifyGetColumns; +}; + // Warning: (ae-missing-release-tag) "SearchBar" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const SearchBar: React.ComponentClass, "query" | "isLoading" | "indexPatterns" | "filters" | "refreshInterval" | "screenTitle" | "dataTestSubj" | "customSubmitButton" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "onRefresh" | "timeHistory" | "onFiltersUpdated" | "onRefreshChange">, any> & { - WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; +export const SearchBar: React.ComponentClass, "query" | "isLoading" | "indexPatterns" | "filters" | "onQueryChange" | "customSubmitButton" | "screenTitle" | "dataTestSubj" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "refreshInterval" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "onRefresh" | "timeHistory" | "onFiltersUpdated" | "onRefreshChange">, any> & { + WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; }; // Warning: (ae-forgotten-export) The symbol "SearchBarOwnProps" needs to be exported by the entry point index.d.ts @@ -1310,7 +1591,7 @@ export class SearchSource { type?: string | undefined; query?: import("../..").Query | undefined; filter?: Filter | Filter[] | (() => Filter | Filter[] | undefined) | undefined; - sort?: Record | Record[] | undefined; + sort?: Record | Record[] | undefined; highlight?: any; highlightAll?: boolean | undefined; aggs?: any; @@ -1446,6 +1727,27 @@ export const syncQueryStateWithUrl: (query: Pick<{ hasInheritedQueryFromUrl: boolean; }; +// @public (undocumented) +export interface TabbedAggColumn { + // (undocumented) + aggConfig: IAggConfig; + // (undocumented) + id: string; + // (undocumented) + name: string; +} + +// @public (undocumented) +export type TabbedAggRow = Record; + +// @public (undocumented) +export interface TabbedTable { + // (undocumented) + columns: TabbedAggColumn[]; + // (undocumented) + rows: TabbedAggRow[]; +} + // Warning: (ae-forgotten-export) The symbol "Timefilter" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "TimefilterContract" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1526,9 +1828,25 @@ export type TSearchStrategyProvider = (context: ISearc // src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "flattenHitWrapper" needs to be exported by the entry point index.d.ts // src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "getRoutes" needs to be exported by the entry point index.d.ts // src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "formatHitProvider" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:379:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:379:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:379:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:379:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:384:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:385:1 - (ae-forgotten-export) The symbol "convertDateRangeToString" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:387:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:396:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:397:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:398:1 - (ae-forgotten-export) The symbol "isDateHistogramBucketAggConfig" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:401:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:402:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:405:1 - (ae-forgotten-export) The symbol "parseInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:406:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:409:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts // src/plugins/data/public/query/state_sync/connect_to_query_state.ts:34:33 - (ae-forgotten-export) The symbol "FilterStateStore" needs to be exported by the entry point index.d.ts // src/plugins/data/public/query/state_sync/connect_to_query_state.ts:38:1 - (ae-forgotten-export) The symbol "QueryStateChange" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/types.ts:54:5 - (ae-forgotten-export) The symbol "IndexPatternSelectProps" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/types.ts:52:5 - (ae-forgotten-export) The symbol "createFiltersFromEvent" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/types.ts:60:5 - (ae-forgotten-export) The symbol "IndexPatternSelectProps" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_config.test.ts b/src/plugins/data/public/search/aggs/agg_config.test.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/agg_config.test.ts rename to src/plugins/data/public/search/aggs/agg_config.test.ts index 36d5451a4cd00f..f979c9664f458a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_config.test.ts +++ b/src/plugins/data/public/search/aggs/agg_config.test.ts @@ -24,13 +24,10 @@ import { AggConfigs, CreateAggConfigParams } from './agg_configs'; import { AggType } from './agg_type'; import { AggTypesRegistryStart } from './agg_types_registry'; import { mockDataServices, mockAggTypesRegistry } from './test_helpers'; -import { IndexPatternField, IndexPattern } from '../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { stubIndexPatternWithFields } from '../../../../../../plugins/data/public/stubs'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { dataPluginMock } from '../../../../../../plugins/data/public/mocks'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { setFieldFormats } from '../../../../../../plugins/data/public/services'; +import { Field as IndexPatternField, IndexPattern } from '../../index_patterns'; +import { stubIndexPatternWithFields } from '../../../public/stubs'; +import { dataPluginMock } from '../../../public/mocks'; +import { setFieldFormats } from '../../../public/services'; describe('AggConfig', () => { let indexPattern: IndexPattern; diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_config.ts b/src/plugins/data/public/search/aggs/agg_config.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/aggs/agg_config.ts rename to src/plugins/data/public/search/aggs/agg_config.ts index bf2d2f734c9896..d6948aaade63d7 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_config.ts +++ b/src/plugins/data/public/search/aggs/agg_config.ts @@ -22,14 +22,10 @@ import { i18n } from '@kbn/i18n'; import { IAggType } from './agg_type'; import { writeParams } from './agg_params'; import { IAggConfigs } from './agg_configs'; -import { - ISearchSource, - FetchOptions, - FieldFormatsContentType, - KBN_FIELD_TYPES, -} from '../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats } from '../../../../../../plugins/data/public/services'; +import { FetchOptions } from '../fetch'; +import { ISearchSource } from '../search_source'; +import { FieldFormatsContentType, KBN_FIELD_TYPES } from '../../../common'; +import { getFieldFormats } from '../../../public/services'; export interface AggConfigOptions { type: IAggType; diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_configs.test.ts b/src/plugins/data/public/search/aggs/agg_configs.test.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/aggs/agg_configs.test.ts rename to src/plugins/data/public/search/aggs/agg_configs.test.ts index d69376b4026d95..e20e6de6112a8a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_configs.test.ts +++ b/src/plugins/data/public/search/aggs/agg_configs.test.ts @@ -22,12 +22,8 @@ import { AggConfig } from './agg_config'; import { AggConfigs } from './agg_configs'; import { AggTypesRegistryStart } from './agg_types_registry'; import { mockDataServices, mockAggTypesRegistry } from './test_helpers'; -import { IndexPatternField, IndexPattern } from '../../../../../../plugins/data/public'; -import { - stubIndexPattern, - stubIndexPatternWithFields, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../plugins/data/public/stubs'; +import { Field as IndexPatternField, IndexPattern } from '../../index_patterns'; +import { stubIndexPattern, stubIndexPatternWithFields } from '../../../public/stubs'; describe('AggConfigs', () => { let indexPattern: IndexPattern; diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_configs.ts b/src/plugins/data/public/search/aggs/agg_configs.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/aggs/agg_configs.ts rename to src/plugins/data/public/search/aggs/agg_configs.ts index 4a48f356d3f796..c441b2a0eb46f8 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_configs.ts +++ b/src/plugins/data/public/search/aggs/agg_configs.ts @@ -24,12 +24,10 @@ import { AggConfig, AggConfigOptions, IAggConfig } from './agg_config'; import { IAggType } from './agg_type'; import { AggTypesRegistryStart } from './agg_types_registry'; import { AggGroupNames } from './agg_groups'; -import { - IndexPattern, - ISearchSource, - FetchOptions, - TimeRange, -} from '../../../../../../plugins/data/public'; +import { IndexPattern } from '../../index_patterns'; +import { ISearchSource } from '../search_source'; +import { FetchOptions } from '../fetch'; +import { TimeRange } from '../../../common'; function removeParentAggs(obj: any) { for (const prop in obj) { diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_groups.ts b/src/plugins/data/public/search/aggs/agg_groups.ts similarity index 86% rename from src/legacy/core_plugins/data/public/search/aggs/agg_groups.ts rename to src/plugins/data/public/search/aggs/agg_groups.ts index d21f5c8968840f..9cebff76c96843 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_groups.ts +++ b/src/plugins/data/public/search/aggs/agg_groups.ts @@ -25,9 +25,11 @@ export const AggGroupNames = Object.freeze({ Metrics: 'metrics' as 'metrics', None: 'none' as 'none', }); -export type AggGroupNames = $Values; +export type IAggGroupNames = $Values; -export const aggGroupNamesMap = () => ({ +type IAggGroupNamesMap = () => Record<'buckets' | 'metrics', string>; + +export const aggGroupNamesMap: IAggGroupNamesMap = () => ({ [AggGroupNames.Metrics]: i18n.translate('data.search.aggs.aggGroups.metricsText', { defaultMessage: 'Metrics', }), diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_params.test.ts b/src/plugins/data/public/search/aggs/agg_params.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/agg_params.test.ts rename to src/plugins/data/public/search/aggs/agg_params.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_params.ts b/src/plugins/data/public/search/aggs/agg_params.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/agg_params.ts rename to src/plugins/data/public/search/aggs/agg_params.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_type.test.ts b/src/plugins/data/public/search/aggs/agg_type.test.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/agg_type.test.ts rename to src/plugins/data/public/search/aggs/agg_type.test.ts index c78e56dd25887d..3fb03dc31e2b2b 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_type.test.ts +++ b/src/plugins/data/public/search/aggs/agg_type.test.ts @@ -20,9 +20,8 @@ import { AggType, AggTypeConfig } from './agg_type'; import { IAggConfig } from './agg_config'; import { mockDataServices } from './test_helpers'; -import { dataPluginMock } from '../../../../../../plugins/data/public/mocks'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { setFieldFormats } from '../../../../../../plugins/data/public/services'; +import { dataPluginMock } from '../../../public/mocks'; +import { setFieldFormats } from '../../../public/services'; describe('AggType Class', () => { beforeEach(() => { diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_type.ts b/src/plugins/data/public/search/aggs/agg_type.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/agg_type.ts rename to src/plugins/data/public/search/aggs/agg_type.ts index 3cd9496d3f23d0..a63d01e196612a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_type.ts +++ b/src/plugins/data/public/search/aggs/agg_type.ts @@ -23,16 +23,12 @@ import { initParams } from './agg_params'; import { AggConfig } from './agg_config'; import { IAggConfigs } from './agg_configs'; -import { Adapters } from '../../../../../../plugins/inspector/public'; +import { Adapters } from '../../../../../plugins/inspector/public'; import { BaseParamType } from './param_types/base'; import { AggParamType } from './param_types/agg'; -import { - KBN_FIELD_TYPES, - IFieldFormat, - ISearchSource, -} from '../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats } from '../../../../../../plugins/data/public/services'; +import { KBN_FIELD_TYPES, IFieldFormat } from '../../../common'; +import { ISearchSource } from '../search_source'; +import { getFieldFormats } from '../../../public/services'; export interface AggTypeConfig< TAggConfig extends AggConfig = AggConfig, diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_types.ts b/src/plugins/data/public/search/aggs/agg_types.ts similarity index 70% rename from src/legacy/core_plugins/data/public/search/aggs/agg_types.ts rename to src/plugins/data/public/search/aggs/agg_types.ts index 691598fe27e313..73c6a5046fd23c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/agg_types.ts +++ b/src/plugins/data/public/search/aggs/agg_types.ts @@ -17,6 +17,8 @@ * under the License. */ +import { IUiSettingsClient } from 'src/core/public'; + import { countMetricAgg } from './metrics/count'; import { avgMetricAgg } from './metrics/avg'; import { sumMetricAgg } from './metrics/sum'; @@ -41,7 +43,7 @@ import { dateRangeBucketAgg } from './buckets/date_range'; import { ipRangeBucketAgg } from './buckets/ip_range'; import { termsBucketAgg } from './buckets/terms'; import { filterBucketAgg } from './buckets/filter'; -import { filtersBucketAgg } from './buckets/filters'; +import { getFiltersBucketAgg } from './buckets/filters'; import { significantTermsBucketAgg } from './buckets/significant_terms'; import { geoHashBucketAgg } from './buckets/geo_hash'; import { geoTileBucketAgg } from './buckets/geo_tile'; @@ -50,41 +52,44 @@ import { bucketAvgMetricAgg } from './metrics/bucket_avg'; import { bucketMinMetricAgg } from './metrics/bucket_min'; import { bucketMaxMetricAgg } from './metrics/bucket_max'; -export const aggTypes = { - metrics: [ - countMetricAgg, - avgMetricAgg, - sumMetricAgg, - medianMetricAgg, - minMetricAgg, - maxMetricAgg, - stdDeviationMetricAgg, - cardinalityMetricAgg, - percentilesMetricAgg, - percentileRanksMetricAgg, - topHitMetricAgg, - derivativeMetricAgg, - cumulativeSumMetricAgg, - movingAvgMetricAgg, - serialDiffMetricAgg, - bucketAvgMetricAgg, - bucketSumMetricAgg, - bucketMinMetricAgg, - bucketMaxMetricAgg, - geoBoundsMetricAgg, - geoCentroidMetricAgg, - ], - buckets: [ - dateHistogramBucketAgg, - histogramBucketAgg, - rangeBucketAgg, - dateRangeBucketAgg, - ipRangeBucketAgg, - termsBucketAgg, - filterBucketAgg, - filtersBucketAgg, - significantTermsBucketAgg, - geoHashBucketAgg, - geoTileBucketAgg, - ], -}; +export function getAggTypes(deps: { uiSettings: IUiSettingsClient }) { + const { uiSettings } = deps; + return { + metrics: [ + countMetricAgg, + avgMetricAgg, + sumMetricAgg, + medianMetricAgg, + minMetricAgg, + maxMetricAgg, + stdDeviationMetricAgg, + cardinalityMetricAgg, + percentilesMetricAgg, + percentileRanksMetricAgg, + topHitMetricAgg, + derivativeMetricAgg, + cumulativeSumMetricAgg, + movingAvgMetricAgg, + serialDiffMetricAgg, + bucketAvgMetricAgg, + bucketSumMetricAgg, + bucketMinMetricAgg, + bucketMaxMetricAgg, + geoBoundsMetricAgg, + geoCentroidMetricAgg, + ], + buckets: [ + dateHistogramBucketAgg, + histogramBucketAgg, + rangeBucketAgg, + dateRangeBucketAgg, + ipRangeBucketAgg, + termsBucketAgg, + filterBucketAgg, + getFiltersBucketAgg({ uiSettings }), + significantTermsBucketAgg, + geoHashBucketAgg, + geoTileBucketAgg, + ], + }; +} diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_types_registry.test.ts b/src/plugins/data/public/search/aggs/agg_types_registry.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/agg_types_registry.test.ts rename to src/plugins/data/public/search/aggs/agg_types_registry.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/agg_types_registry.ts b/src/plugins/data/public/search/aggs/agg_types_registry.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/agg_types_registry.ts rename to src/plugins/data/public/search/aggs/agg_types_registry.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/_bucket_agg_type.ts b/src/plugins/data/public/search/aggs/buckets/_bucket_agg_type.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/_bucket_agg_type.ts rename to src/plugins/data/public/search/aggs/buckets/_bucket_agg_type.ts index d6ab58d5250a8c..03629c3189cbb4 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/_bucket_agg_type.ts +++ b/src/plugins/data/public/search/aggs/buckets/_bucket_agg_type.ts @@ -18,7 +18,7 @@ */ import { IAggConfig } from '../agg_config'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; import { AggType, AggTypeConfig } from '../agg_type'; import { AggParamType } from '../param_types/agg'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/_interval_options.ts b/src/plugins/data/public/search/aggs/buckets/_interval_options.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/_interval_options.ts rename to src/plugins/data/public/search/aggs/buckets/_interval_options.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts b/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts similarity index 99% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts rename to src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts index 976ab57c00b631..9e4b93035384f6 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts @@ -217,8 +217,6 @@ const nestedOtherResponse = { status: 200, }; -jest.mock('ui/new_platform'); - describe('Terms Agg Other bucket helper', () => { const typesRegistry = mockAggTypesRegistry(); const getAggConfigs = (aggs: CreateAggConfigParams[] = []) => { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.ts b/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.ts rename to src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.ts index 42db37c81eadd6..4fd988e7b7e663 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.ts +++ b/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.ts @@ -18,7 +18,7 @@ */ import { isNumber, keys, values, find, each, cloneDeep, flatten } from 'lodash'; -import { esFilters, esQuery } from '../../../../../../../plugins/data/public'; +import { buildExistsFilter, buildPhrasesFilter, buildQueryFromFilters } from '../../../../common'; import { AggGroupNames } from '../agg_groups'; import { IAggConfigs } from '../agg_configs'; import { IBucketAggConfig } from './_bucket_agg_type'; @@ -207,7 +207,7 @@ export const buildOtherBucketAgg = ( agg.buckets.some((bucket: { key: string }) => bucket.key === '__missing__') ) { filters.push( - esFilters.buildExistsFilter( + buildExistsFilter( aggWithOtherBucket.params.field, aggWithOtherBucket.params.field.indexPattern ) @@ -223,7 +223,7 @@ export const buildOtherBucketAgg = ( }); resultAgg.filters.filters[key] = { - bool: esQuery.buildQueryFromFilters(filters, indexPattern), + bool: buildQueryFromFilters(filters, indexPattern), }; }; walkBucketTree(0, response.aggregations, bucketAggs[0].id, [], ''); @@ -259,7 +259,7 @@ export const mergeOtherBucketAggResponse = ( ); const requestFilterTerms = getOtherAggTerms(requestAgg, key, otherAgg); - const phraseFilter = esFilters.buildPhrasesFilter( + const phraseFilter = buildPhrasesFilter( otherAgg.params.field, requestFilterTerms, otherAgg.params.field.indexPattern @@ -274,7 +274,7 @@ export const mergeOtherBucketAggResponse = ( ) ) { bucket.filters.push( - esFilters.buildExistsFilter(otherAgg.params.field, otherAgg.params.field.indexPattern) + buildExistsFilter(otherAgg.params.field, otherAgg.params.field.indexPattern) ); } aggResultBuckets.push(bucket); diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/bucket_agg_types.ts b/src/plugins/data/public/search/aggs/buckets/bucket_agg_types.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/bucket_agg_types.ts rename to src/plugins/data/public/search/aggs/buckets/bucket_agg_types.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts index f21ca6c975809a..12817a9ba11591 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts @@ -24,7 +24,7 @@ import { AggConfigs } from '../../agg_configs'; import { mockDataServices, mockAggTypesRegistry } from '../../test_helpers'; import { dateHistogramBucketAgg, IBucketDateHistogramAggConfig } from '../date_histogram'; import { BUCKET_TYPES } from '../bucket_agg_types'; -import { RangeFilter } from '../../../../../../../../plugins/data/public'; +import { RangeFilter } from '../../../../../common'; describe('AggConfig Filters', () => { describe('date_histogram', () => { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.ts similarity index 92% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.ts index e634b5daf0ac38..42b263415ff905 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.ts @@ -19,7 +19,7 @@ import moment from 'moment'; import { IBucketDateHistogramAggConfig } from '../date_histogram'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { buildRangeFilter } from '../../../../../common'; export const createFilterDateHistogram = ( agg: IBucketDateHistogramAggConfig, @@ -28,7 +28,7 @@ export const createFilterDateHistogram = ( const start = moment(key); const interval = agg.buckets.getInterval(); - return esFilters.buildRangeFilter( + return buildRangeFilter( agg.params.field, { gte: start.toISOString(), diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts similarity index 94% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts index c594c7718e58bb..d18a30fb6c6f8a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts @@ -20,7 +20,8 @@ import moment from 'moment'; import { dateRangeBucketAgg } from '../date_range'; import { createFilterDateRange } from './date_range'; -import { fieldFormats, FieldFormatsGetConfigFn } from '../../../../../../../../plugins/data/public'; +import { FieldFormatsGetConfigFn } from '../../../../../common'; +import { DateFormat } from '../../../../field_formats'; import { AggConfigs } from '../../agg_configs'; import { mockAggTypesRegistry } from '../../test_helpers'; import { BUCKET_TYPES } from '../bucket_agg_types'; @@ -33,7 +34,7 @@ describe('AggConfig Filters', () => { const getAggConfigs = () => { const field = { name: '@timestamp', - format: new fieldFormats.DateFormat({}, getConfig), + format: new DateFormat({}, getConfig), }; const indexPattern = { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.ts similarity index 84% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/date_range.ts index 7af8ebc3236a77..9bfded0ce9729f 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.ts @@ -19,8 +19,8 @@ import moment from 'moment'; import { IBucketAggConfig } from '../_bucket_agg_type'; -import { DateRangeKey } from '../date_range'; -import { esFilters, RangeFilterParams } from '../../../../../../../../plugins/data/public'; +import { DateRangeKey } from '../lib/date_range'; +import { buildRangeFilter, RangeFilterParams } from '../../../../../common'; export const createFilterDateRange = (agg: IBucketAggConfig, { from, to }: DateRangeKey) => { const filter: RangeFilterParams = {}; @@ -28,5 +28,5 @@ export const createFilterDateRange = (agg: IBucketAggConfig, { from, to }: DateR if (to) filter.lt = moment(to).toISOString(); if (to && from) filter.format = 'strict_date_optional_time'; - return esFilters.buildRangeFilter(agg.params.field, filter, agg.getIndexPattern()); + return buildRangeFilter(agg.params.field, filter, agg.getIndexPattern()); }; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts similarity index 87% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts index 3b9c771e0f15f9..33ab1ce8186a11 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts @@ -17,7 +17,9 @@ * under the License. */ -import { filtersBucketAgg } from '../filters'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { coreMock } from '../../../../../../../../src/core/public/mocks'; +import { getFiltersBucketAgg } from '../filters'; import { createFilterFilters } from './filters'; import { AggConfigs } from '../../agg_configs'; import { mockDataServices, mockAggTypesRegistry } from '../../test_helpers'; @@ -29,7 +31,11 @@ describe('AggConfig Filters', () => { mockDataServices(); }); - const typesRegistry = mockAggTypesRegistry([filtersBucketAgg]); + const typesRegistry = mockAggTypesRegistry([ + getFiltersBucketAgg({ + uiSettings: coreMock.createSetup().uiSettings, + }), + ]); const getAggConfigs = () => { const field = { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/filters.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/filters.ts similarity index 89% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/filters.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/filters.ts index 715f6895374e63..3b568d805f7c0d 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/filters.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/filters.ts @@ -19,7 +19,7 @@ import { get } from 'lodash'; import { IBucketAggConfig } from '../_bucket_agg_type'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { buildQueryFilter } from '../../../../../common'; export const createFilterFilters = (aggConfig: IBucketAggConfig, key: string) => { // have the aggConfig write agg dsl params @@ -28,6 +28,6 @@ export const createFilterFilters = (aggConfig: IBucketAggConfig, key: string) => const indexPattern = aggConfig.getIndexPattern(); if (filter && indexPattern && indexPattern.id) { - return esFilters.buildQueryFilter(filter.query, indexPattern.id, key); + return buildQueryFilter(filter.query, indexPattern.id, key); } }; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts similarity index 94% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts index b046c802c58c15..dc8414d80c0243 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts @@ -22,7 +22,7 @@ import { AggConfigs } from '../../agg_configs'; import { mockDataServices, mockAggTypesRegistry } from '../../test_helpers'; import { BUCKET_TYPES } from '../bucket_agg_types'; import { IBucketAggConfig } from '../_bucket_agg_type'; -import { fieldFormats, FieldFormatsGetConfigFn } from '../../../../../../../../plugins/data/public'; +import { BytesFormat, FieldFormatsGetConfigFn } from '../../../../../common'; describe('AggConfig Filters', () => { describe('histogram', () => { @@ -36,7 +36,7 @@ describe('AggConfig Filters', () => { const getAggConfigs = () => { const field = { name: 'bytes', - format: new fieldFormats.BytesFormat({}, getConfig), + format: new BytesFormat({}, getConfig), }; const indexPattern = { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.ts similarity index 90% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/histogram.ts index badd6dba6ea8a9..d4c00a0991fe2c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.ts @@ -18,13 +18,13 @@ */ import { IBucketAggConfig } from '../_bucket_agg_type'; -import { esFilters, RangeFilterParams } from '../../../../../../../../plugins/data/public'; +import { buildRangeFilter, RangeFilterParams } from '../../../../../common'; export const createFilterHistogram = (aggConfig: IBucketAggConfig, key: string) => { const value = parseInt(key, 10); const params: RangeFilterParams = { gte: value, lt: value + aggConfig.params.interval }; - return esFilters.buildRangeFilter( + return buildRangeFilter( aggConfig.params.field, params, aggConfig.getIndexPattern(), diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts index 7572c48390dc25..ca51094da2f58a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts @@ -21,7 +21,7 @@ import { ipRangeBucketAgg } from '../ip_range'; import { createFilterIpRange } from './ip_range'; import { AggConfigs, CreateAggConfigParams } from '../../agg_configs'; import { mockAggTypesRegistry } from '../../test_helpers'; -import { fieldFormats } from '../../../../../../../../plugins/data/public'; +import { IpFormat } from '../../../../../common'; import { BUCKET_TYPES } from '../bucket_agg_types'; import { IBucketAggConfig } from '../_bucket_agg_type'; @@ -31,7 +31,7 @@ describe('AggConfig Filters', () => { const getAggConfigs = (aggs: CreateAggConfigParams[]) => { const field = { name: 'ip', - format: fieldFormats.IpFormat, + format: IpFormat, }; const indexPattern = { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts similarity index 88% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts index 36be4143838240..2d34c45aaab9da 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts @@ -19,8 +19,8 @@ import { CidrMask } from '../lib/cidr_mask'; import { IBucketAggConfig } from '../_bucket_agg_type'; -import { IpRangeKey } from '../ip_range'; -import { esFilters, RangeFilterParams } from '../../../../../../../../plugins/data/public'; +import { IpRangeKey } from '../lib/ip_range'; +import { buildRangeFilter, RangeFilterParams } from '../../../../../common'; export const createFilterIpRange = (aggConfig: IBucketAggConfig, key: IpRangeKey) => { let range: RangeFilterParams; @@ -34,7 +34,7 @@ export const createFilterIpRange = (aggConfig: IBucketAggConfig, key: IpRangeKey }; } - return esFilters.buildRangeFilter( + return buildRangeFilter( aggConfig.params.field, { gte: range.from, lte: range.to }, aggConfig.getIndexPattern() diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/range.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/range.test.ts similarity index 94% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/range.test.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/range.test.ts index 324d4252908324..3a6f8b36a9d964 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/range.test.ts @@ -19,7 +19,7 @@ import { rangeBucketAgg } from '../range'; import { createFilterRange } from './range'; -import { fieldFormats, FieldFormatsGetConfigFn } from '../../../../../../../../plugins/data/public'; +import { BytesFormat, FieldFormatsGetConfigFn } from '../../../../../common'; import { AggConfigs } from '../../agg_configs'; import { mockDataServices, mockAggTypesRegistry } from '../../test_helpers'; import { BUCKET_TYPES } from '../bucket_agg_types'; @@ -37,7 +37,7 @@ describe('AggConfig Filters', () => { const getAggConfigs = () => { const field = { name: 'bytes', - format: new fieldFormats.BytesFormat({}, getConfig), + format: new BytesFormat({}, getConfig), }; const indexPattern = { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/range.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/range.ts similarity index 90% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/range.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/range.ts index 125a30a1ab1dd3..d3d85f2441a8ba 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/range.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/range.ts @@ -18,10 +18,10 @@ */ import { IBucketAggConfig } from '../_bucket_agg_type'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { buildRangeFilter } from '../../../../../common'; export const createFilterRange = (aggConfig: IBucketAggConfig, params: any) => { - return esFilters.buildRangeFilter( + return buildRangeFilter( aggConfig.params.field, params, aggConfig.getIndexPattern(), diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts index 6db6eb11a5f527..511af450b0113a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts @@ -23,7 +23,7 @@ import { AggConfigs, CreateAggConfigParams } from '../../agg_configs'; import { mockAggTypesRegistry } from '../../test_helpers'; import { BUCKET_TYPES } from '../bucket_agg_types'; import { IBucketAggConfig } from '../_bucket_agg_type'; -import { Filter, ExistsFilter } from '../../../../../../../../plugins/data/public'; +import { Filter, ExistsFilter } from '../../../../../common'; describe('AggConfig Filters', () => { describe('terms', () => { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/terms.ts similarity index 78% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.ts rename to src/plugins/data/public/search/aggs/buckets/create_filter/terms.ts index 4152258ffa0ee0..43ebfc0e90db2b 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/terms.ts @@ -18,7 +18,12 @@ */ import { IBucketAggConfig } from '../_bucket_agg_type'; -import { esFilters, Filter } from '../../../../../../../../plugins/data/public'; +import { + buildPhrasesFilter, + buildExistsFilter, + buildPhraseFilter, + Filter, +} from '../../../../../common'; export const createFilterTerms = (aggConfig: IBucketAggConfig, key: string, params: any) => { const field = aggConfig.params.field; @@ -27,20 +32,20 @@ export const createFilterTerms = (aggConfig: IBucketAggConfig, key: string, para if (key === '__other__') { const terms = params.terms; - const phraseFilter = esFilters.buildPhrasesFilter(field, terms, indexPattern); + const phraseFilter = buildPhrasesFilter(field, terms, indexPattern); phraseFilter.meta.negate = true; const filters: Filter[] = [phraseFilter]; if (terms.some((term: string) => term === '__missing__')) { - filters.push(esFilters.buildExistsFilter(field, indexPattern)); + filters.push(buildExistsFilter(field, indexPattern)); } return filters; } else if (key === '__missing__') { - const existsFilter = esFilters.buildExistsFilter(field, indexPattern); + const existsFilter = buildExistsFilter(field, indexPattern); existsFilter.meta.negate = true; return existsFilter; } - return esFilters.buildPhraseFilter(field, key, indexPattern); + return buildPhraseFilter(field, key, indexPattern); }; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/date_histogram.ts b/src/plugins/data/public/search/aggs/buckets/date_histogram.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/date_histogram.ts rename to src/plugins/data/public/search/aggs/buckets/date_histogram.ts index 8c8911bda99a5d..d600b16f567647 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/date_histogram.ts +++ b/src/plugins/data/public/search/aggs/buckets/date_histogram.ts @@ -30,17 +30,9 @@ import { dateHistogramInterval } from '../../../../common'; import { writeParams } from '../agg_params'; import { isMetricAggType } from '../metrics/metric_agg_type'; -import { - fieldFormats, - KBN_FIELD_TYPES, - TimefilterContract, -} from '../../../../../../../plugins/data/public'; -import { - getFieldFormats, - getQueryService, - getUiSettings, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../plugins/data/public/services'; +import { FIELD_FORMAT_IDS, KBN_FIELD_TYPES } from '../../../../common'; +import { TimefilterContract } from '../../../query'; +import { getFieldFormats, getQueryService, getUiSettings } from '../../../../public/services'; const detectedTimezone = moment.tz.guess(); const tzOffset = moment().format('Z'); @@ -117,7 +109,7 @@ export const dateHistogramBucketAgg = new BucketAggType { beforeEach(() => { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/date_range.ts b/src/plugins/data/public/search/aggs/buckets/date_range.ts similarity index 87% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/date_range.ts rename to src/plugins/data/public/search/aggs/buckets/date_range.ts index 933cdd0577f8da..59e78af2d7b956 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/date_range.ts +++ b/src/plugins/data/public/search/aggs/buckets/date_range.ts @@ -23,13 +23,10 @@ import { i18n } from '@kbn/i18n'; import { BUCKET_TYPES } from './bucket_agg_types'; import { BucketAggType, IBucketAggConfig } from './_bucket_agg_type'; import { createFilterDateRange } from './create_filter/date_range'; - -import { KBN_FIELD_TYPES, fieldFormats } from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats, getUiSettings } from '../../../../../../../plugins/data/public/services'; - import { convertDateRangeToString, DateRangeKey } from './lib/date_range'; -export { convertDateRangeToString, DateRangeKey }; // for BWC + +import { KBN_FIELD_TYPES, FieldFormat, TEXT_CONTEXT_TYPE } from '../../../../common'; +import { getFieldFormats, getUiSettings } from '../../../../public/services'; const dateRangeTitle = i18n.translate('data.search.aggs.buckets.dateRangeTitle', { defaultMessage: 'Date Range', @@ -46,10 +43,10 @@ export const dateRangeBucketAgg = new BucketAggType({ const fieldFormatsService = getFieldFormats(); const formatter = agg.fieldOwnFormatter( - fieldFormats.TEXT_CONTEXT_TYPE, + TEXT_CONTEXT_TYPE, fieldFormatsService.getDefaultInstance(KBN_FIELD_TYPES.DATE) ); - const DateRangeFormat = fieldFormats.FieldFormat.from(function(range: DateRangeKey) { + const DateRangeFormat = FieldFormat.from(function(range: DateRangeKey) { return convertDateRangeToString(range, formatter); }); return new DateRangeFormat(); diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/filter.ts b/src/plugins/data/public/search/aggs/buckets/filter.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/filter.ts rename to src/plugins/data/public/search/aggs/buckets/filter.ts diff --git a/src/plugins/data/public/search/aggs/buckets/filters.ts b/src/plugins/data/public/search/aggs/buckets/filters.ts new file mode 100644 index 00000000000000..0ad28b8be2132c --- /dev/null +++ b/src/plugins/data/public/search/aggs/buckets/filters.ts @@ -0,0 +1,111 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import _ from 'lodash'; +import { i18n } from '@kbn/i18n'; + +import { IUiSettingsClient } from 'src/core/public'; + +import { createFilterFilters } from './create_filter/filters'; +import { toAngularJSON } from '../utils'; +import { BucketAggType } from './_bucket_agg_type'; +import { BUCKET_TYPES } from './bucket_agg_types'; +import { Storage } from '../../../../../../plugins/kibana_utils/public'; + +import { getEsQueryConfig, buildEsQuery, Query } from '../../../../common'; +import { getQueryLog } from '../../../query'; + +const filtersTitle = i18n.translate('data.search.aggs.buckets.filtersTitle', { + defaultMessage: 'Filters', + description: + 'The name of an aggregation, that allows to specify multiple individual filters to group data by.', +}); + +interface FilterValue { + input: Query; + label: string; + id: string; +} + +export function getFiltersBucketAgg(deps: { uiSettings: IUiSettingsClient }) { + const { uiSettings } = deps; + return new BucketAggType({ + name: BUCKET_TYPES.FILTERS, + title: filtersTitle, + createFilter: createFilterFilters, + customLabels: false, + params: [ + { + name: 'filters', + default: [ + { input: { query: '', language: uiSettings.get('search:queryLanguage') }, label: '' }, + ], + write(aggConfig, output) { + const inFilters: FilterValue[] = aggConfig.params.filters; + if (!_.size(inFilters)) return; + + inFilters.forEach(filter => { + const persistedLog = getQueryLog( + uiSettings, + new Storage(window.localStorage), + 'vis_default_editor', + filter.input.language + ); + persistedLog.add(filter.input.query); + }); + + const outFilters = _.transform( + inFilters, + function(filters, filter) { + const input = _.cloneDeep(filter.input); + + if (!input) { + console.log('malformed filter agg params, missing "input" query'); // eslint-disable-line no-console + return; + } + + const esQueryConfigs = getEsQueryConfig(uiSettings); + const query = buildEsQuery(aggConfig.getIndexPattern(), [input], [], esQueryConfigs); + + if (!query) { + console.log('malformed filter agg params, missing "query" on input'); // eslint-disable-line no-console + return; + } + + const matchAllLabel = filter.input.query === '' ? '*' : ''; + const label = + filter.label || + matchAllLabel || + (typeof filter.input.query === 'string' + ? filter.input.query + : toAngularJSON(filter.input.query)); + filters[label] = { query }; + }, + {} + ); + + if (!_.size(outFilters)) return; + + const params = output.params || (output.params = {}); + params.filters = outFilters; + }, + }, + ], + }); +} diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/geo_hash.test.ts b/src/plugins/data/public/search/aggs/buckets/geo_hash.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/geo_hash.test.ts rename to src/plugins/data/public/search/aggs/buckets/geo_hash.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/geo_hash.ts b/src/plugins/data/public/search/aggs/buckets/geo_hash.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/geo_hash.ts rename to src/plugins/data/public/search/aggs/buckets/geo_hash.ts index 8732f926b0fb2e..3ffec09a843878 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/geo_hash.ts +++ b/src/plugins/data/public/search/aggs/buckets/geo_hash.ts @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; import { BucketAggType, IBucketAggConfig } from './_bucket_agg_type'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; import { BUCKET_TYPES } from './bucket_agg_types'; const defaultBoundingBox = { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/geo_tile.ts b/src/plugins/data/public/search/aggs/buckets/geo_tile.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/geo_tile.ts rename to src/plugins/data/public/search/aggs/buckets/geo_tile.ts index 9142a30338163c..759601fc0c180c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/geo_tile.ts +++ b/src/plugins/data/public/search/aggs/buckets/geo_tile.ts @@ -22,7 +22,7 @@ import { noop } from 'lodash'; import { BucketAggType } from './_bucket_agg_type'; import { BUCKET_TYPES } from './bucket_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; import { IBucketAggConfig } from './_bucket_agg_type'; import { METRIC_TYPES } from '../metrics/metric_agg_types'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/histogram.test.ts b/src/plugins/data/public/search/aggs/buckets/histogram.test.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/histogram.test.ts rename to src/plugins/data/public/search/aggs/buckets/histogram.test.ts index 11dc8e42fd6538..07cf022dca83c7 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/histogram.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/histogram.test.ts @@ -17,14 +17,14 @@ * under the License. */ +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { coreMock } from '../../../../../../../src/core/public/mocks'; +import { setUiSettings } from '../../../../public/services'; import { AggConfigs } from '../agg_configs'; import { mockDataServices, mockAggTypesRegistry } from '../test_helpers'; import { BUCKET_TYPES } from './bucket_agg_types'; import { IBucketHistogramAggConfig, histogramBucketAgg, AutoBounds } from './histogram'; import { BucketAggType } from './_bucket_agg_type'; -import { coreMock } from '../../../../../../../../src/core/public/mocks'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { setUiSettings } from '../../../../../../../plugins/data/public/services'; describe('Histogram Agg', () => { beforeEach(() => { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/histogram.ts b/src/plugins/data/public/search/aggs/buckets/histogram.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/histogram.ts rename to src/plugins/data/public/search/aggs/buckets/histogram.ts index 70df2f230db094..7ccd5ae4bf98c8 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/histogram.ts +++ b/src/plugins/data/public/search/aggs/buckets/histogram.ts @@ -23,9 +23,8 @@ import { i18n } from '@kbn/i18n'; import { BucketAggType, IBucketAggConfig } from './_bucket_agg_type'; import { createFilterHistogram } from './create_filter/histogram'; import { BUCKET_TYPES } from './bucket_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getNotifications, getUiSettings } from '../../../../../../../plugins/data/public/services'; +import { KBN_FIELD_TYPES } from '../../../../common'; +import { getNotifications, getUiSettings } from '../../../../public/services'; export interface AutoBounds { min: number; diff --git a/src/legacy/core_plugins/data/common/parse_es_interval/index.ts b/src/plugins/data/public/search/aggs/buckets/index.ts similarity index 70% rename from src/legacy/core_plugins/data/common/parse_es_interval/index.ts rename to src/plugins/data/public/search/aggs/buckets/index.ts index 9c2c546af40d41..3a402b1498a775 100644 --- a/src/legacy/core_plugins/data/common/parse_es_interval/index.ts +++ b/src/plugins/data/public/search/aggs/buckets/index.ts @@ -17,7 +17,13 @@ * under the License. */ -export { parseEsInterval, ParsedInterval } from './parse_es_interval'; -export { InvalidEsCalendarIntervalError } from './invalid_es_calendar_interval_error'; -export { InvalidEsIntervalFormatError } from './invalid_es_interval_format_error'; -export { isValidEsInterval } from './is_valid_es_interval'; +export * from './_interval_options'; +export * from './bucket_agg_types'; +export * from './date_histogram'; +export * from './date_range'; +export * from './ip_range'; +export * from './lib/cidr_mask'; +export * from './lib/date_range'; +export * from './lib/ip_range'; +export * from './migrate_include_exclude_format'; +export * from './terms'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/ip_range.ts b/src/plugins/data/public/search/aggs/buckets/ip_range.ts similarity index 87% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/ip_range.ts rename to src/plugins/data/public/search/aggs/buckets/ip_range.ts index 3fb464d8fa7a8b..da6866d40a52fe 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/ip_range.ts +++ b/src/plugins/data/public/search/aggs/buckets/ip_range.ts @@ -23,13 +23,9 @@ import { BucketAggType } from './_bucket_agg_type'; import { BUCKET_TYPES } from './bucket_agg_types'; import { createFilterIpRange } from './create_filter/ip_range'; -import { KBN_FIELD_TYPES, fieldFormats } from '../../../../../../../plugins/data/public'; - import { IpRangeKey, convertIPRangeToString } from './lib/ip_range'; -export { IpRangeKey, convertIPRangeToString }; // for BWC - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats } from '../../../../../../../plugins/data/public/services'; +import { KBN_FIELD_TYPES, FieldFormat, TEXT_CONTEXT_TYPE } from '../../../../common'; +import { getFieldFormats } from '../../../../public/services'; const ipRangeTitle = i18n.translate('data.search.aggs.buckets.ipRangeTitle', { defaultMessage: 'IPv4 Range', @@ -48,10 +44,10 @@ export const ipRangeBucketAgg = new BucketAggType({ getFormat(agg) { const fieldFormatsService = getFieldFormats(); const formatter = agg.fieldOwnFormatter( - fieldFormats.TEXT_CONTEXT_TYPE, + TEXT_CONTEXT_TYPE, fieldFormatsService.getDefaultInstance(KBN_FIELD_TYPES.IP) ); - const IpRangeFormat = fieldFormats.FieldFormat.from(function(range: IpRangeKey) { + const IpRangeFormat = FieldFormat.from(function(range: IpRangeKey) { return convertIPRangeToString(range, formatter); }); return new IpRangeFormat(); diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/cidr_mask.test.ts b/src/plugins/data/public/search/aggs/buckets/lib/cidr_mask.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/cidr_mask.test.ts rename to src/plugins/data/public/search/aggs/buckets/lib/cidr_mask.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/cidr_mask.ts b/src/plugins/data/public/search/aggs/buckets/lib/cidr_mask.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/cidr_mask.ts rename to src/plugins/data/public/search/aggs/buckets/lib/cidr_mask.ts index 30c4e400fb806b..4535b5f5c5dd21 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/cidr_mask.ts +++ b/src/plugins/data/public/search/aggs/buckets/lib/cidr_mask.ts @@ -17,7 +17,7 @@ * under the License. */ -import { Ipv4Address } from '../../../../../../../../plugins/kibana_utils/public'; +import { Ipv4Address } from '../../../../../../../plugins/kibana_utils/public'; const NUM_BITS = 32; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/date_range.ts b/src/plugins/data/public/search/aggs/buckets/lib/date_range.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/date_range.ts rename to src/plugins/data/public/search/aggs/buckets/lib/date_range.ts diff --git a/src/plugins/data/public/search/aggs/buckets/lib/date_utils.ts b/src/plugins/data/public/search/aggs/buckets/lib/date_utils.ts deleted file mode 100644 index 2ee3d9cf85e8a0..00000000000000 --- a/src/plugins/data/public/search/aggs/buckets/lib/date_utils.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * This temporarily re-exports a static function from the data shim plugin until - * the final agg_types cutover is complete. It is needed for use in Lens; and they - * are not currently using the legacy data shim, so we are moving it here first. - */ -export { getCalculateAutoTimeExpression } from '../../../../../../../legacy/core_plugins/data/public/search/aggs/buckets/lib/date_utils'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/ip_range.ts b/src/plugins/data/public/search/aggs/buckets/lib/ip_range.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/ip_range.ts rename to src/plugins/data/public/search/aggs/buckets/lib/ip_range.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.test.ts b/src/plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.test.ts rename to src/plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.ts b/src/plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.ts rename to src/plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_auto_interval.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_es_interval.ts b/src/plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_es_interval.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_es_interval.ts rename to src/plugins/data/public/search/aggs/buckets/lib/time_buckets/calc_es_interval.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/index.ts b/src/plugins/data/public/search/aggs/buckets/lib/time_buckets/index.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/index.ts rename to src/plugins/data/public/search/aggs/buckets/lib/time_buckets/index.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/time_buckets.ts b/src/plugins/data/public/search/aggs/buckets/lib/time_buckets/time_buckets.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/time_buckets.ts rename to src/plugins/data/public/search/aggs/buckets/lib/time_buckets/time_buckets.ts index 9f43181932d7ef..c14f02e7decdfd 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/time_buckets/time_buckets.ts +++ b/src/plugins/data/public/search/aggs/buckets/lib/time_buckets/time_buckets.ts @@ -20,9 +20,8 @@ import _ from 'lodash'; import moment from 'moment'; -import { IUiSettingsClient } from '../../../../../../../../../core/public'; -import { parseInterval } from '../../../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { IUiSettingsClient } from 'src/core/public'; +import { parseInterval } from '../../../../../../common'; import { calcAutoIntervalLessThan, calcAutoIntervalNear } from './calc_auto_interval'; import { convertDurationToNormalizedEsInterval, diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts b/src/plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts rename to src/plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/range.test.ts b/src/plugins/data/public/search/aggs/buckets/range.test.ts similarity index 94% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/range.test.ts rename to src/plugins/data/public/search/aggs/buckets/range.test.ts index 096b19fe7de66d..d9e1af149524cd 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/range.test.ts @@ -21,7 +21,7 @@ import { rangeBucketAgg } from './range'; import { AggConfigs } from '../agg_configs'; import { mockDataServices, mockAggTypesRegistry } from '../test_helpers'; import { BUCKET_TYPES } from './bucket_agg_types'; -import { FieldFormatsGetConfigFn, fieldFormats } from '../../../../../../../plugins/data/public'; +import { FieldFormatsGetConfigFn, NumberFormat } from '../../../../common'; const buckets = [ { @@ -54,7 +54,7 @@ describe('Range Agg', () => { const getAggConfigs = () => { const field = { name: 'bytes', - format: new fieldFormats.NumberFormat( + format: new NumberFormat( { pattern: '0,0.[000] b', }, diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/range.ts b/src/plugins/data/public/search/aggs/buckets/range.ts similarity index 94% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/range.ts rename to src/plugins/data/public/search/aggs/buckets/range.ts index f35db2cc759bda..036a0d4c1e8dae 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/range.ts +++ b/src/plugins/data/public/search/aggs/buckets/range.ts @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; import { BucketAggType } from './_bucket_agg_type'; -import { fieldFormats, KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { FieldFormat, KBN_FIELD_TYPES } from '../../../../common'; import { RangeKey } from './range_key'; import { createFilterRange } from './create_filter/range'; import { BUCKET_TYPES } from './bucket_agg_types'; @@ -65,7 +65,7 @@ export const rangeBucketAgg = new BucketAggType({ let aggFormat = formats.get(agg); if (aggFormat) return aggFormat; - const RangeFormat = fieldFormats.FieldFormat.from((range: any) => { + const RangeFormat = FieldFormat.from((range: any) => { const format = agg.fieldOwnFormatter(); const gte = '\u2265'; const lt = '\u003c'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/range_key.ts b/src/plugins/data/public/search/aggs/buckets/range_key.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/range_key.ts rename to src/plugins/data/public/search/aggs/buckets/range_key.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/significant_terms.test.ts b/src/plugins/data/public/search/aggs/buckets/significant_terms.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/significant_terms.test.ts rename to src/plugins/data/public/search/aggs/buckets/significant_terms.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/significant_terms.ts b/src/plugins/data/public/search/aggs/buckets/significant_terms.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/significant_terms.ts rename to src/plugins/data/public/search/aggs/buckets/significant_terms.ts index bc6c63d569b110..f12ebe58e2de28 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/significant_terms.ts +++ b/src/plugins/data/public/search/aggs/buckets/significant_terms.ts @@ -22,7 +22,7 @@ import { BucketAggType } from './_bucket_agg_type'; import { createFilterTerms } from './create_filter/terms'; import { isStringType, migrateIncludeExcludeFormat } from './migrate_include_exclude_format'; import { BUCKET_TYPES } from './bucket_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; const significantTermsTitle = i18n.translate('data.search.aggs.buckets.significantTermsTitle', { defaultMessage: 'Significant Terms', diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/terms.test.ts b/src/plugins/data/public/search/aggs/buckets/terms.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/terms.test.ts rename to src/plugins/data/public/search/aggs/buckets/terms.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/terms.ts b/src/plugins/data/public/search/aggs/buckets/terms.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/terms.ts rename to src/plugins/data/public/search/aggs/buckets/terms.ts index b387e9b7d306a2..813c657934a769 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/terms.ts +++ b/src/plugins/data/public/search/aggs/buckets/terms.ts @@ -19,7 +19,6 @@ import { noop } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { getRequestInspectorStats, getResponseInspectorStats } from '../../../index'; import { BucketAggType } from './_bucket_agg_type'; import { BUCKET_TYPES } from './bucket_agg_types'; import { IBucketAggConfig } from './_bucket_agg_type'; @@ -27,13 +26,10 @@ import { createFilterTerms } from './create_filter/terms'; import { isStringType, migrateIncludeExcludeFormat } from './migrate_include_exclude_format'; import { IAggConfigs } from '../agg_configs'; -import { Adapters } from '../../../../../../../plugins/inspector/public'; -import { - ISearchSource, - IFieldFormat, - FieldFormatsContentType, - KBN_FIELD_TYPES, -} from '../../../../../../../plugins/data/public'; +import { Adapters } from '../../../../../inspector/public'; +import { ISearchSource } from '../../search_source'; +import { IFieldFormat, FieldFormatsContentType, KBN_FIELD_TYPES } from '../../../../common'; +import { getRequestInspectorStats, getResponseInspectorStats } from '../../expressions'; import { buildOtherBucketAgg, diff --git a/src/legacy/core_plugins/data/public/search/aggs/filter/agg_type_filters.test.ts b/src/plugins/data/public/search/aggs/filter/agg_type_filters.test.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/aggs/filter/agg_type_filters.test.ts rename to src/plugins/data/public/search/aggs/filter/agg_type_filters.test.ts index 90c29675c0db27..58f5aef0b9dfd4 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/filter/agg_type_filters.test.ts +++ b/src/plugins/data/public/search/aggs/filter/agg_type_filters.test.ts @@ -17,7 +17,7 @@ * under the License. */ -import { IndexPattern } from '../../../../../../../plugins/data/public'; +import { IndexPattern } from '../../../index_patterns'; import { AggTypeFilters } from './agg_type_filters'; import { IAggConfig, IAggType } from '../types'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/filter/agg_type_filters.ts b/src/plugins/data/public/search/aggs/filter/agg_type_filters.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/aggs/filter/agg_type_filters.ts rename to src/plugins/data/public/search/aggs/filter/agg_type_filters.ts index 8da547e592af91..b8d192cd66b5ac 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/filter/agg_type_filters.ts +++ b/src/plugins/data/public/search/aggs/filter/agg_type_filters.ts @@ -17,7 +17,7 @@ * under the License. */ -import { IndexPattern } from 'src/plugins/data/public'; +import { IndexPattern } from '../../../index_patterns'; import { IAggConfig, IAggType } from '../types'; type AggTypeFilter = ( diff --git a/src/legacy/core_plugins/data/public/search/aggs/filter/index.ts b/src/plugins/data/public/search/aggs/filter/index.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/filter/index.ts rename to src/plugins/data/public/search/aggs/filter/index.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/filter/prop_filter.test.ts b/src/plugins/data/public/search/aggs/filter/prop_filter.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/filter/prop_filter.test.ts rename to src/plugins/data/public/search/aggs/filter/prop_filter.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/filter/prop_filter.ts b/src/plugins/data/public/search/aggs/filter/prop_filter.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/filter/prop_filter.ts rename to src/plugins/data/public/search/aggs/filter/prop_filter.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/index.test.ts b/src/plugins/data/public/search/aggs/index.test.ts similarity index 88% rename from src/legacy/core_plugins/data/public/search/aggs/index.test.ts rename to src/plugins/data/public/search/aggs/index.test.ts index 4d0cd55b09d533..b5dedc9d45e84e 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/index.test.ts +++ b/src/plugins/data/public/search/aggs/index.test.ts @@ -17,11 +17,14 @@ * under the License. */ -import { aggTypes } from './index'; +import { coreMock } from '../../../../../../src/core/public/mocks'; +import { getAggTypes } from './index'; import { isBucketAggType } from './buckets/_bucket_agg_type'; import { isMetricAggType } from './metrics/metric_agg_type'; +const aggTypes = getAggTypes({ uiSettings: coreMock.createStart().uiSettings }); + const bucketAggs = aggTypes.buckets; const metricAggs = aggTypes.metrics; diff --git a/src/plugins/data/public/search/aggs/index.ts b/src/plugins/data/public/search/aggs/index.ts new file mode 100644 index 00000000000000..5dfb6aeff8d14f --- /dev/null +++ b/src/plugins/data/public/search/aggs/index.ts @@ -0,0 +1,31 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export * from './agg_config'; +export * from './agg_configs'; +export * from './agg_groups'; +export * from './agg_type'; +export * from './agg_types'; +export * from './agg_types_registry'; +export * from './buckets'; +export * from './filter'; +export * from './metrics'; +export * from './param_types'; +export * from './types'; +export * from './utils'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/avg.ts b/src/plugins/data/public/search/aggs/metrics/avg.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/avg.ts rename to src/plugins/data/public/search/aggs/metrics/avg.ts index b80671a43d2afa..008dede3e1985c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/avg.ts +++ b/src/plugins/data/public/search/aggs/metrics/avg.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; const averageTitle = i18n.translate('data.search.aggs.metrics.averageTitle', { defaultMessage: 'Average', diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_avg.ts b/src/plugins/data/public/search/aggs/metrics/bucket_avg.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_avg.ts rename to src/plugins/data/public/search/aggs/metrics/bucket_avg.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_max.ts b/src/plugins/data/public/search/aggs/metrics/bucket_max.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_max.ts rename to src/plugins/data/public/search/aggs/metrics/bucket_max.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_min.ts b/src/plugins/data/public/search/aggs/metrics/bucket_min.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_min.ts rename to src/plugins/data/public/search/aggs/metrics/bucket_min.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_sum.ts b/src/plugins/data/public/search/aggs/metrics/bucket_sum.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/bucket_sum.ts rename to src/plugins/data/public/search/aggs/metrics/bucket_sum.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/cardinality.ts b/src/plugins/data/public/search/aggs/metrics/cardinality.ts similarity index 88% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/cardinality.ts rename to src/plugins/data/public/search/aggs/metrics/cardinality.ts index 4f7b6e555ca33e..aa41307b2a052a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/cardinality.ts +++ b/src/plugins/data/public/search/aggs/metrics/cardinality.ts @@ -20,9 +20,8 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats } from '../../../../../../../plugins/data/public/services'; +import { KBN_FIELD_TYPES } from '../../../../common'; +import { getFieldFormats } from '../../../../public/services'; const uniqueCountTitle = i18n.translate('data.search.aggs.metrics.uniqueCountTitle', { defaultMessage: 'Unique Count', diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/count.ts b/src/plugins/data/public/search/aggs/metrics/count.ts similarity index 87% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/count.ts rename to src/plugins/data/public/search/aggs/metrics/count.ts index 8b3e0a488c68a1..3ec1e18d66ab98 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/count.ts +++ b/src/plugins/data/public/search/aggs/metrics/count.ts @@ -20,9 +20,8 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats } from '../../../../../../../plugins/data/public/services'; +import { KBN_FIELD_TYPES } from '../../../../common'; +import { getFieldFormats } from '../../../../public/services'; export const countMetricAgg = new MetricAggType({ name: METRIC_TYPES.COUNT, diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/cumulative_sum.ts b/src/plugins/data/public/search/aggs/metrics/cumulative_sum.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/cumulative_sum.ts rename to src/plugins/data/public/search/aggs/metrics/cumulative_sum.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/derivative.ts b/src/plugins/data/public/search/aggs/metrics/derivative.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/derivative.ts rename to src/plugins/data/public/search/aggs/metrics/derivative.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/geo_bounds.ts b/src/plugins/data/public/search/aggs/metrics/geo_bounds.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/geo_bounds.ts rename to src/plugins/data/public/search/aggs/metrics/geo_bounds.ts index 53bc72f9ce1dac..8a9f66f4b22a8a 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/geo_bounds.ts +++ b/src/plugins/data/public/search/aggs/metrics/geo_bounds.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; const geoBoundsTitle = i18n.translate('data.search.aggs.metrics.geoBoundsTitle', { defaultMessage: 'Geo Bounds', diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/geo_centroid.ts b/src/plugins/data/public/search/aggs/metrics/geo_centroid.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/geo_centroid.ts rename to src/plugins/data/public/search/aggs/metrics/geo_centroid.ts index a79b2b34ad1cad..a4e4413843bdd6 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/geo_centroid.ts +++ b/src/plugins/data/public/search/aggs/metrics/geo_centroid.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; const geoCentroidTitle = i18n.translate('data.search.aggs.metrics.geoCentroidTitle', { defaultMessage: 'Geo Centroid', diff --git a/src/legacy/core_plugins/dashboard_embeddable_container/index.ts b/src/plugins/data/public/search/aggs/metrics/index.ts similarity index 82% rename from src/legacy/core_plugins/dashboard_embeddable_container/index.ts rename to src/plugins/data/public/search/aggs/metrics/index.ts index 4a609225e6d7f1..eb93e99427f654 100644 --- a/src/legacy/core_plugins/dashboard_embeddable_container/index.ts +++ b/src/plugins/data/public/search/aggs/metrics/index.ts @@ -17,7 +17,7 @@ * under the License. */ -// eslint-disable-next-line import/no-default-export -export default function(kibana: any) { - return new kibana.Plugin({}); -} +export * from './metric_agg_type'; +export * from './metric_agg_types'; +export * from './lib/parent_pipeline_agg_helper'; +export * from './lib/sibling_pipeline_agg_helper'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/get_response_agg_config_class.ts b/src/plugins/data/public/search/aggs/metrics/lib/get_response_agg_config_class.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/get_response_agg_config_class.ts rename to src/plugins/data/public/search/aggs/metrics/lib/get_response_agg_config_class.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/make_nested_label.test.ts b/src/plugins/data/public/search/aggs/metrics/lib/make_nested_label.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/make_nested_label.test.ts rename to src/plugins/data/public/search/aggs/metrics/lib/make_nested_label.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/make_nested_label.ts b/src/plugins/data/public/search/aggs/metrics/lib/make_nested_label.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/make_nested_label.ts rename to src/plugins/data/public/search/aggs/metrics/lib/make_nested_label.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/nested_agg_helpers.ts b/src/plugins/data/public/search/aggs/metrics/lib/nested_agg_helpers.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/nested_agg_helpers.ts rename to src/plugins/data/public/search/aggs/metrics/lib/nested_agg_helpers.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.test.ts b/src/plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.test.ts rename to src/plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.ts b/src/plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.ts rename to src/plugins/data/public/search/aggs/metrics/lib/ordinal_suffix.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_helper.ts b/src/plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_helper.ts similarity index 93% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_helper.ts rename to src/plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_helper.ts index df4cbaf49c8b3f..3868d8f1bcd16c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_helper.ts +++ b/src/plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_helper.ts @@ -24,7 +24,7 @@ import { forwardModifyAggConfigOnSearchRequestStart } from './nested_agg_helpers import { IMetricAggConfig, MetricAggParam } from '../metric_agg_type'; import { parentPipelineAggWriter } from './parent_pipeline_agg_writer'; -import { fieldFormats } from '../../../../../../../../plugins/data/public'; +import { FieldFormat } from '../../../../../common'; const metricAggFilter = [ '!top_hits', @@ -86,7 +86,7 @@ const parentPipelineAggHelper = { } else { subAgg = agg.aggConfigs.byId(agg.getParam('metricAgg')); } - return subAgg ? subAgg.type.getFormat(subAgg) : new (fieldFormats.FieldFormat.from(identity))(); + return subAgg ? subAgg.type.getFormat(subAgg) : new (FieldFormat.from(identity))(); }, }; diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_writer.ts b/src/plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_writer.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_writer.ts rename to src/plugins/data/public/search/aggs/metrics/lib/parent_pipeline_agg_writer.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_helper.ts b/src/plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_helper.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_helper.ts rename to src/plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_helper.ts index 33d6d725408684..c1d05a39285b70 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_helper.ts +++ b/src/plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_helper.ts @@ -22,7 +22,7 @@ import { i18n } from '@kbn/i18n'; import { siblingPipelineAggWriter } from './sibling_pipeline_agg_writer'; import { forwardModifyAggConfigOnSearchRequestStart } from './nested_agg_helpers'; import { IMetricAggConfig, MetricAggParam } from '../metric_agg_type'; -import { fieldFormats } from '../../../../../../../../plugins/data/public'; +import { FieldFormat } from '../../../../../common'; const metricAggFilter: string[] = [ '!top_hits', @@ -95,7 +95,7 @@ const siblingPipelineAggHelper = { const customMetric = agg.getParam('customMetric'); return customMetric ? customMetric.type.getFormat(customMetric) - : new (fieldFormats.FieldFormat.from(identity))(); + : new (FieldFormat.from(identity))(); }, }; diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_writer.ts b/src/plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_writer.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_writer.ts rename to src/plugins/data/public/search/aggs/metrics/lib/sibling_pipeline_agg_writer.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/max.ts b/src/plugins/data/public/search/aggs/metrics/max.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/max.ts rename to src/plugins/data/public/search/aggs/metrics/max.ts index d561788936b51e..0cfb7be699a95c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/max.ts +++ b/src/plugins/data/public/search/aggs/metrics/max.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; const maxTitle = i18n.translate('data.search.aggs.metrics.maxTitle', { defaultMessage: 'Max', diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/median.test.ts b/src/plugins/data/public/search/aggs/metrics/median.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/median.test.ts rename to src/plugins/data/public/search/aggs/metrics/median.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/median.ts b/src/plugins/data/public/search/aggs/metrics/median.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/median.ts rename to src/plugins/data/public/search/aggs/metrics/median.ts index 68fc98261118c2..f2636d52e34844 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/median.ts +++ b/src/plugins/data/public/search/aggs/metrics/median.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; const medianTitle = i18n.translate('data.search.aggs.metrics.medianTitle', { defaultMessage: 'Median', diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/metric_agg_type.ts b/src/plugins/data/public/search/aggs/metrics/metric_agg_type.ts similarity index 93% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/metric_agg_type.ts rename to src/plugins/data/public/search/aggs/metrics/metric_agg_type.ts index 82b042a1e3378d..05c4cb3de4bdf4 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/metric_agg_type.ts +++ b/src/plugins/data/public/search/aggs/metrics/metric_agg_type.ts @@ -22,9 +22,8 @@ import { AggType, AggTypeConfig } from '../agg_type'; import { AggParamType } from '../param_types/agg'; import { AggConfig } from '../agg_config'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats } from '../../../../../../../plugins/data/public/services'; +import { KBN_FIELD_TYPES } from '../../../../common'; +import { getFieldFormats } from '../../../../public/services'; import { FieldTypes } from '../param_types'; export interface IMetricAggConfig extends AggConfig { diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/metric_agg_types.ts b/src/plugins/data/public/search/aggs/metrics/metric_agg_types.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/metric_agg_types.ts rename to src/plugins/data/public/search/aggs/metrics/metric_agg_types.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/min.ts b/src/plugins/data/public/search/aggs/metrics/min.ts similarity index 95% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/min.ts rename to src/plugins/data/public/search/aggs/metrics/min.ts index 1806c6d9d77107..0a9abf1edcd043 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/min.ts +++ b/src/plugins/data/public/search/aggs/metrics/min.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { KBN_FIELD_TYPES } from '../../../../common'; const minTitle = i18n.translate('data.search.aggs.metrics.minTitle', { defaultMessage: 'Min', diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/moving_avg.ts b/src/plugins/data/public/search/aggs/metrics/moving_avg.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/moving_avg.ts rename to src/plugins/data/public/search/aggs/metrics/moving_avg.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts b/src/plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts rename to src/plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts b/src/plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts rename to src/plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/percentile_ranks.ts b/src/plugins/data/public/search/aggs/metrics/percentile_ranks.ts similarity index 90% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/percentile_ranks.ts rename to src/plugins/data/public/search/aggs/metrics/percentile_ranks.ts index 1d640a9c1fa42f..71b1c1415d98e0 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/percentile_ranks.ts +++ b/src/plugins/data/public/search/aggs/metrics/percentile_ranks.ts @@ -22,9 +22,8 @@ import { MetricAggType } from './metric_agg_type'; import { getResponseAggConfigClass, IResponseAggConfig } from './lib/get_response_agg_config_class'; import { getPercentileValue } from './percentiles_get_value'; import { METRIC_TYPES } from './metric_agg_types'; -import { fieldFormats, KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getFieldFormats } from '../../../../../../../plugins/data/public/services'; +import { FIELD_FORMAT_IDS, KBN_FIELD_TYPES } from '../../../../common'; +import { getFieldFormats } from '../../../../public/services'; // required by the values editor export type IPercentileRanksAggConfig = IResponseAggConfig; @@ -81,7 +80,7 @@ export const percentileRanksMetricAgg = new MetricAggType { let aggDsl: Record; diff --git a/src/legacy/core_plugins/data/public/search/aggs/metrics/top_hit.ts b/src/plugins/data/public/search/aggs/metrics/top_hit.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/aggs/metrics/top_hit.ts rename to src/plugins/data/public/search/aggs/metrics/top_hit.ts index c850eb4ff22206..738de6b62bccbb 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/metrics/top_hit.ts +++ b/src/plugins/data/public/search/aggs/metrics/top_hit.ts @@ -21,10 +21,7 @@ import _ from 'lodash'; import { i18n } from '@kbn/i18n'; import { IMetricAggConfig, MetricAggType } from './metric_agg_type'; import { METRIC_TYPES } from './metric_agg_types'; -import { KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; - -// @ts-ignore -import { wrapWithInlineComp } from '../buckets/inline_comp_wrapper'; +import { KBN_FIELD_TYPES } from '../../../../common'; const isNumericFieldSelected = (agg: IMetricAggConfig) => { const field = agg.getParam('field'); diff --git a/src/legacy/core_plugins/data/public/search/mocks.ts b/src/plugins/data/public/search/aggs/mocks.ts similarity index 60% rename from src/legacy/core_plugins/data/public/search/mocks.ts rename to src/plugins/data/public/search/aggs/mocks.ts index 46c26dc8f1bd0a..7a5dcc9be45929 100644 --- a/src/legacy/core_plugins/data/public/search/mocks.ts +++ b/src/plugins/data/public/search/aggs/mocks.ts @@ -19,11 +19,14 @@ // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { coreMock } from '../../../../../../src/core/public/mocks'; -import { SearchSetup, SearchStart } from './search_service'; -import { AggTypesRegistrySetup, AggTypesRegistryStart } from './aggs/agg_types_registry'; -import { getCalculateAutoTimeExpression } from './aggs'; -import { AggConfigs } from './aggs/agg_configs'; -import { mockAggTypesRegistry } from './aggs/test_helpers'; +import { + AggConfigs, + AggTypesRegistrySetup, + AggTypesRegistryStart, + getCalculateAutoTimeExpression, +} from './'; +import { SearchAggsSetup, SearchAggsStart } from './types'; +import { mockAggTypesRegistry } from './test_helpers'; const aggTypeBaseParamMock = () => ({ name: 'some_param', @@ -59,30 +62,17 @@ export const aggTypesRegistryStartMock = (): AggTypesRegistryStart => ({ })), }); -export const searchSetupMock = (): SearchSetup => ({ - aggs: { - calculateAutoTimeExpression: getCalculateAutoTimeExpression(coreMock.createSetup().uiSettings), - types: aggTypesRegistrySetupMock(), - }, +export const searchAggsSetupMock = (): SearchAggsSetup => ({ + calculateAutoTimeExpression: getCalculateAutoTimeExpression(coreMock.createSetup().uiSettings), + types: aggTypesRegistrySetupMock(), }); -export const searchStartMock = (): SearchStart => ({ - aggs: { - calculateAutoTimeExpression: getCalculateAutoTimeExpression(coreMock.createStart().uiSettings), - createAggConfigs: jest.fn().mockImplementation((indexPattern, configStates = [], schemas) => { - return new AggConfigs(indexPattern, configStates, { - typesRegistry: mockAggTypesRegistry(), - }); - }), - types: mockAggTypesRegistry(), - __LEGACY: { - AggConfig: jest.fn() as any, - AggType: jest.fn(), - aggTypeFieldFilters: jest.fn() as any, - FieldParamType: jest.fn(), - MetricAggType: jest.fn(), - parentPipelineAggHelper: jest.fn() as any, - siblingPipelineAggHelper: jest.fn() as any, - }, - }, +export const searchAggsStartMock = (): SearchAggsStart => ({ + calculateAutoTimeExpression: getCalculateAutoTimeExpression(coreMock.createStart().uiSettings), + createAggConfigs: jest.fn().mockImplementation((indexPattern, configStates = [], schemas) => { + return new AggConfigs(indexPattern, configStates, { + typesRegistry: mockAggTypesRegistry(), + }); + }), + types: mockAggTypesRegistry(), }); diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/agg.ts b/src/plugins/data/public/search/aggs/param_types/agg.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/agg.ts rename to src/plugins/data/public/search/aggs/param_types/agg.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/base.ts b/src/plugins/data/public/search/aggs/param_types/base.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/base.ts rename to src/plugins/data/public/search/aggs/param_types/base.ts index 95ad71a616ab27..2cbc5866e284db 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/param_types/base.ts +++ b/src/plugins/data/public/search/aggs/param_types/base.ts @@ -19,7 +19,8 @@ import { IAggConfigs } from '../agg_configs'; import { IAggConfig } from '../agg_config'; -import { FetchOptions, ISearchSource } from '../../../../../../../plugins/data/public'; +import { FetchOptions } from '../../fetch'; +import { ISearchSource } from '../../search_source'; export class BaseParamType { name: string; diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/field.test.ts b/src/plugins/data/public/search/aggs/param_types/field.test.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/field.test.ts rename to src/plugins/data/public/search/aggs/param_types/field.test.ts index 18b666f454664f..0182471392910c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/param_types/field.test.ts +++ b/src/plugins/data/public/search/aggs/param_types/field.test.ts @@ -19,7 +19,7 @@ import { BaseParamType } from './base'; import { FieldParamType } from './field'; -import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '../../../../../../../plugins/data/public'; +import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '../../../../common'; import { IAggConfig } from '../agg_config'; describe('Field', () => { diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/field.ts b/src/plugins/data/public/search/aggs/param_types/field.ts similarity index 89% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/field.ts rename to src/plugins/data/public/search/aggs/param_types/field.ts index 6882b8aa39e7ee..34b77e14a3a71c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/param_types/field.ts +++ b/src/plugins/data/public/search/aggs/param_types/field.ts @@ -19,16 +19,12 @@ import { i18n } from '@kbn/i18n'; import { IAggConfig } from '../agg_config'; -import { SavedObjectNotFound } from '../../../../../../../plugins/kibana_utils/public'; +import { SavedObjectNotFound } from '../../../../../../plugins/kibana_utils/public'; import { BaseParamType } from './base'; import { propFilter } from '../filter'; -import { - IndexPatternField, - indexPatterns, - KBN_FIELD_TYPES, -} from '../../../../../../../plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getNotifications } from '../../../../../../../plugins/data/public/services'; +import { isNestedField, KBN_FIELD_TYPES } from '../../../../common'; +import { Field as IndexPatternField } from '../../../index_patterns'; +import { getNotifications } from '../../../../public/services'; const filterByType = propFilter('type'); @@ -118,7 +114,7 @@ export class FieldParamType extends BaseParamType { const { onlyAggregatable, scriptable, filterFieldTypes } = this; if ( - (onlyAggregatable && (!field.aggregatable || indexPatterns.isNestedField(field))) || + (onlyAggregatable && (!field.aggregatable || isNestedField(field))) || (!scriptable && field.scripted) ) { return false; diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/filter/field_filters.test.ts b/src/plugins/data/public/search/aggs/param_types/filter/field_filters.test.ts similarity index 96% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/filter/field_filters.test.ts rename to src/plugins/data/public/search/aggs/param_types/filter/field_filters.test.ts index 1a453a225797db..f776a3deb23a15 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/param_types/filter/field_filters.test.ts +++ b/src/plugins/data/public/search/aggs/param_types/filter/field_filters.test.ts @@ -19,7 +19,7 @@ import { AggTypeFieldFilters } from './field_filters'; import { IAggConfig } from '../../agg_config'; -import { IndexPatternField } from '../../../../../../../../plugins/data/public'; +import { Field as IndexPatternField } from '../../../../index_patterns'; describe('AggTypeFieldFilters', () => { let registry: AggTypeFieldFilters; diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/filter/field_filters.ts b/src/plugins/data/public/search/aggs/param_types/filter/field_filters.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/filter/field_filters.ts rename to src/plugins/data/public/search/aggs/param_types/filter/field_filters.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/filter/index.ts b/src/plugins/data/public/search/aggs/param_types/filter/index.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/filter/index.ts rename to src/plugins/data/public/search/aggs/param_types/filter/index.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/index.ts b/src/plugins/data/public/search/aggs/param_types/index.ts similarity index 94% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/index.ts rename to src/plugins/data/public/search/aggs/param_types/index.ts index 3414e6a71ecdc3..c9e8a9879f427c 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/param_types/index.ts +++ b/src/plugins/data/public/search/aggs/param_types/index.ts @@ -17,8 +17,10 @@ * under the License. */ +export * from './agg'; export * from './base'; export * from './field'; +export * from './filter'; export * from './json'; export * from './optioned'; export * from './string'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/json.test.ts b/src/plugins/data/public/search/aggs/param_types/json.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/json.test.ts rename to src/plugins/data/public/search/aggs/param_types/json.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/json.ts b/src/plugins/data/public/search/aggs/param_types/json.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/json.ts rename to src/plugins/data/public/search/aggs/param_types/json.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/optioned.test.ts b/src/plugins/data/public/search/aggs/param_types/optioned.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/optioned.test.ts rename to src/plugins/data/public/search/aggs/param_types/optioned.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/optioned.ts b/src/plugins/data/public/search/aggs/param_types/optioned.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/optioned.ts rename to src/plugins/data/public/search/aggs/param_types/optioned.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/string.test.ts b/src/plugins/data/public/search/aggs/param_types/string.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/string.test.ts rename to src/plugins/data/public/search/aggs/param_types/string.test.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/param_types/string.ts b/src/plugins/data/public/search/aggs/param_types/string.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/param_types/string.ts rename to src/plugins/data/public/search/aggs/param_types/string.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/test_helpers/index.ts b/src/plugins/data/public/search/aggs/test_helpers/index.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/aggs/test_helpers/index.ts rename to src/plugins/data/public/search/aggs/test_helpers/index.ts diff --git a/src/legacy/core_plugins/data/public/search/aggs/test_helpers/mock_agg_types_registry.ts b/src/plugins/data/public/search/aggs/test_helpers/mock_agg_types_registry.ts similarity index 88% rename from src/legacy/core_plugins/data/public/search/aggs/test_helpers/mock_agg_types_registry.ts rename to src/plugins/data/public/search/aggs/test_helpers/mock_agg_types_registry.ts index d6bb7938664932..1ebd0ea29c9ffc 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/test_helpers/mock_agg_types_registry.ts +++ b/src/plugins/data/public/search/aggs/test_helpers/mock_agg_types_registry.ts @@ -17,8 +17,10 @@ * under the License. */ +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { coreMock } from '../../../../../../../src/core/public/mocks'; import { AggTypesRegistry, AggTypesRegistryStart } from '../agg_types_registry'; -import { aggTypes } from '../agg_types'; +import { getAggTypes } from '../agg_types'; import { BucketAggType } from '../buckets/_bucket_agg_type'; import { MetricAggType } from '../metrics/metric_agg_type'; @@ -49,6 +51,7 @@ export function mockAggTypesRegistry | MetricAggTyp } }); } else { + const aggTypes = getAggTypes({ uiSettings: coreMock.createSetup().uiSettings }); aggTypes.buckets.forEach(type => registrySetup.registerBucket(type)); aggTypes.metrics.forEach(type => registrySetup.registerMetric(type)); } diff --git a/src/legacy/core_plugins/data/public/search/aggs/test_helpers/mock_data_services.ts b/src/plugins/data/public/search/aggs/test_helpers/mock_data_services.ts similarity index 76% rename from src/legacy/core_plugins/data/public/search/aggs/test_helpers/mock_data_services.ts rename to src/plugins/data/public/search/aggs/test_helpers/mock_data_services.ts index c4e78ab8f64226..d1d591771743c7 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/test_helpers/mock_data_services.ts +++ b/src/plugins/data/public/search/aggs/test_helpers/mock_data_services.ts @@ -17,20 +17,19 @@ * under the License. */ -import { coreMock } from '../../../../../../../../src/core/public/mocks'; -import { dataPluginMock } from '../../../../../../../plugins/data/public/mocks'; -import { searchStartMock } from '../../mocks'; -import { setSearchServiceShim } from '../../../services'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { coreMock } from '../../../../../../../src/core/public/mocks'; +import { dataPluginMock } from '../../../../public/mocks'; import { setFieldFormats, setIndexPatterns, + setInjectedMetadata, setNotifications, setOverlays, setQueryService, setSearchService, setUiSettings, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../plugins/data/public/services'; +} from '../../../../public/services'; /** * Testing helper which calls all of the service setters used in the @@ -41,11 +40,10 @@ import { export function mockDataServices() { const core = coreMock.createStart(); const data = dataPluginMock.createStartContract(); - const searchShim = searchStartMock(); - setSearchServiceShim(searchShim); setFieldFormats(data.fieldFormats); setIndexPatterns(data.indexPatterns); + setInjectedMetadata(core.injectedMetadata); setNotifications(core.notifications); setOverlays(core.overlays); setQueryService(data.query); diff --git a/src/plugins/data/public/search/aggs/types.ts b/src/plugins/data/public/search/aggs/types.ts new file mode 100644 index 00000000000000..4b2b1620ad1d38 --- /dev/null +++ b/src/plugins/data/public/search/aggs/types.ts @@ -0,0 +1,72 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { IndexPattern } from '../../index_patterns'; +import { + AggType, + AggTypesRegistrySetup, + AggTypesRegistryStart, + AggConfig, + AggConfigs, + CreateAggConfigParams, + FieldParamType, + getCalculateAutoTimeExpression, + MetricAggType, + aggTypeFieldFilters, + parentPipelineAggHelper, + siblingPipelineAggHelper, +} from './'; + +export { IAggConfig } from './agg_config'; +export { CreateAggConfigParams, IAggConfigs } from './agg_configs'; +export { IAggType } from './agg_type'; +export { AggParam, AggParamOption } from './agg_params'; +export { IFieldParamType } from './param_types'; +export { IMetricAggType } from './metrics/metric_agg_type'; +export { DateRangeKey } from './buckets/lib/date_range'; +export { IpRangeKey } from './buckets/lib/ip_range'; +export { OptionedValueProp, OptionedParamEditorProps } from './param_types/optioned'; + +/** @internal */ +export interface SearchAggsSetup { + calculateAutoTimeExpression: ReturnType; + types: AggTypesRegistrySetup; +} + +/** @internal */ +export interface SearchAggsStartLegacy { + AggConfig: typeof AggConfig; + AggType: typeof AggType; + aggTypeFieldFilters: typeof aggTypeFieldFilters; + FieldParamType: typeof FieldParamType; + MetricAggType: typeof MetricAggType; + parentPipelineAggHelper: typeof parentPipelineAggHelper; + siblingPipelineAggHelper: typeof siblingPipelineAggHelper; +} + +/** @internal */ +export interface SearchAggsStart { + calculateAutoTimeExpression: ReturnType; + createAggConfigs: ( + indexPattern: IndexPattern, + configStates?: CreateAggConfigParams[], + schemas?: Record + ) => InstanceType; + types: AggTypesRegistryStart; +} diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/date_utils.ts b/src/plugins/data/public/search/aggs/utils/calculate_auto_time_expression.ts similarity index 70% rename from src/legacy/core_plugins/data/public/search/aggs/buckets/lib/date_utils.ts rename to src/plugins/data/public/search/aggs/utils/calculate_auto_time_expression.ts index c333a1dbe8524b..459de66d057d43 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/lib/date_utils.ts +++ b/src/plugins/data/public/search/aggs/utils/calculate_auto_time_expression.ts @@ -17,24 +17,9 @@ * under the License. */ -import dateMath from '@elastic/datemath'; -import { TimeBuckets } from './time_buckets'; -import { TimeRange } from '../../../../../../../../plugins/data/public'; -import { IUiSettingsClient } from '../../../../../../../../core/public'; - -export function toAbsoluteDates(range: TimeRange) { - const fromDate = dateMath.parse(range.from); - const toDate = dateMath.parse(range.to, { roundUp: true }); - - if (!fromDate || !toDate) { - return; - } - - return { - from: fromDate.toDate(), - to: toDate.toDate(), - }; -} +import { IUiSettingsClient } from 'src/core/public'; +import { TimeBuckets } from '../buckets/lib/time_buckets'; +import { toAbsoluteDates, TimeRange } from '../../../../common'; export function getCalculateAutoTimeExpression(uiSettings: IUiSettingsClient) { return function calculateAutoTimeExpression(range: TimeRange) { diff --git a/src/legacy/core_plugins/data/server/index.ts b/src/plugins/data/public/search/aggs/utils/index.ts similarity index 90% rename from src/legacy/core_plugins/data/server/index.ts rename to src/plugins/data/public/search/aggs/utils/index.ts index cf34dc0d5a26c7..23606bd1093424 100644 --- a/src/legacy/core_plugins/data/server/index.ts +++ b/src/plugins/data/public/search/aggs/utils/index.ts @@ -17,5 +17,5 @@ * under the License. */ -/** @public static code */ -export * from '../common'; +export * from './calculate_auto_time_expression'; +export * from './to_angular_json'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/utils.ts b/src/plugins/data/public/search/aggs/utils/to_angular_json.ts similarity index 64% rename from src/legacy/core_plugins/data/public/search/aggs/utils.ts rename to src/plugins/data/public/search/aggs/utils/to_angular_json.ts index 9fcd3f7930b066..f91a240741b6ae 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/utils.ts +++ b/src/plugins/data/public/search/aggs/utils/to_angular_json.ts @@ -17,32 +17,12 @@ * under the License. */ -import { leastCommonInterval } from 'ui/vis/lib/least_common_interval'; -import { isValidEsInterval } from '../../../common'; - -export function isValidInterval(value: string, baseInterval?: string) { - if (baseInterval) { - return _parseWithBase(value, baseInterval); - } else { - return isValidEsInterval(value); - } -} - -// When base interval is set, check for least common interval and allow -// input the value is the same. This means that the input interval is a -// multiple of the base interval. -function _parseWithBase(value: string, baseInterval: string) { - try { - const interval = leastCommonInterval(baseInterval, value); - return interval === value.replace(/\s/g, ''); - } catch (e) { - return false; - } -} - -// An inlined version of angular.toJSON() -// source: https://github.com/angular/angular.js/blob/master/src/Angular.js#L1312 -// @internal +/** + * An inlined version of angular.toJSON(). Source: + * https://github.com/angular/angular.js/blob/master/src/Angular.js#L1312 + * + * @internal + */ export function toAngularJSON(obj: any, pretty?: any): string { if (obj === undefined) return ''; if (typeof pretty === 'number') { diff --git a/src/legacy/core_plugins/data/public/search/expressions/build_tabular_inspector_data.ts b/src/plugins/data/public/search/expressions/build_tabular_inspector_data.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/expressions/build_tabular_inspector_data.ts rename to src/plugins/data/public/search/expressions/build_tabular_inspector_data.ts index bd05fa21bfd5de..89a46db27e8940 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/build_tabular_inspector_data.ts +++ b/src/plugins/data/public/search/expressions/build_tabular_inspector_data.ts @@ -18,12 +18,9 @@ */ import { set } from 'lodash'; -// @ts-ignore -import { FormattedData } from '../../../../../../plugins/inspector/public'; - -import { createFilter } from './create_filter'; - +import { FormattedData } from '../../../../../plugins/inspector/public'; import { TabbedTable } from '../tabify'; +import { createFilter } from './create_filter'; /** * @deprecated diff --git a/src/legacy/core_plugins/data/public/search/expressions/create_filter.test.ts b/src/plugins/data/public/search/expressions/create_filter.test.ts similarity index 90% rename from src/legacy/core_plugins/data/public/search/expressions/create_filter.test.ts rename to src/plugins/data/public/search/expressions/create_filter.test.ts index 890ec81778d4bf..23da060cba2032 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/create_filter.test.ts +++ b/src/plugins/data/public/search/expressions/create_filter.test.ts @@ -17,15 +17,10 @@ * under the License. */ -import { - fieldFormats, - FieldFormatsGetConfigFn, - esFilters, -} from '../../../../../../plugins/data/public'; import { createFilter } from './create_filter'; +import { AggConfigs, IAggConfig } from '../aggs'; import { TabbedTable } from '../tabify'; -import { AggConfigs } from '../aggs/agg_configs'; -import { IAggConfig } from '../aggs/agg_config'; +import { isRangeFilter, BytesFormat, FieldFormatsGetConfigFn } from '../../../common'; import { mockDataServices, mockAggTypesRegistry } from '../aggs/test_helpers'; describe('createFilter', () => { @@ -41,7 +36,7 @@ describe('createFilter', () => { indexPattern: { id: '1234', }, - format: new fieldFormats.BytesFormat({}, (() => {}) as FieldFormatsGetConfigFn), + format: new BytesFormat({}, (() => {}) as FieldFormatsGetConfigFn), }; const indexPattern = { @@ -121,7 +116,7 @@ describe('createFilter', () => { const [rangeFilter] = filters; - if (esFilters.isRangeFilter(rangeFilter)) { + if (isRangeFilter(rangeFilter)) { expect(rangeFilter.range.bytes.gte).toEqual(2048); expect(rangeFilter.range.bytes.lt).toEqual(2078); } diff --git a/src/legacy/core_plugins/data/public/search/expressions/create_filter.ts b/src/plugins/data/public/search/expressions/create_filter.ts similarity index 93% rename from src/legacy/core_plugins/data/public/search/expressions/create_filter.ts rename to src/plugins/data/public/search/expressions/create_filter.ts index 77e011932195ca..2e2bd435151b61 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/create_filter.ts +++ b/src/plugins/data/public/search/expressions/create_filter.ts @@ -17,9 +17,9 @@ * under the License. */ -import { IAggConfig } from 'ui/agg_types'; -import { Filter } from '../../../../../../plugins/data/public'; +import { IAggConfig } from '../aggs'; import { TabbedTable } from '../tabify'; +import { Filter } from '../../../common'; const getOtherBucketFilterTerms = (table: TabbedTable, columnIndex: number, rowIndex: number) => { if (rowIndex === -1) { @@ -45,7 +45,7 @@ const getOtherBucketFilterTerms = (table: TabbedTable, columnIndex: number, rowI ]; }; -const createFilter = ( +export const createFilter = ( aggConfigs: IAggConfig[], table: TabbedTable, columnIndex: number, @@ -76,5 +76,3 @@ const createFilter = ( return filter; }; - -export { createFilter }; diff --git a/src/legacy/core_plugins/data/public/search/expressions/esaggs.ts b/src/plugins/data/public/search/expressions/esaggs.ts similarity index 89% rename from src/legacy/core_plugins/data/public/search/expressions/esaggs.ts rename to src/plugins/data/public/search/expressions/esaggs.ts index bb954cb887ef3f..2341f4fe447dbc 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/esaggs.ts +++ b/src/plugins/data/public/search/expressions/esaggs.ts @@ -19,33 +19,24 @@ import { get, has } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { createAggConfigs, IAggConfigs } from 'ui/agg_types'; -import { createFormat } from 'ui/visualize/loader/pipeline_helpers/utilities'; import { KibanaContext, KibanaDatatable, ExpressionFunctionDefinition, KibanaDatatableColumn, -} from 'src/plugins/expressions/public'; -import { - ISearchSource, - SearchSource, - Query, - TimeRange, - Filter, - getTime, - FilterManager, -} from '../../../../../../plugins/data/public'; - +} from '../../../../../plugins/expressions/public'; +import { calculateObjectHash } from '../../../../../plugins/kibana_utils/public'; +import { PersistedState } from '../../../../../plugins/visualizations/public'; +import { Adapters } from '../../../../../plugins/inspector/public'; + +import { IAggConfigs } from '../aggs'; +import { ISearchSource, SearchSource } from '../search_source'; +import { tabifyAggResponse } from '../tabify'; +import { Filter, Query, serializeFieldFormat, TimeRange } from '../../../common'; +import { FilterManager, getTime } from '../../query'; +import { getSearchService, getQueryService, getIndexPatterns } from '../../services'; import { buildTabularInspectorData } from './build_tabular_inspector_data'; -import { calculateObjectHash } from '../../../../../../plugins/kibana_utils/common'; -import { tabifyAggResponse } from '../../../../../core_plugins/data/public'; -import { PersistedState } from '../../../../../../plugins/visualizations/public'; -import { Adapters } from '../../../../../../plugins/inspector/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getQueryService, getIndexPatterns } from '../../../../../../plugins/data/public/services'; -import { getRequestInspectorStats, getResponseInspectorStats } from '../..'; -import { serializeAggConfig } from './utils'; +import { getRequestInspectorStats, getResponseInspectorStats, serializeAggConfig } from './utils'; export interface RequestHandlerParams { searchSource: ISearchSource; @@ -255,10 +246,11 @@ export const esaggs = (): ExpressionFunctionDefinition diff --git a/src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public/index.ts b/src/plugins/data/public/search/expressions/utils/index.ts similarity index 90% rename from src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public/index.ts rename to src/plugins/data/public/search/expressions/utils/index.ts index d8c0de2bce3f4a..0fd51f3e158a62 100644 --- a/src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public/index.ts +++ b/src/plugins/data/public/search/expressions/utils/index.ts @@ -17,4 +17,5 @@ * under the License. */ -export * from '../../../../../../plugins/dashboard_embeddable_container/public'; +export * from './courier_inspector_stats'; +export * from './serialize_agg_config'; diff --git a/src/legacy/core_plugins/data/public/search/expressions/utils.ts b/src/plugins/data/public/search/expressions/utils/serialize_agg_config.ts similarity index 85% rename from src/legacy/core_plugins/data/public/search/expressions/utils.ts rename to src/plugins/data/public/search/expressions/utils/serialize_agg_config.ts index 79763b577f2e2d..4ca976d328c919 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/utils.ts +++ b/src/plugins/data/public/search/expressions/utils/serialize_agg_config.ts @@ -17,11 +17,12 @@ * under the License. */ -import { getSearchServiceShim } from '../../services'; -import { IAggConfig } from '../aggs/types'; -import { KibanaDatatableColumnMeta } from '../../../../../../plugins/expressions/common/expression_types'; -import { IndexPattern } from '../../../../../../plugins/data/public'; +import { KibanaDatatableColumnMeta } from '../../../../../../plugins/expressions/public'; +import { IAggConfig } from '../../aggs'; +import { IndexPattern } from '../../../index_patterns'; +import { getSearchService } from '../../../../public/services'; +/** @internal */ export const serializeAggConfig = (aggConfig: IAggConfig): KibanaDatatableColumnMeta => { return { type: aggConfig.type.name, @@ -36,12 +37,13 @@ interface DeserializeAggConfigParams { indexPattern: IndexPattern; } +/** @internal */ export const deserializeAggConfig = ({ type, aggConfigParams, indexPattern, }: DeserializeAggConfigParams) => { - const { aggs } = getSearchServiceShim(); + const { aggs } = getSearchService(); const aggConfigs = aggs.createAggConfigs(indexPattern); const aggConfig = aggConfigs.createAggConfig({ enabled: true, diff --git a/src/legacy/core_plugins/data/public/search/utils/types.ts b/src/plugins/data/public/search/expressions/utils/types.ts similarity index 88% rename from src/legacy/core_plugins/data/public/search/utils/types.ts rename to src/plugins/data/public/search/expressions/utils/types.ts index e0afe99aa81fac..b2311e664820ea 100644 --- a/src/legacy/core_plugins/data/public/search/utils/types.ts +++ b/src/plugins/data/public/search/expressions/utils/types.ts @@ -17,12 +17,13 @@ * under the License. */ -export interface InspectorStat { +interface InspectorStat { label: string; value: string; description: string; } +/** @internal */ export interface RequestInspectorStats { indexPattern?: InspectorStat; indexPatternId?: InspectorStat; @@ -31,9 +32,3 @@ export interface RequestInspectorStats { hits?: InspectorStat; requestTime?: InspectorStat; } - -export interface AggResponseBucket { - key_as_string: string; - key: number; - doc_count: number; -} diff --git a/src/plugins/data/public/search/index.ts b/src/plugins/data/public/search/index.ts index 6ccd90c6a9eff9..ac72cfd6f62ca9 100644 --- a/src/plugins/data/public/search/index.ts +++ b/src/plugins/data/public/search/index.ts @@ -17,6 +17,10 @@ * under the License. */ +export * from './aggs'; +export * from './expressions'; +export * from './tabify'; + export { ISearchSetup, ISearchStart, diff --git a/src/plugins/data/public/search/mocks.ts b/src/plugins/data/public/search/mocks.ts index f537a28849f22f..71b4eece91cefe 100644 --- a/src/plugins/data/public/search/mocks.ts +++ b/src/plugins/data/public/search/mocks.ts @@ -17,16 +17,12 @@ * under the License. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { coreMock } from '../../../../../src/core/public/mocks'; -import { getCalculateAutoTimeExpression } from './aggs/buckets/lib/date_utils'; +import { searchAggsSetupMock } from './aggs/mocks'; export * from './search_source/mocks'; export const searchSetupMock = { - aggs: { - calculateAutoTimeExpression: getCalculateAutoTimeExpression(coreMock.createSetup().uiSettings), - }, + aggs: searchAggsSetupMock(), registerSearchStrategyContext: jest.fn(), registerSearchStrategyProvider: jest.fn(), }; diff --git a/src/plugins/data/public/search/search_service.ts b/src/plugins/data/public/search/search_service.ts index 4b9a5f6729877a..691c8aa0e984db 100644 --- a/src/plugins/data/public/search/search_service.ts +++ b/src/plugins/data/public/search/search_service.ts @@ -19,13 +19,25 @@ import { Plugin, CoreSetup, CoreStart, PackageInfo } from '../../../../core/public'; -import { getCalculateAutoTimeExpression } from './aggs/buckets/lib/date_utils'; import { SYNC_SEARCH_STRATEGY, syncSearchStrategyProvider } from './sync_search_strategy'; import { ISearchSetup, ISearchStart, TSearchStrategyProvider, TSearchStrategiesMap } from './types'; import { TStrategyTypes } from './strategy_types'; import { getEsClient, LegacyApiCaller } from './es_client'; import { ES_SEARCH_STRATEGY, DEFAULT_SEARCH_STRATEGY } from '../../common/search'; import { esSearchStrategyProvider } from './es_search/es_search_strategy'; +import { + getAggTypes, + AggType, + AggTypesRegistry, + AggConfig, + AggConfigs, + FieldParamType, + getCalculateAutoTimeExpression, + MetricAggType, + aggTypeFieldFilters, + parentPipelineAggHelper, + siblingPipelineAggHelper, +} from './aggs'; /** * The search plugin exposes two registration methods for other plugins: @@ -44,6 +56,7 @@ export class SearchService implements Plugin { private searchStrategies: TSearchStrategiesMap = {}; private esClient?: LegacyApiCaller; + private readonly aggTypesRegistry = new AggTypesRegistry(); private registerSearchStrategyProvider = ( name: T, @@ -60,23 +73,35 @@ export class SearchService implements Plugin { public setup(core: CoreSetup, packageInfo: PackageInfo): ISearchSetup { this.esClient = getEsClient(core.injectedMetadata, core.http, packageInfo); - this.registerSearchStrategyProvider(SYNC_SEARCH_STRATEGY, syncSearchStrategyProvider); - this.registerSearchStrategyProvider(ES_SEARCH_STRATEGY, esSearchStrategyProvider); + const aggTypesSetup = this.aggTypesRegistry.setup(); + const aggTypes = getAggTypes({ uiSettings: core.uiSettings }); + aggTypes.buckets.forEach(b => aggTypesSetup.registerBucket(b)); + aggTypes.metrics.forEach(m => aggTypesSetup.registerMetric(m)); + return { aggs: { calculateAutoTimeExpression: getCalculateAutoTimeExpression(core.uiSettings), + types: aggTypesSetup, }, registerSearchStrategyProvider: this.registerSearchStrategyProvider, }; } public start(core: CoreStart): ISearchStart { + const aggTypesStart = this.aggTypesRegistry.start(); + return { aggs: { calculateAutoTimeExpression: getCalculateAutoTimeExpression(core.uiSettings), + createAggConfigs: (indexPattern, configStates = [], schemas) => { + return new AggConfigs(indexPattern, configStates, { + typesRegistry: aggTypesStart, + }); + }, + types: aggTypesStart, }, search: (request, options, strategyName) => { const strategyProvider = this.getSearchStrategy(strategyName || DEFAULT_SEARCH_STRATEGY); @@ -88,6 +113,13 @@ export class SearchService implements Plugin { }, __LEGACY: { esClient: this.esClient!, + AggConfig, + AggType, + aggTypeFieldFilters, + FieldParamType, + MetricAggType, + parentPipelineAggHelper, + siblingPipelineAggHelper, }, }; } diff --git a/src/plugins/data/public/search/search_source/normalize_sort_request.test.ts b/src/plugins/data/public/search/search_source/normalize_sort_request.test.ts index 5939074d773bf0..13a6167544b5e9 100644 --- a/src/plugins/data/public/search/search_source/normalize_sort_request.test.ts +++ b/src/plugins/data/public/search/search_source/normalize_sort_request.test.ts @@ -21,8 +21,6 @@ import { normalizeSortRequest } from './normalize_sort_request'; import { SortDirection } from './types'; import { IIndexPattern } from '../..'; -jest.mock('ui/new_platform'); - describe('SearchSource#normalizeSortRequest', function() { const scriptedField = { name: 'script string', diff --git a/src/plugins/data/public/search/search_source/search_source.test.ts b/src/plugins/data/public/search/search_source/search_source.test.ts index 7ca15bb4b77ab6..d2b8308bfb258f 100644 --- a/src/plugins/data/public/search/search_source/search_source.test.ts +++ b/src/plugins/data/public/search/search_source/search_source.test.ts @@ -19,27 +19,7 @@ import { SearchSource } from '../search_source'; import { IndexPattern } from '../..'; -import { setSearchService, setUiSettings, setInjectedMetadata } from '../../services'; - -import { - injectedMetadataServiceMock, - uiSettingsServiceMock, -} from '../../../../../core/public/mocks'; - -setUiSettings(uiSettingsServiceMock.createStartContract()); -setInjectedMetadata(injectedMetadataServiceMock.createSetupContract()); -setSearchService({ - aggs: { - calculateAutoTimeExpression: jest.fn().mockReturnValue('1d'), - }, - search: jest.fn(), - __LEGACY: { - esClient: { - search: jest.fn(), - msearch: jest.fn(), - }, - }, -}); +import { mockDataServices } from '../aggs/test_helpers'; jest.mock('../fetch', () => ({ fetchSoon: jest.fn().mockResolvedValue({}), @@ -64,6 +44,10 @@ const indexPattern2 = ({ } as unknown) as IndexPattern; describe('SearchSource', function() { + beforeEach(() => { + mockDataServices(); + }); + describe('#setField()', function() { it('sets the value for the property', function() { const searchSource = new SearchSource(); diff --git a/src/plugins/data/public/search/search_strategy/default_search_strategy.test.ts b/src/plugins/data/public/search/search_strategy/default_search_strategy.test.ts index e4206322a0afdd..e4f492c89e0efd 100644 --- a/src/plugins/data/public/search/search_strategy/default_search_strategy.test.ts +++ b/src/plugins/data/public/search/search_strategy/default_search_strategy.test.ts @@ -18,6 +18,7 @@ */ import { IUiSettingsClient } from '../../../../../core/public'; +import { ISearchStart } from '../types'; import { SearchStrategySearchParams } from './types'; import { defaultSearchStrategy } from './default_search_strategy'; @@ -62,10 +63,7 @@ describe('defaultSearchStrategy', function() { }, ], esShardTimeout: 0, - searchService: { - aggs: { - calculateAutoTimeExpression: jest.fn().mockReturnValue('1d'), - }, + searchService: ({ search: newSearchMock, __LEGACY: { esClient: { @@ -73,7 +71,7 @@ describe('defaultSearchStrategy', function() { msearch: msearchMock, }, }, - }, + } as unknown) as jest.Mocked, }; es = searchArgs.searchService.__LEGACY.esClient; diff --git a/src/legacy/core_plugins/data/public/search/tabify/buckets.test.ts b/src/plugins/data/public/search/tabify/buckets.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/tabify/buckets.test.ts rename to src/plugins/data/public/search/tabify/buckets.test.ts diff --git a/src/legacy/core_plugins/data/public/search/tabify/buckets.ts b/src/plugins/data/public/search/tabify/buckets.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/tabify/buckets.ts rename to src/plugins/data/public/search/tabify/buckets.ts index 8078136299f8c6..971e820ac6ddf6 100644 --- a/src/legacy/core_plugins/data/public/search/tabify/buckets.ts +++ b/src/plugins/data/public/search/tabify/buckets.ts @@ -20,8 +20,7 @@ import { get, isPlainObject, keys, findKey } from 'lodash'; import moment from 'moment'; import { IAggConfig } from '../aggs'; -import { TabbedRangeFilterParams } from './types'; -import { AggResponseBucket } from '../types'; +import { AggResponseBucket, TabbedRangeFilterParams } from './types'; type AggParams = IAggConfig['params'] & { drop_partials: boolean; diff --git a/src/legacy/core_plugins/data/public/search/tabify/get_columns.test.ts b/src/plugins/data/public/search/tabify/get_columns.test.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/tabify/get_columns.test.ts rename to src/plugins/data/public/search/tabify/get_columns.test.ts diff --git a/src/legacy/core_plugins/data/public/search/tabify/get_columns.ts b/src/plugins/data/public/search/tabify/get_columns.ts similarity index 99% rename from src/legacy/core_plugins/data/public/search/tabify/get_columns.ts rename to src/plugins/data/public/search/tabify/get_columns.ts index 8bffca65b4ae2f..ee8c636fb2e864 100644 --- a/src/legacy/core_plugins/data/public/search/tabify/get_columns.ts +++ b/src/plugins/data/public/search/tabify/get_columns.ts @@ -20,6 +20,7 @@ import { groupBy } from 'lodash'; import { IAggConfig } from '../aggs'; import { TabbedAggColumn } from './types'; + const getColumn = (agg: IAggConfig, i: number): TabbedAggColumn => { return { aggConfig: agg, diff --git a/src/legacy/core_plugins/data/public/search/tabify/index.ts b/src/plugins/data/public/search/tabify/index.ts similarity index 100% rename from src/legacy/core_plugins/data/public/search/tabify/index.ts rename to src/plugins/data/public/search/tabify/index.ts diff --git a/src/legacy/core_plugins/data/public/search/tabify/response_writer.test.ts b/src/plugins/data/public/search/tabify/response_writer.test.ts similarity index 99% rename from src/legacy/core_plugins/data/public/search/tabify/response_writer.test.ts rename to src/plugins/data/public/search/tabify/response_writer.test.ts index 91835bc948abb0..ca84f08de8c8ac 100644 --- a/src/legacy/core_plugins/data/public/search/tabify/response_writer.test.ts +++ b/src/plugins/data/public/search/tabify/response_writer.test.ts @@ -20,7 +20,6 @@ import { TabbedAggResponseWriter } from './response_writer'; import { AggConfigs, BUCKET_TYPES } from '../aggs'; import { mockDataServices, mockAggTypesRegistry } from '../aggs/test_helpers'; - import { TabbedResponseWriterOptions } from './types'; describe('TabbedAggResponseWriter class', () => { diff --git a/src/legacy/core_plugins/data/public/search/tabify/response_writer.ts b/src/plugins/data/public/search/tabify/response_writer.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/tabify/response_writer.ts rename to src/plugins/data/public/search/tabify/response_writer.ts index c910eda0245404..cacecbec3be0b4 100644 --- a/src/legacy/core_plugins/data/public/search/tabify/response_writer.ts +++ b/src/plugins/data/public/search/tabify/response_writer.ts @@ -18,7 +18,7 @@ */ import { isEmpty } from 'lodash'; -import { IAggConfigs } from '../aggs/agg_configs'; +import { IAggConfigs } from '../aggs'; import { tabifyGetColumns } from './get_columns'; import { TabbedResponseWriterOptions, TabbedAggColumn, TabbedAggRow, TabbedTable } from './types'; diff --git a/src/legacy/core_plugins/data/public/search/tabify/tabify.test.ts b/src/plugins/data/public/search/tabify/tabify.test.ts similarity index 97% rename from src/legacy/core_plugins/data/public/search/tabify/tabify.test.ts rename to src/plugins/data/public/search/tabify/tabify.test.ts index 7e7748c00ab435..c9bf04ae9f0fc3 100644 --- a/src/legacy/core_plugins/data/public/search/tabify/tabify.test.ts +++ b/src/plugins/data/public/search/tabify/tabify.test.ts @@ -17,9 +17,9 @@ * under the License. */ -import { IndexPattern } from '../../../../../../plugins/data/public'; import { tabifyAggResponse } from './tabify'; -import { IAggConfig, IAggConfigs, AggConfigs } from '../aggs'; +import { IndexPattern } from '../../index_patterns'; +import { AggConfigs, IAggConfig, IAggConfigs } from '../aggs'; import { mockAggTypesRegistry } from '../aggs/test_helpers'; import { metricOnly, threeTermBuckets } from 'fixtures/fake_hierarchical_data'; diff --git a/src/legacy/core_plugins/data/public/search/tabify/tabify.ts b/src/plugins/data/public/search/tabify/tabify.ts similarity index 98% rename from src/legacy/core_plugins/data/public/search/tabify/tabify.ts rename to src/plugins/data/public/search/tabify/tabify.ts index 078d3f7f72759b..e93e9890342529 100644 --- a/src/legacy/core_plugins/data/public/search/tabify/tabify.ts +++ b/src/plugins/data/public/search/tabify/tabify.ts @@ -21,8 +21,8 @@ import { get } from 'lodash'; import { TabbedAggResponseWriter } from './response_writer'; import { TabifyBuckets } from './buckets'; import { TabbedResponseWriterOptions, TabbedRangeFilterParams } from './types'; -import { AggResponseBucket } from '../types'; -import { IAggConfigs, AggGroupNames } from '../aggs'; +import { AggResponseBucket } from './types'; +import { AggGroupNames, IAggConfigs } from '../aggs'; /** * Sets up the ResponseWriter and kicks off bucket collection. diff --git a/src/legacy/core_plugins/data/public/search/tabify/types.ts b/src/plugins/data/public/search/tabify/types.ts similarity index 89% rename from src/legacy/core_plugins/data/public/search/tabify/types.ts rename to src/plugins/data/public/search/tabify/types.ts index 964a9d2080e7bd..1e051880d3f19f 100644 --- a/src/legacy/core_plugins/data/public/search/tabify/types.ts +++ b/src/plugins/data/public/search/tabify/types.ts @@ -17,7 +17,7 @@ * under the License. */ -import { RangeFilterParams } from '../../../../../../plugins/data/public'; +import { RangeFilterParams } from '../../../common'; import { IAggConfig } from '../aggs'; /** @internal **/ @@ -32,6 +32,13 @@ export interface TabbedResponseWriterOptions { timeRange?: { [key: string]: RangeFilterParams }; } +/** @internal */ +export interface AggResponseBucket { + key_as_string: string; + key: number; + doc_count: number; +} + /** @public **/ export interface TabbedAggColumn { aggConfig: IAggConfig; diff --git a/src/plugins/data/public/search/types.ts b/src/plugins/data/public/search/types.ts index caea178212f560..1732c384b1a856 100644 --- a/src/plugins/data/public/search/types.ts +++ b/src/plugins/data/public/search/types.ts @@ -18,7 +18,7 @@ */ import { CoreStart } from 'kibana/public'; -import { TimeRange } from '../../common'; +import { SearchAggsSetup, SearchAggsStart, SearchAggsStartLegacy } from './aggs'; import { ISearch, ISearchGeneric } from './i_search'; import { TStrategyTypes } from './strategy_types'; import { LegacyApiCaller } from './es_client'; @@ -67,12 +67,8 @@ export type TRegisterSearchStrategyProvider = ( searchStrategyProvider: TSearchStrategyProvider ) => void; -interface SearchAggsSetup { - calculateAutoTimeExpression: (range: TimeRange) => string | undefined; -} - -interface SearchAggsStart { - calculateAutoTimeExpression: (range: TimeRange) => string | undefined; +interface ISearchStartLegacy { + esClient: LegacyApiCaller; } /** @@ -91,7 +87,5 @@ export interface ISearchSetup { export interface ISearchStart { aggs: SearchAggsStart; search: ISearchGeneric; - __LEGACY: { - esClient: LegacyApiCaller; - }; + __LEGACY: ISearchStartLegacy & SearchAggsStartLegacy; } diff --git a/src/plugins/data/public/types.ts b/src/plugins/data/public/types.ts index c1480920809dd9..45160cbf301799 100644 --- a/src/plugins/data/public/types.ts +++ b/src/plugins/data/public/types.ts @@ -20,9 +20,11 @@ import React from 'react'; import { CoreStart } from 'src/core/public'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; +import { ExpressionsSetup } from 'src/plugins/expressions/public'; import { UiActionsSetup, UiActionsStart } from 'src/plugins/ui_actions/public'; import { AutocompleteSetup, AutocompleteStart } from './autocomplete'; import { FieldFormatsSetup, FieldFormatsStart } from './field_formats'; +import { createFiltersFromEvent } from './actions'; import { ISearchSetup, ISearchStart } from './search'; import { QuerySetup, QueryStart } from './query'; import { IndexPatternSelectProps } from './ui/index_pattern_select'; @@ -30,6 +32,7 @@ import { IndexPatternsContract } from './index_patterns'; import { StatefulSearchBarProps } from './ui/search_bar/create_search_bar'; export interface DataSetupDependencies { + expressions: ExpressionsSetup; uiActions: UiActionsSetup; } @@ -45,6 +48,9 @@ export interface DataPublicPluginSetup { } export interface DataPublicPluginStart { + actions: { + createFiltersFromEvent: typeof createFiltersFromEvent; + }; autocomplete: AutocompleteStart; indexPatterns: IndexPatternsContract; search: ISearchStart; diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts index 18ba1130cc26ab..0165486fc2de71 100644 --- a/src/plugins/data/server/index.ts +++ b/src/plugins/data/server/index.ts @@ -151,6 +151,19 @@ export { * Search */ +import { + dateHistogramInterval, + InvalidEsCalendarIntervalError, + InvalidEsIntervalFormatError, + isValidEsInterval, + isValidInterval, + parseEsInterval, + parseInterval, + toAbsoluteDates, +} from '../common'; + +export { ParsedInterval } from '../common'; + export { ISearch, ICancel, @@ -162,6 +175,20 @@ export { getDefaultSearchParams, } from './search'; +// Search namespace +export const search = { + aggs: { + dateHistogramInterval, + InvalidEsCalendarIntervalError, + InvalidEsIntervalFormatError, + isValidEsInterval, + isValidInterval, + parseEsInterval, + parseInterval, + toAbsoluteDates, + }, +}; + /** * Types to be shared externally * @public diff --git a/src/plugins/data/server/search/search_service.ts b/src/plugins/data/server/search/search_service.ts index 09bb150594177e..46f90e3c6fc627 100644 --- a/src/plugins/data/server/search/search_service.ts +++ b/src/plugins/data/server/search/search_service.ts @@ -55,7 +55,7 @@ export class SearchService implements Plugin { core.http.registerRouteHandlerContext<'search'>('search', context => { return createApi({ - caller: context.core!.elasticsearch.dataClient.callAsCurrentUser, + caller: context.core.elasticsearch.dataClient.callAsCurrentUser, searchStrategies: this.searchStrategies, }); }); diff --git a/src/plugins/data/server/server.api.md b/src/plugins/data/server/server.api.md index a1f59b776328c5..666df2900c2c39 100644 --- a/src/plugins/data/server/server.api.md +++ b/src/plugins/data/server/server.api.md @@ -143,6 +143,7 @@ import { TasksListParams } from 'elasticsearch'; import { TermvectorsParams } from 'elasticsearch'; import { Type } from '@kbn/config-schema'; import { TypeOf } from '@kbn/config-schema'; +import { Unit } from '@elastic/datemath'; import { UpdateDocumentByQueryParams } from 'elasticsearch'; import { UpdateDocumentParams } from 'elasticsearch'; import { Url } from 'url'; @@ -280,7 +281,7 @@ export interface FieldFormatConfig { export const fieldFormats: { FieldFormatsRegistry: typeof FieldFormatsRegistry; FieldFormat: typeof FieldFormat; - serializeFieldFormat: (agg: import("../../../legacy/core_plugins/data/public/search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; + serializeFieldFormat: (agg: import("../public/search").AggConfig) => import("../../expressions/common").SerializedFieldFormat; BoolFormat: typeof BoolFormat; BytesFormat: typeof BytesFormat; ColorFormat: typeof ColorFormat; @@ -575,6 +576,12 @@ export interface KueryNode { type: keyof NodeTypes; } +// Warning: (ae-forgotten-export) The symbol "parseEsInterval" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ParsedInterval" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ParsedInterval = ReturnType; + // Warning: (ae-missing-release-tag) "parseInterval" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -655,6 +662,22 @@ export interface RefreshInterval { value: number; } +// Warning: (ae-missing-release-tag) "search" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const search: { + aggs: { + dateHistogramInterval: typeof dateHistogramInterval; + InvalidEsCalendarIntervalError: typeof InvalidEsCalendarIntervalError; + InvalidEsIntervalFormatError: typeof InvalidEsIntervalFormatError; + isValidEsInterval: typeof isValidEsInterval; + isValidInterval: typeof isValidInterval; + parseEsInterval: typeof parseEsInterval; + parseInterval: typeof parseInterval; + toAbsoluteDates: typeof toAbsoluteDates; + }; +}; + // Warning: (ae-missing-release-tag) "shouldReadFieldFromDocValues" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -704,6 +727,12 @@ export type TSearchStrategyProvider = (context: ISearc // src/plugins/data/server/index.ts:102:26 - (ae-forgotten-export) The symbol "TruncateFormat" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:130:27 - (ae-forgotten-export) The symbol "isFilterable" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:130:27 - (ae-forgotten-export) The symbol "isNestedField" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:181:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:182:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:183:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:184:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:185:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:188:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts // src/plugins/data/server/plugin.ts:62:14 - (ae-forgotten-export) The symbol "ISearchSetup" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/src/plugins/expressions/public/index.ts b/src/plugins/expressions/public/index.ts index 06dd951cd54109..c57db6029ec2e3 100644 --- a/src/plugins/expressions/public/index.ts +++ b/src/plugins/expressions/public/index.ts @@ -94,6 +94,7 @@ export { KibanaContext, KibanaDatatable, KibanaDatatableColumn, + KibanaDatatableColumnMeta, KibanaDatatableRow, KnownTypeToString, Overflow, diff --git a/src/plugins/expressions/server/index.ts b/src/plugins/expressions/server/index.ts index 7894f55fad4f0c..e41135b6939221 100644 --- a/src/plugins/expressions/server/index.ts +++ b/src/plugins/expressions/server/index.ts @@ -85,6 +85,7 @@ export { KibanaContext, KibanaDatatable, KibanaDatatableColumn, + KibanaDatatableColumnMeta, KibanaDatatableRow, KnownTypeToString, Overflow, diff --git a/src/plugins/kibana_legacy/public/angular/index.ts b/src/plugins/kibana_legacy/public/angular/index.ts index 0b234b70428508..5fc37ac39612a4 100644 --- a/src/plugins/kibana_legacy/public/angular/index.ts +++ b/src/plugins/kibana_legacy/public/angular/index.ts @@ -24,3 +24,4 @@ export * from './angular_config'; export { ensureDefaultIndexPattern } from './ensure_default_index_pattern'; // @ts-ignore export { createTopNavDirective, createTopNavHelper, loadKbnTopNavDirectives } from './kbn_top_nav'; +export { subscribeWithScope } from './subscribe_with_scope'; diff --git a/src/legacy/ui/public/utils/subscribe_with_scope.test.ts b/src/plugins/kibana_legacy/public/angular/subscribe_with_scope.test.ts similarity index 75% rename from src/legacy/ui/public/utils/subscribe_with_scope.test.ts rename to src/plugins/kibana_legacy/public/angular/subscribe_with_scope.test.ts index c392d416112c83..a8565b11a7dfd0 100644 --- a/src/legacy/ui/public/utils/subscribe_with_scope.test.ts +++ b/src/plugins/kibana_legacy/public/angular/subscribe_with_scope.test.ts @@ -16,8 +16,6 @@ * specific language governing permissions and limitations * under the License. */ -import { mockFatalError } from './subscribe_with_scope.test.mocks'; - import * as Rx from 'rxjs'; import { subscribeWithScope } from './subscribe_with_scope'; @@ -73,14 +71,20 @@ it('calls observer.next() if already in a digest cycle, wraps in $scope.$apply i }); it('reports fatalError if observer.next() throws', () => { + const fatalError = jest.fn(); const $scope = new Scope(); - subscribeWithScope($scope as any, Rx.of(undefined), { - next() { - throw new Error('foo bar'); + subscribeWithScope( + $scope as any, + Rx.of(undefined), + { + next() { + throw new Error('foo bar'); + }, }, - }); + fatalError + ); - expect(mockFatalError.mock.calls).toMatchInlineSnapshot(` + expect(fatalError.mock.calls).toMatchInlineSnapshot(` Array [ Array [ [Error: foo bar], @@ -90,12 +94,13 @@ Array [ }); it('reports fatal error if observer.error is not defined and observable errors', () => { + const fatalError = jest.fn(); const $scope = new Scope(); const error = new Error('foo'); error.stack = `${error.message}\n---stack trace ---`; - subscribeWithScope($scope as any, Rx.throwError(error)); + subscribeWithScope($scope as any, Rx.throwError(error), undefined, fatalError); - expect(mockFatalError.mock.calls).toMatchInlineSnapshot(` + expect(fatalError.mock.calls).toMatchInlineSnapshot(` Array [ Array [ [Error: Uncaught error in subscribeWithScope(): foo @@ -106,14 +111,20 @@ Array [ }); it('reports fatal error if observer.error throws', () => { + const fatalError = jest.fn(); const $scope = new Scope(); - subscribeWithScope($scope as any, Rx.throwError(new Error('foo')), { - error: () => { - throw new Error('foo'); + subscribeWithScope( + $scope as any, + Rx.throwError(new Error('foo')), + { + error: () => { + throw new Error('foo'); + }, }, - }); + fatalError + ); - expect(mockFatalError.mock.calls).toMatchInlineSnapshot(` + expect(fatalError.mock.calls).toMatchInlineSnapshot(` Array [ Array [ [Error: foo], @@ -123,25 +134,37 @@ Array [ }); it('does not report fatal error if observer.error handles the error', () => { + const fatalError = jest.fn(); const $scope = new Scope(); - subscribeWithScope($scope as any, Rx.throwError(new Error('foo')), { - error: () => { - // noop, swallow error + subscribeWithScope( + $scope as any, + Rx.throwError(new Error('foo')), + { + error: () => { + // noop, swallow error + }, }, - }); + fatalError + ); - expect(mockFatalError.mock.calls).toEqual([]); + expect(fatalError.mock.calls).toEqual([]); }); it('reports fatal error if observer.complete throws', () => { + const fatalError = jest.fn(); const $scope = new Scope(); - subscribeWithScope($scope as any, Rx.EMPTY, { - complete: () => { - throw new Error('foo'); + subscribeWithScope( + $scope as any, + Rx.EMPTY, + { + complete: () => { + throw new Error('foo'); + }, }, - }); + fatalError + ); - expect(mockFatalError.mock.calls).toMatchInlineSnapshot(` + expect(fatalError.mock.calls).toMatchInlineSnapshot(` Array [ Array [ [Error: foo], diff --git a/src/legacy/ui/public/utils/subscribe_with_scope.ts b/src/plugins/kibana_legacy/public/angular/subscribe_with_scope.ts similarity index 67% rename from src/legacy/ui/public/utils/subscribe_with_scope.ts rename to src/plugins/kibana_legacy/public/angular/subscribe_with_scope.ts index f4f158cbbd1a81..519291d39797ce 100644 --- a/src/legacy/ui/public/utils/subscribe_with_scope.ts +++ b/src/plugins/kibana_legacy/public/angular/subscribe_with_scope.ts @@ -19,9 +19,11 @@ import { IScope } from 'angular'; import * as Rx from 'rxjs'; -import { fatalError } from 'ui/notify/fatal_error'; +import { AngularHttpError } from '../notify/lib'; -function callInDigest($scope: IScope, fn: () => void) { +type FatalErrorFn = (error: AngularHttpError | Error | string, location?: string) => void; + +function callInDigest($scope: IScope, fn: () => void, fatalError?: FatalErrorFn) { try { // this is terrible, but necessary to synchronously deliver subscription values // to angular scopes. This is required by some APIs, like the `config` service, @@ -35,7 +37,9 @@ function callInDigest($scope: IScope, fn: () => void) { $scope.$apply(() => fn()); } } catch (error) { - fatalError(error); + if (fatalError) { + fatalError(error); + } } } @@ -46,30 +50,35 @@ function callInDigest($scope: IScope, fn: () => void) { export function subscribeWithScope( $scope: IScope, observable: Rx.Observable, - observer?: Rx.PartialObserver + observer?: Rx.PartialObserver, + fatalError?: FatalErrorFn ) { return observable.subscribe({ next(value) { if (observer && observer.next) { - callInDigest($scope, () => observer.next!(value)); + callInDigest($scope, () => observer.next!(value), fatalError); } }, error(error) { - callInDigest($scope, () => { - if (observer && observer.error) { - observer.error(error); - } else { - throw new Error( - `Uncaught error in subscribeWithScope(): ${ - error ? error.stack || error.message : error - }` - ); - } - }); + callInDigest( + $scope, + () => { + if (observer && observer.error) { + observer.error(error); + } else { + throw new Error( + `Uncaught error in subscribeWithScope(): ${ + error ? error.stack || error.message : error + }` + ); + } + }, + fatalError + ); }, complete() { if (observer && observer.complete) { - callInDigest($scope, () => observer.complete!()); + callInDigest($scope, () => observer.complete!(), fatalError); } }, }); diff --git a/src/legacy/core_plugins/data/public/search/expressions/boot.ts b/src/plugins/kibana_legacy/public/notify/lib/add_fatal_error.ts similarity index 61% rename from src/legacy/core_plugins/data/public/search/expressions/boot.ts rename to src/plugins/kibana_legacy/public/notify/lib/add_fatal_error.ts index 29348383ce6fe3..928d59d71fbdf7 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/boot.ts +++ b/src/plugins/kibana_legacy/public/notify/lib/add_fatal_error.ts @@ -16,8 +16,22 @@ * specific language governing permissions and limitations * under the License. */ +import { FatalErrorsSetup } from '../../../../../core/public'; +import { + AngularHttpError, + formatAngularHttpError, + isAngularHttpError, +} from './format_angular_http_error'; -import { npSetup } from 'ui/new_platform'; -import { esaggs } from './esaggs'; +export function addFatalError( + fatalErrors: FatalErrorsSetup, + error: AngularHttpError | Error | string, + location?: string +) { + // add support for angular http errors to newPlatformFatalErrors + if (isAngularHttpError(error)) { + error = formatAngularHttpError(error); + } -npSetup.plugins.expressions.registerFunction(esaggs); + fatalErrors.add(error, location); +} diff --git a/src/plugins/kibana_legacy/public/notify/lib/index.ts b/src/plugins/kibana_legacy/public/notify/lib/index.ts index c374b5926b64f0..f43ba91b102e45 100644 --- a/src/plugins/kibana_legacy/public/notify/lib/index.ts +++ b/src/plugins/kibana_legacy/public/notify/lib/index.ts @@ -25,3 +25,4 @@ export { formatAngularHttpError, AngularHttpError, } from './format_angular_http_error'; +export { addFatalError } from './add_fatal_error'; diff --git a/src/plugins/kibana_utils/public/index.ts b/src/plugins/kibana_utils/public/index.ts index 6971d96e471bdb..ee38d5e8111c92 100644 --- a/src/plugins/kibana_utils/public/index.ts +++ b/src/plugins/kibana_utils/public/index.ts @@ -18,18 +18,19 @@ */ export { + calculateObjectHash, + createGetterSetter, defer, Defer, - of, - createGetterSetter, Get, + JsonArray, + JsonObject, + JsonValue, + of, Set, UiComponent, UiComponentInstance, url, - JsonValue, - JsonObject, - JsonArray, } from '../common'; export * from './core'; export * from './errors'; diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/annotations/date_histogram.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/annotations/date_histogram.js index 995790c590e424..283f2c115d4f55 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/annotations/date_histogram.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/annotations/date_histogram.js @@ -18,9 +18,10 @@ */ import _ from 'lodash'; -import { dateHistogramInterval } from '../../../../../../../legacy/core_plugins/data/server'; import { getBucketSize } from '../../helpers/get_bucket_size'; import { getTimerange } from '../../helpers/get_timerange'; +import { search } from '../../../../../../../plugins/data/server'; +const { dateHistogramInterval } = search.aggs; export function dateHistogram( req, diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/series/date_histogram.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/series/date_histogram.js index 48da5ac19aa3ae..df63a14ea5ee45 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/series/date_histogram.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/series/date_histogram.js @@ -18,11 +18,12 @@ */ import { set } from 'lodash'; -import { dateHistogramInterval } from '../../../../../../../legacy/core_plugins/data/server'; import { getBucketSize } from '../../helpers/get_bucket_size'; import { offsetTime } from '../../offset_time'; import { getIntervalAndTimefield } from '../../get_interval_and_timefield'; import { isLastValueTimerangeMode } from '../../helpers/get_timerange_mode'; +import { search } from '../../../../../../../plugins/data/server'; +const { dateHistogramInterval } = search.aggs; export function dateHistogram(req, panel, series, esQueryConfig, indexPatternObject, capabilities) { return next => doc => { diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/table/date_histogram.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/table/date_histogram.js index f33ce145aa2309..6afa434a550854 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/table/date_histogram.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/request_processors/table/date_histogram.js @@ -18,12 +18,13 @@ */ import { set } from 'lodash'; -import { dateHistogramInterval } from '../../../../../../../legacy/core_plugins/data/server'; import { getBucketSize } from '../../helpers/get_bucket_size'; import { isLastValueTimerangeMode } from '../../helpers/get_timerange_mode'; import { getIntervalAndTimefield } from '../../get_interval_and_timefield'; import { getTimerange } from '../../helpers/get_timerange'; import { calculateAggRoot } from './calculate_agg_root'; +import { search } from '../../../../../../../plugins/data/server'; +const { dateHistogramInterval } = search.aggs; export function dateHistogram(req, panel, esQueryConfig, indexPatternObject, capabilities) { return next => doc => { diff --git a/src/test_utils/kbn_server.ts b/src/test_utils/kbn_server.ts index e1b4a823e7e871..f4c3ecd8243cec 100644 --- a/src/test_utils/kbn_server.ts +++ b/src/test_utils/kbn_server.ts @@ -252,7 +252,7 @@ export function createTestServers({ return { startES: async () => { - await es.start(); + await es.start(get(settings, 'es.esArgs', [])); if (['gold', 'trial'].includes(license)) { await setupUsers({ diff --git a/tasks/test.js b/tasks/test.js index 504247f5b53551..5618ebba4e6ebe 100644 --- a/tasks/test.js +++ b/tasks/test.js @@ -61,7 +61,7 @@ module.exports = function(grunt) { 'run:apiIntegrationTests', ]); - grunt.registerTask('test:karmaDebug', ['checkPlugins', 'run:karmaDebugServer', 'karma:dev']); + grunt.registerTask('test:karmaDebug', ['checkPlugins', 'run:karmaTestDebugServer', 'karma:dev']); grunt.registerTask('test:mochaCoverage', ['run:mochaCoverage']); grunt.registerTask('test', subTask => { diff --git a/test/accessibility/apps/management.ts b/test/accessibility/apps/management.ts index 99afb21632ffac..ac2921ed063f50 100644 --- a/test/accessibility/apps/management.ts +++ b/test/accessibility/apps/management.ts @@ -21,13 +21,28 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['common', 'settings']); - + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const a11y = getService('a11y'); + // describe('Management', () => { + // before(async () => { + // await esArchiver.loadIfNeeded('logstash_functional'); + // await kibanaServer.uiSettings.update({ + // defaultIndex: 'logstash-*', + // }); + // await PageObjects.common.navigateToApp('settings'); + // }); + describe('Management', () => { before(async () => { - await PageObjects.common.navigateToApp('settings'); + await esArchiver.load('discover'); + await esArchiver.loadIfNeeded('logstash_functional'); + await kibanaServer.uiSettings.update({ + defaultIndex: 'logstash-*', + }); + await PageObjects.settings.navigateTo(); }); it('main view', async () => { @@ -50,8 +65,16 @@ export default function({ getService, getPageObjects }: FtrProviderContext) { await a11y.testAppSnapshot(); }); - it('Saved objects view', async () => { - await PageObjects.settings.clickKibanaSavedObjects(); + // index patterns page + it('Navigate back to logstash index page', async () => { + await PageObjects.settings.clickKibanaIndexPatterns(); + await PageObjects.settings.clickIndexPatternLogstash(); + await a11y.testAppSnapshot(); + }); + + // Issue: https://github.com/elastic/kibana/issues/60030 + it.skip('Edit field type', async () => { + await PageObjects.settings.clickEditFieldFormat(); await a11y.testAppSnapshot(); }); diff --git a/test/functional/apps/dashboard/dashboard_state.js b/test/functional/apps/dashboard/dashboard_state.js index b9172990c501dc..a643a9ee40aa2c 100644 --- a/test/functional/apps/dashboard/dashboard_state.js +++ b/test/functional/apps/dashboard/dashboard_state.js @@ -24,7 +24,7 @@ import { PIE_CHART_VIS_NAME, AREA_CHART_VIS_NAME } from '../../page_objects/dash // eslint-disable-next-line import { DEFAULT_PANEL_WIDTH -} from '../../../../src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_constants'; +} from '../../../../src/plugins/dashboard/public/embeddable/dashboard_constants'; export default function({ getService, getPageObjects }) { const PageObjects = getPageObjects([ diff --git a/test/functional/apps/management/_handle_alias.js b/test/functional/apps/management/_handle_alias.js index 3d9368f8d46807..55f6b56d9f0d1d 100644 --- a/test/functional/apps/management/_handle_alias.js +++ b/test/functional/apps/management/_handle_alias.js @@ -25,7 +25,8 @@ export default function({ getService, getPageObjects }) { const retry = getService('retry'); const PageObjects = getPageObjects(['common', 'home', 'settings', 'discover', 'timePicker']); - describe('Index patterns on aliases', function() { + // FLAKY: https://github.com/elastic/kibana/issues/59717 + describe.skip('Index patterns on aliases', function() { before(async function() { await esArchiver.loadIfNeeded('alias'); await esArchiver.load('empty_kibana'); diff --git a/test/functional/apps/management/_scripted_fields.js b/test/functional/apps/management/_scripted_fields.js index b1a14cd18f5571..65291c3c4772c5 100644 --- a/test/functional/apps/management/_scripted_fields.js +++ b/test/functional/apps/management/_scripted_fields.js @@ -53,7 +53,7 @@ export default function({ getService, getPageObjects }) { ]); describe('scripted fields', function() { - this.tags(['skipFirefox', 'skipCoverage']); + this.tags(['skipFirefox']); before(async function() { await browser.setWindowSize(1200, 800); diff --git a/test/functional/page_objects/settings_page.ts b/test/functional/page_objects/settings_page.ts index a0f503eb27e682..c244deba5f17ea 100644 --- a/test/functional/page_objects/settings_page.ts +++ b/test/functional/page_objects/settings_page.ts @@ -657,6 +657,10 @@ export function SettingsPageProvider({ getService, getPageObjects }: FtrProvider await testSubjects.click('importSavedObjectsConfirmBtn'); } + async clickEditFieldFormat() { + await testSubjects.click('editFieldFormat'); + } + async associateIndexPattern(oldIndexPatternId: string, newIndexPatternTitle: string) { await find.clickByCssSelector( `select[data-test-subj="managementChangeIndexSelection-${oldIndexPatternId}"] > diff --git a/test/plugin_functional/plugins/core_plugin_a/server/plugin.ts b/test/plugin_functional/plugins/core_plugin_a/server/plugin.ts index e057e63c03f4a5..6535a54f6b7443 100644 --- a/test/plugin_functional/plugins/core_plugin_a/server/plugin.ts +++ b/test/plugin_functional/plugins/core_plugin_a/server/plugin.ts @@ -34,7 +34,7 @@ export class CorePluginAPlugin implements Plugin { core.http.registerRouteHandlerContext('pluginA', context => { return { ping: () => - context.core!.elasticsearch.adminClient.callAsInternalUser('ping') as Promise, + context.core.elasticsearch.adminClient.callAsInternalUser('ping') as Promise, }; }); } diff --git a/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/index.ts b/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/index.ts index dfce45671483ff..99f54277be5d2e 100644 --- a/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/index.ts +++ b/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/index.ts @@ -29,7 +29,6 @@ export default function(kibana: any) { order: 1, main: 'plugins/kbn_tp_embeddable_explorer/np_ready/public/legacy', }, - hacks: ['plugins/dashboard_embeddable_container/initialize'], }, init(server: Legacy.Server) { server.injectUiAppVars('kbn_tp_embeddable_explorer', async () => diff --git a/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_container_example.tsx b/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_container_example.tsx index df0c00fb48b2eb..7cc9c1df1c9482 100644 --- a/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_container_example.tsx +++ b/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_container_example.tsx @@ -30,7 +30,7 @@ import { DASHBOARD_CONTAINER_TYPE, DashboardContainer, DashboardContainerFactory, -} from '../../../../../../../../src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public'; +} from '../../../../../../../../src/plugins/dashboard/public'; import { CoreStart } from '../../../../../../../../src/core/public'; import { dashboardInput } from './dashboard_input'; diff --git a/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_input.ts b/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_input.ts index 3c8468a3d8ed37..bb8951680be350 100644 --- a/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_input.ts +++ b/test/plugin_functional/plugins/kbn_tp_embeddable_explorer/public/np_ready/public/app/dashboard_input.ts @@ -18,7 +18,7 @@ */ import { ViewMode, CONTACT_CARD_EMBEDDABLE, HELLO_WORLD_EMBEDDABLE } from '../embeddable_api'; -import { DashboardContainerInput } from '../../../../../../../../src/legacy/core_plugins/dashboard_embeddable_container/public/np_ready/public'; +import { DashboardContainerInput } from '../../../../../../../../src/plugins/dashboard/public'; export const dashboardInput: DashboardContainerInput = { panels: { diff --git a/test/typings/query_string.d.ts b/test/typings/query_string.d.ts new file mode 100644 index 00000000000000..3e4a8fa4da6a01 --- /dev/null +++ b/test/typings/query_string.d.ts @@ -0,0 +1,46 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +declare module 'query-string' { + type ArrayFormat = 'bracket' | 'index' | 'none'; + + export interface ParseOptions { + arrayFormat?: ArrayFormat; + sort: ((itemLeft: string, itemRight: string) => number) | false; + } + + export interface ParsedQuery { + [key: string]: T | T[] | null | undefined; + } + + export function parse(str: string, options?: ParseOptions): ParsedQuery; + + export function parseUrl(str: string, options?: ParseOptions): { url: string; query: any }; + + export interface StringifyOptions { + strict?: boolean; + encode?: boolean; + arrayFormat?: ArrayFormat; + sort: ((itemLeft: string, itemRight: string) => number) | false; + } + + export function stringify(obj: object, options?: StringifyOptions): string; + + export function extract(str: string): string; +} diff --git a/typings/query_string.d.ts b/typings/query_string.d.ts new file mode 100644 index 00000000000000..3e4a8fa4da6a01 --- /dev/null +++ b/typings/query_string.d.ts @@ -0,0 +1,46 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +declare module 'query-string' { + type ArrayFormat = 'bracket' | 'index' | 'none'; + + export interface ParseOptions { + arrayFormat?: ArrayFormat; + sort: ((itemLeft: string, itemRight: string) => number) | false; + } + + export interface ParsedQuery { + [key: string]: T | T[] | null | undefined; + } + + export function parse(str: string, options?: ParseOptions): ParsedQuery; + + export function parseUrl(str: string, options?: ParseOptions): { url: string; query: any }; + + export interface StringifyOptions { + strict?: boolean; + encode?: boolean; + arrayFormat?: ArrayFormat; + sort: ((itemLeft: string, itemRight: string) => number) | false; + } + + export function stringify(obj: object, options?: StringifyOptions): string; + + export function extract(str: string): string; +} diff --git a/vars/githubPr.groovy b/vars/githubPr.groovy index 7759edbbf5bfc7..0176424452d07f 100644 --- a/vars/githubPr.groovy +++ b/vars/githubPr.groovy @@ -194,14 +194,6 @@ def getNextCommentMessage(previousCommentInfo = [:]) { .join("\n\n") } -def withGithubCredentials(closure) { - withCredentials([ - string(credentialsId: '2a9602aa-ab9f-4e52-baf3-b71ca88469c7', variable: 'GITHUB_TOKEN'), - ]) { - closure() - } -} - def postComment(message) { if (!isPr()) { error "Trying to post a GitHub PR comment on a non-PR or non-elastic PR build" diff --git a/vars/kibanaPipeline.groovy b/vars/kibanaPipeline.groovy index 2b9b0eba38f465..cb5508642711a0 100644 --- a/vars/kibanaPipeline.groovy +++ b/vars/kibanaPipeline.groovy @@ -202,12 +202,20 @@ def runErrorReporter() { } def call(Map params = [:], Closure closure) { - def config = [timeoutMinutes: 135] + params + def config = [timeoutMinutes: 135, checkPrChanges: false] + params stage("Kibana Pipeline") { timeout(time: config.timeoutMinutes, unit: 'MINUTES') { timestamps { ansiColor('xterm') { + if (config.checkPrChanges && githubPr.isPr()) { + print "Checking PR for changes to determine if CI needs to be run..." + + if (prChanges.areChangesSkippable()) { + print "No changes requiring CI found in PR, skipping." + return + } + } closure() } } @@ -215,4 +223,5 @@ def call(Map params = [:], Closure closure) { } } + return this diff --git a/vars/prChanges.groovy b/vars/prChanges.groovy new file mode 100644 index 00000000000000..a9eb9027a05974 --- /dev/null +++ b/vars/prChanges.groovy @@ -0,0 +1,52 @@ + +def getSkippablePaths() { + return [ + /^docs\//, + /^rfcs\//, + /^.ci\/.+\.yml$/, + /^\.github\//, + /\.md$/, + ] +} + +def areChangesSkippable() { + if (!githubPr.isPr()) { + return false + } + + try { + def skippablePaths = getSkippablePaths() + def files = getChangedFiles() + + // 3000 is the max files GH API will return + if (files.size() >= 3000) { + return false + } + + files = files.findAll { file -> + return !skippablePaths.find { regex -> file =~ regex} + } + + return files.size() < 1 + } catch (ex) { + buildUtils.printStacktrace(ex) + print "Error while checking to see if CI is skippable based on changes. Will run CI." + return false + } +} + +def getChanges() { + withGithubCredentials { + return githubPrs.getChanges(env.ghprbPullId) + } +} + +def getChangedFiles() { + def changes = getChanges() + def changedFiles = changes.collect { it.filename } + def renamedFiles = changes.collect { it.previousFilename }.findAll { it } + + return changedFiles + renamedFiles +} + +return this diff --git a/vars/withGithubCredentials.groovy b/vars/withGithubCredentials.groovy new file mode 100644 index 00000000000000..224e49af1bd6f2 --- /dev/null +++ b/vars/withGithubCredentials.groovy @@ -0,0 +1,9 @@ +def call(closure) { + withCredentials([ + string(credentialsId: '2a9602aa-ab9f-4e52-baf3-b71ca88469c7', variable: 'GITHUB_TOKEN'), + ]) { + closure() + } +} + +return this diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index 53628ea970fb6f..60a8d1fcbf2295 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -26,7 +26,7 @@ "xpack.licensing": "plugins/licensing", "xpack.logstash": "legacy/plugins/logstash", "xpack.main": "legacy/plugins/xpack_main", - "xpack.maps": "legacy/plugins/maps", + "xpack.maps": ["plugins/maps", "legacy/plugins/maps"], "xpack.ml": ["plugins/ml", "legacy/plugins/ml"], "xpack.monitoring": "legacy/plugins/monitoring", "xpack.remoteClusters": "plugins/remote_clusters", diff --git a/x-pack/index.js b/x-pack/index.js index c917befb4b3ddb..ab31d40c5d7183 100644 --- a/x-pack/index.js +++ b/x-pack/index.js @@ -9,7 +9,6 @@ import { graph } from './legacy/plugins/graph'; import { monitoring } from './legacy/plugins/monitoring'; import { reporting } from './legacy/plugins/reporting'; import { security } from './legacy/plugins/security'; -import { ml } from './legacy/plugins/ml'; import { tilemap } from './legacy/plugins/tilemap'; import { grokdebugger } from './legacy/plugins/grokdebugger'; import { dashboardMode } from './legacy/plugins/dashboard_mode'; @@ -45,7 +44,6 @@ module.exports = function(kibana) { reporting(kibana), spaces(kibana), security(kibana), - ml(kibana), tilemap(kibana), grokdebugger(kibana), dashboardMode(kibana), diff --git a/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Controls.tsx b/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Controls.tsx index 38e86e4a0d1c93..a2e7b2c76031ec 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Controls.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Controls.tsx @@ -4,13 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ -import { EuiButtonIcon, EuiPanel } from '@elastic/eui'; +import { EuiButtonIcon, EuiPanel, EuiToolTip } from '@elastic/eui'; import theme from '@elastic/eui/dist/eui_theme_light.json'; import { i18n } from '@kbn/i18n'; import React, { useContext, useEffect, useState } from 'react'; import styled from 'styled-components'; import { CytoscapeContext } from './Cytoscape'; import { animationOptions, nodeHeight } from './cytoscapeOptions'; +import { getAPMHref } from '../../shared/Links/apm/APMLink'; +import { useUrlParams } from '../../../hooks/useUrlParams'; +import { APMQueryParams } from '../../shared/Links/url_helpers'; const ControlsContainer = styled('div')` left: ${theme.gutterTypes.gutterMedium}; @@ -28,7 +31,7 @@ const ZoomInButton = styled(Button)` margin-bottom: ${theme.paddingSizes.s}; `; -const ZoomPanel = styled(EuiPanel)` +const Panel = styled(EuiPanel)` margin-bottom: ${theme.paddingSizes.s}; `; @@ -47,7 +50,8 @@ function doZoom(cy: cytoscape.Core | undefined, increment: number) { export function Controls() { const cy = useContext(CytoscapeContext); - + const { urlParams } = useUrlParams(); + const currentSearch = urlParams.kuery ?? ''; const [zoom, setZoom] = useState((cy && cy.zoom()) || 1); useEffect(() => { @@ -86,45 +90,73 @@ export function Controls() { const minZoom = cy.minZoom(); const isMinZoom = zoom === minZoom; const increment = (maxZoom - minZoom) / steps; + + const centerLabel = i18n.translate('xpack.apm.serviceMap.center', { + defaultMessage: 'Center' + }); + const viewFullMapLabel = i18n.translate('xpack.apm.serviceMap.viewFullMap', { + defaultMessage: 'View full service map' + }); const zoomInLabel = i18n.translate('xpack.apm.serviceMap.zoomIn', { defaultMessage: 'Zoom in' }); const zoomOutLabel = i18n.translate('xpack.apm.serviceMap.zoomOut', { defaultMessage: 'Zoom out' }); - const centerLabel = i18n.translate('xpack.apm.serviceMap.center', { - defaultMessage: 'Center' - }); + + const showViewFullMapButton = cy.nodes('.primary').length > 0; return ( - - -