diff --git a/.eslintrc.js b/.eslintrc.js index 60d26cbfbab73..7af162f349b5c 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 a9af160d02084..accc99170bb70 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 0000000000000..99f779c288f5b --- /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 6874d02304e49..07878ed3c15fb 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 aec6d44ad4abf..5c745f1611cce 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 742aec1d4e7ab..d43da6e0bee04 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 4778415ab2391..97f7bad8e9911 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 0000000000000..d8f518ceebd64 --- /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 24a5c8f213d9f..c50e8924c9dd4 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 24bd42e83186f..3fcb855586129 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 b739578bbdd80..75bf6c6aa461b 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 fae5cee79d6e6..867cafa957f42 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 4e4e8b837d909..ee56f8b4a6284 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 0000000000000..08765aaf93d3d --- /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 0000000000000..39c794af2c881 --- /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 b2194c9ac0504..7d124b266bcc1 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 ec64851e39f78..8a88329031e1f 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 0000000000000..b62578ef96323 --- /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 0000000000000..aa9f64e4d566d --- /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 0000000000000..9c6141a50c02f --- /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 0000000000000..5de2c2230d362 --- /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 0000000000000..7a38dbb0a4415 --- /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 0000000000000..8cdf71c767211 --- /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 0000000000000..5fdcd53d57c65 --- /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 0000000000000..9dc0b788f29a6 --- /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 0000000000000..43f30d73ca6df --- /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 0000000000000..b75065da91abd --- /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 0000000000000..c9d6772a13b8d --- /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 0000000000000..038c339bf6774 --- /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 0000000000000..c0b386efbf9c7 --- /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 0000000000000..9df003377c4a1 --- /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 0000000000000..81e6e9b95d655 --- /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 0000000000000..c5e24bc0a78a0 --- /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 0000000000000..4bd6070bf2125 --- /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 0000000000000..3e966caa30799 --- /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 defc633b5d1ce..a623e91388fd6 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 0000000000000..245269af366bc --- /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 0000000000000..540d429dced48 --- /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 0000000000000..024a6c2105427 --- /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 7fd4d03e1b074..244633c3c4c9e 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 0000000000000..9d07f610ba32a --- /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 0000000000000..07310a4219359 --- /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 0000000000000..15505fed16bd4 --- /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 0000000000000..1226106895bdb --- /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 0000000000000..4f36d3ef7a16e --- /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 0000000000000..96903a5df9844 --- /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 ce1375d277b75..f8516ec476e88 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 0000000000000..637717692a38c --- /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 0000000000000..68e4371acc2f3 --- /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 0000000000000..00a440a0a775a --- /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 0000000000000..47272c7683e65 --- /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 0000000000000..911f9bdd17113 --- /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 0000000000000..3d99beaca47c4 --- /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 0000000000000..49516d7e42615 --- /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 0000000000000..90fc6ac80b1fe --- /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 0000000000000..11c907db5ead2 --- /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 0000000000000..ce83780da63a9 --- /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 0000000000000..3403a080d7507 --- /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 0000000000000..6a940fa9a78b7 --- /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 1f5371fbf088a..0000000000000 --- 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 98a954456d482..51bc46bbdccc8 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 d0d4cc491e142..58690300b3bd6 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 0000000000000..7e65ef85c8bec --- /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 89c5ca800a4d4..5cdf938a9e47f 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 4f4e575241e10..dce03e7e1a95c 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 0000000000000..b010667af79e4 --- /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 0000000000000..86f8b01312047 --- /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 0000000000000..578a2b159f9eb --- /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 0000000000000..ce20c1c50b984 --- /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 0000000000000..28519d95c4374 --- /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 0000000000000..8256291d368c3 --- /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 0000000000000..51b1bfa9b4362 --- /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 0000000000000..19a973b18d75c --- /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 1cc1d829d01cd..2b986aee508e2 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 507e60971526b..12d53f1a35ea0 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 0000000000000..c31a4ec13b837 --- /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 0000000000000..6020498fdcb6d --- /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 0000000000000..46d45b85690e3 --- /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 a97c21164d406..b3dcfb2aa3b0a 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 ca2cd2e6bcd93..e4836537df703 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 e04d45f77db5d..1ca9b63a51d18 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 f71a50e2927d8..69668176a397e 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 b8ad375496544..389d98a0818c8 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 6616b42f136c0..b92a6edf778ed 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 90cfdcc035d8e..ef8edecfd26ec 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 e2faf49ba7a9e..4a1ac8988e4e5 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 37d1061dc618d..825deea99bc23 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 50468db8a504d..94e86c39289bc 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 f67148d720446..b19a991fdf0d1 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 a0bbe623289d8..2aa35dff563f0 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 b430fd28fb896..32662f07a86f0 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 5ede98a1e6e6d..9cd0c26ea2497 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 792227a05e248..2402504f717ca 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 775c890675410..de311f91d56fa 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 7555895e8d71b..0000000000000 --- 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 9880b336e76e5..0000000000000 --- 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 428f0c305a375..813eab00f7258 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 61d8621a36843..27a3dd825485d 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 d37c17c224072..370b412127db8 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 f40cda8760bc7..76a3d92d20283 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 2852f3e4bdf46..0000000000000 --- 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 75d632a0f931f..0000000000000 --- 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 069a933fd994a..0000000000000 --- 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 96d2825559da2..0000000000000 --- 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 2d01ac446d951..0000000000000 --- 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 47ea1d168f379..0000000000000 --- 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/kibana/public/dashboard/legacy_imports.ts b/src/legacy/core_plugins/kibana/public/dashboard/legacy_imports.ts index a095935afa8d2..b497f73f3df2a 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 } 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 ad4feacde0815..2189b53ac81ee 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 b0d20b4482728..6b037fa63cf68 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 af3347afa9c5f..d1e4c9d2d2a0c 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 fe7beafcad18c..f29721e3c3d5c 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 3f04cad4f322b..b2a2f43b9152d 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 2d42609e1e25f..7d5a378885470 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 87eb283639c78..0000000000000 --- 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 9ba425bb0e489..0000000000000 --- 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 39dde2d8bb7cf..0000000000000 --- 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 c05f5b4aff3bc..0000000000000 --- 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 9bbd907cc2041..8202ba13b30cc 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, redirectWhenMissing } 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 53be4e5bd0f2d..f6ed570be2c37 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 63834fb750e21..0bc2cbacc1eee 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 02d998e8f4529..d6e91e57b22a8 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 d4c00930c9383..cc2b6d31cb43b 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 b91ef5a6b79fb..507f927c608e1 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 e7df44e6fe61c..8eed5d33ab004 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 373dc37e56f6f..b14180d32b4f2 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 1cebb88cbda5a..674f40d0186e5 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 5be1179a9ae09..5c1700e776361 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 0000000000000..35fbd33fb4bc9 --- /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 b5ba2844e8b06..345717cafee9a 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 93b0c1827806f..7659d4fe95bab 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 e2aa33179f632..26d8a5abb2471 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 e8ff7765c5e0e..d59f1e0125fdc 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 @@ -78,6 +78,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', @@ -247,28 +248,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(); @@ -277,17 +259,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 = { @@ -649,16 +637,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 68ba508ffebdd..a2ad18d59d935 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 b201bea26503e..89f73022627c5 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/discover/np_ready/embeddable/search_embeddable.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/search_embeddable.ts index 91726c69189f3..d09b7612af49c 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/search_embeddable.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/search_embeddable.ts @@ -20,7 +20,10 @@ import _ from 'lodash'; import * as Rx from 'rxjs'; import { Subscription } from 'rxjs'; import { i18n } from '@kbn/i18n'; -import { UiActionsStart } from 'src/plugins/ui_actions/public'; +import { + UiActionsStart, + APPLY_FILTER_TRIGGER, +} from '../../../../../../..//plugins/ui_actions/public'; import { RequestAdapter, Adapters } from '../../../../../../../plugins/inspector/public'; import { esFilters, @@ -31,11 +34,7 @@ import { Query, IFieldType, } from '../../../../../../../plugins/data/public'; -import { - APPLY_FILTER_TRIGGER, - Container, - Embeddable, -} from '../../../../../embeddable_api/public/np_ready/public'; +import { Container, Embeddable } from '../../../../../embeddable_api/public/np_ready/public'; import * as columnActions from '../angular/doc_table/actions/columns'; import searchTemplate from './search_template.html'; import { ISearchEmbeddable, SearchInput, SearchOutput } from './types'; 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 0cbac20a947bf..6d302ac5a74f3 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 49f3b83ca2879..f3aa2c5da4b67 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 4b59a096c4440..29e160cf1c182 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 cf483d0032e1e..69af466a03729 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 } 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 8609f4cbbd1f2..11b98b6ead73d 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,8 +31,8 @@ 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 { MarkdownSimple, toMountPoint } from '../../../../../../../plugins/kibana_react/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, @@ -468,16 +468,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( @@ -500,16 +510,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 04b549c9d2b32..5c862686a37d9 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 0000000000000..012cda395bc6c --- /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 0000000000000..e6363551eba9c --- /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 0000000000000..ddb58a7d09bbd --- /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 73157abce8629..a7b6850b0b20a 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 d859c0cfd4678..0b9f0526988c8 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 b43894e74689f..1a97cc5c4d967 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 33a5c0fe660c4..50028d8c970f4 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 5849d9d80011e..94e3ad6023f4e 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 4f82298aaca41..60eeb49e201a0 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 4094cd4eff060..3bddc94929cf5 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 5dbd59f3f1709..5813465cc3f00 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 90929150de9c3..7b584f8069338 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 13a57296bab7a..6e29b111d422a 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 a6aefe067dd62..f6ea90a3891d8 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 2992549d38e30..40fd4d871a96a 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 1c8e679f7d61f..343fda44340d1 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 e66dff01b6bf2..7f06bdddb4805 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 cfe3b0c657147..d82941b7b8cee 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/embeddable/visualize_embeddable.ts b/src/legacy/core_plugins/visualizations/public/np_ready/public/embeddable/visualize_embeddable.ts index 7525345ccfe1b..474912ed508f8 100644 --- a/src/legacy/core_plugins/visualizations/public/np_ready/public/embeddable/visualize_embeddable.ts +++ b/src/legacy/core_plugins/visualizations/public/np_ready/public/embeddable/visualize_embeddable.ts @@ -34,10 +34,12 @@ import { EmbeddableOutput, Embeddable, Container, - selectRangeTrigger, - valueClickTrigger, EmbeddableVisTriggerContext, } from '../../../../../../../plugins/embeddable/public'; +import { + selectRangeTrigger, + valueClickTrigger, +} from '../../../../../../../plugins/ui_actions/public'; import { dispatchRenderComplete } from '../../../../../../../plugins/kibana_utils/public'; import { IExpressionLoaderParams, 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 fdbd1d5a61ce7..216e523b07141 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 33b2da75b547e..9446069182e19 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 069b5814908a8..de974e6e969ef 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 9e8eac08c33ea..2785247296ff4 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 b8db611f30815..5a8a55d470540 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 05fb106bf9940..b2eebe8b5b57d 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 ba86125f2e246..eb262966a4a22 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 0c4ea1572c4cd..0e759c3d9872c 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 139a124356de2..982c1c25a8101 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 d066e61df18e9..75c2cd4317872 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 4c5d7981e962a..45da4ab6b7472 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 28379c4feb94d..80a9d39221b2c 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 89617c20a31b7..ea84ba1ad2838 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 c5369b00f9f76..ce4e1b0551881 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 7fa2ae7ac6fe6..5614ffea7913e 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 7ec6a394d7e88..51394033e4d2e 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 46465f3a89ef0..2ae9a053ae2db 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 64105b016fb44..a7492e538b3af 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 815d2f09150c7..0000000000000 --- 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 ce44ad71e4bd8..0000000000000 --- 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 70e37ea6a6d7d..e5a657555819a 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 cf245178306d5..27d4078411564 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 d08fcfef3529e..a358e41f7b507 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 40db43427339d..3f1f1056cf1b4 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 702e1579e945f..7f13d5526cc15 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 7fa6e88b427a9..cf8c0bfe3d434 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 e587c0fe632f1..58f348b24d92e 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 403ea4821ffbc..67b9cfecba00f 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 0000000000000..03d84c5e2c97b --- /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 3f780665a949f..f9ff4bfea222b 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 72426855f70af..9df17b4c24a98 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 63f8ced97e9dc..98d752a72e28a 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 9880b336e76e5..09ea958ccaa85 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 c5f1276feb81d..8b8686c51b9c1 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 6553ce8ce4d91..f5df747f17e1e 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 eb29530f92fee..60244354f06e4 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 00990d21ccf37..714f005fbeb6d 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 bfba4d7f4c8da..1ed09002816d1 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 3713c781b0958..e62945a592072 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 e3dc9760aa8b8..cdb84ff13f25e 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 21046f8bb834f..6e1f16a09e803 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 4c69bc8262922..01c32e27da07d 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 c10ebfbe3eb1e..c735ad196fbee 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 7d739103eb2bb..58bd9a5ab05d7 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 f59fbefbea451..1554565d1403e 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 013b2f393b60b..c5cff1c5c68d9 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 a199a0419aea6..a01c133712206 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 { + SELECT_RANGE_TRIGGER, + VALUE_CLICK_TRIGGER, + APPLY_FILTER_TRIGGER, +} from '../../ui_actions/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 36d5451a4cd00..f979c9664f458 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 bf2d2f734c989..d6948aaade63d 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 d69376b4026d9..e20e6de6112a8 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 4a48f356d3f79..c441b2a0eb46f 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 d21f5c8968840..9cebff76c9684 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 c78e56dd25887..3fb03dc31e2b2 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 3cd9496d3f23d..a63d01e196612 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 691598fe27e31..73c6a5046fd23 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 d6ab58d5250a8..03629c3189cbb 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 976ab57c00b63..9e4b93035384f 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 42db37c81eadd..4fd988e7b7e66 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 f21ca6c975809..12817a9ba1159 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 e634b5daf0ac3..42b263415ff90 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 c594c7718e58b..d18a30fb6c6f8 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 7af8ebc3236a7..9bfded0ce9729 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 3b9c771e0f15f..33ab1ce8186a1 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 715f6895374e6..3b568d805f7c0 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 b046c802c58c1..dc8414d80c024 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 badd6dba6ea8a..d4c00a0991fe2 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 7572c48390dc2..ca51094da2f58 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 36be414383824..2d34c45aaab9d 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 324d425290832..3a6f8b36a9d96 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 125a30a1ab1dd..d3d85f2441a8b 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 6db6eb11a5f52..511af450b0113 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 4152258ffa0ee..43ebfc0e90db2 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 8c8911bda99a5..d600b16f56764 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 933cdd0577f8d..59e78af2d7b95 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 0000000000000..0ad28b8be2132 --- /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 8732f926b0fb2..3ffec09a84387 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 9142a30338163..759601fc0c180 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 11dc8e42fd653..07cf022dca83c 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 70df2f230db09..7ccd5ae4bf98c 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 9c2c546af40d4..3a402b1498a77 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 3fb464d8fa7a8..da6866d40a52f 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 30c4e400fb806..4535b5f5c5dd2 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 2ee3d9cf85e8a..0000000000000 --- 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 9f43181932d7e..c14f02e7decdf 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 096b19fe7de66..d9e1af149524c 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 f35db2cc759bd..036a0d4c1e8da 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 bc6c63d569b11..f12ebe58e2de2 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 b387e9b7d306a..813c657934a76 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 90c29675c0db2..58f5aef0b9dfd 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 8da547e592af9..b8d192cd66b5a 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 4d0cd55b09d53..b5dedc9d45e84 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 0000000000000..5dfb6aeff8d14 --- /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 b80671a43d2af..008dede3e1985 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 4f7b6e555ca33..aa41307b2a052 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 8b3e0a488c68a..3ec1e18d66ab9 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 53bc72f9ce1da..8a9f66f4b22a8 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 a79b2b34ad1ca..a4e4413843bdd 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 4a609225e6d7f..eb93e99427f65 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 df4cbaf49c8b3..3868d8f1bcd16 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 33d6d72540868..c1d05a39285b7 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 d561788936b51..0cfb7be699a95 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 68fc98261118c..f2636d52e3484 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 82b042a1e3378..05c4cb3de4bdf 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 1806c6d9d7710..0a9abf1edcd04 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 1d640a9c1fa42..71b1c1415d98e 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 c850eb4ff2220..738de6b62bccb 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 46c26dc8f1bd0..7a5dcc9be4592 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 95ad71a616ab2..2cbc5866e284d 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 18b666f454664..0182471392910 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 6882b8aa39e7e..34b77e14a3a71 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 1a453a225797d..f776a3deb23a1 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 3414e6a71ecdc..c9e8a9879f427 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 d6bb793866493..1ebd0ea29c9ff 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 c4e78ab8f6422..d1d591771743c 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 0000000000000..4b2b1620ad1d3 --- /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 c333a1dbe8524..459de66d057d4 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 cf34dc0d5a26c..23606bd109342 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 9fcd3f7930b06..f91a240741b6a 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 bd05fa21bfd5d..89a46db27e894 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 890ec81778d4b..23da060cba203 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 77e011932195c..2e2bd435151b6 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 bb954cb887ef3..2341f4fe447db 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 d8c0de2bce3f4..0fd51f3e158a6 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 79763b577f2e2..4ca976d328c91 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 e0afe99aa81fa..b2311e664820e 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 6ccd90c6a9eff..ac72cfd6f62ca 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 f537a28849f22..71b4eece91cef 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 4b9a5f6729877..691c8aa0e984d 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 5939074d773bf..13a6167544b5e 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 7ca15bb4b77ab..d2b8308bfb258 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 e4206322a0afd..e4f492c89e0ef 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 8078136299f8c..971e820ac6ddf 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 8bffca65b4ae2..ee8c636fb2e86 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 91835bc948abb..ca84f08de8c8a 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 c910eda024540..cacecbec3be0b 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 7e7748c00ab43..c9bf04ae9f0fc 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 078d3f7f72759..e93e989034252 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 964a9d2080e7b..1e051880d3f19 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 caea178212f56..1732c384b1a85 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 c1480920809dd..45160cbf30179 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 18ba1130cc26a..0165486fc2de7 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 09bb150594177..46f90e3c6fc62 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 a1f59b776328c..666df2900c2c3 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/embeddable/public/bootstrap.ts b/src/plugins/embeddable/public/bootstrap.ts index e69361178eeba..c8c4f0b95c458 100644 --- a/src/plugins/embeddable/public/bootstrap.ts +++ b/src/plugins/embeddable/public/bootstrap.ts @@ -17,20 +17,11 @@ * under the License. */ import { UiActionsSetup } from '../../ui_actions/public'; -import { Filter } from '../../data/public'; import { - applyFilterTrigger, contextMenuTrigger, createFilterAction, panelBadgeTrigger, - selectRangeTrigger, - valueClickTrigger, - EmbeddableVisTriggerContext, - IEmbeddable, EmbeddableContext, - APPLY_FILTER_TRIGGER, - VALUE_CLICK_TRIGGER, - SELECT_RANGE_TRIGGER, CONTEXT_MENU_TRIGGER, PANEL_BADGE_TRIGGER, ACTION_ADD_PANEL, @@ -44,12 +35,6 @@ import { declare module '../../ui_actions/public' { export interface TriggerContextMapping { - [SELECT_RANGE_TRIGGER]: EmbeddableVisTriggerContext; - [VALUE_CLICK_TRIGGER]: EmbeddableVisTriggerContext; - [APPLY_FILTER_TRIGGER]: { - embeddable: IEmbeddable; - filters: Filter[]; - }; [CONTEXT_MENU_TRIGGER]: EmbeddableContext; [PANEL_BADGE_TRIGGER]: EmbeddableContext; } @@ -70,10 +55,7 @@ declare module '../../ui_actions/public' { */ export const bootstrap = (uiActions: UiActionsSetup) => { uiActions.registerTrigger(contextMenuTrigger); - uiActions.registerTrigger(applyFilterTrigger); uiActions.registerTrigger(panelBadgeTrigger); - uiActions.registerTrigger(selectRangeTrigger); - uiActions.registerTrigger(valueClickTrigger); const actionApplyFilter = createFilterAction(); diff --git a/src/plugins/embeddable/public/index.ts b/src/plugins/embeddable/public/index.ts index 0b5fd8184deb1..1474f9ed63052 100644 --- a/src/plugins/embeddable/public/index.ts +++ b/src/plugins/embeddable/public/index.ts @@ -27,8 +27,6 @@ export { ACTION_ADD_PANEL, AddPanelAction, ACTION_APPLY_FILTER, - APPLY_FILTER_TRIGGER, - applyFilterTrigger, Container, ContainerInput, ContainerOutput, @@ -62,10 +60,6 @@ export { PanelNotFoundError, PanelState, PropertySpec, - SELECT_RANGE_TRIGGER, - selectRangeTrigger, - VALUE_CLICK_TRIGGER, - valueClickTrigger, ViewMode, withEmbeddableSubscription, } from './lib'; diff --git a/src/plugins/embeddable/public/lib/triggers/triggers.ts b/src/plugins/embeddable/public/lib/triggers/triggers.ts index a348e1ed79d8d..0052403816eb8 100644 --- a/src/plugins/embeddable/public/lib/triggers/triggers.ts +++ b/src/plugins/embeddable/public/lib/triggers/triggers.ts @@ -33,20 +33,6 @@ export interface EmbeddableVisTriggerContext { }; } -export const SELECT_RANGE_TRIGGER = 'SELECT_RANGE_TRIGGER'; -export const selectRangeTrigger: Trigger<'SELECT_RANGE_TRIGGER'> = { - id: SELECT_RANGE_TRIGGER, - title: 'Select range', - description: 'Applies a range filter', -}; - -export const VALUE_CLICK_TRIGGER = 'VALUE_CLICK_TRIGGER'; -export const valueClickTrigger: Trigger<'VALUE_CLICK_TRIGGER'> = { - id: VALUE_CLICK_TRIGGER, - title: 'Value clicked', - description: 'Value was clicked', -}; - export const CONTEXT_MENU_TRIGGER = 'CONTEXT_MENU_TRIGGER'; export const contextMenuTrigger: Trigger<'CONTEXT_MENU_TRIGGER'> = { id: CONTEXT_MENU_TRIGGER, @@ -54,13 +40,6 @@ export const contextMenuTrigger: Trigger<'CONTEXT_MENU_TRIGGER'> = { description: 'Triggered on top-right corner context-menu select.', }; -export const APPLY_FILTER_TRIGGER = 'FILTER_TRIGGER'; -export const applyFilterTrigger: Trigger<'FILTER_TRIGGER'> = { - id: APPLY_FILTER_TRIGGER, - title: 'Filter click', - description: 'Triggered when user applies filter to an embeddable.', -}; - export const PANEL_BADGE_TRIGGER = 'PANEL_BADGE_TRIGGER'; export const panelBadgeTrigger: Trigger<'PANEL_BADGE_TRIGGER'> = { id: PANEL_BADGE_TRIGGER, diff --git a/src/plugins/expressions/public/index.ts b/src/plugins/expressions/public/index.ts index 06dd951cd5410..c57db6029ec2e 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 7894f55fad4f0..e41135b693922 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 0b234b7042850..5fc37ac39612a 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 c392d416112c8..a8565b11a7dfd 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 f4f158cbbd1a8..519291d39797c 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/plugins/kibana_legacy/public/notify/lib/add_fatal_error.ts b/src/plugins/kibana_legacy/public/notify/lib/add_fatal_error.ts new file mode 100644 index 0000000000000..928d59d71fbdf --- /dev/null +++ b/src/plugins/kibana_legacy/public/notify/lib/add_fatal_error.ts @@ -0,0 +1,37 @@ +/* + * 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 { FatalErrorsSetup } from '../../../../../core/public'; +import { + AngularHttpError, + formatAngularHttpError, + isAngularHttpError, +} from './format_angular_http_error'; + +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); + } + + 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 c374b5926b64f..f43ba91b102e4 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 607dd76a3bc7d..47f90cbe2a627 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/ui_actions/public/index.ts b/src/plugins/ui_actions/public/index.ts index 79b8e1474f6c2..49b6bd5e17699 100644 --- a/src/plugins/ui_actions/public/index.ts +++ b/src/plugins/ui_actions/public/index.ts @@ -28,6 +28,15 @@ export { UiActionsSetup, UiActionsStart } from './plugin'; export { UiActionsServiceParams, UiActionsService } from './service'; export { Action, createAction, IncompatibleActionError } from './actions'; export { buildContextMenuForActions } from './context_menu'; -export { Trigger, TriggerContext } from './triggers'; +export { + Trigger, + TriggerContext, + SELECT_RANGE_TRIGGER, + selectRangeTrigger, + VALUE_CLICK_TRIGGER, + valueClickTrigger, + APPLY_FILTER_TRIGGER, + applyFilterTrigger, +} from './triggers'; export { TriggerContextMapping, TriggerId, ActionContextMapping, ActionType } from './types'; export { ActionByType } from './actions'; diff --git a/src/plugins/ui_actions/public/plugin.ts b/src/plugins/ui_actions/public/plugin.ts index 0874803db7d37..928e57937a9b5 100644 --- a/src/plugins/ui_actions/public/plugin.ts +++ b/src/plugins/ui_actions/public/plugin.ts @@ -19,6 +19,7 @@ import { CoreStart, CoreSetup, Plugin, PluginInitializerContext } from 'src/core/public'; import { UiActionsService } from './service'; +import { selectRangeTrigger, valueClickTrigger, applyFilterTrigger } from './triggers'; export type UiActionsSetup = Pick< UiActionsService, @@ -33,6 +34,9 @@ export class UiActionsPlugin implements Plugin { constructor(initializerContext: PluginInitializerContext) {} public setup(core: CoreSetup): UiActionsSetup { + this.service.registerTrigger(selectRangeTrigger); + this.service.registerTrigger(valueClickTrigger); + this.service.registerTrigger(applyFilterTrigger); return this.service; } diff --git a/src/plugins/ui_actions/public/triggers/apply_filter_trigger.ts b/src/plugins/ui_actions/public/triggers/apply_filter_trigger.ts new file mode 100644 index 0000000000000..7a95709ac28ba --- /dev/null +++ b/src/plugins/ui_actions/public/triggers/apply_filter_trigger.ts @@ -0,0 +1,27 @@ +/* + * 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 { Trigger } from '.'; + +export const APPLY_FILTER_TRIGGER = 'FILTER_TRIGGER'; +export const applyFilterTrigger: Trigger<'FILTER_TRIGGER'> = { + id: APPLY_FILTER_TRIGGER, + title: 'Filter click', + description: 'Triggered when user applies filter to an embeddable.', +}; diff --git a/src/plugins/ui_actions/public/triggers/index.ts b/src/plugins/ui_actions/public/triggers/index.ts index 1ae2a19c4001f..a5bf9e1822941 100644 --- a/src/plugins/ui_actions/public/triggers/index.ts +++ b/src/plugins/ui_actions/public/triggers/index.ts @@ -20,3 +20,6 @@ export * from './trigger'; export * from './trigger_contract'; export * from './trigger_internal'; +export * from './select_range_trigger'; +export * from './value_click_trigger'; +export * from './apply_filter_trigger'; diff --git a/src/legacy/core_plugins/data/public/search/expressions/boot.ts b/src/plugins/ui_actions/public/triggers/select_range_trigger.ts similarity index 75% rename from src/legacy/core_plugins/data/public/search/expressions/boot.ts rename to src/plugins/ui_actions/public/triggers/select_range_trigger.ts index 29348383ce6fe..c638db0ce9dab 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/boot.ts +++ b/src/plugins/ui_actions/public/triggers/select_range_trigger.ts @@ -17,7 +17,11 @@ * under the License. */ -import { npSetup } from 'ui/new_platform'; -import { esaggs } from './esaggs'; +import { Trigger } from '.'; -npSetup.plugins.expressions.registerFunction(esaggs); +export const SELECT_RANGE_TRIGGER = 'SELECT_RANGE_TRIGGER'; +export const selectRangeTrigger: Trigger<'SELECT_RANGE_TRIGGER'> = { + id: SELECT_RANGE_TRIGGER, + title: 'Select range', + description: 'Applies a range filter', +}; diff --git a/src/legacy/core_plugins/data/public/services.ts b/src/plugins/ui_actions/public/triggers/value_click_trigger.ts similarity index 76% rename from src/legacy/core_plugins/data/public/services.ts rename to src/plugins/ui_actions/public/triggers/value_click_trigger.ts index 7ecd041c70e22..ad32bdc1b564e 100644 --- a/src/legacy/core_plugins/data/public/services.ts +++ b/src/plugins/ui_actions/public/triggers/value_click_trigger.ts @@ -17,9 +17,11 @@ * under the License. */ -import { createGetterSetter } from '../../../../plugins/kibana_utils/public'; -import { SearchStart } from './search/search_service'; +import { Trigger } from '.'; -export const [getSearchServiceShim, setSearchServiceShim] = createGetterSetter( - 'searchShim' -); +export const VALUE_CLICK_TRIGGER = 'VALUE_CLICK_TRIGGER'; +export const valueClickTrigger: Trigger<'VALUE_CLICK_TRIGGER'> = { + id: VALUE_CLICK_TRIGGER, + title: 'Value clicked', + description: 'Value was clicked', +}; diff --git a/src/plugins/ui_actions/public/types.ts b/src/plugins/ui_actions/public/types.ts index d443ce0e592cb..c7e6d61e15f31 100644 --- a/src/plugins/ui_actions/public/types.ts +++ b/src/plugins/ui_actions/public/types.ts @@ -19,6 +19,9 @@ import { ActionByType } from './actions/action'; import { TriggerInternal } from './triggers/trigger_internal'; +import { EmbeddableVisTriggerContext, IEmbeddable } from '../../embeddable/public'; +import { Filter } from '../../data/public'; +import { SELECT_RANGE_TRIGGER, VALUE_CLICK_TRIGGER, APPLY_FILTER_TRIGGER } from './triggers'; export type TriggerRegistry = Map>; export type ActionRegistry = Map>; @@ -33,6 +36,12 @@ export type TriggerContext = BaseContext; export interface TriggerContextMapping { [DEFAULT_TRIGGER]: TriggerContext; + [SELECT_RANGE_TRIGGER]: EmbeddableVisTriggerContext; + [VALUE_CLICK_TRIGGER]: EmbeddableVisTriggerContext; + [APPLY_FILTER_TRIGGER]: { + embeddable: IEmbeddable; + filters: Filter[]; + }; } const DEFAULT_ACTION = ''; 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 995790c590e42..283f2c115d4f5 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 48da5ac19aa3a..df63a14ea5ee4 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 f33ce145aa230..6afa434a55085 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 e1b4a823e7e87..f4c3ecd8243ce 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 504247f5b5355..5618ebba4e6eb 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 99afb21632ffa..ac2921ed063f5 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 b9172990c501d..a643a9ee40aa2 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 3d9368f8d4680..55f6b56d9f0d1 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 b1a14cd18f557..65291c3c4772c 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/apps/visualize/index.ts b/test/functional/apps/visualize/index.ts index 68285971e5c4a..06d560530c28a 100644 --- a/test/functional/apps/visualize/index.ts +++ b/test/functional/apps/visualize/index.ts @@ -20,11 +20,13 @@ import { FtrProviderContext } from '../../ftr_provider_context.d'; // eslint-disable-next-line @typescript-eslint/no-namespace, import/no-default-export -export default function({ getService, loadTestFile }: FtrProviderContext) { +export default function({ getService, getPageObjects, loadTestFile }: FtrProviderContext) { const browser = getService('browser'); const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['common']); + let isOss = true; describe('visualize app', () => { before(async () => { @@ -37,6 +39,7 @@ export default function({ getService, loadTestFile }: FtrProviderContext) { defaultIndex: 'logstash-*', 'format:bytes:defaultPattern': '0,0.[000]b', }); + isOss = await PageObjects.common.isOss(); }); describe('', function() { @@ -67,20 +70,22 @@ export default function({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./_line_chart')); loadTestFile(require.resolve('./_pie_chart')); - loadTestFile(require.resolve('./_region_map')); loadTestFile(require.resolve('./_point_series_options')); loadTestFile(require.resolve('./_markdown_vis')); loadTestFile(require.resolve('./_shared_item')); loadTestFile(require.resolve('./_lab_mode')); loadTestFile(require.resolve('./_linked_saved_searches')); loadTestFile(require.resolve('./_visualize_listing')); + if (isOss) { + loadTestFile(require.resolve('./_tile_map')); + loadTestFile(require.resolve('./_region_map')); + } }); describe('', function() { this.tags('ciGroup12'); loadTestFile(require.resolve('./_tag_cloud')); - loadTestFile(require.resolve('./_tile_map')); loadTestFile(require.resolve('./_vertical_bar_chart')); loadTestFile(require.resolve('./_vertical_bar_chart_nontimeindex')); loadTestFile(require.resolve('./_tsvb_chart')); diff --git a/test/functional/page_objects/settings_page.ts b/test/functional/page_objects/settings_page.ts index a0f503eb27e68..c244deba5f17e 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 e057e63c03f4a..6535a54f6b744 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 dfce45671483f..99f54277be5d2 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 df0c00fb48b2e..7cc9c1df1c948 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 3c8468a3d8ed3..bb8951680be35 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 0000000000000..3e4a8fa4da6a0 --- /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 0000000000000..3e4a8fa4da6a0 --- /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 7759edbbf5bfc..0176424452d07 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 2b9b0eba38f46..cb5508642711a 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 0000000000000..a9eb9027a0597 --- /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 0000000000000..224e49af1bd6f --- /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 53628ea970fb6..60a8d1fcbf229 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 c917befb4b3dd..ab31d40c5d718 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/index.ts b/x-pack/legacy/plugins/apm/index.ts index 2efa13a0bbc8d..0107997f233fe 100644 --- a/x-pack/legacy/plugins/apm/index.ts +++ b/x-pack/legacy/plugins/apm/index.ts @@ -71,7 +71,7 @@ export const apm: LegacyPluginInitializer = kibana => { autocreateApmIndexPattern: Joi.boolean().default(true), // service map - serviceMapEnabled: Joi.boolean().default(false) + serviceMapEnabled: Joi.boolean().default(true) }).default(); }, diff --git a/x-pack/legacy/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap b/x-pack/legacy/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap index d5764001a7f18..88d9d7864576f 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap +++ b/x-pack/legacy/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap @@ -6,7 +6,7 @@ exports[`Home component should render services 1`] = ` Object { "config": Object { "indexPatternTitle": "apm-*", - "serviceMapEnabled": false, + "serviceMapEnabled": true, "ui": Object { "enabled": false, }, @@ -46,7 +46,7 @@ exports[`Home component should render traces 1`] = ` Object { "config": Object { "indexPatternTitle": "apm-*", - "serviceMapEnabled": false, + "serviceMapEnabled": true, "ui": Object { "enabled": false, }, diff --git a/x-pack/legacy/plugins/apm/public/components/app/Home/index.tsx b/x-pack/legacy/plugins/apm/public/components/app/Home/index.tsx index 5f8fa8bf5dc07..07d7ce1e5b48c 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/Home/index.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/Home/index.tsx @@ -27,7 +27,7 @@ import { ServiceOverview } from '../ServiceOverview'; import { TraceOverview } from '../TraceOverview'; function getHomeTabs({ - serviceMapEnabled = false + serviceMapEnabled = true }: { serviceMapEnabled: boolean; }) { 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 38e86e4a0d1c9..a2e7b2c76031e 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 ( - - -