diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.duplicateindexpatternerror._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.duplicateindexpatternerror._constructor_.md
new file mode 100644
index 00000000000000..676f1a2c785f8b
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.duplicateindexpatternerror._constructor_.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [DuplicateIndexPatternError](./kibana-plugin-plugins-data-public.duplicateindexpatternerror.md) > [(constructor)](./kibana-plugin-plugins-data-public.duplicateindexpatternerror._constructor_.md)
+
+## DuplicateIndexPatternError.(constructor)
+
+Constructs a new instance of the `DuplicateIndexPatternError` class
+
+Signature:
+
+```typescript
+constructor(message: string);
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| message | string
| |
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.duplicateindexpatternerror.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.duplicateindexpatternerror.md
new file mode 100644
index 00000000000000..7ed8f97976464a
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.duplicateindexpatternerror.md
@@ -0,0 +1,18 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [DuplicateIndexPatternError](./kibana-plugin-plugins-data-public.duplicateindexpatternerror.md)
+
+## DuplicateIndexPatternError class
+
+Signature:
+
+```typescript
+export declare class DuplicateIndexPatternError extends Error
+```
+
+## Constructors
+
+| Constructor | Modifiers | Description |
+| --- | --- | --- |
+| [(constructor)(message)](./kibana-plugin-plugins-data-public.duplicateindexpatternerror._constructor_.md) | | Constructs a new instance of the DuplicateIndexPatternError
class |
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.fieldformatmap.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.fieldformatmap.md
index 2c131c6da99377..60ac95bc21af2e 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.fieldformatmap.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.fieldformatmap.md
@@ -7,8 +7,5 @@
Signature:
```typescript
-fieldFormatMap?: Record;
+fieldFormatMap?: Record | undefined>;
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.md
index b631d4dd7800ab..ba77e659f08349 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpattern.md
@@ -14,7 +14,7 @@ export interface IIndexPattern
| Property | Type | Description |
| --- | --- | --- |
-| [fieldFormatMap](./kibana-plugin-plugins-data-public.iindexpattern.fieldformatmap.md) | Record<string, {
id: string;
params: unknown;
}>
| |
+| [fieldFormatMap](./kibana-plugin-plugins-data-public.iindexpattern.fieldformatmap.md) | Record<string, SerializedFieldFormat<unknown> | undefined>
| |
| [fields](./kibana-plugin-plugins-data-public.iindexpattern.fields.md) | IFieldType[]
| |
| [getFormatterForField](./kibana-plugin-plugins-data-public.iindexpattern.getformatterforfield.md) | (field: IndexPatternField | IndexPatternField['spec'] | IFieldType) => FieldFormat
| |
| [id](./kibana-plugin-plugins-data-public.iindexpattern.id.md) | string
| |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpatternfieldlist.tospec.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpatternfieldlist.tospec.md
index fd20f2944c5be3..0fe62f575a927b 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpatternfieldlist.tospec.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.iindexpatternfieldlist.tospec.md
@@ -9,7 +9,7 @@
```typescript
toSpec(options?: {
getFormatterForField?: IndexPattern['getFormatterForField'];
- }): FieldSpec[];
+ }): IndexPatternFieldMap;
```
## Parameters
@@ -20,5 +20,5 @@ toSpec(options?: {
Returns:
-`FieldSpec[]`
+`IndexPatternFieldMap`
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md
index a5bb15c9639788..4baf98038f89a7 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md
@@ -9,13 +9,12 @@ Constructs a new instance of the `IndexPattern` class
Signature:
```typescript
-constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps);
+constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps);
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
-| id | string | undefined
| |
-| { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, } | IndexPatternDeps
| |
+| { spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, } | IndexPatternDeps
| |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._fetchfields.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._fetchfields.md
deleted file mode 100644
index 8fff8baa711399..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._fetchfields.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [\_fetchFields](./kibana-plugin-plugins-data-public.indexpattern._fetchfields.md)
-
-## IndexPattern.\_fetchFields() method
-
-Signature:
-
-```typescript
-_fetchFields(): Promise;
-```
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.addscriptedfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.addscriptedfield.md
index 4bbbd83c65e105..cc3468531fffae 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.addscriptedfield.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.addscriptedfield.md
@@ -4,10 +4,12 @@
## IndexPattern.addScriptedField() method
+Add scripted field to field list
+
Signature:
```typescript
-addScriptedField(name: string, script: string, fieldType: string | undefined, lang: string): Promise;
+addScriptedField(name: string, script: string, fieldType?: string, lang?: string): Promise;
```
## Parameters
@@ -16,7 +18,7 @@ addScriptedField(name: string, script: string, fieldType: string | undefined, la
| --- | --- | --- |
| name | string
| |
| script | string
| |
-| fieldType | string | undefined
| |
+| fieldType | string
| |
| lang | string
| |
Returns:
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.create.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.create.md
deleted file mode 100644
index 5c122b835f59d4..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.create.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [create](./kibana-plugin-plugins-data-public.indexpattern.create.md)
-
-## IndexPattern.create() method
-
-Signature:
-
-```typescript
-create(allowOverride?: boolean): Promise;
-```
-
-## Parameters
-
-| Parameter | Type | Description |
-| --- | --- | --- |
-| allowOverride | boolean
| |
-
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fieldformatmap.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fieldformatmap.md
index b89b244d9826c4..904d52fcd57512 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fieldformatmap.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fieldformatmap.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-fieldFormatMap: any;
+fieldFormatMap: Record;
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fields.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fields.md
index d4dca48c7cd7b4..76bc41238526ef 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fields.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fields.md
@@ -8,6 +8,6 @@
```typescript
fields: IIndexPatternFieldList & {
- toSpec: () => FieldSpec[];
+ toSpec: () => IndexPatternFieldMap;
};
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fieldsfetcher.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fieldsfetcher.md
deleted file mode 100644
index 4d44b386a1db1a..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.fieldsfetcher.md
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [fieldsFetcher](./kibana-plugin-plugins-data-public.indexpattern.fieldsfetcher.md)
-
-## IndexPattern.fieldsFetcher property
-
-Signature:
-
-```typescript
-fieldsFetcher: any;
-```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.flattenhit.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.flattenhit.md
index db28d95197bb38..049c3e5e990f71 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.flattenhit.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.flattenhit.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-flattenHit: any;
+flattenHit: (hit: Record, deep?: boolean) => Record;
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formatfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formatfield.md
index 5a475d6161ac34..aadaddca6cc85a 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formatfield.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formatfield.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-formatField: any;
+formatField: FormatFieldFn;
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formathit.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formathit.md
index ac515d374a93f3..2be76bf1c1e05d 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formathit.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.formathit.md
@@ -7,5 +7,8 @@
Signature:
```typescript
-formatHit: any;
+formatHit: {
+ (hit: Record, type?: string): any;
+ formatField: FormatFieldFn;
+ };
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.prepbody.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getassavedobjectbody.md
similarity index 76%
rename from docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.prepbody.md
rename to docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getassavedobjectbody.md
index 1d77b2a55860e2..2c5f30e4889ea5 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.prepbody.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getassavedobjectbody.md
@@ -1,13 +1,15 @@
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [prepBody](./kibana-plugin-plugins-data-public.indexpattern.prepbody.md)
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [getAsSavedObjectBody](./kibana-plugin-plugins-data-public.indexpattern.getassavedobjectbody.md)
-## IndexPattern.prepBody() method
+## IndexPattern.getAsSavedObjectBody() method
+
+Returns index pattern as saved object body for saving
Signature:
```typescript
-prepBody(): {
+getAsSavedObjectBody(): {
title: string;
timeFieldName: string | undefined;
intervalName: string | undefined;
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getformatterforfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getformatterforfield.md
index 180b2d8a7b03a8..ba31d60b56892a 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getformatterforfield.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getformatterforfield.md
@@ -4,6 +4,8 @@
## IndexPattern.getFormatterForField() method
+Provide a field, get its formatter
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getoriginalsavedobjectbody.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getoriginalsavedobjectbody.md
new file mode 100644
index 00000000000000..349da63c13ca73
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getoriginalsavedobjectbody.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [getOriginalSavedObjectBody](./kibana-plugin-plugins-data-public.indexpattern.getoriginalsavedobjectbody.md)
+
+## IndexPattern.getOriginalSavedObjectBody property
+
+Get last saved saved object fields
+
+Signature:
+
+```typescript
+getOriginalSavedObjectBody: () => {
+ title?: string | undefined;
+ timeFieldName?: string | undefined;
+ intervalName?: string | undefined;
+ fields?: string | undefined;
+ sourceFilters?: string | undefined;
+ fieldFormatMap?: string | undefined;
+ typeMeta?: string | undefined;
+ type?: string | undefined;
+ };
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getsourcefiltering.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getsourcefiltering.md
index 121d32c7c40c83..4ce0144b73882b 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getsourcefiltering.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.getsourcefiltering.md
@@ -4,6 +4,8 @@
## IndexPattern.getSourceFiltering() method
+Get the source filtering configuration for that index.
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.init.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.init.md
deleted file mode 100644
index 595992dc82b749..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.init.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [init](./kibana-plugin-plugins-data-public.indexpattern.init.md)
-
-## IndexPattern.init() method
-
-Signature:
-
-```typescript
-init(): Promise;
-```
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.initfromspec.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.initfromspec.md
deleted file mode 100644
index 764dd116382217..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.initfromspec.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [initFromSpec](./kibana-plugin-plugins-data-public.indexpattern.initfromspec.md)
-
-## IndexPattern.initFromSpec() method
-
-Signature:
-
-```typescript
-initFromSpec(spec: IndexPatternSpec): this;
-```
-
-## Parameters
-
-| Parameter | Type | Description |
-| --- | --- | --- |
-| spec | IndexPatternSpec
| |
-
-Returns:
-
-`this`
-
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.iswildcard.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.iswildcard.md
deleted file mode 100644
index e5ea55ef1dd48c..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.iswildcard.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [isWildcard](./kibana-plugin-plugins-data-public.indexpattern.iswildcard.md)
-
-## IndexPattern.isWildcard() method
-
-Signature:
-
-```typescript
-isWildcard(): boolean;
-```
-Returns:
-
-`boolean`
-
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md
index 87ce1e258712a4..2ff575bc4fc225 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md
@@ -14,22 +14,22 @@ export declare class IndexPattern implements IIndexPattern
| Constructor | Modifiers | Description |
| --- | --- | --- |
-| [(constructor)(id, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern
class |
+| [(constructor)({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern
class |
## Properties
| Property | Modifiers | Type | Description |
| --- | --- | --- | --- |
-| [fieldFormatMap](./kibana-plugin-plugins-data-public.indexpattern.fieldformatmap.md) | | any
| |
-| [fields](./kibana-plugin-plugins-data-public.indexpattern.fields.md) | | IIndexPatternFieldList & {
toSpec: () => FieldSpec[];
}
| |
-| [fieldsFetcher](./kibana-plugin-plugins-data-public.indexpattern.fieldsfetcher.md) | | any
| |
-| [flattenHit](./kibana-plugin-plugins-data-public.indexpattern.flattenhit.md) | | any
| |
-| [formatField](./kibana-plugin-plugins-data-public.indexpattern.formatfield.md) | | any
| |
-| [formatHit](./kibana-plugin-plugins-data-public.indexpattern.formathit.md) | | any
| |
+| [fieldFormatMap](./kibana-plugin-plugins-data-public.indexpattern.fieldformatmap.md) | | Record<string, any>
| |
+| [fields](./kibana-plugin-plugins-data-public.indexpattern.fields.md) | | IIndexPatternFieldList & {
toSpec: () => IndexPatternFieldMap;
}
| |
+| [flattenHit](./kibana-plugin-plugins-data-public.indexpattern.flattenhit.md) | | (hit: Record<string, any>, deep?: boolean) => Record<string, any>
| |
+| [formatField](./kibana-plugin-plugins-data-public.indexpattern.formatfield.md) | | FormatFieldFn
| |
+| [formatHit](./kibana-plugin-plugins-data-public.indexpattern.formathit.md) | | {
(hit: Record<string, any>, type?: string): any;
formatField: FormatFieldFn;
}
| |
+| [getOriginalSavedObjectBody](./kibana-plugin-plugins-data-public.indexpattern.getoriginalsavedobjectbody.md) | | () => {
title?: string | undefined;
timeFieldName?: string | undefined;
intervalName?: string | undefined;
fields?: string | undefined;
sourceFilters?: string | undefined;
fieldFormatMap?: string | undefined;
typeMeta?: string | undefined;
type?: string | undefined;
}
| Get last saved saved object fields |
| [id](./kibana-plugin-plugins-data-public.indexpattern.id.md) | | string
| |
| [intervalName](./kibana-plugin-plugins-data-public.indexpattern.intervalname.md) | | string | undefined
| |
| [metaFields](./kibana-plugin-plugins-data-public.indexpattern.metafields.md) | | string[]
| |
-| [originalBody](./kibana-plugin-plugins-data-public.indexpattern.originalbody.md) | | {
[key: string]: any;
}
| |
+| [resetOriginalSavedObjectBody](./kibana-plugin-plugins-data-public.indexpattern.resetoriginalsavedobjectbody.md) | | () => void
| Reset last saved saved object fields. used after saving |
| [sourceFilters](./kibana-plugin-plugins-data-public.indexpattern.sourcefilters.md) | | SourceFilter[]
| |
| [timeFieldName](./kibana-plugin-plugins-data-public.indexpattern.timefieldname.md) | | string | undefined
| |
| [title](./kibana-plugin-plugins-data-public.indexpattern.title.md) | | string
| |
@@ -41,26 +41,20 @@ export declare class IndexPattern implements IIndexPattern
| Method | Modifiers | Description |
| --- | --- | --- |
-| [\_fetchFields()](./kibana-plugin-plugins-data-public.indexpattern._fetchfields.md) | | |
-| [addScriptedField(name, script, fieldType, lang)](./kibana-plugin-plugins-data-public.indexpattern.addscriptedfield.md) | | |
-| [create(allowOverride)](./kibana-plugin-plugins-data-public.indexpattern.create.md) | | |
+| [addScriptedField(name, script, fieldType, lang)](./kibana-plugin-plugins-data-public.indexpattern.addscriptedfield.md) | | Add scripted field to field list |
| [getAggregationRestrictions()](./kibana-plugin-plugins-data-public.indexpattern.getaggregationrestrictions.md) | | |
+| [getAsSavedObjectBody()](./kibana-plugin-plugins-data-public.indexpattern.getassavedobjectbody.md) | | Returns index pattern as saved object body for saving |
| [getComputedFields()](./kibana-plugin-plugins-data-public.indexpattern.getcomputedfields.md) | | |
| [getFieldByName(name)](./kibana-plugin-plugins-data-public.indexpattern.getfieldbyname.md) | | |
-| [getFormatterForField(field)](./kibana-plugin-plugins-data-public.indexpattern.getformatterforfield.md) | | |
+| [getFormatterForField(field)](./kibana-plugin-plugins-data-public.indexpattern.getformatterforfield.md) | | Provide a field, get its formatter |
| [getNonScriptedFields()](./kibana-plugin-plugins-data-public.indexpattern.getnonscriptedfields.md) | | |
| [getScriptedFields()](./kibana-plugin-plugins-data-public.indexpattern.getscriptedfields.md) | | |
-| [getSourceFiltering()](./kibana-plugin-plugins-data-public.indexpattern.getsourcefiltering.md) | | |
+| [getSourceFiltering()](./kibana-plugin-plugins-data-public.indexpattern.getsourcefiltering.md) | | Get the source filtering configuration for that index. |
| [getTimeField()](./kibana-plugin-plugins-data-public.indexpattern.gettimefield.md) | | |
-| [init()](./kibana-plugin-plugins-data-public.indexpattern.init.md) | | |
-| [initFromSpec(spec)](./kibana-plugin-plugins-data-public.indexpattern.initfromspec.md) | | |
| [isTimeBased()](./kibana-plugin-plugins-data-public.indexpattern.istimebased.md) | | |
| [isTimeBasedWildcard()](./kibana-plugin-plugins-data-public.indexpattern.istimebasedwildcard.md) | | |
| [isTimeNanosBased()](./kibana-plugin-plugins-data-public.indexpattern.istimenanosbased.md) | | |
-| [isWildcard()](./kibana-plugin-plugins-data-public.indexpattern.iswildcard.md) | | |
| [popularizeField(fieldName, unit)](./kibana-plugin-plugins-data-public.indexpattern.popularizefield.md) | | |
-| [prepBody()](./kibana-plugin-plugins-data-public.indexpattern.prepbody.md) | | |
-| [refreshFields()](./kibana-plugin-plugins-data-public.indexpattern.refreshfields.md) | | |
-| [removeScriptedField(fieldName)](./kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md) | | |
+| [removeScriptedField(fieldName)](./kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md) | | Remove scripted field from field list |
| [toSpec()](./kibana-plugin-plugins-data-public.indexpattern.tospec.md) | | |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.originalbody.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.originalbody.md
deleted file mode 100644
index 4bc3c76afbae98..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.originalbody.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [originalBody](./kibana-plugin-plugins-data-public.indexpattern.originalbody.md)
-
-## IndexPattern.originalBody property
-
-Signature:
-
-```typescript
-originalBody: {
- [key: string]: any;
- };
-```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.refreshfields.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.refreshfields.md
deleted file mode 100644
index 271d0c45a42441..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.refreshfields.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [refreshFields](./kibana-plugin-plugins-data-public.indexpattern.refreshfields.md)
-
-## IndexPattern.refreshFields() method
-
-Signature:
-
-```typescript
-refreshFields(): Promise;
-```
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md
index e902d9c42b082f..aaaebdaccca5d7 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md
@@ -4,6 +4,8 @@
## IndexPattern.removeScriptedField() method
+Remove scripted field from field list
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.resetoriginalsavedobjectbody.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.resetoriginalsavedobjectbody.md
new file mode 100644
index 00000000000000..6bbc13d8fd410d
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.resetoriginalsavedobjectbody.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [resetOriginalSavedObjectBody](./kibana-plugin-plugins-data-public.indexpattern.resetoriginalsavedobjectbody.md)
+
+## IndexPattern.resetOriginalSavedObjectBody property
+
+Reset last saved saved object fields. used after saving
+
+Signature:
+
+```typescript
+resetOriginalSavedObjectBody: () => void;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternattributes.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternattributes.md
index eff2349f053ffa..77a8ebb0b2d3f6 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternattributes.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternattributes.md
@@ -4,12 +4,6 @@
## IndexPatternAttributes interface
-> Warning: This API is now obsolete.
->
->
-
-Use data plugin interface instead
-
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.conflictdescriptions.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.conflictdescriptions.md
index 6d62053726197f..9b226266f0b5a5 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.conflictdescriptions.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.conflictdescriptions.md
@@ -4,6 +4,8 @@
## IndexPatternField.conflictDescriptions property
+Description of field type conflicts across different indices in the same index pattern
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.count.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.count.md
index 84c0a75fd206dd..1b8e13a38c6d99 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.count.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.count.md
@@ -4,6 +4,8 @@
## IndexPatternField.count property
+Count is used for field popularity
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.lang.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.lang.md
index 0a8446d40e5ec0..b81218eb088866 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.lang.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.lang.md
@@ -4,6 +4,8 @@
## IndexPatternField.lang property
+Script field language
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
index 215188ffa26073..4f49a9a8fc3ab8 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
@@ -21,15 +21,15 @@ export declare class IndexPatternField implements IFieldType
| Property | Modifiers | Type | Description |
| --- | --- | --- | --- |
| [aggregatable](./kibana-plugin-plugins-data-public.indexpatternfield.aggregatable.md) | | boolean
| |
-| [conflictDescriptions](./kibana-plugin-plugins-data-public.indexpatternfield.conflictdescriptions.md) | | Record<string, string[]> | undefined
| |
-| [count](./kibana-plugin-plugins-data-public.indexpatternfield.count.md) | | number
| |
+| [conflictDescriptions](./kibana-plugin-plugins-data-public.indexpatternfield.conflictdescriptions.md) | | Record<string, string[]> | undefined
| Description of field type conflicts across different indices in the same index pattern |
+| [count](./kibana-plugin-plugins-data-public.indexpatternfield.count.md) | | number
| Count is used for field popularity |
| [displayName](./kibana-plugin-plugins-data-public.indexpatternfield.displayname.md) | | string
| |
| [esTypes](./kibana-plugin-plugins-data-public.indexpatternfield.estypes.md) | | string[] | undefined
| |
| [filterable](./kibana-plugin-plugins-data-public.indexpatternfield.filterable.md) | | boolean
| |
-| [lang](./kibana-plugin-plugins-data-public.indexpatternfield.lang.md) | | string | undefined
| |
+| [lang](./kibana-plugin-plugins-data-public.indexpatternfield.lang.md) | | string | undefined
| Script field language |
| [name](./kibana-plugin-plugins-data-public.indexpatternfield.name.md) | | string
| |
| [readFromDocValues](./kibana-plugin-plugins-data-public.indexpatternfield.readfromdocvalues.md) | | boolean
| |
-| [script](./kibana-plugin-plugins-data-public.indexpatternfield.script.md) | | string | undefined
| |
+| [script](./kibana-plugin-plugins-data-public.indexpatternfield.script.md) | | string | undefined
| Script field code |
| [scripted](./kibana-plugin-plugins-data-public.indexpatternfield.scripted.md) | | boolean
| |
| [searchable](./kibana-plugin-plugins-data-public.indexpatternfield.searchable.md) | | boolean
| |
| [sortable](./kibana-plugin-plugins-data-public.indexpatternfield.sortable.md) | | boolean
| |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.script.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.script.md
index 27f9c797c92f29..7501e191d93638 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.script.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.script.md
@@ -4,6 +4,8 @@
## IndexPatternField.script property
+Script field code
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.fields.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.fields.md
new file mode 100644
index 00000000000000..386e080dbe6c20
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.fields.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [fields](./kibana-plugin-plugins-data-public.indexpatternspec.fields.md)
+
+## IndexPatternSpec.fields property
+
+Signature:
+
+```typescript
+fields?: IndexPatternFieldMap;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.id.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.id.md
new file mode 100644
index 00000000000000..55eadbf36c6606
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.id.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [id](./kibana-plugin-plugins-data-public.indexpatternspec.id.md)
+
+## IndexPatternSpec.id property
+
+Signature:
+
+```typescript
+id?: string;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.intervalname.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.intervalname.md
new file mode 100644
index 00000000000000..98748661256da0
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.intervalname.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [intervalName](./kibana-plugin-plugins-data-public.indexpatternspec.intervalname.md)
+
+## IndexPatternSpec.intervalName property
+
+Signature:
+
+```typescript
+intervalName?: string;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.md
new file mode 100644
index 00000000000000..74c4df126e1bf6
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.md
@@ -0,0 +1,26 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md)
+
+## IndexPatternSpec interface
+
+Signature:
+
+```typescript
+export interface IndexPatternSpec
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [fields](./kibana-plugin-plugins-data-public.indexpatternspec.fields.md) | IndexPatternFieldMap
| |
+| [id](./kibana-plugin-plugins-data-public.indexpatternspec.id.md) | string
| |
+| [intervalName](./kibana-plugin-plugins-data-public.indexpatternspec.intervalname.md) | string
| |
+| [sourceFilters](./kibana-plugin-plugins-data-public.indexpatternspec.sourcefilters.md) | SourceFilter[]
| |
+| [timeFieldName](./kibana-plugin-plugins-data-public.indexpatternspec.timefieldname.md) | string
| |
+| [title](./kibana-plugin-plugins-data-public.indexpatternspec.title.md) | string
| |
+| [type](./kibana-plugin-plugins-data-public.indexpatternspec.type.md) | string
| |
+| [typeMeta](./kibana-plugin-plugins-data-public.indexpatternspec.typemeta.md) | TypeMeta
| |
+| [version](./kibana-plugin-plugins-data-public.indexpatternspec.version.md) | string
| |
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.sourcefilters.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.sourcefilters.md
new file mode 100644
index 00000000000000..cda5285730135e
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.sourcefilters.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [sourceFilters](./kibana-plugin-plugins-data-public.indexpatternspec.sourcefilters.md)
+
+## IndexPatternSpec.sourceFilters property
+
+Signature:
+
+```typescript
+sourceFilters?: SourceFilter[];
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.timefieldname.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.timefieldname.md
new file mode 100644
index 00000000000000..a527e3ac0658bb
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.timefieldname.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [timeFieldName](./kibana-plugin-plugins-data-public.indexpatternspec.timefieldname.md)
+
+## IndexPatternSpec.timeFieldName property
+
+Signature:
+
+```typescript
+timeFieldName?: string;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.title.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.title.md
new file mode 100644
index 00000000000000..4cc6d3c2524a73
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.title.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [title](./kibana-plugin-plugins-data-public.indexpatternspec.title.md)
+
+## IndexPatternSpec.title property
+
+Signature:
+
+```typescript
+title?: string;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.type.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.type.md
new file mode 100644
index 00000000000000..d1c49be1b706fd
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.type.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [type](./kibana-plugin-plugins-data-public.indexpatternspec.type.md)
+
+## IndexPatternSpec.type property
+
+Signature:
+
+```typescript
+type?: string;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.typemeta.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.typemeta.md
new file mode 100644
index 00000000000000..9303047e905d3c
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.typemeta.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [typeMeta](./kibana-plugin-plugins-data-public.indexpatternspec.typemeta.md)
+
+## IndexPatternSpec.typeMeta property
+
+Signature:
+
+```typescript
+typeMeta?: TypeMeta;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.version.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.version.md
new file mode 100644
index 00000000000000..43f7cf0226fb07
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternspec.version.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) > [version](./kibana-plugin-plugins-data-public.indexpatternspec.version.md)
+
+## IndexPatternSpec.version property
+
+Signature:
+
+```typescript
+version?: string;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice._constructor_.md
new file mode 100644
index 00000000000000..ab397efb1fe0ea
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice._constructor_.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [(constructor)](./kibana-plugin-plugins-data-public.indexpatternsservice._constructor_.md)
+
+## IndexPatternsService.(constructor)
+
+Constructs a new instance of the `IndexPatternsService` class
+
+Signature:
+
+```typescript
+constructor({ uiSettings, savedObjectsClient, apiClient, fieldFormats, onNotification, onError, onRedirectNoIndexPattern, }: IndexPatternsServiceDeps);
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| { uiSettings, savedObjectsClient, apiClient, fieldFormats, onNotification, onError, onRedirectNoIndexPattern, } | IndexPatternsServiceDeps
| |
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.clearcache.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.clearcache.md
new file mode 100644
index 00000000000000..b3712183250867
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.clearcache.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [clearCache](./kibana-plugin-plugins-data-public.indexpatternsservice.clearcache.md)
+
+## IndexPatternsService.clearCache property
+
+Clear index pattern list cache
+
+Signature:
+
+```typescript
+clearCache: (id?: string | undefined) => void;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.create.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.create.md
new file mode 100644
index 00000000000000..d7152ba617cc62
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.create.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [create](./kibana-plugin-plugins-data-public.indexpatternsservice.create.md)
+
+## IndexPatternsService.create() method
+
+Create a new index pattern instance
+
+Signature:
+
+```typescript
+create(spec: IndexPatternSpec, skipFetchFields?: boolean): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| spec | IndexPatternSpec
| |
+| skipFetchFields | boolean
| |
+
+Returns:
+
+`Promise`
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.createandsave.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.createandsave.md
new file mode 100644
index 00000000000000..eebfbb506fb77e
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.createandsave.md
@@ -0,0 +1,26 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [createAndSave](./kibana-plugin-plugins-data-public.indexpatternsservice.createandsave.md)
+
+## IndexPatternsService.createAndSave() method
+
+Create a new index pattern and save it right away
+
+Signature:
+
+```typescript
+createAndSave(spec: IndexPatternSpec, override?: boolean, skipFetchFields?: boolean): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| spec | IndexPatternSpec
| |
+| override | boolean
| |
+| skipFetchFields | boolean
| |
+
+Returns:
+
+`Promise`
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.createsavedobject.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.createsavedobject.md
new file mode 100644
index 00000000000000..8efb33c423b012
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.createsavedobject.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [createSavedObject](./kibana-plugin-plugins-data-public.indexpatternsservice.createsavedobject.md)
+
+## IndexPatternsService.createSavedObject() method
+
+Save a new index pattern
+
+Signature:
+
+```typescript
+createSavedObject(indexPattern: IndexPattern, override?: boolean): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| indexPattern | IndexPattern
| |
+| override | boolean
| |
+
+Returns:
+
+`Promise`
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.delete.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.delete.md
new file mode 100644
index 00000000000000..aba31ab2c0d29f
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.delete.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [delete](./kibana-plugin-plugins-data-public.indexpatternsservice.delete.md)
+
+## IndexPatternsService.delete() method
+
+Deletes an index pattern from .kibana index
+
+Signature:
+
+```typescript
+delete(indexPatternId: string): Promise<{}>;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| indexPatternId | string
| |
+
+Returns:
+
+`Promise<{}>`
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.ensuredefaultindexpattern.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.ensuredefaultindexpattern.md
new file mode 100644
index 00000000000000..3b6a8c7e4a04f1
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.ensuredefaultindexpattern.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [ensureDefaultIndexPattern](./kibana-plugin-plugins-data-public.indexpatternsservice.ensuredefaultindexpattern.md)
+
+## IndexPatternsService.ensureDefaultIndexPattern property
+
+Signature:
+
+```typescript
+ensureDefaultIndexPattern: EnsureDefaultIndexPattern;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.fieldarraytomap.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.fieldarraytomap.md
new file mode 100644
index 00000000000000..ed365fe03f9805
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.fieldarraytomap.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [fieldArrayToMap](./kibana-plugin-plugins-data-public.indexpatternsservice.fieldarraytomap.md)
+
+## IndexPatternsService.fieldArrayToMap property
+
+Converts field array to map
+
+Signature:
+
+```typescript
+fieldArrayToMap: (fields: FieldSpec[]) => Record;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.get.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.get.md
new file mode 100644
index 00000000000000..4aad6df6b413b1
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.get.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [get](./kibana-plugin-plugins-data-public.indexpatternsservice.get.md)
+
+## IndexPatternsService.get property
+
+Get an index pattern by id. Cache optimized
+
+Signature:
+
+```typescript
+get: (id: string) => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getcache.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getcache.md
new file mode 100644
index 00000000000000..ad2a167bd8c74f
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getcache.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [getCache](./kibana-plugin-plugins-data-public.indexpatternsservice.getcache.md)
+
+## IndexPatternsService.getCache property
+
+Signature:
+
+```typescript
+getCache: () => Promise[] | null | undefined>;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getdefault.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getdefault.md
new file mode 100644
index 00000000000000..01d4efeffe9211
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getdefault.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [getDefault](./kibana-plugin-plugins-data-public.indexpatternsservice.getdefault.md)
+
+## IndexPatternsService.getDefault property
+
+Get default index pattern
+
+Signature:
+
+```typescript
+getDefault: () => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforindexpattern.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforindexpattern.md
new file mode 100644
index 00000000000000..c06c3c6f684922
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforindexpattern.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [getFieldsForIndexPattern](./kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforindexpattern.md)
+
+## IndexPatternsService.getFieldsForIndexPattern property
+
+Get field list by providing an index patttern (or spec)
+
+Signature:
+
+```typescript
+getFieldsForIndexPattern: (indexPattern: IndexPattern | IndexPatternSpec, options?: GetFieldsOptions) => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforwildcard.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforwildcard.md
new file mode 100644
index 00000000000000..aec84866b9e585
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforwildcard.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [getFieldsForWildcard](./kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforwildcard.md)
+
+## IndexPatternsService.getFieldsForWildcard property
+
+Get field list by providing { pattern }
+
+Signature:
+
+```typescript
+getFieldsForWildcard: (options?: GetFieldsOptions) => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getids.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getids.md
new file mode 100644
index 00000000000000..a012e0dc9d9c53
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.getids.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [getIds](./kibana-plugin-plugins-data-public.indexpatternsservice.getids.md)
+
+## IndexPatternsService.getIds property
+
+Get list of index pattern ids
+
+Signature:
+
+```typescript
+getIds: (refresh?: boolean) => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.gettitles.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.gettitles.md
new file mode 100644
index 00000000000000..04cc294a79dfca
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.gettitles.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [getTitles](./kibana-plugin-plugins-data-public.indexpatternsservice.gettitles.md)
+
+## IndexPatternsService.getTitles property
+
+Get list of index pattern titles
+
+Signature:
+
+```typescript
+getTitles: (refresh?: boolean) => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md
new file mode 100644
index 00000000000000..0022bff34a8e76
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md
@@ -0,0 +1,46 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md)
+
+## IndexPatternsService class
+
+Signature:
+
+```typescript
+export declare class IndexPatternsService
+```
+
+## Constructors
+
+| Constructor | Modifiers | Description |
+| --- | --- | --- |
+| [(constructor)({ uiSettings, savedObjectsClient, apiClient, fieldFormats, onNotification, onError, onRedirectNoIndexPattern, })](./kibana-plugin-plugins-data-public.indexpatternsservice._constructor_.md) | | Constructs a new instance of the IndexPatternsService
class |
+
+## Properties
+
+| Property | Modifiers | Type | Description |
+| --- | --- | --- | --- |
+| [clearCache](./kibana-plugin-plugins-data-public.indexpatternsservice.clearcache.md) | | (id?: string | undefined) => void
| Clear index pattern list cache |
+| [ensureDefaultIndexPattern](./kibana-plugin-plugins-data-public.indexpatternsservice.ensuredefaultindexpattern.md) | | EnsureDefaultIndexPattern
| |
+| [fieldArrayToMap](./kibana-plugin-plugins-data-public.indexpatternsservice.fieldarraytomap.md) | | (fields: FieldSpec[]) => Record<string, FieldSpec>
| Converts field array to map |
+| [get](./kibana-plugin-plugins-data-public.indexpatternsservice.get.md) | | (id: string) => Promise<IndexPattern>
| Get an index pattern by id. Cache optimized |
+| [getCache](./kibana-plugin-plugins-data-public.indexpatternsservice.getcache.md) | | () => Promise<SavedObject<IndexPatternSavedObjectAttrs>[] | null | undefined>
| |
+| [getDefault](./kibana-plugin-plugins-data-public.indexpatternsservice.getdefault.md) | | () => Promise<IndexPattern | null>
| Get default index pattern |
+| [getFieldsForIndexPattern](./kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforindexpattern.md) | | (indexPattern: IndexPattern | IndexPatternSpec, options?: GetFieldsOptions) => Promise<any>
| Get field list by providing an index patttern (or spec) |
+| [getFieldsForWildcard](./kibana-plugin-plugins-data-public.indexpatternsservice.getfieldsforwildcard.md) | | (options?: GetFieldsOptions) => Promise<any>
| Get field list by providing { pattern } |
+| [getIds](./kibana-plugin-plugins-data-public.indexpatternsservice.getids.md) | | (refresh?: boolean) => Promise<string[]>
| Get list of index pattern ids |
+| [getTitles](./kibana-plugin-plugins-data-public.indexpatternsservice.gettitles.md) | | (refresh?: boolean) => Promise<string[]>
| Get list of index pattern titles |
+| [refreshFields](./kibana-plugin-plugins-data-public.indexpatternsservice.refreshfields.md) | | (indexPattern: IndexPattern) => Promise<void>
| Refresh field list for a given index pattern |
+| [savedObjectToSpec](./kibana-plugin-plugins-data-public.indexpatternsservice.savedobjecttospec.md) | | (savedObject: SavedObject<IndexPatternAttributes>) => IndexPatternSpec
| Converts index pattern saved object to index pattern spec |
+| [setDefault](./kibana-plugin-plugins-data-public.indexpatternsservice.setdefault.md) | | (id: string, force?: boolean) => Promise<void>
| Optionally set default index pattern, unless force = true |
+
+## Methods
+
+| Method | Modifiers | Description |
+| --- | --- | --- |
+| [create(spec, skipFetchFields)](./kibana-plugin-plugins-data-public.indexpatternsservice.create.md) | | Create a new index pattern instance |
+| [createAndSave(spec, override, skipFetchFields)](./kibana-plugin-plugins-data-public.indexpatternsservice.createandsave.md) | | Create a new index pattern and save it right away |
+| [createSavedObject(indexPattern, override)](./kibana-plugin-plugins-data-public.indexpatternsservice.createsavedobject.md) | | Save a new index pattern |
+| [delete(indexPatternId)](./kibana-plugin-plugins-data-public.indexpatternsservice.delete.md) | | Deletes an index pattern from .kibana index |
+| [updateSavedObject(indexPattern, saveAttempts)](./kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md) | | Save existing index pattern. Will attempt to merge differences if there are conflicts |
+
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.refreshfields.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.refreshfields.md
new file mode 100644
index 00000000000000..b7c47efbb445ae
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.refreshfields.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [refreshFields](./kibana-plugin-plugins-data-public.indexpatternsservice.refreshfields.md)
+
+## IndexPatternsService.refreshFields property
+
+Refresh field list for a given index pattern
+
+Signature:
+
+```typescript
+refreshFields: (indexPattern: IndexPattern) => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.savedobjecttospec.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.savedobjecttospec.md
new file mode 100644
index 00000000000000..7bd40c9cafd429
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.savedobjecttospec.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [savedObjectToSpec](./kibana-plugin-plugins-data-public.indexpatternsservice.savedobjecttospec.md)
+
+## IndexPatternsService.savedObjectToSpec property
+
+Converts index pattern saved object to index pattern spec
+
+Signature:
+
+```typescript
+savedObjectToSpec: (savedObject: SavedObject) => IndexPatternSpec;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.setdefault.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.setdefault.md
new file mode 100644
index 00000000000000..2bf8eaa03d1ae9
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.setdefault.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [setDefault](./kibana-plugin-plugins-data-public.indexpatternsservice.setdefault.md)
+
+## IndexPatternsService.setDefault property
+
+Optionally set default index pattern, unless force = true
+
+Signature:
+
+```typescript
+setDefault: (id: string, force?: boolean) => Promise;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md
new file mode 100644
index 00000000000000..3973f5d4c3e7b4
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) > [updateSavedObject](./kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md)
+
+## IndexPatternsService.updateSavedObject() method
+
+Save existing index pattern. Will attempt to merge differences if there are conflicts
+
+Signature:
+
+```typescript
+updateSavedObject(indexPattern: IndexPattern, saveAttempts?: number): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| indexPattern | IndexPattern
| |
+| saveAttempts | number
| |
+
+Returns:
+
+`Promise`
+
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 71f66a1b46d852..506f141984052a 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
@@ -11,11 +11,13 @@
| [AggConfig](./kibana-plugin-plugins-data-public.aggconfig.md) | |
| [AggConfigs](./kibana-plugin-plugins-data-public.aggconfigs.md) | |
| [AggParamType](./kibana-plugin-plugins-data-public.aggparamtype.md) | |
+| [DuplicateIndexPatternError](./kibana-plugin-plugins-data-public.duplicateindexpatternerror.md) | |
| [FieldFormat](./kibana-plugin-plugins-data-public.fieldformat.md) | |
| [FilterManager](./kibana-plugin-plugins-data-public.filtermanager.md) | |
| [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) | |
| [IndexPatternField](./kibana-plugin-plugins-data-public.indexpatternfield.md) | |
| [IndexPatternSelect](./kibana-plugin-plugins-data-public.indexpatternselect.md) | |
+| [IndexPatternsService](./kibana-plugin-plugins-data-public.indexpatternsservice.md) | |
| [OptionedParamType](./kibana-plugin-plugins-data-public.optionedparamtype.md) | |
| [Plugin](./kibana-plugin-plugins-data-public.plugin.md) | |
| [RequestTimeoutError](./kibana-plugin-plugins-data-public.requesttimeouterror.md) | Class used to signify that a request timed out. Useful for applications to conditionally handle this type of error differently than other errors. |
@@ -66,7 +68,8 @@
| [IIndexPatternFieldList](./kibana-plugin-plugins-data-public.iindexpatternfieldlist.md) | |
| [IKibanaSearchRequest](./kibana-plugin-plugins-data-public.ikibanasearchrequest.md) | |
| [IKibanaSearchResponse](./kibana-plugin-plugins-data-public.ikibanasearchresponse.md) | |
-| [IndexPatternAttributes](./kibana-plugin-plugins-data-public.indexpatternattributes.md) | Use data plugin interface instead |
+| [IndexPatternAttributes](./kibana-plugin-plugins-data-public.indexpatternattributes.md) | |
+| [IndexPatternSpec](./kibana-plugin-plugins-data-public.indexpatternspec.md) | |
| [IndexPatternTypeMeta](./kibana-plugin-plugins-data-public.indexpatterntypemeta.md) | |
| [ISearchOptions](./kibana-plugin-plugins-data-public.isearchoptions.md) | |
| [ISearchSetup](./kibana-plugin-plugins-data-public.isearchsetup.md) | The setup contract exposed by the Search plugin exposes the search strategy extension point. |
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md
index d1d31f1f0428ec..f7f8e51c4b632a 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md
@@ -9,13 +9,12 @@ Constructs a new instance of the `IndexPattern` class
Signature:
```typescript
-constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps);
+constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps);
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
-| id | string | undefined
| |
-| { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, } | IndexPatternDeps
| |
+| { spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, } | IndexPatternDeps
| |
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._fetchfields.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._fetchfields.md
deleted file mode 100644
index d1dabe59d4c452..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._fetchfields.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [\_fetchFields](./kibana-plugin-plugins-data-server.indexpattern._fetchfields.md)
-
-## IndexPattern.\_fetchFields() method
-
-Signature:
-
-```typescript
-_fetchFields(): Promise;
-```
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.addscriptedfield.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.addscriptedfield.md
index 320698b05e3233..6d206e88b5b56a 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.addscriptedfield.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.addscriptedfield.md
@@ -4,10 +4,12 @@
## IndexPattern.addScriptedField() method
+Add scripted field to field list
+
Signature:
```typescript
-addScriptedField(name: string, script: string, fieldType: string | undefined, lang: string): Promise;
+addScriptedField(name: string, script: string, fieldType?: string, lang?: string): Promise;
```
## Parameters
@@ -16,7 +18,7 @@ addScriptedField(name: string, script: string, fieldType: string | undefined, la
| --- | --- | --- |
| name | string
| |
| script | string
| |
-| fieldType | string | undefined
| |
+| fieldType | string
| |
| lang | string
| |
Returns:
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.create.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.create.md
deleted file mode 100644
index 82367e79480f17..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.create.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [create](./kibana-plugin-plugins-data-server.indexpattern.create.md)
-
-## IndexPattern.create() method
-
-Signature:
-
-```typescript
-create(allowOverride?: boolean): Promise;
-```
-
-## Parameters
-
-| Parameter | Type | Description |
-| --- | --- | --- |
-| allowOverride | boolean
| |
-
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fieldformatmap.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fieldformatmap.md
index 77e5d112a3db2a..2f686bd313d58b 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fieldformatmap.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fieldformatmap.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-fieldFormatMap: any;
+fieldFormatMap: Record;
```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fields.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fields.md
index 17a63be92fedf3..5b22014486c02b 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fields.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fields.md
@@ -8,6 +8,6 @@
```typescript
fields: IIndexPatternFieldList & {
- toSpec: () => FieldSpec[];
+ toSpec: () => IndexPatternFieldMap;
};
```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fieldsfetcher.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fieldsfetcher.md
deleted file mode 100644
index 31683934e2252f..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.fieldsfetcher.md
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [fieldsFetcher](./kibana-plugin-plugins-data-server.indexpattern.fieldsfetcher.md)
-
-## IndexPattern.fieldsFetcher property
-
-Signature:
-
-```typescript
-fieldsFetcher: any;
-```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.flattenhit.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.flattenhit.md
index 3f4851daaf488c..33c6dedc6dcd8e 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.flattenhit.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.flattenhit.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-flattenHit: any;
+flattenHit: (hit: Record, deep?: boolean) => Record;
```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formatfield.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formatfield.md
index 9019904cf2b655..07db8a0805b074 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formatfield.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formatfield.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-formatField: any;
+formatField: FormatFieldFn;
```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formathit.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formathit.md
index 0bfd7466fb3a57..75f282a8991fc7 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formathit.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.formathit.md
@@ -7,5 +7,8 @@
Signature:
```typescript
-formatHit: any;
+formatHit: {
+ (hit: Record, type?: string): any;
+ formatField: FormatFieldFn;
+ };
```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.prepbody.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getassavedobjectbody.md
similarity index 76%
rename from docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.prepbody.md
rename to docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getassavedobjectbody.md
index 0de4418da46f89..f1bdb2f7294140 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.prepbody.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getassavedobjectbody.md
@@ -1,13 +1,15 @@
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [prepBody](./kibana-plugin-plugins-data-server.indexpattern.prepbody.md)
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [getAsSavedObjectBody](./kibana-plugin-plugins-data-server.indexpattern.getassavedobjectbody.md)
-## IndexPattern.prepBody() method
+## IndexPattern.getAsSavedObjectBody() method
+
+Returns index pattern as saved object body for saving
Signature:
```typescript
-prepBody(): {
+getAsSavedObjectBody(): {
title: string;
timeFieldName: string | undefined;
intervalName: string | undefined;
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getformatterforfield.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getformatterforfield.md
index 32181876969184..7dc2756009f4ec 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getformatterforfield.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getformatterforfield.md
@@ -4,6 +4,8 @@
## IndexPattern.getFormatterForField() method
+Provide a field, get its formatter
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getoriginalsavedobjectbody.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getoriginalsavedobjectbody.md
new file mode 100644
index 00000000000000..324f9d0152ab54
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getoriginalsavedobjectbody.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [getOriginalSavedObjectBody](./kibana-plugin-plugins-data-server.indexpattern.getoriginalsavedobjectbody.md)
+
+## IndexPattern.getOriginalSavedObjectBody property
+
+Get last saved saved object fields
+
+Signature:
+
+```typescript
+getOriginalSavedObjectBody: () => {
+ title?: string | undefined;
+ timeFieldName?: string | undefined;
+ intervalName?: string | undefined;
+ fields?: string | undefined;
+ sourceFilters?: string | undefined;
+ fieldFormatMap?: string | undefined;
+ typeMeta?: string | undefined;
+ type?: string | undefined;
+ };
+```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getsourcefiltering.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getsourcefiltering.md
index f463dcd29a2e49..240f9b4fb0aa27 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getsourcefiltering.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.getsourcefiltering.md
@@ -4,6 +4,8 @@
## IndexPattern.getSourceFiltering() method
+Get the source filtering configuration for that index.
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.init.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.init.md
deleted file mode 100644
index bc17ff00cc9cf7..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.init.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [init](./kibana-plugin-plugins-data-server.indexpattern.init.md)
-
-## IndexPattern.init() method
-
-Signature:
-
-```typescript
-init(): Promise;
-```
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.initfromspec.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.initfromspec.md
deleted file mode 100644
index 6fbf621254ff3b..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.initfromspec.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [initFromSpec](./kibana-plugin-plugins-data-server.indexpattern.initfromspec.md)
-
-## IndexPattern.initFromSpec() method
-
-Signature:
-
-```typescript
-initFromSpec(spec: IndexPatternSpec): this;
-```
-
-## Parameters
-
-| Parameter | Type | Description |
-| --- | --- | --- |
-| spec | IndexPatternSpec
| |
-
-Returns:
-
-`this`
-
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.iswildcard.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.iswildcard.md
deleted file mode 100644
index e0adf71b45efa3..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.iswildcard.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [isWildcard](./kibana-plugin-plugins-data-server.indexpattern.iswildcard.md)
-
-## IndexPattern.isWildcard() method
-
-Signature:
-
-```typescript
-isWildcard(): boolean;
-```
-Returns:
-
-`boolean`
-
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md
index 27d7dd0315753a..d877854444a090 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md
@@ -14,22 +14,22 @@ export declare class IndexPattern implements IIndexPattern
| Constructor | Modifiers | Description |
| --- | --- | --- |
-| [(constructor)(id, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-server.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern
class |
+| [(constructor)({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-server.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern
class |
## Properties
| Property | Modifiers | Type | Description |
| --- | --- | --- | --- |
-| [fieldFormatMap](./kibana-plugin-plugins-data-server.indexpattern.fieldformatmap.md) | | any
| |
-| [fields](./kibana-plugin-plugins-data-server.indexpattern.fields.md) | | IIndexPatternFieldList & {
toSpec: () => FieldSpec[];
}
| |
-| [fieldsFetcher](./kibana-plugin-plugins-data-server.indexpattern.fieldsfetcher.md) | | any
| |
-| [flattenHit](./kibana-plugin-plugins-data-server.indexpattern.flattenhit.md) | | any
| |
-| [formatField](./kibana-plugin-plugins-data-server.indexpattern.formatfield.md) | | any
| |
-| [formatHit](./kibana-plugin-plugins-data-server.indexpattern.formathit.md) | | any
| |
+| [fieldFormatMap](./kibana-plugin-plugins-data-server.indexpattern.fieldformatmap.md) | | Record<string, any>
| |
+| [fields](./kibana-plugin-plugins-data-server.indexpattern.fields.md) | | IIndexPatternFieldList & {
toSpec: () => IndexPatternFieldMap;
}
| |
+| [flattenHit](./kibana-plugin-plugins-data-server.indexpattern.flattenhit.md) | | (hit: Record<string, any>, deep?: boolean) => Record<string, any>
| |
+| [formatField](./kibana-plugin-plugins-data-server.indexpattern.formatfield.md) | | FormatFieldFn
| |
+| [formatHit](./kibana-plugin-plugins-data-server.indexpattern.formathit.md) | | {
(hit: Record<string, any>, type?: string): any;
formatField: FormatFieldFn;
}
| |
+| [getOriginalSavedObjectBody](./kibana-plugin-plugins-data-server.indexpattern.getoriginalsavedobjectbody.md) | | () => {
title?: string | undefined;
timeFieldName?: string | undefined;
intervalName?: string | undefined;
fields?: string | undefined;
sourceFilters?: string | undefined;
fieldFormatMap?: string | undefined;
typeMeta?: string | undefined;
type?: string | undefined;
}
| Get last saved saved object fields |
| [id](./kibana-plugin-plugins-data-server.indexpattern.id.md) | | string
| |
| [intervalName](./kibana-plugin-plugins-data-server.indexpattern.intervalname.md) | | string | undefined
| |
| [metaFields](./kibana-plugin-plugins-data-server.indexpattern.metafields.md) | | string[]
| |
-| [originalBody](./kibana-plugin-plugins-data-server.indexpattern.originalbody.md) | | {
[key: string]: any;
}
| |
+| [resetOriginalSavedObjectBody](./kibana-plugin-plugins-data-server.indexpattern.resetoriginalsavedobjectbody.md) | | () => void
| Reset last saved saved object fields. used after saving |
| [sourceFilters](./kibana-plugin-plugins-data-server.indexpattern.sourcefilters.md) | | SourceFilter[]
| |
| [timeFieldName](./kibana-plugin-plugins-data-server.indexpattern.timefieldname.md) | | string | undefined
| |
| [title](./kibana-plugin-plugins-data-server.indexpattern.title.md) | | string
| |
@@ -41,26 +41,20 @@ export declare class IndexPattern implements IIndexPattern
| Method | Modifiers | Description |
| --- | --- | --- |
-| [\_fetchFields()](./kibana-plugin-plugins-data-server.indexpattern._fetchfields.md) | | |
-| [addScriptedField(name, script, fieldType, lang)](./kibana-plugin-plugins-data-server.indexpattern.addscriptedfield.md) | | |
-| [create(allowOverride)](./kibana-plugin-plugins-data-server.indexpattern.create.md) | | |
+| [addScriptedField(name, script, fieldType, lang)](./kibana-plugin-plugins-data-server.indexpattern.addscriptedfield.md) | | Add scripted field to field list |
| [getAggregationRestrictions()](./kibana-plugin-plugins-data-server.indexpattern.getaggregationrestrictions.md) | | |
+| [getAsSavedObjectBody()](./kibana-plugin-plugins-data-server.indexpattern.getassavedobjectbody.md) | | Returns index pattern as saved object body for saving |
| [getComputedFields()](./kibana-plugin-plugins-data-server.indexpattern.getcomputedfields.md) | | |
| [getFieldByName(name)](./kibana-plugin-plugins-data-server.indexpattern.getfieldbyname.md) | | |
-| [getFormatterForField(field)](./kibana-plugin-plugins-data-server.indexpattern.getformatterforfield.md) | | |
+| [getFormatterForField(field)](./kibana-plugin-plugins-data-server.indexpattern.getformatterforfield.md) | | Provide a field, get its formatter |
| [getNonScriptedFields()](./kibana-plugin-plugins-data-server.indexpattern.getnonscriptedfields.md) | | |
| [getScriptedFields()](./kibana-plugin-plugins-data-server.indexpattern.getscriptedfields.md) | | |
-| [getSourceFiltering()](./kibana-plugin-plugins-data-server.indexpattern.getsourcefiltering.md) | | |
+| [getSourceFiltering()](./kibana-plugin-plugins-data-server.indexpattern.getsourcefiltering.md) | | Get the source filtering configuration for that index. |
| [getTimeField()](./kibana-plugin-plugins-data-server.indexpattern.gettimefield.md) | | |
-| [init()](./kibana-plugin-plugins-data-server.indexpattern.init.md) | | |
-| [initFromSpec(spec)](./kibana-plugin-plugins-data-server.indexpattern.initfromspec.md) | | |
| [isTimeBased()](./kibana-plugin-plugins-data-server.indexpattern.istimebased.md) | | |
| [isTimeBasedWildcard()](./kibana-plugin-plugins-data-server.indexpattern.istimebasedwildcard.md) | | |
| [isTimeNanosBased()](./kibana-plugin-plugins-data-server.indexpattern.istimenanosbased.md) | | |
-| [isWildcard()](./kibana-plugin-plugins-data-server.indexpattern.iswildcard.md) | | |
| [popularizeField(fieldName, unit)](./kibana-plugin-plugins-data-server.indexpattern.popularizefield.md) | | |
-| [prepBody()](./kibana-plugin-plugins-data-server.indexpattern.prepbody.md) | | |
-| [refreshFields()](./kibana-plugin-plugins-data-server.indexpattern.refreshfields.md) | | |
-| [removeScriptedField(fieldName)](./kibana-plugin-plugins-data-server.indexpattern.removescriptedfield.md) | | |
+| [removeScriptedField(fieldName)](./kibana-plugin-plugins-data-server.indexpattern.removescriptedfield.md) | | Remove scripted field from field list |
| [toSpec()](./kibana-plugin-plugins-data-server.indexpattern.tospec.md) | | |
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.originalbody.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.originalbody.md
deleted file mode 100644
index b7357d6e85ae73..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.originalbody.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [originalBody](./kibana-plugin-plugins-data-server.indexpattern.originalbody.md)
-
-## IndexPattern.originalBody property
-
-Signature:
-
-```typescript
-originalBody: {
- [key: string]: any;
- };
-```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.refreshfields.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.refreshfields.md
deleted file mode 100644
index 168e131937eead..00000000000000
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.refreshfields.md
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [refreshFields](./kibana-plugin-plugins-data-server.indexpattern.refreshfields.md)
-
-## IndexPattern.refreshFields() method
-
-Signature:
-
-```typescript
-refreshFields(): Promise;
-```
-Returns:
-
-`Promise`
-
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.removescriptedfield.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.removescriptedfield.md
index 8205175485398f..3162a7f42dd121 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.removescriptedfield.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.removescriptedfield.md
@@ -4,6 +4,8 @@
## IndexPattern.removeScriptedField() method
+Remove scripted field from field list
+
Signature:
```typescript
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.resetoriginalsavedobjectbody.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.resetoriginalsavedobjectbody.md
new file mode 100644
index 00000000000000..18ec7070bd577e
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.resetoriginalsavedobjectbody.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [resetOriginalSavedObjectBody](./kibana-plugin-plugins-data-server.indexpattern.resetoriginalsavedobjectbody.md)
+
+## IndexPattern.resetOriginalSavedObjectBody property
+
+Reset last saved saved object fields. used after saving
+
+Signature:
+
+```typescript
+resetOriginalSavedObjectBody: () => void;
+```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternattributes.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternattributes.md
index 4a5b61f5c179b6..40b029da00469d 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternattributes.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternattributes.md
@@ -4,12 +4,6 @@
## IndexPatternAttributes interface
-> Warning: This API is now obsolete.
->
->
-
-Use data plugin interface instead
-
Signature:
```typescript
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.md
new file mode 100644
index 00000000000000..aa78c055f4f5c2
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPatternsService](./kibana-plugin-plugins-data-server.indexpatternsservice.md)
+
+## IndexPatternsService class
+
+Signature:
+
+```typescript
+export declare class IndexPatternsService implements Plugin
+```
+
+## Methods
+
+| Method | Modifiers | Description |
+| --- | --- | --- |
+| [setup(core)](./kibana-plugin-plugins-data-server.indexpatternsservice.setup.md) | | |
+| [start(core, { fieldFormats, logger })](./kibana-plugin-plugins-data-server.indexpatternsservice.start.md) | | |
+
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.setup.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.setup.md
new file mode 100644
index 00000000000000..a354fbc2a477bd
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.setup.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPatternsService](./kibana-plugin-plugins-data-server.indexpatternsservice.md) > [setup](./kibana-plugin-plugins-data-server.indexpatternsservice.setup.md)
+
+## IndexPatternsService.setup() method
+
+Signature:
+
+```typescript
+setup(core: CoreSetup): void;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| core | CoreSetup
| |
+
+Returns:
+
+`void`
+
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.start.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.start.md
new file mode 100644
index 00000000000000..d35dc3aa110008
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsservice.start.md
@@ -0,0 +1,27 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPatternsService](./kibana-plugin-plugins-data-server.indexpatternsservice.md) > [start](./kibana-plugin-plugins-data-server.indexpatternsservice.start.md)
+
+## IndexPatternsService.start() method
+
+Signature:
+
+```typescript
+start(core: CoreStart, { fieldFormats, logger }: IndexPatternsServiceStartDeps): {
+ indexPatternsServiceFactory: (kibanaRequest: KibanaRequest) => Promise;
+ };
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| core | CoreStart
| |
+| { fieldFormats, logger } | IndexPatternsServiceStartDeps
| |
+
+Returns:
+
+`{
+ indexPatternsServiceFactory: (kibanaRequest: KibanaRequest) => Promise;
+ }`
+
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 dea79f5dc4a9f4..7113ac935907fd 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
@@ -11,6 +11,7 @@
| [AggParamType](./kibana-plugin-plugins-data-server.aggparamtype.md) | |
| [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) | |
| [IndexPatternsFetcher](./kibana-plugin-plugins-data-server.indexpatternsfetcher.md) | |
+| [IndexPatternsService](./kibana-plugin-plugins-data-server.indexpatternsservice.md) | |
| [OptionedParamType](./kibana-plugin-plugins-data-server.optionedparamtype.md) | |
| [Plugin](./kibana-plugin-plugins-data-server.plugin.md) | |
@@ -48,7 +49,7 @@
| [IEsSearchResponse](./kibana-plugin-plugins-data-server.iessearchresponse.md) | |
| [IFieldSubType](./kibana-plugin-plugins-data-server.ifieldsubtype.md) | |
| [IFieldType](./kibana-plugin-plugins-data-server.ifieldtype.md) | |
-| [IndexPatternAttributes](./kibana-plugin-plugins-data-server.indexpatternattributes.md) | Use data plugin interface instead |
+| [IndexPatternAttributes](./kibana-plugin-plugins-data-server.indexpatternattributes.md) | |
| [ISearchOptions](./kibana-plugin-plugins-data-server.isearchoptions.md) | |
| [ISearchSetup](./kibana-plugin-plugins-data-server.isearchsetup.md) | |
| [ISearchStart](./kibana-plugin-plugins-data-server.isearchstart.md) | |
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md
index 455c5ecdd8195a..84aeb4cf80cce9 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md
@@ -13,7 +13,7 @@ start(core: CoreStart): {
fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise;
};
indexPatterns: {
- indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise;
+ indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise;
};
};
```
@@ -32,7 +32,7 @@ start(core: CoreStart): {
fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise;
};
indexPatterns: {
- indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise;
+ indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise;
};
}`
diff --git a/src/fixtures/stubbed_saved_object_index_pattern.ts b/src/fixtures/stubbed_saved_object_index_pattern.ts
index 44b391f14cf9cd..261e451db5452e 100644
--- a/src/fixtures/stubbed_saved_object_index_pattern.ts
+++ b/src/fixtures/stubbed_saved_object_index_pattern.ts
@@ -28,10 +28,10 @@ export function stubbedSavedObjectIndexPattern(id: string | null = null) {
type: 'index-pattern',
attributes: {
timeFieldName: 'timestamp',
- customFormats: '{}',
+ customFormats: {},
fields: mockLogstashFields,
title: 'title',
},
- version: 2,
+ version: '2',
};
}
diff --git a/src/plugins/data/common/index.ts b/src/plugins/data/common/index.ts
index bc7080e7d450b7..153b6a633b66d1 100644
--- a/src/plugins/data/common/index.ts
+++ b/src/plugins/data/common/index.ts
@@ -27,3 +27,10 @@ export * from './query';
export * from './search';
export * from './types';
export * from './utils';
+
+/**
+ * Use data plugin interface instead
+ * @deprecated
+ */
+
+export { IndexPatternAttributes } from './types';
diff --git a/src/plugins/data/common/index_patterns/errors.ts b/src/plugins/data/common/index_patterns/errors/duplicate_index_pattern.ts
similarity index 76%
rename from src/plugins/data/common/index_patterns/errors.ts
rename to src/plugins/data/common/index_patterns/errors/duplicate_index_pattern.ts
index 3d92bae1968fb5..c42dcc1c6a24de 100644
--- a/src/plugins/data/common/index_patterns/errors.ts
+++ b/src/plugins/data/common/index_patterns/errors/duplicate_index_pattern.ts
@@ -17,13 +17,9 @@
* under the License.
*/
-import { FieldSpec } from './types';
-
-export class FieldTypeUnknownError extends Error {
- public readonly fieldSpec: FieldSpec;
- constructor(message: string, spec: FieldSpec) {
+export class DuplicateIndexPatternError extends Error {
+ constructor(message: string) {
super(message);
- this.name = 'FieldTypeUnknownError';
- this.fieldSpec = spec;
+ this.name = 'DuplicateIndexPatternError';
}
}
diff --git a/src/plugins/data/common/index_patterns/errors/index.ts b/src/plugins/data/common/index_patterns/errors/index.ts
new file mode 100644
index 00000000000000..7cc39d93a2a18e
--- /dev/null
+++ b/src/plugins/data/common/index_patterns/errors/index.ts
@@ -0,0 +1,20 @@
+/*
+ * 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 './duplicate_index_pattern';
diff --git a/src/plugins/data/common/index_patterns/fields/field_list.ts b/src/plugins/data/common/index_patterns/fields/field_list.ts
index 4cf60758698513..c0eb55a15fead6 100644
--- a/src/plugins/data/common/index_patterns/fields/field_list.ts
+++ b/src/plugins/data/common/index_patterns/fields/field_list.ts
@@ -20,7 +20,7 @@
import { findIndex } from 'lodash';
import { IFieldType } from './types';
import { IndexPatternField } from './index_pattern_field';
-import { OnNotification, FieldSpec } from '../types';
+import { FieldSpec, IndexPatternFieldMap } from '../types';
import { IndexPattern } from '../index_patterns';
import { shortenDottedString } from '../../utils';
@@ -35,16 +35,11 @@ export interface IIndexPatternFieldList extends Array {
removeAll(): void;
replaceAll(specs: FieldSpec[]): void;
update(field: FieldSpec): void;
- toSpec(options?: { getFormatterForField?: IndexPattern['getFormatterForField'] }): FieldSpec[];
+ toSpec(options?: {
+ getFormatterForField?: IndexPattern['getFormatterForField'];
+ }): IndexPatternFieldMap;
}
-export type CreateIndexPatternFieldList = (
- indexPattern: IndexPattern,
- specs?: FieldSpec[],
- shortDotsEnable?: boolean,
- onNotification?: OnNotification
-) => IIndexPatternFieldList;
-
// extending the array class and using a constructor doesn't work well
// when calling filter and similar so wrapping in a callback.
// to be removed in the future
@@ -105,7 +100,7 @@ export const fieldList = (
this.groups.clear();
};
- public readonly replaceAll = (spcs: FieldSpec[]) => {
+ public readonly replaceAll = (spcs: FieldSpec[] = []) => {
this.removeAll();
spcs.forEach(this.add);
};
@@ -115,7 +110,12 @@ export const fieldList = (
}: {
getFormatterForField?: IndexPattern['getFormatterForField'];
} = {}) {
- return [...this.map((field) => field.toSpec({ getFormatterForField }))];
+ return {
+ ...this.reduce((collector, field) => {
+ collector[field.name] = field.toSpec({ getFormatterForField });
+ return collector;
+ }, {}),
+ };
}
}
diff --git a/src/plugins/data/common/index_patterns/fields/index_pattern_field.ts b/src/plugins/data/common/index_patterns/fields/index_pattern_field.ts
index b83323ea195567..808afc3449c2a1 100644
--- a/src/plugins/data/common/index_patterns/fields/index_pattern_field.ts
+++ b/src/plugins/data/common/index_patterns/fields/index_pattern_field.ts
@@ -17,12 +17,9 @@
* under the License.
*/
-import { i18n } from '@kbn/i18n';
import { KbnFieldType, getKbnFieldType } from '../../kbn_field_types';
-import { KBN_FIELD_TYPES } from '../../kbn_field_types/types';
import { IFieldType } from './types';
import { FieldSpec, IndexPattern } from '../..';
-import { FieldTypeUnknownError } from '../errors';
export class IndexPatternField implements IFieldType {
readonly spec: FieldSpec;
@@ -35,16 +32,12 @@ export class IndexPatternField implements IFieldType {
this.displayName = displayName;
this.kbnFieldType = getKbnFieldType(spec.type);
- if (spec.type && this.kbnFieldType?.name === KBN_FIELD_TYPES.UNKNOWN) {
- const msg = i18n.translate('data.indexPatterns.unknownFieldTypeErrorMsg', {
- values: { type: spec.type, name: spec.name },
- defaultMessage: `Field '{name}' Unknown field type '{type}'`,
- });
- throw new FieldTypeUnknownError(msg, spec);
- }
}
// writable attrs
+ /**
+ * Count is used for field popularity
+ */
public get count() {
return this.spec.count || 0;
}
@@ -53,6 +46,9 @@ export class IndexPatternField implements IFieldType {
this.spec.count = count;
}
+ /**
+ * Script field code
+ */
public get script() {
return this.spec.script;
}
@@ -61,6 +57,9 @@ export class IndexPatternField implements IFieldType {
this.spec.script = script;
}
+ /**
+ * Script field language
+ */
public get lang() {
return this.spec.lang;
}
@@ -69,6 +68,9 @@ export class IndexPatternField implements IFieldType {
this.spec.lang = lang;
}
+ /**
+ * Description of field type conflicts across different indices in the same index pattern
+ */
public get conflictDescriptions() {
return this.spec.conflictDescriptions;
}
diff --git a/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap
index 1871627da76de6..ed84aceb60e5ab 100644
--- a/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap
+++ b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap
@@ -2,13 +2,13 @@
exports[`IndexPattern toSpec should match snapshot 1`] = `
Object {
- "fields": Array [
- Object {
+ "fields": Object {
+ "@tags": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
- "count": 10,
+ "count": 0,
"esTypes": Array [
- "long",
+ "keyword",
],
"format": Object {
"id": "number",
@@ -17,20 +17,20 @@ Object {
},
},
"lang": undefined,
- "name": "bytes",
+ "name": "@tags",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "number",
+ "type": "string",
},
- Object {
+ "@timestamp": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
- "count": 20,
+ "count": 30,
"esTypes": Array [
- "boolean",
+ "date",
],
"format": Object {
"id": "number",
@@ -39,20 +39,20 @@ Object {
},
},
"lang": undefined,
- "name": "ssl",
+ "name": "@timestamp",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "boolean",
+ "type": "date",
},
- Object {
+ "_id": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
- "count": 30,
+ "count": 0,
"esTypes": Array [
- "date",
+ "_id",
],
"format": Object {
"id": "number",
@@ -61,20 +61,20 @@ Object {
},
},
"lang": undefined,
- "name": "@timestamp",
- "readFromDocValues": true,
+ "name": "_id",
+ "readFromDocValues": false,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "date",
+ "type": "string",
},
- Object {
+ "_source": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
- "count": 30,
+ "count": 0,
"esTypes": Array [
- "date",
+ "_source",
],
"format": Object {
"id": "number",
@@ -83,20 +83,20 @@ Object {
},
},
"lang": undefined,
- "name": "time",
- "readFromDocValues": true,
+ "name": "_source",
+ "readFromDocValues": false,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "date",
+ "type": "_source",
},
- Object {
+ "_type": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "keyword",
+ "_type",
],
"format": Object {
"id": "number",
@@ -105,20 +105,20 @@ Object {
},
},
"lang": undefined,
- "name": "@tags",
- "readFromDocValues": true,
+ "name": "_type",
+ "readFromDocValues": false,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
"type": "string",
},
- Object {
+ "area": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "date",
+ "geo_shape",
],
"format": Object {
"id": "number",
@@ -127,20 +127,20 @@ Object {
},
},
"lang": undefined,
- "name": "utc_time",
- "readFromDocValues": true,
+ "name": "area",
+ "readFromDocValues": false,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "date",
+ "type": "geo_shape",
},
- Object {
+ "bytes": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
- "count": 0,
+ "count": 10,
"esTypes": Array [
- "integer",
+ "long",
],
"format": Object {
"id": "number",
@@ -149,7 +149,7 @@ Object {
},
},
"lang": undefined,
- "name": "phpmemory",
+ "name": "bytes",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
@@ -157,12 +157,12 @@ Object {
"subType": undefined,
"type": "number",
},
- Object {
+ "custom_user_field": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "ip",
+ "conflict",
],
"format": Object {
"id": "number",
@@ -171,20 +171,20 @@ Object {
},
},
"lang": undefined,
- "name": "ip",
+ "name": "custom_user_field",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "ip",
+ "type": "conflict",
},
- Object {
+ "extension": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "attachment",
+ "text",
],
"format": Object {
"id": "number",
@@ -193,15 +193,41 @@ Object {
},
},
"lang": undefined,
- "name": "request_body",
- "readFromDocValues": true,
+ "name": "extension",
+ "readFromDocValues": false,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "attachment",
+ "type": "string",
},
- Object {
+ "extension.keyword": Object {
+ "aggregatable": true,
+ "conflictDescriptions": undefined,
+ "count": 0,
+ "esTypes": Array [
+ "keyword",
+ ],
+ "format": Object {
+ "id": "number",
+ "params": Object {
+ "pattern": "$0,0.[00]",
+ },
+ },
+ "lang": undefined,
+ "name": "extension.keyword",
+ "readFromDocValues": true,
+ "script": undefined,
+ "scripted": false,
+ "searchable": true,
+ "subType": Object {
+ "multi": Object {
+ "parent": "extension",
+ },
+ },
+ "type": "string",
+ },
+ "geo.coordinates": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
@@ -215,7 +241,7 @@ Object {
},
},
"lang": undefined,
- "name": "point",
+ "name": "geo.coordinates",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
@@ -223,12 +249,12 @@ Object {
"subType": undefined,
"type": "geo_point",
},
- Object {
+ "geo.src": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "geo_shape",
+ "keyword",
],
"format": Object {
"id": "number",
@@ -237,15 +263,15 @@ Object {
},
},
"lang": undefined,
- "name": "area",
- "readFromDocValues": false,
+ "name": "geo.src",
+ "readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "geo_shape",
+ "type": "string",
},
- Object {
+ "hashed": Object {
"aggregatable": false,
"conflictDescriptions": undefined,
"count": 0,
@@ -267,12 +293,12 @@ Object {
"subType": undefined,
"type": "murmur3",
},
- Object {
+ "ip": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "geo_point",
+ "ip",
],
"format": Object {
"id": "number",
@@ -281,15 +307,15 @@ Object {
},
},
"lang": undefined,
- "name": "geo.coordinates",
+ "name": "ip",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "geo_point",
+ "type": "ip",
},
- Object {
+ "machine.os": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
@@ -303,7 +329,7 @@ Object {
},
},
"lang": undefined,
- "name": "extension",
+ "name": "machine.os",
"readFromDocValues": false,
"script": undefined,
"scripted": false,
@@ -311,7 +337,7 @@ Object {
"subType": undefined,
"type": "string",
},
- Object {
+ "machine.os.raw": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
@@ -325,19 +351,19 @@ Object {
},
},
"lang": undefined,
- "name": "extension.keyword",
+ "name": "machine.os.raw",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": Object {
"multi": Object {
- "parent": "extension",
+ "parent": "machine.os",
},
},
"type": "string",
},
- Object {
+ "non-filterable": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
@@ -351,20 +377,20 @@ Object {
},
},
"lang": undefined,
- "name": "machine.os",
+ "name": "non-filterable",
"readFromDocValues": false,
"script": undefined,
"scripted": false,
- "searchable": true,
+ "searchable": false,
"subType": undefined,
"type": "string",
},
- Object {
- "aggregatable": true,
+ "non-sortable": Object {
+ "aggregatable": false,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "keyword",
+ "text",
],
"format": Object {
"id": "number",
@@ -373,24 +399,20 @@ Object {
},
},
"lang": undefined,
- "name": "machine.os.raw",
- "readFromDocValues": true,
+ "name": "non-sortable",
+ "readFromDocValues": false,
"script": undefined,
"scripted": false,
- "searchable": true,
- "subType": Object {
- "multi": Object {
- "parent": "machine.os",
- },
- },
+ "searchable": false,
+ "subType": undefined,
"type": "string",
},
- Object {
+ "phpmemory": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "keyword",
+ "integer",
],
"format": Object {
"id": "number",
@@ -399,20 +421,20 @@ Object {
},
},
"lang": undefined,
- "name": "geo.src",
+ "name": "phpmemory",
"readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "string",
+ "type": "number",
},
- Object {
+ "point": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "_id",
+ "geo_point",
],
"format": Object {
"id": "number",
@@ -421,20 +443,20 @@ Object {
},
},
"lang": undefined,
- "name": "_id",
- "readFromDocValues": false,
+ "name": "point",
+ "readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "string",
+ "type": "geo_point",
},
- Object {
+ "request_body": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "_type",
+ "attachment",
],
"format": Object {
"id": "number",
@@ -443,20 +465,20 @@ Object {
},
},
"lang": undefined,
- "name": "_type",
- "readFromDocValues": false,
+ "name": "request_body",
+ "readFromDocValues": true,
"script": undefined,
"scripted": false,
"searchable": true,
"subType": undefined,
- "type": "string",
+ "type": "attachment",
},
- Object {
+ "script date": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "_source",
+ "date",
],
"format": Object {
"id": "number",
@@ -464,43 +486,21 @@ Object {
"pattern": "$0,0.[00]",
},
},
- "lang": undefined,
- "name": "_source",
+ "lang": "painless",
+ "name": "script date",
"readFromDocValues": false,
- "script": undefined,
- "scripted": false,
+ "script": "1234",
+ "scripted": true,
"searchable": true,
"subType": undefined,
- "type": "_source",
+ "type": "date",
},
- Object {
+ "script murmur3": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "text",
- ],
- "format": Object {
- "id": "number",
- "params": Object {
- "pattern": "$0,0.[00]",
- },
- },
- "lang": undefined,
- "name": "non-filterable",
- "readFromDocValues": false,
- "script": undefined,
- "scripted": false,
- "searchable": false,
- "subType": undefined,
- "type": "string",
- },
- Object {
- "aggregatable": false,
- "conflictDescriptions": undefined,
- "count": 0,
- "esTypes": Array [
- "text",
+ "murmur3",
],
"format": Object {
"id": "number",
@@ -508,21 +508,21 @@ Object {
"pattern": "$0,0.[00]",
},
},
- "lang": undefined,
- "name": "non-sortable",
+ "lang": "expression",
+ "name": "script murmur3",
"readFromDocValues": false,
- "script": undefined,
- "scripted": false,
- "searchable": false,
+ "script": "1234",
+ "scripted": true,
+ "searchable": true,
"subType": undefined,
- "type": "string",
+ "type": "murmur3",
},
- Object {
+ "script number": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "conflict",
+ "long",
],
"format": Object {
"id": "number",
@@ -530,16 +530,16 @@ Object {
"pattern": "$0,0.[00]",
},
},
- "lang": undefined,
- "name": "custom_user_field",
- "readFromDocValues": true,
- "script": undefined,
- "scripted": false,
+ "lang": "expression",
+ "name": "script number",
+ "readFromDocValues": false,
+ "script": "1234",
+ "scripted": true,
"searchable": true,
"subType": undefined,
- "type": "conflict",
+ "type": "number",
},
- Object {
+ "script string": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
@@ -561,12 +561,12 @@ Object {
"subType": undefined,
"type": "string",
},
- Object {
+ "ssl": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
- "count": 0,
+ "count": 20,
"esTypes": Array [
- "long",
+ "boolean",
],
"format": Object {
"id": "number",
@@ -574,19 +574,19 @@ Object {
"pattern": "$0,0.[00]",
},
},
- "lang": "expression",
- "name": "script number",
- "readFromDocValues": false,
- "script": "1234",
- "scripted": true,
+ "lang": undefined,
+ "name": "ssl",
+ "readFromDocValues": true,
+ "script": undefined,
+ "scripted": false,
"searchable": true,
"subType": undefined,
- "type": "number",
+ "type": "boolean",
},
- Object {
+ "time": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
- "count": 0,
+ "count": 30,
"esTypes": Array [
"date",
],
@@ -596,21 +596,21 @@ Object {
"pattern": "$0,0.[00]",
},
},
- "lang": "painless",
- "name": "script date",
- "readFromDocValues": false,
- "script": "1234",
- "scripted": true,
+ "lang": undefined,
+ "name": "time",
+ "readFromDocValues": true,
+ "script": undefined,
+ "scripted": false,
"searchable": true,
"subType": undefined,
"type": "date",
},
- Object {
+ "utc_time": Object {
"aggregatable": true,
"conflictDescriptions": undefined,
"count": 0,
"esTypes": Array [
- "murmur3",
+ "date",
],
"format": Object {
"id": "number",
@@ -618,21 +618,22 @@ Object {
"pattern": "$0,0.[00]",
},
},
- "lang": "expression",
- "name": "script murmur3",
- "readFromDocValues": false,
- "script": "1234",
- "scripted": true,
+ "lang": undefined,
+ "name": "utc_time",
+ "readFromDocValues": true,
+ "script": undefined,
+ "scripted": false,
"searchable": true,
"subType": undefined,
- "type": "murmur3",
+ "type": "date",
},
- ],
+ },
"id": "test-pattern",
"sourceFilters": undefined,
"timeFieldName": "timestamp",
"title": "title",
+ "type": "index-pattern",
"typeMeta": undefined,
- "version": 2,
+ "version": "2",
}
`;
diff --git a/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_patterns.test.ts.snap b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_patterns.test.ts.snap
new file mode 100644
index 00000000000000..752fdcf11991ce
--- /dev/null
+++ b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_patterns.test.ts.snap
@@ -0,0 +1,22 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`IndexPatterns savedObjectToSpec 1`] = `
+Object {
+ "fields": Object {},
+ "id": "id",
+ "intervalName": undefined,
+ "sourceFilters": Array [
+ Object {
+ "value": "item1",
+ },
+ Object {
+ "value": "item2",
+ },
+ ],
+ "timeFieldName": "@timestamp",
+ "title": "kibana-*",
+ "type": "",
+ "typeMeta": Object {},
+ "version": "version",
+}
+`;
diff --git a/src/plugins/data/common/index_patterns/index_patterns/_fields_fetcher.ts b/src/plugins/data/common/index_patterns/index_patterns/_fields_fetcher.ts
deleted file mode 100644
index 4eba0576ff2352..00000000000000
--- a/src/plugins/data/common/index_patterns/index_patterns/_fields_fetcher.ts
+++ /dev/null
@@ -1,48 +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 { IndexPattern } from '.';
-import { GetFieldsOptions, IIndexPatternsApiClient } from '../types';
-
-/** @internal */
-export const createFieldsFetcher = (
- indexPattern: IndexPattern,
- apiClient: IIndexPatternsApiClient,
- metaFields: string[] = []
-) => {
- const fieldFetcher = {
- fetch: (options: GetFieldsOptions) => {
- return fieldFetcher.fetchForWildcard(indexPattern.title, {
- ...options,
- type: indexPattern.type,
- params: indexPattern.typeMeta && indexPattern.typeMeta.params,
- });
- },
- fetchForWildcard: (pattern: string, options: GetFieldsOptions = {}) => {
- return apiClient.getFieldsForWildcard({
- pattern,
- metaFields,
- type: options.type,
- params: options.params || {},
- });
- },
- };
-
- return fieldFetcher;
-};
diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts
index f49897c47d5620..91286a38f16a08 100644
--- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts
+++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts
@@ -17,19 +17,18 @@
* under the License.
*/
-import { defaults, map, last } from 'lodash';
+import { map, last } from 'lodash';
import { IndexPattern } from './index_pattern';
import { DuplicateField } from '../../../../kibana_utils/common';
-// @ts-ignore
+// @ts-expect-error
import mockLogStashFields from '../../../../../fixtures/logstash_fields';
-// @ts-ignore
import { stubbedSavedObjectIndexPattern } from '../../../../../fixtures/stubbed_saved_object_index_pattern';
import { IndexPatternField } from '../fields';
import { fieldFormatsMock } from '../../field_formats/mocks';
-import { FieldFormat, IndexPatternsService } from '../..';
+import { FieldFormat } from '../..';
class MockFieldFormatter {}
@@ -63,90 +62,33 @@ jest.mock('../../field_mapping', () => {
};
});
-let mockFieldsFetcherResponse: any[] = [];
-
-jest.mock('./_fields_fetcher', () => ({
- createFieldsFetcher: jest.fn().mockImplementation(() => ({
- fetch: jest.fn().mockImplementation(() => {
- return new Promise((resolve) => resolve(mockFieldsFetcherResponse));
- }),
- every: jest.fn(),
- })),
-}));
-
-let object: any = {};
-
-const savedObjectsClient = {
- create: jest.fn(),
- get: jest.fn().mockImplementation(() => object),
- update: jest.fn().mockImplementation(async (type, id, body, { version }) => {
- if (object.version !== version) {
- throw new Object({
- res: {
- status: 409,
- },
- });
- }
- object.attributes.title = body.title;
- object.version += 'a';
- return {
- id: object.id,
- version: object.version,
- };
- }),
-};
-
-const patternCache = {
- clear: jest.fn(),
- get: jest.fn(),
- set: jest.fn(),
- clearAll: jest.fn(),
-};
-
-const apiClient = {
- _getUrl: jest.fn(),
- getFieldsForTimePattern: jest.fn(),
- getFieldsForWildcard: jest.fn(),
-};
-
// helper function to create index patterns
-function create(id: string, payload?: any): Promise {
- const indexPattern = new IndexPattern(id, {
- savedObjectsClient: savedObjectsClient as any,
- apiClient,
- patternCache,
+function create(id: string) {
+ const {
+ type,
+ version,
+ attributes: { timeFieldName, fields, title },
+ } = stubbedSavedObjectIndexPattern(id);
+
+ return new IndexPattern({
+ spec: { id, type, version, timeFieldName, fields, title },
+ savedObjectsClient: {} as any,
fieldFormats: fieldFormatsMock,
- indexPatternsService: {} as IndexPatternsService,
- onNotification: () => {},
- onError: () => {},
shortDotsEnable: false,
metaFields: [],
});
-
- setDocsourcePayload(id, payload);
-
- return indexPattern.init();
-}
-
-function setDocsourcePayload(id: string | null, providedPayload: any) {
- object = defaults(providedPayload || {}, stubbedSavedObjectIndexPattern(id));
}
describe('IndexPattern', () => {
- const indexPatternId = 'test-pattern';
-
let indexPattern: IndexPattern;
// create an indexPattern instance for each test
beforeEach(() => {
- return create(indexPatternId).then((pattern: IndexPattern) => {
- indexPattern = pattern;
- });
+ indexPattern = create('test-pattern');
});
describe('api', () => {
test('should have expected properties', () => {
- expect(indexPattern).toHaveProperty('refreshFields');
expect(indexPattern).toHaveProperty('popularizeField');
expect(indexPattern).toHaveProperty('getScriptedFields');
expect(indexPattern).toHaveProperty('getNonScriptedFields');
@@ -158,13 +100,6 @@ describe('IndexPattern', () => {
});
});
- describe('init', () => {
- test('should append the found fields', () => {
- expect(savedObjectsClient.get).toHaveBeenCalled();
- expect(indexPattern.fields).toHaveLength(mockLogStashFields().length);
- });
- });
-
describe('fields', () => {
test('should have expected properties on fields', function () {
expect(indexPattern.fields[0]).toHaveProperty('displayName');
@@ -229,43 +164,9 @@ describe('IndexPattern', () => {
});
});
- describe('refresh fields', () => {
- test('should fetch fields from the fieldsFetcher', async () => {
- expect(indexPattern.fields.length).toBeGreaterThan(2);
-
- mockFieldsFetcherResponse = [{ name: 'foo' }, { name: 'bar' }];
-
- await indexPattern.refreshFields();
-
- mockFieldsFetcherResponse = [];
-
- const newFields = indexPattern.getNonScriptedFields();
-
- expect(newFields).toHaveLength(2);
- expect([...newFields.map((f) => f.name)]).toEqual(['foo', 'bar']);
- });
-
- test('should preserve the scripted fields', async () => {
- // add spy to indexPattern.getScriptedFields
- // sinon.spy(indexPattern, 'getScriptedFields');
-
- // refresh fields, which will fetch
- await indexPattern.refreshFields();
-
- // called to append scripted fields to the response from mapper.getFieldsForIndexPattern
- // sinon.assert.calledOnce(indexPattern.getScriptedFields);
- expect(indexPattern.getScriptedFields().map((f) => f.name)).toEqual(
- mockLogStashFields()
- .filter((f: IndexPatternField) => f.scripted)
- .map((f: IndexPatternField) => f.name)
- );
- });
- });
-
describe('add and remove scripted fields', () => {
test('should append the scripted field', async () => {
// keep a copy of the current scripted field count
- // const saveSpy = sinon.spy(indexPattern, 'save');
const oldCount = indexPattern.getScriptedFields().length;
// add a new scripted field
@@ -283,7 +184,6 @@ describe('IndexPattern', () => {
);
const scriptedFields = indexPattern.getScriptedFields();
- // expect(saveSpy.callCount).to.equal(1);
expect(scriptedFields).toHaveLength(oldCount + 1);
expect((indexPattern.fields.getByName(scriptedField.name) as IndexPatternField).name).toEqual(
scriptedField.name
@@ -291,14 +191,12 @@ describe('IndexPattern', () => {
});
test('should remove scripted field, by name', async () => {
- // const saveSpy = sinon.spy(indexPattern, 'save');
const scriptedFields = indexPattern.getScriptedFields();
const oldCount = scriptedFields.length;
const scriptedField = last(scriptedFields)!;
await indexPattern.removeScriptedField(scriptedField.name);
- // expect(saveSpy.callCount).to.equal(1);
expect(indexPattern.getScriptedFields().length).toEqual(oldCount - 1);
expect(indexPattern.fields.getByName(scriptedField.name)).toEqual(undefined);
});
@@ -330,8 +228,13 @@ describe('IndexPattern', () => {
} as FieldFormat;
indexPattern.getFormatterForField = () => formatter;
const spec = indexPattern.toSpec();
- const restoredPattern = await create(spec.id as string);
- restoredPattern.initFromSpec(spec);
+ const restoredPattern = new IndexPattern({
+ spec,
+ savedObjectsClient: {} as any,
+ fieldFormats: fieldFormatsMock,
+ shortDotsEnable: false,
+ metaFields: [],
+ });
expect(restoredPattern.id).toEqual(indexPattern.id);
expect(restoredPattern.title).toEqual(indexPattern.title);
expect(restoredPattern.timeFieldName).toEqual(indexPattern.timeFieldName);
@@ -342,26 +245,22 @@ describe('IndexPattern', () => {
describe('popularizeField', () => {
test('should increment the popularity count by default', () => {
- // const saveSpy = sinon.stub(indexPattern, 'save');
indexPattern.fields.forEach(async (field) => {
const oldCount = field.count || 0;
await indexPattern.popularizeField(field.name);
- // expect(saveSpy.callCount).to.equal(i + 1);
expect(field.count).toEqual(oldCount + 1);
});
});
test('should increment the popularity count', () => {
- // const saveSpy = sinon.stub(indexPattern, 'save');
indexPattern.fields.forEach(async (field) => {
const oldCount = field.count || 0;
const incrementAmount = 4;
await indexPattern.popularizeField(field.name, incrementAmount);
- // expect(saveSpy.callCount).to.equal(i + 1);
expect(field.count).toEqual(oldCount + incrementAmount);
});
});
diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts
index b2ecca04ca8dff..882235889b55c8 100644
--- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts
+++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts
@@ -18,212 +18,94 @@
*/
import _, { each, reject } from 'lodash';
-import { i18n } from '@kbn/i18n';
import { SavedObjectsClientCommon } from '../..';
-import { DuplicateField, SavedObjectNotFound } from '../../../../kibana_utils/common';
+import { DuplicateField } from '../../../../kibana_utils/common';
import {
ES_FIELD_TYPES,
KBN_FIELD_TYPES,
IIndexPattern,
- FieldTypeUnknownError,
FieldFormatNotFoundError,
IFieldType,
} from '../../../common';
-import { findByTitle } from '../utils';
-import { IndexPatternMissingIndices } from '../lib';
import { IndexPatternField, IIndexPatternFieldList, fieldList } from '../fields';
-import { createFieldsFetcher } from './_fields_fetcher';
import { formatHitProvider } from './format_hit';
import { flattenHitWrapper } from './flatten_hit';
-import { OnNotification, OnError, IIndexPatternsApiClient, IndexPatternAttributes } from '../types';
import { FieldFormatsStartCommon, FieldFormat } from '../../field_formats';
-import { PatternCache } from './_pattern_cache';
-import { expandShorthand, FieldMappingSpec, MappingObject } from '../../field_mapping';
-import { IndexPatternSpec, TypeMeta, FieldSpec, SourceFilter } from '../types';
+import { IndexPatternSpec, TypeMeta, SourceFilter, IndexPatternFieldMap } from '../types';
import { SerializedFieldFormat } from '../../../../expressions/common';
-import { IndexPatternsService } from '..';
-
-const savedObjectType = 'index-pattern';
interface IndexPatternDeps {
+ spec?: IndexPatternSpec;
savedObjectsClient: SavedObjectsClientCommon;
- apiClient: IIndexPatternsApiClient;
- patternCache: PatternCache;
fieldFormats: FieldFormatsStartCommon;
- indexPatternsService: IndexPatternsService;
- onNotification: OnNotification;
- onError: OnError;
shortDotsEnable: boolean;
metaFields: string[];
}
+interface SavedObjectBody {
+ title?: string;
+ timeFieldName?: string;
+ intervalName?: string;
+ fields?: string;
+ sourceFilters?: string;
+ fieldFormatMap?: string;
+ typeMeta?: string;
+ type?: string;
+}
+
+type FormatFieldFn = (hit: Record, fieldName: string) => any;
+
export class IndexPattern implements IIndexPattern {
public id?: string;
public title: string = '';
- public fieldFormatMap: any;
+ public fieldFormatMap: Record;
public typeMeta?: TypeMeta;
- public fields: IIndexPatternFieldList & { toSpec: () => FieldSpec[] };
+ public fields: IIndexPatternFieldList & { toSpec: () => IndexPatternFieldMap };
public timeFieldName: string | undefined;
public intervalName: string | undefined;
public type: string | undefined;
- public formatHit: any;
- public formatField: any;
- public flattenHit: any;
+ public formatHit: {
+ (hit: Record, type?: string): any;
+ formatField: FormatFieldFn;
+ };
+ public formatField: FormatFieldFn;
+ public flattenHit: (hit: Record, deep?: boolean) => Record;
public metaFields: string[];
-
+ // savedObject version
public version: string | undefined;
private savedObjectsClient: SavedObjectsClientCommon;
- private patternCache: PatternCache;
public sourceFilters?: SourceFilter[];
- // todo make read only, update via method or factor out
- public originalBody: { [key: string]: any } = {};
- public fieldsFetcher: any; // probably want to factor out any direct usage and change to private
- private indexPatternsService: IndexPatternsService;
+ private originalSavedObjectBody: SavedObjectBody = {};
private shortDotsEnable: boolean = false;
private fieldFormats: FieldFormatsStartCommon;
- private onNotification: OnNotification;
- private onError: OnError;
-
- private mapping: MappingObject = expandShorthand({
- title: ES_FIELD_TYPES.TEXT,
- timeFieldName: ES_FIELD_TYPES.KEYWORD,
- intervalName: ES_FIELD_TYPES.KEYWORD,
- fields: 'json',
- sourceFilters: 'json',
- fieldFormatMap: {
- type: ES_FIELD_TYPES.TEXT,
- _serialize: (map = {}) => {
- const serialized = _.transform(map, this.serializeFieldFormatMap);
- return _.isEmpty(serialized) ? undefined : JSON.stringify(serialized);
- },
- _deserialize: (map = '{}') => {
- return _.mapValues(JSON.parse(map), (mapping) => {
- return this.deserializeFieldFormatMap(mapping);
- });
- },
- },
- type: ES_FIELD_TYPES.KEYWORD,
- typeMeta: 'json',
- });
-
- constructor(
- id: string | undefined,
- {
- savedObjectsClient,
- apiClient,
- patternCache,
- fieldFormats,
- indexPatternsService,
- onNotification,
- onError,
- shortDotsEnable = false,
- metaFields = [],
- }: IndexPatternDeps
- ) {
- this.id = id;
+
+ constructor({
+ spec = {},
+ savedObjectsClient,
+ fieldFormats,
+ shortDotsEnable = false,
+ metaFields = [],
+ }: IndexPatternDeps) {
+ // set dependencies
this.savedObjectsClient = savedObjectsClient;
- this.patternCache = patternCache;
this.fieldFormats = fieldFormats;
- this.indexPatternsService = indexPatternsService;
- this.onNotification = onNotification;
- this.onError = onError;
-
+ // set config
this.shortDotsEnable = shortDotsEnable;
this.metaFields = metaFields;
+ // initialize functionality
this.fields = fieldList([], this.shortDotsEnable);
- this.fieldsFetcher = createFieldsFetcher(this, apiClient, metaFields);
this.flattenHit = flattenHitWrapper(this, metaFields);
this.formatHit = formatHitProvider(
this,
fieldFormats.getDefaultInstance(KBN_FIELD_TYPES.STRING)
);
this.formatField = this.formatHit.formatField;
- }
-
- private unknownFieldErrorNotification(
- fieldType: string,
- fieldName: string,
- indexPatternTitle: string
- ) {
- const title = i18n.translate('data.indexPatterns.unknownFieldHeader', {
- values: { type: fieldType },
- defaultMessage: 'Unknown field type {type}',
- });
- const text = i18n.translate('data.indexPatterns.unknownFieldErrorMessage', {
- values: { name: fieldName, title: indexPatternTitle },
- defaultMessage: 'Field {name} in indexPattern {title} is using an unknown field type.',
- });
- this.onNotification({ title, text, color: 'danger', iconType: 'alert' });
- }
-
- private serializeFieldFormatMap(flat: any, format: string, field: string | undefined) {
- if (format && field) {
- flat[field] = format;
- }
- }
-
- private deserializeFieldFormatMap(mapping: any) {
- try {
- return this.fieldFormats.getInstance(mapping.id, mapping.params);
- } catch (err) {
- if (err instanceof FieldFormatNotFoundError) {
- return undefined;
- } else {
- throw err;
- }
- }
- }
-
- private isFieldRefreshRequired(specs?: FieldSpec[]): boolean {
- if (!specs) {
- return true;
- }
-
- return specs.every((spec) => {
- // See https://github.com/elastic/kibana/pull/8421
- const hasFieldCaps = 'aggregatable' in spec && 'searchable' in spec;
-
- // See https://github.com/elastic/kibana/pull/11969
- const hasDocValuesFlag = 'readFromDocValues' in spec;
-
- return !hasFieldCaps || !hasDocValuesFlag;
- });
- }
-
- private async indexFields(specs?: FieldSpec[]) {
- if (!this.id) {
- return;
- }
-
- if (this.isFieldRefreshRequired(specs)) {
- await this.refreshFields();
- } else {
- if (specs) {
- try {
- this.fields.replaceAll(specs);
- } catch (err) {
- if (err instanceof FieldTypeUnknownError) {
- this.unknownFieldErrorNotification(err.fieldSpec.name, err.fieldSpec.type, this.title);
- } else {
- throw err;
- }
- }
- }
- }
- }
- public initFromSpec(spec: IndexPatternSpec) {
- // create fieldFormatMap from field list
- const fieldFormatMap: Record = {};
- if (_.isArray(spec.fields)) {
- spec.fields.forEach((field: FieldSpec) => {
- if (field.format) {
- fieldFormatMap[field.name as string] = { ...field.format };
- }
- });
- }
+ // set values
+ this.id = spec.id;
+ const fieldFormatMap = this.fieldSpecsToFieldFormatMap(spec.fields);
this.version = spec.version;
@@ -231,53 +113,55 @@ export class IndexPattern implements IIndexPattern {
this.timeFieldName = spec.timeFieldName;
this.sourceFilters = spec.sourceFilters;
- try {
- this.fields.replaceAll(spec.fields || []);
- } catch (err) {
- if (err instanceof FieldTypeUnknownError) {
- this.unknownFieldErrorNotification(err.fieldSpec.name, err.fieldSpec.type, this.title);
- } else {
- throw err;
- }
- }
+ this.fields.replaceAll(Object.values(spec.fields || {}));
+ this.type = spec.type;
this.typeMeta = spec.typeMeta;
this.fieldFormatMap = _.mapValues(fieldFormatMap, (mapping) => {
return this.deserializeFieldFormatMap(mapping);
});
-
- return this;
}
- private updateFromElasticSearch(response: any) {
- if (!response.found) {
- throw new SavedObjectNotFound(savedObjectType, this.id, 'management/kibana/indexPatterns');
- }
-
- _.forOwn(this.mapping, (fieldMapping: FieldMappingSpec, name: string | undefined) => {
- if (!fieldMapping._deserialize || !name) {
- return;
+ /**
+ * Get last saved saved object fields
+ */
+ getOriginalSavedObjectBody = () => ({ ...this.originalSavedObjectBody });
+
+ /**
+ * Reset last saved saved object fields. used after saving
+ */
+ resetOriginalSavedObjectBody = () => {
+ this.originalSavedObjectBody = this.getAsSavedObjectBody();
+ };
+
+ /**
+ * Converts field format spec to field format instance
+ * @param mapping
+ */
+ private deserializeFieldFormatMap(mapping: SerializedFieldFormat>) {
+ try {
+ return this.fieldFormats.getInstance(mapping.id as string, mapping.params);
+ } catch (err) {
+ if (err instanceof FieldFormatNotFoundError) {
+ return undefined;
+ } else {
+ throw err;
}
-
- response[name] = fieldMapping._deserialize(response[name]);
- });
-
- this.title = response.title;
- this.timeFieldName = response.timeFieldName;
- this.intervalName = response.intervalName;
- this.sourceFilters = response.sourceFilters;
- this.fieldFormatMap = response.fieldFormatMap;
- this.type = response.type;
- this.typeMeta = response.typeMeta;
-
- if (!this.title && this.id) {
- this.title = this.id;
}
- this.version = response.version;
-
- return this.indexFields(response.fields);
}
+ /**
+ * Extracts FieldFormatMap from FieldSpec map
+ * @param fldList FieldSpec map
+ */
+ private fieldSpecsToFieldFormatMap = (fldList: IndexPatternSpec['fields'] = {}) =>
+ Object.values(fldList).reduce>((col, fieldSpec) => {
+ if (fieldSpec.format) {
+ col[fieldSpec.name] = { ...fieldSpec.format };
+ }
+ return col;
+ }, {});
+
getComputedFields() {
const scriptFields: any = {};
if (!this.fields) {
@@ -319,37 +203,6 @@ export class IndexPattern implements IIndexPattern {
};
}
- async init() {
- if (!this.id) {
- return this; // no id === no elasticsearch document
- }
-
- const savedObject = await this.savedObjectsClient.get(
- savedObjectType,
- this.id
- );
-
- const response = {
- version: savedObject.version,
- found: savedObject.version ? true : false,
- title: savedObject.attributes.title,
- timeFieldName: savedObject.attributes.timeFieldName,
- intervalName: savedObject.attributes.intervalName,
- fields: savedObject.attributes.fields,
- sourceFilters: savedObject.attributes.sourceFilters,
- fieldFormatMap: savedObject.attributes.fieldFormatMap,
- typeMeta: savedObject.attributes.typeMeta,
- type: savedObject.attributes.type,
- };
- // Do this before we attempt to update from ES since that call can potentially perform a save
- this.originalBody = this.prepBody();
- await this.updateFromElasticSearch(response);
- // Do it after to ensure we have the most up to date information
- this.originalBody = this.prepBody();
-
- return this;
- }
-
public toSpec(): IndexPatternSpec {
return {
id: this.id,
@@ -360,17 +213,33 @@ export class IndexPattern implements IIndexPattern {
sourceFilters: this.sourceFilters,
fields: this.fields.toSpec({ getFormatterForField: this.getFormatterForField.bind(this) }),
typeMeta: this.typeMeta,
+ type: this.type,
};
}
- // Get the source filtering configuration for that index.
+ /**
+ * Get the source filtering configuration for that index.
+ */
getSourceFiltering() {
return {
excludes: (this.sourceFilters && this.sourceFilters.map((filter: any) => filter.value)) || [],
};
}
- async addScriptedField(name: string, script: string, fieldType: string = 'string', lang: string) {
+ /**
+ * Add scripted field to field list
+ *
+ * @param name field name
+ * @param script script code
+ * @param fieldType
+ * @param lang
+ */
+ async addScriptedField(
+ name: string,
+ script: string,
+ fieldType: string = 'string',
+ lang: string = 'painless'
+ ) {
const scriptedFields = this.getScriptedFields();
const names = _.map(scriptedFields, 'name');
@@ -378,27 +247,24 @@ export class IndexPattern implements IIndexPattern {
throw new DuplicateField(name);
}
- try {
- this.fields.add({
- name,
- script,
- type: fieldType,
- scripted: true,
- lang,
- aggregatable: true,
- searchable: true,
- count: 0,
- readFromDocValues: false,
- });
- } catch (err) {
- if (err instanceof FieldTypeUnknownError) {
- this.unknownFieldErrorNotification(err.fieldSpec.name, err.fieldSpec.type, this.title);
- } else {
- throw err;
- }
- }
+ this.fields.add({
+ name,
+ script,
+ type: fieldType,
+ scripted: true,
+ lang,
+ aggregatable: true,
+ searchable: true,
+ count: 0,
+ readFromDocValues: false,
+ });
}
+ /**
+ * Remove scripted field from field list
+ * @param fieldName
+ */
+
removeScriptedField(fieldName: string) {
const field = this.fields.getByName(fieldName);
if (field) {
@@ -425,9 +291,14 @@ export class IndexPattern implements IIndexPattern {
field.count = count;
try {
- const res = await this.savedObjectsClient.update(savedObjectType, this.id, this.prepBody(), {
- version: this.version,
- });
+ const res = await this.savedObjectsClient.update(
+ 'index-pattern',
+ this.id,
+ this.getAsSavedObjectBody(),
+ {
+ version: this.version,
+ }
+ );
this.version = res.version;
} catch (e) {
// no need for an error message here
@@ -469,23 +340,45 @@ export class IndexPattern implements IIndexPattern {
return this.typeMeta?.aggs;
}
- isWildcard() {
+ /**
+ * Does this index pattern title include a '*'
+ */
+ private isWildcard() {
return _.includes(this.title, '*');
}
- prepBody() {
+ /**
+ * Returns index pattern as saved object body for saving
+ */
+ getAsSavedObjectBody() {
+ const serializeFieldFormatMap = (
+ flat: any,
+ format: FieldFormat | undefined,
+ field: string | undefined
+ ) => {
+ if (format && field) {
+ flat[field] = format;
+ }
+ };
+ const serialized = _.transform(this.fieldFormatMap, serializeFieldFormatMap);
+ const fieldFormatMap = _.isEmpty(serialized) ? undefined : JSON.stringify(serialized);
+
return {
title: this.title,
timeFieldName: this.timeFieldName,
intervalName: this.intervalName,
- sourceFilters: this.mapping.sourceFilters._serialize!(this.sourceFilters),
- fields: this.mapping.fields._serialize!(this.fields),
- fieldFormatMap: this.mapping.fieldFormatMap._serialize!(this.fieldFormatMap),
+ sourceFilters: this.sourceFilters ? JSON.stringify(this.sourceFilters) : undefined,
+ fields: this.fields ? JSON.stringify(this.fields) : undefined,
+ fieldFormatMap,
type: this.type,
- typeMeta: this.mapping.typeMeta._serialize!(this.typeMeta),
+ typeMeta: this.typeMeta ? JSON.stringify(this.typeMeta) : undefined,
};
}
+ /**
+ * Provide a field, get its formatter
+ * @param field
+ */
getFormatterForField(
field: IndexPatternField | IndexPatternField['spec'] | IFieldType
): FieldFormat {
@@ -497,81 +390,4 @@ export class IndexPattern implements IIndexPattern {
)
);
}
-
- async create(allowOverride: boolean = false) {
- const _create = async (duplicateId?: string) => {
- if (duplicateId) {
- this.patternCache.clear(duplicateId);
- await this.savedObjectsClient.delete(savedObjectType, duplicateId);
- }
-
- const body = this.prepBody();
- const response = await this.savedObjectsClient.create(savedObjectType, body, { id: this.id });
-
- this.id = response.id;
- return response.id;
- };
-
- const potentialDuplicateByTitle = await findByTitle(this.savedObjectsClient, this.title);
- // If there is potentially duplicate title, just create it
- if (!potentialDuplicateByTitle) {
- return await _create();
- }
-
- // We found a duplicate but we aren't allowing override, show the warn modal
- if (!allowOverride) {
- return false;
- }
-
- return await _create(potentialDuplicateByTitle.id);
- }
-
- async _fetchFields() {
- const fields = await this.fieldsFetcher.fetch(this);
- const scripted = this.getScriptedFields().map((field) => field.spec);
- try {
- this.fields.replaceAll([...fields, ...scripted]);
- } catch (err) {
- if (err instanceof FieldTypeUnknownError) {
- this.unknownFieldErrorNotification(err.fieldSpec.name, err.fieldSpec.type, this.title);
- } else {
- throw err;
- }
- }
- }
-
- refreshFields() {
- return (
- this._fetchFields()
- // todo
- .then(() => this.indexPatternsService.save(this))
- .catch((err) => {
- // https://github.com/elastic/kibana/issues/9224
- // This call will attempt to remap fields from the matching
- // ES index which may not actually exist. In that scenario,
- // we still want to notify the user that there is a problem
- // but we do not want to potentially make any pages unusable
- // so do not rethrow the error here
-
- if (err instanceof IndexPatternMissingIndices) {
- this.onNotification({
- title: (err as any).message,
- color: 'danger',
- iconType: 'alert',
- });
- return [];
- }
-
- this.onError(err, {
- title: i18n.translate('data.indexPatterns.fetchFieldErrorTitle', {
- defaultMessage: 'Error fetching fields for index pattern {title} (ID: {id})',
- values: {
- id: this.id,
- title: this.title,
- },
- }),
- });
- })
- );
- }
}
diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts
index d3b3a73a4b50f5..b22437ebbdb4e4 100644
--- a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts
+++ b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts
@@ -18,7 +18,7 @@
*/
import { defaults } from 'lodash';
-import { IndexPatternsService } from '.';
+import { IndexPatternsService, IndexPattern } from '.';
import { fieldFormatsMock } from '../../field_formats/mocks';
import { stubbedSavedObjectIndexPattern } from '../../../../../fixtures/stubbed_saved_object_index_pattern';
import { UiSettingsCommon, SavedObjectsClientCommon, SavedObject } from '../types';
@@ -31,7 +31,6 @@ const createFieldsFetcher = jest.fn().mockImplementation(() => ({
}));
const fieldFormats = fieldFormatsMock;
-
let object: any = {};
function setDocsourcePayload(id: string | null, providedPayload: any) {
@@ -43,16 +42,18 @@ describe('IndexPatterns', () => {
let savedObjectsClient: SavedObjectsClientCommon;
beforeEach(() => {
+ const indexPatternObj = { id: 'id', version: 'a', attributes: { title: 'title' } };
savedObjectsClient = {} as SavedObjectsClientCommon;
savedObjectsClient.find = jest.fn(
- () =>
- Promise.resolve([{ id: 'id', attributes: { title: 'title' } }]) as Promise<
- Array>
- >
+ () => Promise.resolve([indexPatternObj]) as Promise>>
);
savedObjectsClient.delete = jest.fn(() => Promise.resolve({}) as Promise);
- savedObjectsClient.get = jest.fn().mockImplementation(() => object);
savedObjectsClient.create = jest.fn();
+ savedObjectsClient.get = jest.fn().mockImplementation(async (type, id) => ({
+ id: object.id,
+ version: object.version,
+ attributes: object.attributes,
+ }));
savedObjectsClient.update = jest
.fn()
.mockImplementation(async (type, id, body, { version }) => {
@@ -141,30 +142,73 @@ describe('IndexPatterns', () => {
});
// Create a normal index patterns
- const pattern = await indexPatterns.make('foo');
+ const pattern = await indexPatterns.get('foo');
expect(pattern.version).toBe('fooa');
+ indexPatterns.clearCache();
// Create the same one - we're going to handle concurrency
- const samePattern = await indexPatterns.make('foo');
+ const samePattern = await indexPatterns.get('foo');
expect(samePattern.version).toBe('fooaa');
// This will conflict because samePattern did a save (from refreshFields)
// but the resave should work fine
pattern.title = 'foo2';
- await indexPatterns.save(pattern);
+ await indexPatterns.updateSavedObject(pattern);
// This should not be able to recover
samePattern.title = 'foo3';
let result;
try {
- await indexPatterns.save(samePattern);
+ await indexPatterns.updateSavedObject(samePattern);
} catch (err) {
result = err;
}
expect(result.res.status).toBe(409);
});
+
+ test('create', async () => {
+ const title = 'kibana-*';
+ indexPatterns.refreshFields = jest.fn();
+
+ const indexPattern = await indexPatterns.create({ title }, true);
+ expect(indexPattern).toBeInstanceOf(IndexPattern);
+ expect(indexPattern.title).toBe(title);
+ expect(indexPatterns.refreshFields).not.toBeCalled();
+
+ await indexPatterns.create({ title });
+ expect(indexPatterns.refreshFields).toBeCalled();
+ });
+
+ test('createAndSave', async () => {
+ const title = 'kibana-*';
+ indexPatterns.createSavedObject = jest.fn();
+ indexPatterns.setDefault = jest.fn();
+ await indexPatterns.createAndSave({ title });
+ expect(indexPatterns.createSavedObject).toBeCalled();
+ expect(indexPatterns.setDefault).toBeCalled();
+ });
+
+ test('savedObjectToSpec', () => {
+ const savedObject = {
+ id: 'id',
+ version: 'version',
+ attributes: {
+ title: 'kibana-*',
+ timeFieldName: '@timestamp',
+ fields: '[]',
+ sourceFilters: '[{"value":"item1"},{"value":"item2"}]',
+ fieldFormatMap: '{"field":{}}',
+ typeMeta: '{}',
+ type: '',
+ },
+ type: 'index-pattern',
+ references: [],
+ };
+
+ expect(indexPatterns.savedObjectToSpec(savedObject)).toMatchSnapshot();
+ });
});
diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts
index 47484f8ec75bbe..c56954ba6a29b3 100644
--- a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts
+++ b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts
@@ -33,9 +33,17 @@ import {
IIndexPatternsApiClient,
GetFieldsOptions,
IndexPatternSpec,
+ IndexPatternAttributes,
+ FieldSpec,
+ FieldFormatMap,
+ IndexPatternFieldMap,
} from '../types';
import { FieldFormatsStartCommon } from '../../field_formats';
import { UI_SETTINGS, SavedObject } from '../../../common';
+import { SavedObjectNotFound } from '../../../../kibana_utils/common';
+import { IndexPatternMissingIndices } from '../lib';
+import { findByTitle } from '../utils';
+import { DuplicateIndexPatternError } from '../errors';
const indexPatternCache = createIndexPatternCache();
const MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS = 3;
@@ -86,6 +94,9 @@ export class IndexPatternsService {
);
}
+ /**
+ * Refresh cache of index pattern ids and titles
+ */
private async refreshSavedObjectsCache() {
this.savedObjectsCache = await this.savedObjectsClient.find({
type: 'index-pattern',
@@ -94,6 +105,10 @@ export class IndexPatternsService {
});
}
+ /**
+ * Get list of index pattern ids
+ * @param refresh Force refresh of index pattern list
+ */
getIds = async (refresh: boolean = false) => {
if (!this.savedObjectsCache || refresh) {
await this.refreshSavedObjectsCache();
@@ -104,6 +119,10 @@ export class IndexPatternsService {
return this.savedObjectsCache.map((obj) => obj?.id);
};
+ /**
+ * Get list of index pattern titles
+ * @param refresh Force refresh of index pattern list
+ */
getTitles = async (refresh: boolean = false): Promise => {
if (!this.savedObjectsCache || refresh) {
await this.refreshSavedObjectsCache();
@@ -114,14 +133,10 @@ export class IndexPatternsService {
return this.savedObjectsCache.map((obj) => obj?.attributes?.title);
};
- getFieldsForTimePattern = (options: GetFieldsOptions = {}) => {
- return this.apiClient.getFieldsForTimePattern(options);
- };
-
- getFieldsForWildcard = (options: GetFieldsOptions = {}) => {
- return this.apiClient.getFieldsForWildcard(options);
- };
-
+ /**
+ * Clear index pattern list cache
+ * @param id optionally clear a single id
+ */
clearCache = (id?: string) => {
this.savedObjectsCache = null;
if (id) {
@@ -130,6 +145,7 @@ export class IndexPatternsService {
indexPatternCache.clearAll();
}
};
+
getCache = async () => {
if (!this.savedObjectsCache) {
await this.refreshSavedObjectsCache();
@@ -137,6 +153,9 @@ export class IndexPatternsService {
return this.savedObjectsCache;
};
+ /**
+ * Get default index pattern
+ */
getDefault = async () => {
const defaultIndexPatternId = await this.config.get('defaultIndex');
if (defaultIndexPatternId) {
@@ -146,47 +165,350 @@ export class IndexPatternsService {
return null;
};
+ /**
+ * Optionally set default index pattern, unless force = true
+ * @param id
+ * @param force
+ */
+ setDefault = async (id: string, force = false) => {
+ if (force || !this.config.get('defaultIndex')) {
+ await this.config.set('defaultIndex', id);
+ }
+ };
+
+ private isFieldRefreshRequired(specs?: IndexPatternFieldMap): boolean {
+ if (!specs) {
+ return true;
+ }
+
+ return Object.values(specs).every((spec) => {
+ // See https://github.com/elastic/kibana/pull/8421
+ const hasFieldCaps = 'aggregatable' in spec && 'searchable' in spec;
+
+ // See https://github.com/elastic/kibana/pull/11969
+ const hasDocValuesFlag = 'readFromDocValues' in spec;
+
+ return !hasFieldCaps || !hasDocValuesFlag;
+ });
+ }
+
+ /**
+ * Get field list by providing { pattern }
+ * @param options
+ */
+ getFieldsForWildcard = async (options: GetFieldsOptions = {}) => {
+ const metaFields = await this.config.get(UI_SETTINGS.META_FIELDS);
+ return this.apiClient.getFieldsForWildcard({
+ pattern: options.pattern,
+ metaFields,
+ type: options.type,
+ params: options.params || {},
+ });
+ };
+
+ /**
+ * Get field list by providing an index patttern (or spec)
+ * @param options
+ */
+ getFieldsForIndexPattern = async (
+ indexPattern: IndexPattern | IndexPatternSpec,
+ options: GetFieldsOptions = {}
+ ) =>
+ this.getFieldsForWildcard({
+ pattern: indexPattern.title as string,
+ ...options,
+ type: indexPattern.type,
+ params: indexPattern.typeMeta && indexPattern.typeMeta.params,
+ });
+
+ /**
+ * Refresh field list for a given index pattern
+ * @param indexPattern
+ */
+ refreshFields = async (indexPattern: IndexPattern) => {
+ try {
+ const fields = await this.getFieldsForIndexPattern(indexPattern);
+ const scripted = indexPattern.getScriptedFields().map((field) => field.spec);
+ indexPattern.fields.replaceAll([...fields, ...scripted]);
+ } catch (err) {
+ if (err instanceof IndexPatternMissingIndices) {
+ this.onNotification({ title: (err as any).message, color: 'danger', iconType: 'alert' });
+ }
+
+ this.onError(err, {
+ title: i18n.translate('data.indexPatterns.fetchFieldErrorTitle', {
+ defaultMessage: 'Error fetching fields for index pattern {title} (ID: {id})',
+ values: { id: indexPattern.id, title: indexPattern.title },
+ }),
+ });
+ }
+ };
+
+ /**
+ * Refreshes a field list from a spec before an index pattern instance is created
+ * @param fields
+ * @param id
+ * @param title
+ * @param options
+ */
+ private refreshFieldSpecMap = async (
+ fields: IndexPatternFieldMap,
+ id: string,
+ title: string,
+ options: GetFieldsOptions
+ ) => {
+ const scriptdFields = Object.values(fields).filter((field) => field.scripted);
+ try {
+ const newFields = await this.getFieldsForWildcard(options);
+ return this.fieldArrayToMap([...newFields, ...scriptdFields]);
+ } catch (err) {
+ if (err instanceof IndexPatternMissingIndices) {
+ this.onNotification({ title: (err as any).message, color: 'danger', iconType: 'alert' });
+ return {};
+ }
+
+ this.onError(err, {
+ title: i18n.translate('data.indexPatterns.fetchFieldErrorTitle', {
+ defaultMessage: 'Error fetching fields for index pattern {title} (ID: {id})',
+ values: { id, title },
+ }),
+ });
+ }
+ return fields;
+ };
+
+ /**
+ * Applies a set of formats to a set of fields
+ * @param fieldSpecs
+ * @param fieldFormatMap
+ */
+ private addFormatsToFields = (fieldSpecs: FieldSpec[], fieldFormatMap: FieldFormatMap) => {
+ Object.entries(fieldFormatMap).forEach(([fieldName, value]) => {
+ const field = fieldSpecs.find((fld: FieldSpec) => fld.name === fieldName);
+ if (field) {
+ field.format = value;
+ }
+ });
+ };
+
+ /**
+ * Converts field array to map
+ * @param fields
+ */
+ fieldArrayToMap = (fields: FieldSpec[]) =>
+ fields.reduce((collector, field) => {
+ collector[field.name] = field;
+ return collector;
+ }, {});
+
+ /**
+ * Converts index pattern saved object to index pattern spec
+ * @param savedObject
+ */
+
+ savedObjectToSpec = (savedObject: SavedObject): IndexPatternSpec => {
+ const {
+ id,
+ version,
+ attributes: {
+ title,
+ timeFieldName,
+ intervalName,
+ fields,
+ sourceFilters,
+ fieldFormatMap,
+ typeMeta,
+ type,
+ },
+ } = savedObject;
+
+ const parsedSourceFilters = sourceFilters ? JSON.parse(sourceFilters) : undefined;
+ const parsedTypeMeta = typeMeta ? JSON.parse(typeMeta) : undefined;
+ const parsedFieldFormatMap = fieldFormatMap ? JSON.parse(fieldFormatMap) : {};
+ const parsedFields: FieldSpec[] = fields ? JSON.parse(fields) : [];
+
+ this.addFormatsToFields(parsedFields, parsedFieldFormatMap);
+ return {
+ id,
+ version,
+ title,
+ intervalName,
+ timeFieldName,
+ sourceFilters: parsedSourceFilters,
+ fields: this.fieldArrayToMap(parsedFields),
+ typeMeta: parsedTypeMeta,
+ type,
+ };
+ };
+
+ /**
+ * Get an index pattern by id. Cache optimized
+ * @param id
+ */
+
get = async (id: string): Promise => {
const cache = indexPatternCache.get(id);
if (cache) {
return cache;
}
- const indexPattern = await this.make(id);
+ const savedObject = await this.savedObjectsClient.get(
+ savedObjectType,
+ id
+ );
+
+ if (!savedObject.version) {
+ throw new SavedObjectNotFound(savedObjectType, id, 'management/kibana/indexPatterns');
+ }
+
+ const spec = this.savedObjectToSpec(savedObject);
+ const { title, type, typeMeta } = spec;
+ const parsedFieldFormats: FieldFormatMap = savedObject.attributes.fieldFormatMap
+ ? JSON.parse(savedObject.attributes.fieldFormatMap)
+ : {};
+
+ const isFieldRefreshRequired = this.isFieldRefreshRequired(spec.fields);
+ let isSaveRequired = isFieldRefreshRequired;
+ try {
+ spec.fields = isFieldRefreshRequired
+ ? await this.refreshFieldSpecMap(spec.fields || {}, id, spec.title as string, {
+ pattern: title,
+ metaFields: await this.config.get(UI_SETTINGS.META_FIELDS),
+ type,
+ params: typeMeta && typeMeta.params,
+ })
+ : spec.fields;
+ } catch (err) {
+ isSaveRequired = false;
+ if (err instanceof IndexPatternMissingIndices) {
+ this.onNotification({
+ title: (err as any).message,
+ color: 'danger',
+ iconType: 'alert',
+ });
+ } else {
+ this.onError(err, {
+ title: i18n.translate('data.indexPatterns.fetchFieldErrorTitle', {
+ defaultMessage: 'Error fetching fields for index pattern {title} (ID: {id})',
+ values: { id, title },
+ }),
+ });
+ }
+ }
+
+ Object.entries(parsedFieldFormats).forEach(([fieldName, value]) => {
+ const field = spec.fields?.[fieldName];
+ if (field) {
+ field.format = value;
+ }
+ });
+
+ const indexPattern = await this.create(spec, true);
+ indexPatternCache.set(id, indexPattern);
+ if (isSaveRequired) {
+ try {
+ this.updateSavedObject(indexPattern);
+ } catch (err) {
+ this.onError(err, {
+ title: i18n.translate('data.indexPatterns.fetchFieldSaveErrorTitle', {
+ defaultMessage:
+ 'Error saving after fetching fields for index pattern {title} (ID: {id})',
+ values: {
+ id: indexPattern.id,
+ title: indexPattern.title,
+ },
+ }),
+ });
+ }
+ }
- return indexPatternCache.set(id, indexPattern);
+ indexPattern.resetOriginalSavedObjectBody();
+ return indexPattern;
};
- async specToIndexPattern(spec: IndexPatternSpec) {
+ /**
+ * Create a new index pattern instance
+ * @param spec
+ * @param skipFetchFields
+ */
+ async create(spec: IndexPatternSpec, skipFetchFields = false): Promise {
const shortDotsEnable = await this.config.get(UI_SETTINGS.SHORT_DOTS_ENABLE);
const metaFields = await this.config.get(UI_SETTINGS.META_FIELDS);
- const indexPattern = new IndexPattern(spec.id, {
+ const indexPattern = new IndexPattern({
+ spec,
savedObjectsClient: this.savedObjectsClient,
- apiClient: this.apiClient,
- patternCache: indexPatternCache,
fieldFormats: this.fieldFormats,
- indexPatternsService: this,
- onNotification: this.onNotification,
- onError: this.onError,
shortDotsEnable,
metaFields,
});
- indexPattern.initFromSpec(spec);
+ if (!skipFetchFields) {
+ await this.refreshFields(indexPattern);
+ }
+
+ return indexPattern;
+ }
+
+ /**
+ * Create a new index pattern and save it right away
+ * @param spec
+ * @param override Overwrite if existing index pattern exists
+ * @param skipFetchFields
+ */
+
+ async createAndSave(spec: IndexPatternSpec, override = false, skipFetchFields = false) {
+ const indexPattern = await this.create(spec, skipFetchFields);
+ await this.createSavedObject(indexPattern, override);
+ await this.setDefault(indexPattern.id as string);
return indexPattern;
}
- async save(indexPattern: IndexPattern, saveAttempts: number = 0): Promise {
+ /**
+ * Save a new index pattern
+ * @param indexPattern
+ * @param override Overwrite if existing index pattern exists
+ */
+
+ async createSavedObject(indexPattern: IndexPattern, override = false) {
+ const dupe = await findByTitle(this.savedObjectsClient, indexPattern.title);
+ if (dupe) {
+ if (override) {
+ await this.delete(dupe.id);
+ } else {
+ throw new DuplicateIndexPatternError(`Duplicate index pattern: ${indexPattern.title}`);
+ }
+ }
+
+ const body = indexPattern.getAsSavedObjectBody();
+ const response = await this.savedObjectsClient.create(savedObjectType, body, {
+ id: indexPattern.id,
+ });
+ indexPattern.id = response.id;
+ indexPatternCache.set(indexPattern.id, indexPattern);
+ return indexPattern;
+ }
+
+ /**
+ * Save existing index pattern. Will attempt to merge differences if there are conflicts
+ * @param indexPattern
+ * @param saveAttempts
+ */
+
+ async updateSavedObject(
+ indexPattern: IndexPattern,
+ saveAttempts: number = 0
+ ): Promise {
if (!indexPattern.id) return;
- const shortDotsEnable = await this.config.get(UI_SETTINGS.SHORT_DOTS_ENABLE);
- const metaFields = await this.config.get(UI_SETTINGS.META_FIELDS);
- const body = indexPattern.prepBody();
+ // get the list of attributes
+ const body = indexPattern.getAsSavedObjectBody();
+ const originalBody = indexPattern.getOriginalSavedObjectBody();
+ // get changed keys
const originalChangedKeys: string[] = [];
Object.entries(body).forEach(([key, value]) => {
- if (value !== indexPattern.originalBody[key]) {
+ if (value !== (originalBody as any)[key]) {
originalChangedKeys.push(key);
}
});
@@ -197,92 +519,60 @@ export class IndexPatternsService {
indexPattern.id = resp.id;
indexPattern.version = resp.version;
})
- .catch((err) => {
+ .catch(async (err) => {
if (err?.res?.status === 409 && saveAttempts++ < MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS) {
- const samePattern = new IndexPattern(indexPattern.id, {
- savedObjectsClient: this.savedObjectsClient,
- apiClient: this.apiClient,
- patternCache: indexPatternCache,
- fieldFormats: this.fieldFormats,
- indexPatternsService: this,
- onNotification: this.onNotification,
- onError: this.onError,
- shortDotsEnable,
- metaFields,
+ const samePattern = await this.get(indexPattern.id as string);
+ // What keys changed from now and what the server returned
+ const updatedBody = samePattern.getAsSavedObjectBody();
+
+ // Build a list of changed keys from the server response
+ // and ensure we ignore the key if the server response
+ // is the same as the original response (since that is expected
+ // if we made a change in that key)
+
+ const serverChangedKeys: string[] = [];
+ Object.entries(updatedBody).forEach(([key, value]) => {
+ if (value !== (body as any)[key] && value !== (originalBody as any)[key]) {
+ serverChangedKeys.push(key);
+ }
});
- return samePattern.init().then(() => {
- // What keys changed from now and what the server returned
- const updatedBody = samePattern.prepBody();
-
- // Build a list of changed keys from the server response
- // and ensure we ignore the key if the server response
- // is the same as the original response (since that is expected
- // if we made a change in that key)
-
- const serverChangedKeys: string[] = [];
- Object.entries(updatedBody).forEach(([key, value]) => {
- if (value !== (body as any)[key] && value !== indexPattern.originalBody[key]) {
- serverChangedKeys.push(key);
- }
- });
-
- let unresolvedCollision = false;
- for (const originalKey of originalChangedKeys) {
- for (const serverKey of serverChangedKeys) {
- if (originalKey === serverKey) {
- unresolvedCollision = true;
- break;
- }
+ let unresolvedCollision = false;
+ for (const originalKey of originalChangedKeys) {
+ for (const serverKey of serverChangedKeys) {
+ if (originalKey === serverKey) {
+ unresolvedCollision = true;
+ break;
}
}
+ }
- if (unresolvedCollision) {
- const title = i18n.translate('data.indexPatterns.unableWriteLabel', {
- defaultMessage:
- 'Unable to write index pattern! Refresh the page to get the most up to date changes for this index pattern.',
- });
-
- this.onNotification({ title, color: 'danger' });
- throw err;
- }
-
- // Set the updated response on this object
- serverChangedKeys.forEach((key) => {
- (indexPattern as any)[key] = (samePattern as any)[key];
+ if (unresolvedCollision) {
+ const title = i18n.translate('data.indexPatterns.unableWriteLabel', {
+ defaultMessage:
+ 'Unable to write index pattern! Refresh the page to get the most up to date changes for this index pattern.',
});
- indexPattern.version = samePattern.version;
- // Clear cache
- indexPatternCache.clear(indexPattern.id!);
+ this.onNotification({ title, color: 'danger' });
+ throw err;
+ }
- // Try the save again
- return this.save(indexPattern, saveAttempts);
+ // Set the updated response on this object
+ serverChangedKeys.forEach((key) => {
+ (indexPattern as any)[key] = (samePattern as any)[key];
});
+ indexPattern.version = samePattern.version;
+
+ // Clear cache
+ indexPatternCache.clear(indexPattern.id!);
+
+ // Try the save again
+ return this.updateSavedObject(indexPattern, saveAttempts);
}
throw err;
});
}
- async make(id?: string): Promise {
- const shortDotsEnable = await this.config.get(UI_SETTINGS.SHORT_DOTS_ENABLE);
- const metaFields = await this.config.get(UI_SETTINGS.META_FIELDS);
-
- const indexPattern = new IndexPattern(id, {
- savedObjectsClient: this.savedObjectsClient,
- apiClient: this.apiClient,
- patternCache: indexPatternCache,
- fieldFormats: this.fieldFormats,
- indexPatternsService: this,
- onNotification: this.onNotification,
- onError: this.onError,
- shortDotsEnable,
- metaFields,
- });
-
- return indexPattern.init();
- }
-
/**
* Deletes an index pattern from .kibana index
* @param indexPatternId: Id of kibana Index Pattern to delete
diff --git a/src/plugins/data/common/index_patterns/types.ts b/src/plugins/data/common/index_patterns/types.ts
index 2264c5e3aaf564..cb0c3aa0de38ef 100644
--- a/src/plugins/data/common/index_patterns/types.ts
+++ b/src/plugins/data/common/index_patterns/types.ts
@@ -24,6 +24,8 @@ import { IFieldType } from './fields';
import { SerializedFieldFormat } from '../../../expressions/common';
import { KBN_FIELD_TYPES, IndexPatternField, FieldFormat } from '..';
+export type FieldFormatMap = Record;
+
export interface IIndexPattern {
fields: IFieldType[];
title: string;
@@ -31,22 +33,12 @@ export interface IIndexPattern {
type?: string;
timeFieldName?: string;
getTimeField?(): IFieldType | undefined;
+ fieldFormatMap?: Record | undefined>;
getFormatterForField?: (
field: IndexPatternField | IndexPatternField['spec'] | IFieldType
) => FieldFormat;
- fieldFormatMap?: Record<
- string,
- {
- id: string;
- params: unknown;
- }
- >;
}
-/**
- * Use data plugin interface instead
- * @deprecated
- */
export interface IndexPatternAttributes {
type: string;
fields: string;
@@ -168,15 +160,18 @@ export interface FieldSpec {
indexed?: boolean;
}
+export type IndexPatternFieldMap = Record;
+
export interface IndexPatternSpec {
id?: string;
version?: string;
-
- title: string;
+ title?: string;
+ intervalName?: string;
timeFieldName?: string;
sourceFilters?: SourceFilter[];
- fields?: FieldSpec[];
+ fields?: IndexPatternFieldMap;
typeMeta?: TypeMeta;
+ type?: string;
}
export interface SourceFilter {
diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts
index 5038af94093163..42c8864bb0bc02 100644
--- a/src/plugins/data/public/index.ts
+++ b/src/plugins/data/public/index.ts
@@ -230,6 +230,8 @@ import {
formatHitProvider,
} from './index_patterns';
+export type { IndexPatternsService } from './index_patterns';
+
// Index patterns namespace:
export const indexPatterns = {
ILLEGAL_CHARACTERS_KEY,
@@ -262,9 +264,12 @@ export {
UI_SETTINGS,
TypeMeta as IndexPatternTypeMeta,
AggregationRestrictions as IndexPatternAggRestrictions,
+ IndexPatternSpec,
fieldList,
} from '../common';
+export { DuplicateIndexPatternError } from '../common/index_patterns/errors';
+
/*
* Autocomplete query suggestions:
*/
diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md
index b2f1cc19d0f907..91f7239401255c 100644
--- a/src/plugins/data/public/public.api.md
+++ b/src/plugins/data/public/public.api.md
@@ -454,6 +454,13 @@ export interface DataPublicPluginStartUi {
SearchBar: React.ComponentType;
}
+// Warning: (ae-missing-release-tag) "DuplicateIndexPatternError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
+//
+// @public (undocumented)
+export class DuplicateIndexPatternError extends Error {
+ constructor(message: string);
+}
+
// @public (undocumented)
export enum ES_FIELD_TYPES {
// (undocumented)
@@ -1004,11 +1011,10 @@ export interface IFieldType {
//
// @public (undocumented)
export interface IIndexPattern {
+ // Warning: (ae-forgotten-export) The symbol "SerializedFieldFormat" needs to be exported by the entry point index.d.ts
+ //
// (undocumented)
- fieldFormatMap?: Record;
+ fieldFormatMap?: Record | undefined>;
// (undocumented)
fields: IFieldType[];
// (undocumented)
@@ -1043,10 +1049,12 @@ export interface IIndexPatternFieldList extends Array {
removeAll(): void;
// (undocumented)
replaceAll(specs: FieldSpec[]): void;
+ // Warning: (ae-forgotten-export) The symbol "IndexPatternFieldMap" needs to be exported by the entry point index.d.ts
+ //
// (undocumented)
toSpec(options?: {
getFormatterForField?: IndexPattern['getFormatterForField'];
- }): FieldSpec[];
+ }): IndexPatternFieldMap;
// (undocumented)
update(field: FieldSpec): void;
}
@@ -1079,27 +1087,23 @@ export type IMetricAggType = MetricAggType;
// @public (undocumented)
export class IndexPattern implements IIndexPattern {
// Warning: (ae-forgotten-export) The symbol "IndexPatternDeps" needs to be exported by the entry point index.d.ts
- constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps);
- // (undocumented)
- addScriptedField(name: string, script: string, fieldType: string | undefined, lang: string): Promise;
- // (undocumented)
- create(allowOverride?: boolean): Promise;
- // (undocumented)
- _fetchFields(): Promise;
+ constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps);
+ addScriptedField(name: string, script: string, fieldType?: string, lang?: string): Promise;
// (undocumented)
- fieldFormatMap: any;
+ fieldFormatMap: Record;
// (undocumented)
fields: IIndexPatternFieldList & {
- toSpec: () => FieldSpec[];
+ toSpec: () => IndexPatternFieldMap;
};
// (undocumented)
- fieldsFetcher: any;
+ flattenHit: (hit: Record, deep?: boolean) => Record;
// (undocumented)
- flattenHit: any;
+ formatField: FormatFieldFn;
// (undocumented)
- formatField: any;
- // (undocumented)
- formatHit: any;
+ formatHit: {
+ (hit: Record, type?: string): any;
+ formatField: FormatFieldFn;
+ };
// (undocumented)
getAggregationRestrictions(): Record> | undefined;
+ getAsSavedObjectBody(): {
+ title: string;
+ timeFieldName: string | undefined;
+ intervalName: string | undefined;
+ sourceFilters: string | undefined;
+ fields: string | undefined;
+ fieldFormatMap: string | undefined;
+ type: string | undefined;
+ typeMeta: string | undefined;
+ };
// (undocumented)
getComputedFields(): {
storedFields: string[];
@@ -1120,13 +1134,21 @@ export class IndexPattern implements IIndexPattern {
};
// (undocumented)
getFieldByName(name: string): IndexPatternField | undefined;
- // (undocumented)
getFormatterForField(field: IndexPatternField | IndexPatternField['spec'] | IFieldType): FieldFormat;
// (undocumented)
getNonScriptedFields(): IndexPatternField[];
+ getOriginalSavedObjectBody: () => {
+ title?: string | undefined;
+ timeFieldName?: string | undefined;
+ intervalName?: string | undefined;
+ fields?: string | undefined;
+ sourceFilters?: string | undefined;
+ fieldFormatMap?: string | undefined;
+ typeMeta?: string | undefined;
+ type?: string | undefined;
+ };
// (undocumented)
getScriptedFields(): IndexPatternField[];
- // (undocumented)
getSourceFiltering(): {
excludes: any[];
};
@@ -1135,12 +1157,6 @@ export class IndexPattern implements IIndexPattern {
// (undocumented)
id?: string;
// (undocumented)
- init(): Promise;
- // Warning: (ae-forgotten-export) The symbol "IndexPatternSpec" needs to be exported by the entry point index.d.ts
- //
- // (undocumented)
- initFromSpec(spec: IndexPatternSpec): this;
- // (undocumented)
intervalName: string | undefined;
// (undocumented)
isTimeBased(): boolean;
@@ -1149,30 +1165,11 @@ export class IndexPattern implements IIndexPattern {
// (undocumented)
isTimeNanosBased(): boolean;
// (undocumented)
- isWildcard(): boolean;
- // (undocumented)
metaFields: string[];
// (undocumented)
- originalBody: {
- [key: string]: any;
- };
- // (undocumented)
popularizeField(fieldName: string, unit?: number): Promise;
- // (undocumented)
- prepBody(): {
- title: string;
- timeFieldName: string | undefined;
- intervalName: string | undefined;
- sourceFilters: string | undefined;
- fields: string | undefined;
- fieldFormatMap: string | undefined;
- type: string | undefined;
- typeMeta: string | undefined;
- };
- // (undocumented)
- refreshFields(): Promise;
- // (undocumented)
removeScriptedField(fieldName: string): void;
+ resetOriginalSavedObjectBody: () => void;
// Warning: (ae-forgotten-export) The symbol "SourceFilter" needs to be exported by the entry point index.d.ts
//
// (undocumented)
@@ -1205,7 +1202,7 @@ export type IndexPatternAggRestrictions = Record | undefined;
set conflictDescriptions(conflictDescriptions: Record | undefined);
- // (undocumented)
get count(): number;
set count(count: number);
// (undocumented)
@@ -1244,14 +1239,12 @@ export class IndexPatternField implements IFieldType {
get esTypes(): string[] | undefined;
// (undocumented)
get filterable(): boolean;
- // (undocumented)
get lang(): string | undefined;
set lang(lang: string | undefined);
// (undocumented)
get name(): string;
// (undocumented)
get readFromDocValues(): boolean;
- // (undocumented)
get script(): string | undefined;
set script(script: string | undefined);
// (undocumented)
@@ -1306,7 +1299,6 @@ export const indexPatterns: {
formatHitProvider: typeof formatHitProvider;
};
-// Warning: (ae-forgotten-export) The symbol "IndexPatternsService" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "IndexPatternsContract" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
@@ -1339,6 +1331,63 @@ export class IndexPatternSelect extends Component {
UNSAFE_componentWillReceiveProps(nextProps: IndexPatternSelectProps): void;
}
+// Warning: (ae-missing-release-tag) "IndexPatternSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
+//
+// @public (undocumented)
+export interface IndexPatternSpec {
+ // (undocumented)
+ fields?: IndexPatternFieldMap;
+ // (undocumented)
+ id?: string;
+ // (undocumented)
+ intervalName?: string;
+ // (undocumented)
+ sourceFilters?: SourceFilter[];
+ // (undocumented)
+ timeFieldName?: string;
+ // (undocumented)
+ title?: string;
+ // (undocumented)
+ type?: string;
+ // (undocumented)
+ typeMeta?: IndexPatternTypeMeta;
+ // (undocumented)
+ version?: string;
+}
+
+// Warning: (ae-missing-release-tag) "IndexPatternsService" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
+//
+// @public (undocumented)
+export class IndexPatternsService {
+ // Warning: (ae-forgotten-export) The symbol "IndexPatternsServiceDeps" needs to be exported by the entry point index.d.ts
+ constructor({ uiSettings, savedObjectsClient, apiClient, fieldFormats, onNotification, onError, onRedirectNoIndexPattern, }: IndexPatternsServiceDeps);
+ clearCache: (id?: string | undefined) => void;
+ create(spec: IndexPatternSpec, skipFetchFields?: boolean): Promise;
+ createAndSave(spec: IndexPatternSpec, override?: boolean, skipFetchFields?: boolean): Promise;
+ createSavedObject(indexPattern: IndexPattern, override?: boolean): Promise;
+ delete(indexPatternId: string): Promise<{}>;
+ // Warning: (ae-forgotten-export) The symbol "EnsureDefaultIndexPattern" needs to be exported by the entry point index.d.ts
+ //
+ // (undocumented)
+ ensureDefaultIndexPattern: EnsureDefaultIndexPattern;
+ fieldArrayToMap: (fields: FieldSpec[]) => Record;
+ get: (id: string) => Promise;
+ // Warning: (ae-forgotten-export) The symbol "IndexPatternSavedObjectAttrs" needs to be exported by the entry point index.d.ts
+ //
+ // (undocumented)
+ getCache: () => Promise[] | null | undefined>;
+ getDefault: () => Promise;
+ getFieldsForIndexPattern: (indexPattern: IndexPattern | IndexPatternSpec, options?: GetFieldsOptions) => Promise;
+ // Warning: (ae-forgotten-export) The symbol "GetFieldsOptions" needs to be exported by the entry point index.d.ts
+ getFieldsForWildcard: (options?: GetFieldsOptions) => Promise;
+ getIds: (refresh?: boolean) => Promise;
+ getTitles: (refresh?: boolean) => Promise;
+ refreshFields: (indexPattern: IndexPattern) => Promise;
+ savedObjectToSpec: (savedObject: SavedObject) => IndexPatternSpec;
+ setDefault: (id: string, force?: boolean) => Promise;
+ updateSavedObject(indexPattern: IndexPattern, saveAttempts?: number): Promise;
+}
+
// Warning: (ae-missing-release-tag) "TypeMeta" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
@@ -2172,6 +2221,7 @@ export const UI_SETTINGS: {
// src/plugins/data/common/es_query/filters/meta_filter.ts:54:3 - (ae-forgotten-export) The symbol "FilterMeta" needs to be exported by the entry point index.d.ts
// src/plugins/data/common/es_query/filters/phrase_filter.ts:33:3 - (ae-forgotten-export) The symbol "PhraseFilterMeta" needs to be exported by the entry point index.d.ts
// src/plugins/data/common/es_query/filters/phrases_filter.ts:31:3 - (ae-forgotten-export) The symbol "PhrasesFilterMeta" needs to be exported by the entry point index.d.ts
+// src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts:70:5 - (ae-forgotten-export) The symbol "FormatFieldFn" needs to be exported by the entry point index.d.ts
// src/plugins/data/common/search/aggs/types.ts:98:51 - (ae-forgotten-export) The symbol "AggTypesRegistryStart" needs to be exported by the entry point index.d.ts
// src/plugins/data/public/field_formats/field_formats_service.ts:67:3 - (ae-forgotten-export) The symbol "FormatFactory" needs to be exported by the entry point index.d.ts
// src/plugins/data/public/index.ts:66:23 - (ae-forgotten-export) The symbol "FilterLabel" needs to be exported by the entry point index.d.ts
@@ -2200,27 +2250,27 @@ export const UI_SETTINGS: {
// src/plugins/data/public/index.ts:178:26 - (ae-forgotten-export) The symbol "UrlFormat" needs to be exported by the entry point index.d.ts
// src/plugins/data/public/index.ts:178:26 - (ae-forgotten-export) The symbol "StringFormat" needs to be exported by the entry point index.d.ts
// src/plugins/data/public/index.ts:178:26 - (ae-forgotten-export) The symbol "TruncateFormat" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "isFilterable" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "isNestedField" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "validateIndexPattern" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "getFromSavedObject" needs to be exported by the entry point index.d.ts
-// 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 "formatHitProvider" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:380:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:380:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:380:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:380:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:382:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:383:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:392:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:393:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:394:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:395:1 - (ae-forgotten-export) The symbol "isDateHistogramBucketAggConfig" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:399:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:400:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:403:1 - (ae-forgotten-export) The symbol "parseInterval" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:404:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts
-// src/plugins/data/public/index.ts:407:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:236:27 - (ae-forgotten-export) The symbol "isFilterable" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:236:27 - (ae-forgotten-export) The symbol "isNestedField" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:236:27 - (ae-forgotten-export) The symbol "validateIndexPattern" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:236:27 - (ae-forgotten-export) The symbol "getFromSavedObject" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:236:27 - (ae-forgotten-export) The symbol "flattenHitWrapper" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:236:27 - (ae-forgotten-export) The symbol "formatHitProvider" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:385:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:385:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:385:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:385:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:387:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:388:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:397:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:398:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:399:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:400:1 - (ae-forgotten-export) The symbol "isDateHistogramBucketAggConfig" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:404:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:405:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:408:1 - (ae-forgotten-export) The symbol "parseInterval" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:409:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts
+// src/plugins/data/public/index.ts:412: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:45:5 - (ae-forgotten-export) The symbol "FilterStateStore" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts
index 9be8ef1b53423d..43080cc5a5989f 100644
--- a/src/plugins/data/server/index.ts
+++ b/src/plugins/data/server/index.ts
@@ -290,3 +290,5 @@ export const config: PluginConfigDescriptor = {
},
schema: configSchema,
};
+
+export type { IndexPatternsService } from './index_patterns';
diff --git a/src/plugins/data/server/server.api.md b/src/plugins/data/server/server.api.md
index 05b99c754edf7f..6d4112543ce0e2 100644
--- a/src/plugins/data/server/server.api.md
+++ b/src/plugins/data/server/server.api.md
@@ -36,6 +36,7 @@ import { ConfigDeprecationProvider } from '@kbn/config';
import { CoreSetup } from 'src/core/server';
import { CoreSetup as CoreSetup_2 } from 'kibana/server';
import { CoreStart } from 'src/core/server';
+import { CoreStart as CoreStart_2 } from 'kibana/server';
import { CountParams } from 'elasticsearch';
import { CreateDocumentParams } from 'elasticsearch';
import { DeleteDocumentByQueryParams } from 'elasticsearch';
@@ -126,6 +127,7 @@ import { PackageInfo } from '@kbn/config';
import { PathConfigType } from '@kbn/utils';
import { PingParams } from 'elasticsearch';
import { Plugin as Plugin_2 } from 'src/core/server';
+import { Plugin as Plugin_3 } from 'kibana/server';
import { PluginInitializerContext as PluginInitializerContext_2 } from 'src/core/server';
import { PutScriptParams } from 'elasticsearch';
import { PutTemplateParams } from 'elasticsearch';
@@ -628,29 +630,25 @@ export type IMetricAggType = MetricAggType;
// @public (undocumented)
export class IndexPattern implements IIndexPattern {
// Warning: (ae-forgotten-export) The symbol "IndexPatternDeps" needs to be exported by the entry point index.d.ts
- constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps);
+ constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps);
+ addScriptedField(name: string, script: string, fieldType?: string, lang?: string): Promise;
// (undocumented)
- addScriptedField(name: string, script: string, fieldType: string | undefined, lang: string): Promise;
- // (undocumented)
- create(allowOverride?: boolean): Promise;
- // (undocumented)
- _fetchFields(): Promise;
- // (undocumented)
- fieldFormatMap: any;
+ fieldFormatMap: Record;
// Warning: (ae-forgotten-export) The symbol "IIndexPatternFieldList" needs to be exported by the entry point index.d.ts
//
// (undocumented)
fields: IIndexPatternFieldList & {
- toSpec: () => FieldSpec[];
+ toSpec: () => IndexPatternFieldMap;
};
// (undocumented)
- fieldsFetcher: any;
- // (undocumented)
- flattenHit: any;
+ flattenHit: (hit: Record, deep?: boolean) => Record;
// (undocumented)
- formatField: any;
+ formatField: FormatFieldFn;
// (undocumented)
- formatHit: any;
+ formatHit: {
+ (hit: Record, type?: string): any;
+ formatField: FormatFieldFn;
+ };
// (undocumented)
getAggregationRestrictions(): Record> | undefined;
+ getAsSavedObjectBody(): {
+ title: string;
+ timeFieldName: string | undefined;
+ intervalName: string | undefined;
+ sourceFilters: string | undefined;
+ fields: string | undefined;
+ fieldFormatMap: string | undefined;
+ type: string | undefined;
+ typeMeta: string | undefined;
+ };
// (undocumented)
getComputedFields(): {
storedFields: string[];
@@ -671,15 +679,23 @@ export class IndexPattern implements IIndexPattern {
};
// (undocumented)
getFieldByName(name: string): IndexPatternField | undefined;
- // (undocumented)
getFormatterForField(field: IndexPatternField | IndexPatternField['spec'] | IFieldType): FieldFormat;
// Warning: (ae-forgotten-export) The symbol "IndexPatternField" needs to be exported by the entry point index.d.ts
//
// (undocumented)
getNonScriptedFields(): IndexPatternField[];
+ getOriginalSavedObjectBody: () => {
+ title?: string | undefined;
+ timeFieldName?: string | undefined;
+ intervalName?: string | undefined;
+ fields?: string | undefined;
+ sourceFilters?: string | undefined;
+ fieldFormatMap?: string | undefined;
+ typeMeta?: string | undefined;
+ type?: string | undefined;
+ };
// (undocumented)
getScriptedFields(): IndexPatternField[];
- // (undocumented)
getSourceFiltering(): {
excludes: any[];
};
@@ -688,12 +704,6 @@ export class IndexPattern implements IIndexPattern {
// (undocumented)
id?: string;
// (undocumented)
- init(): Promise;
- // Warning: (ae-forgotten-export) The symbol "IndexPatternSpec" needs to be exported by the entry point index.d.ts
- //
- // (undocumented)
- initFromSpec(spec: IndexPatternSpec): this;
- // (undocumented)
intervalName: string | undefined;
// (undocumented)
isTimeBased(): boolean;
@@ -702,30 +712,11 @@ export class IndexPattern implements IIndexPattern {
// (undocumented)
isTimeNanosBased(): boolean;
// (undocumented)
- isWildcard(): boolean;
- // (undocumented)
metaFields: string[];
// (undocumented)
- originalBody: {
- [key: string]: any;
- };
- // (undocumented)
popularizeField(fieldName: string, unit?: number): Promise;
- // (undocumented)
- prepBody(): {
- title: string;
- timeFieldName: string | undefined;
- intervalName: string | undefined;
- sourceFilters: string | undefined;
- fields: string | undefined;
- fieldFormatMap: string | undefined;
- type: string | undefined;
- typeMeta: string | undefined;
- };
- // (undocumented)
- refreshFields(): Promise;
- // (undocumented)
removeScriptedField(fieldName: string): void;
+ resetOriginalSavedObjectBody: () => void;
// Warning: (ae-forgotten-export) The symbol "SourceFilter" needs to be exported by the entry point index.d.ts
//
// (undocumented)
@@ -734,6 +725,8 @@ export class IndexPattern implements IIndexPattern {
timeFieldName: string | undefined;
// (undocumented)
title: string;
+ // Warning: (ae-forgotten-export) The symbol "IndexPatternSpec" needs to be exported by the entry point index.d.ts
+ //
// (undocumented)
toSpec(): IndexPatternSpec;
// (undocumented)
@@ -748,7 +741,7 @@ export class IndexPattern implements IIndexPattern {
// Warning: (ae-missing-release-tag) "IndexPatternAttributes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
-// @public @deprecated
+// @public (undocumented)
export interface IndexPatternAttributes {
// (undocumented)
fieldFormatMap?: string;
@@ -796,6 +789,21 @@ export class IndexPatternsFetcher {
}): Promise;
}
+// Warning: (ae-forgotten-export) The symbol "IndexPatternsServiceStart" needs to be exported by the entry point index.d.ts
+// Warning: (ae-missing-release-tag) "IndexPatternsService" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
+//
+// @public (undocumented)
+export class IndexPatternsService implements Plugin_3 {
+ // (undocumented)
+ setup(core: CoreSetup_2): void;
+ // Warning: (ae-forgotten-export) The symbol "IndexPatternsServiceStartDeps" needs to be exported by the entry point index.d.ts
+ //
+ // (undocumented)
+ start(core: CoreStart_2, { fieldFormats, logger }: IndexPatternsServiceStartDeps): {
+ indexPatternsServiceFactory: (kibanaRequest: KibanaRequest) => Promise;
+ };
+}
+
// Warning: (ae-missing-release-tag) "ISearchOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
@@ -995,7 +1003,7 @@ export class Plugin implements Plugin_2 Promise;
};
indexPatterns: {
- indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise;
+ indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise;
};
};
// (undocumented)
@@ -1029,8 +1037,6 @@ export interface PluginStart {
//
// (undocumented)
fieldFormats: FieldFormatsStart;
- // Warning: (ae-forgotten-export) The symbol "IndexPatternsServiceStart" needs to be exported by the entry point index.d.ts
- //
// (undocumented)
indexPatterns: IndexPatternsServiceStart;
// (undocumented)
@@ -1216,6 +1222,8 @@ export function usageProvider(core: CoreSetup_2): SearchUsage;
//
// src/plugins/data/common/es_query/filters/meta_filter.ts:53:3 - (ae-forgotten-export) The symbol "FilterState" needs to be exported by the entry point index.d.ts
// src/plugins/data/common/es_query/filters/meta_filter.ts:54:3 - (ae-forgotten-export) The symbol "FilterMeta" needs to be exported by the entry point index.d.ts
+// src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts:64:45 - (ae-forgotten-export) The symbol "IndexPatternFieldMap" needs to be exported by the entry point index.d.ts
+// src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts:70:5 - (ae-forgotten-export) The symbol "FormatFieldFn" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/index.ts:40:23 - (ae-forgotten-export) The symbol "buildCustomFilter" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/index.ts:40:23 - (ae-forgotten-export) The symbol "buildFilter" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/index.ts:71:21 - (ae-forgotten-export) The symbol "getEsQueryConfig" needs to be exported by the entry point index.d.ts
@@ -1250,6 +1258,7 @@ export function usageProvider(core: CoreSetup_2): SearchUsage;
// src/plugins/data/server/index.ts:245:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/index.ts:249:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/index.ts:252:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index_patterns/index_patterns_service.ts:50:14 - (ae-forgotten-export) The symbol "IndexPatternsService" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/plugin.ts:88:66 - (ae-forgotten-export) The symbol "DataEnhancements" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
diff --git a/src/plugins/discover/public/application/components/sidebar/lib/field_calculator.test.ts b/src/plugins/discover/public/application/components/sidebar/lib/field_calculator.test.ts
index 8746883a5d9680..dad208c8156755 100644
--- a/src/plugins/discover/public/application/components/sidebar/lib/field_calculator.test.ts
+++ b/src/plugins/discover/public/application/components/sidebar/lib/field_calculator.test.ts
@@ -142,7 +142,7 @@ describe('fieldCalculator', function () {
let hits: any;
beforeEach(function () {
- hits = _.each(_.cloneDeep(realHits), indexPattern.flattenHit);
+ hits = _.each(_.cloneDeep(realHits), (hit) => indexPattern.flattenHit(hit));
});
it('Should return an array of values for _source fields', function () {
diff --git a/src/plugins/discover/public/application/components/table/table.test.tsx b/src/plugins/discover/public/application/components/table/table.test.tsx
index 07e9e0a129a262..2874e2483275b7 100644
--- a/src/plugins/discover/public/application/components/table/table.test.tsx
+++ b/src/plugins/discover/public/application/components/table/table.test.tsx
@@ -22,7 +22,7 @@ import { findTestSubject } from '@elastic/eui/lib/test';
import { DocViewTable } from './table';
import { indexPatterns, IndexPattern } from '../../../../../data/public';
-const indexPattern = {
+const indexPattern = ({
fields: {
getAll: () => [
{
@@ -60,7 +60,7 @@ const indexPattern = {
metaFields: ['_index', '_score'],
flattenHit: undefined,
formatHit: jest.fn((hit) => hit._source),
-} as IndexPattern;
+} as unknown) as IndexPattern;
indexPattern.fields.getByName = (name: string) => {
return indexPattern.fields.getAll().find((field) => field.name === name);
diff --git a/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/__snapshots__/step_time_field.test.tsx.snap b/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/__snapshots__/step_time_field.test.tsx.snap
index 6cc92d20cfdcc1..544e3ba9831226 100644
--- a/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/__snapshots__/step_time_field.test.tsx.snap
+++ b/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/__snapshots__/step_time_field.test.tsx.snap
@@ -27,7 +27,7 @@ exports[`StepTimeField should render "Custom index pattern ID already exists" wh
/>
({
- fieldsFetcher: {
- fetchForWildcard: jest.fn().mockReturnValue(Promise.resolve(fields)),
- },
- }),
+ create: () => ({}),
+ getFieldsForWildcard: jest.fn().mockReturnValue(Promise.resolve(fields)),
} as any;
describe('StepTimeField', () => {
diff --git a/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx b/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx
index 5d33a08557fed5..cacabb6d7623ba 100644
--- a/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx
+++ b/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx
@@ -108,12 +108,12 @@ export class StepTimeField extends Component {
});
test('invokes the provided services when creating an index pattern', async () => {
- const create = jest.fn().mockImplementation(() => 'id');
+ const newIndexPatternAndSave = jest.fn().mockImplementation(async () => {
+ return indexPattern;
+ });
const clear = jest.fn();
mockContext.data.indexPatterns.clearCache = clear;
const indexPattern = ({
@@ -151,11 +153,10 @@ describe('CreateIndexPatternWizard', () => {
title: 'my-fake-index-pattern',
timeFieldName: 'timestamp',
fields: [],
- create,
+ _fetchFields: jest.fn(),
} as unknown) as IndexPattern;
- mockContext.data.indexPatterns.make = async () => {
- return indexPattern;
- };
+ mockContext.data.indexPatterns.createAndSave = newIndexPatternAndSave;
+ mockContext.data.indexPatterns.setDefault = jest.fn();
const component = createComponentWithContext(
CreateIndexPatternWizard,
@@ -165,9 +166,8 @@ describe('CreateIndexPatternWizard', () => {
component.setState({ indexPattern: 'foo' });
await (component.instance() as CreateIndexPatternWizard).createIndexPattern(undefined, 'id');
- expect(mockContext.uiSettings.get).toBeCalled();
- expect(create).toBeCalled();
- expect(clear).toBeCalledWith('id');
- expect(routeComponentPropsMock.history.push).toBeCalledWith(`/patterns/id`);
+ expect(newIndexPatternAndSave).toBeCalled();
+ expect(clear).toBeCalledWith('1');
+ expect(routeComponentPropsMock.history.push).toBeCalledWith(`/patterns/1`);
});
});
diff --git a/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/create_index_pattern_wizard.tsx b/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/create_index_pattern_wizard.tsx
index a789ebbfadbcee..aa97c21d766b97 100644
--- a/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/create_index_pattern_wizard.tsx
+++ b/src/plugins/index_pattern_management/public/components/create_index_pattern_wizard/create_index_pattern_wizard.tsx
@@ -40,6 +40,7 @@ import { ensureMinimumTime, getIndices } from './lib';
import { IndexPatternCreationConfig } from '../..';
import { IndexPatternManagmentContextValue } from '../../types';
import { MatchedItem } from './types';
+import { DuplicateIndexPatternError, IndexPattern } from '../../../../data/public';
interface CreateIndexPatternWizardState {
step: number;
@@ -156,50 +157,50 @@ export class CreateIndexPatternWizard extends Component<
};
createIndexPattern = async (timeFieldName: string | undefined, indexPatternId: string) => {
+ let emptyPattern: IndexPattern;
const { history } = this.props;
const { indexPattern } = this.state;
- const emptyPattern = await this.context.services.data.indexPatterns.make();
-
- Object.assign(emptyPattern, {
- id: indexPatternId,
- title: indexPattern,
- timeFieldName,
- ...this.state.indexPatternCreationType.getIndexPatternMappings(),
- });
-
- const createdId = await emptyPattern.create();
- if (!createdId) {
- const confirmMessage = i18n.translate(
- 'indexPatternManagement.indexPattern.titleExistsLabel',
- {
- values: { title: emptyPattern.title },
- defaultMessage: "An index pattern with the title '{title}' already exists.",
- }
- );
-
- const isConfirmed = await this.context.services.overlays.openConfirm(confirmMessage, {
- confirmButtonText: i18n.translate(
- 'indexPatternManagement.indexPattern.goToPatternButtonLabel',
+ try {
+ emptyPattern = await this.context.services.data.indexPatterns.createAndSave({
+ id: indexPatternId,
+ title: indexPattern,
+ timeFieldName,
+ ...this.state.indexPatternCreationType.getIndexPatternMappings(),
+ });
+ } catch (err) {
+ if (err instanceof DuplicateIndexPatternError) {
+ const confirmMessage = i18n.translate(
+ 'indexPatternManagement.indexPattern.titleExistsLabel',
{
- defaultMessage: 'Go to existing pattern',
+ values: { title: emptyPattern!.title },
+ defaultMessage: "An index pattern with the title '{title}' already exists.",
}
- ),
- });
+ );
+
+ const isConfirmed = await this.context.services.overlays.openConfirm(confirmMessage, {
+ confirmButtonText: i18n.translate(
+ 'indexPatternManagement.indexPattern.goToPatternButtonLabel',
+ {
+ defaultMessage: 'Go to existing pattern',
+ }
+ ),
+ });
- if (isConfirmed) {
- return history.push(`/patterns/${indexPatternId}`);
+ if (isConfirmed) {
+ return history.push(`/patterns/${indexPatternId}`);
+ } else {
+ return;
+ }
} else {
- return;
+ throw err;
}
}
- if (!this.context.services.uiSettings.get('defaultIndex')) {
- await this.context.services.uiSettings.set('defaultIndex', createdId);
- }
+ await this.context.services.data.indexPatterns.setDefault(emptyPattern.id as string);
- this.context.services.data.indexPatterns.clearCache(createdId);
- history.push(`/patterns/${createdId}`);
+ this.context.services.data.indexPatterns.clearCache(emptyPattern.id as string);
+ history.push(`/patterns/${emptyPattern.id}`);
};
goToTimeFieldStep = (indexPattern: string, selectedTimeField?: string) => {
diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx
index 13be9ca6c9c258..08edf42df60d8d 100644
--- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx
+++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx
@@ -96,7 +96,7 @@ export const CreateEditField = withRouter(
indexPattern={indexPattern}
spec={spec}
services={{
- saveIndexPattern: data.indexPatterns.save.bind(data.indexPatterns),
+ saveIndexPattern: data.indexPatterns.updateSavedObject.bind(data.indexPatterns),
redirectAway,
}}
/>
diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx
index d09836019b0bc3..67a20c428040f4 100644
--- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx
+++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx
@@ -121,7 +121,8 @@ export const EditIndexPattern = withRouter(
const refreshFields = () => {
overlays.openConfirm(confirmMessage, confirmModalOptionsRefresh).then(async (isConfirmed) => {
if (isConfirmed) {
- await indexPattern.refreshFields();
+ await data.indexPatterns.refreshFields(indexPattern);
+ await data.indexPatterns.updateSavedObject(indexPattern);
setFields(indexPattern.getNonScriptedFields());
}
});
@@ -236,7 +237,7 @@ export const EditIndexPattern = withRouter(
void;
painlessDocLink: string;
- saveIndexPattern: DataPublicPluginStart['indexPatterns']['save'];
+ saveIndexPattern: DataPublicPluginStart['indexPatterns']['updateSavedObject'];
}
interface ScriptedFieldsTableState {
diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx
index b00648f1247164..cd311db513c090 100644
--- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx
+++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx
@@ -30,7 +30,7 @@ export interface SourceFiltersTableProps {
filterFilter: string;
fieldWildcardMatcher: Function;
onAddOrRemoveFilter?: Function;
- saveIndexPattern: DataPublicPluginStart['indexPatterns']['save'];
+ saveIndexPattern: DataPublicPluginStart['indexPatterns']['updateSavedObject'];
}
export interface SourceFiltersTableState {
diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx
index 101399ef02b735..5c29dfafd3c07b 100644
--- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx
+++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx
@@ -49,7 +49,7 @@ import { getTabs, getPath, convertToEuiSelectOption } from './utils';
interface TabsProps extends Pick {
indexPattern: IndexPattern;
fields: IndexPatternField[];
- saveIndexPattern: DataPublicPluginStart['indexPatterns']['save'];
+ saveIndexPattern: DataPublicPluginStart['indexPatterns']['updateSavedObject'];
}
const searchAriaLabel = i18n.translate(
diff --git a/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx b/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx
index 2b484d1d837bf7..4fae91e78f8f9e 100644
--- a/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx
+++ b/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx
@@ -133,7 +133,7 @@ export interface FieldEdiorProps {
spec: IndexPatternField['spec'];
services: {
redirectAway: () => void;
- saveIndexPattern: DataPublicPluginStart['indexPatterns']['save'];
+ saveIndexPattern: DataPublicPluginStart['indexPatterns']['updateSavedObject'];
};
}
@@ -825,7 +825,7 @@ export class FieldEditor extends PureComponent {
+ .catch(() => {
if (oldField) {
indexPattern.fields.update(oldField);
} else {
diff --git a/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.ts b/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.ts
index 679ea5ffc23eea..eb95c213e680dc 100644
--- a/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.ts
+++ b/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.ts
@@ -24,10 +24,11 @@ import { SavedObject, SavedObjectLoader } from '../../../saved_objects/public';
import {
DataPublicPluginStart,
IndexPatternsContract,
- IIndexPattern,
injectSearchSourceReferences,
+ IndexPatternSpec,
} from '../../../data/public';
import { FailedImport } from './process_import_response';
+import { DuplicateIndexPatternError, IndexPattern } from '../../../data/public';
type SavedObjectsRawDoc = Record;
@@ -70,11 +71,10 @@ function addJsonFieldToIndexPattern(
async function importIndexPattern(
doc: SavedObjectsRawDoc,
indexPatterns: IndexPatternsContract,
- overwriteAll: boolean,
+ overwriteAll: boolean = false,
openConfirm: OverlayStart['openConfirm']
) {
// TODO: consolidate this is the code in create_index_pattern_wizard.js
- const emptyPattern = await indexPatterns.make();
const {
title,
timeFieldName,
@@ -84,50 +84,53 @@ async function importIndexPattern(
type,
typeMeta,
} = doc._source;
- const importedIndexPattern = {
+ const indexPatternSpec: IndexPatternSpec = {
id: doc._id,
title,
timeFieldName,
- } as IIndexPattern;
+ };
+ let emptyPattern: IndexPattern;
if (type) {
- importedIndexPattern.type = type;
+ indexPatternSpec.type = type;
}
- addJsonFieldToIndexPattern(importedIndexPattern, fields, 'fields', title);
- addJsonFieldToIndexPattern(importedIndexPattern, fieldFormatMap, 'fieldFormatMap', title);
- addJsonFieldToIndexPattern(importedIndexPattern, sourceFilters, 'sourceFilters', title);
- addJsonFieldToIndexPattern(importedIndexPattern, typeMeta, 'typeMeta', title);
- Object.assign(emptyPattern, importedIndexPattern);
-
- let newId = await emptyPattern.create(overwriteAll);
- if (!newId) {
- // We can override and we want to prompt for confirmation
- const isConfirmed = await openConfirm(
- i18n.translate('savedObjectsManagement.indexPattern.confirmOverwriteLabel', {
- values: { title },
- defaultMessage: "Are you sure you want to overwrite '{title}'?",
- }),
- {
- title: i18n.translate('savedObjectsManagement.indexPattern.confirmOverwriteTitle', {
- defaultMessage: 'Overwrite {type}?',
- values: { type },
+ addJsonFieldToIndexPattern(indexPatternSpec, fields, 'fields', title);
+ addJsonFieldToIndexPattern(indexPatternSpec, fieldFormatMap, 'fieldFormatMap', title);
+ addJsonFieldToIndexPattern(indexPatternSpec, sourceFilters, 'sourceFilters', title);
+ addJsonFieldToIndexPattern(indexPatternSpec, typeMeta, 'typeMeta', title);
+ try {
+ emptyPattern = await indexPatterns.createAndSave(indexPatternSpec, overwriteAll, true);
+ } catch (err) {
+ if (err instanceof DuplicateIndexPatternError) {
+ // We can override and we want to prompt for confirmation
+ const isConfirmed = await openConfirm(
+ i18n.translate('savedObjectsManagement.indexPattern.confirmOverwriteLabel', {
+ values: { title },
+ defaultMessage: "Are you sure you want to overwrite '{title}'?",
}),
- confirmButtonText: i18n.translate(
- 'savedObjectsManagement.indexPattern.confirmOverwriteButton',
- {
- defaultMessage: 'Overwrite',
- }
- ),
- }
- );
+ {
+ title: i18n.translate('savedObjectsManagement.indexPattern.confirmOverwriteTitle', {
+ defaultMessage: 'Overwrite {type}?',
+ values: { type },
+ }),
+ confirmButtonText: i18n.translate(
+ 'savedObjectsManagement.indexPattern.confirmOverwriteButton',
+ {
+ defaultMessage: 'Overwrite',
+ }
+ ),
+ }
+ );
- if (isConfirmed) {
- newId = (await emptyPattern.create(true)) as string;
- } else {
- return;
+ if (isConfirmed) {
+ emptyPattern = await indexPatterns.createAndSave(indexPatternSpec, true, true);
+ } else {
+ return;
+ }
}
}
- indexPatterns.clearCache(newId);
- return newId;
+
+ indexPatterns.clearCache(emptyPattern!.id);
+ return emptyPattern!.id;
}
async function importDocument(obj: SavedObject, doc: SavedObjectsRawDoc, overwriteAll: boolean) {
diff --git a/test/functional/apps/management/_index_pattern_popularity.js b/test/functional/apps/management/_index_pattern_popularity.js
index e2fcf50ef2c12c..530b8e1111a0c6 100644
--- a/test/functional/apps/management/_index_pattern_popularity.js
+++ b/test/functional/apps/management/_index_pattern_popularity.js
@@ -60,7 +60,7 @@ export default function ({ getService, getPageObjects }) {
// check that it is 0 (previous increase was cancelled
const popularity = await PageObjects.settings.getPopularity();
log.debug('popularity = ' + popularity);
- expect(popularity).to.be('');
+ expect(popularity).to.be('0');
});
it('can be saved', async function () {
diff --git a/test/plugin_functional/plugins/index_patterns/server/plugin.ts b/test/plugin_functional/plugins/index_patterns/server/plugin.ts
index 1c85f226623cb8..ddf9acb2599834 100644
--- a/test/plugin_functional/plugins/index_patterns/server/plugin.ts
+++ b/test/plugin_functional/plugins/index_patterns/server/plugin.ts
@@ -78,7 +78,7 @@ export class IndexPatternsTestPlugin
const id = (req.params as Record).id;
const service = await data.indexPatterns.indexPatternsServiceFactory(req);
const ip = await service.get(id);
- await service.save(ip);
+ await service.updateSavedObject(ip);
return res.ok();
}
);
diff --git a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts
index 2db9eb733f8057..7e736ea7a066f0 100644
--- a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts
+++ b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts
@@ -46,14 +46,14 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide
const body = await (
await supertest.get(`/api/index-patterns-plugin/get/${indexPatternId}`).expect(200)
).body;
- expect(body.fields.length > 0).to.equal(true);
+ expect(typeof body.id).to.equal('string');
});
it('can update index pattern', async () => {
- const body = await (
- await supertest.get(`/api/index-patterns-plugin/update/${indexPatternId}`).expect(200)
- ).body;
- expect(body).to.eql({});
+ const resp = await supertest
+ .get(`/api/index-patterns-plugin/update/${indexPatternId}`)
+ .expect(200);
+ expect(resp.body).to.eql({});
});
it('can delete index pattern', async () => {
diff --git a/x-pack/plugins/file_upload/public/util/indexing_service.js b/x-pack/plugins/file_upload/public/util/indexing_service.js
index eb22b0228b48a4..28cdb602455b52 100644
--- a/x-pack/plugins/file_upload/public/util/indexing_service.js
+++ b/x-pack/plugins/file_upload/public/util/indexing_service.js
@@ -189,19 +189,16 @@ async function chunkDataAndWriteToIndex({ id, index, data, mappings, settings })
}
export async function createIndexPattern(indexPatternName) {
- const indexPatterns = await indexPatternService.get();
try {
- Object.assign(indexPatterns, {
- id: '',
- title: indexPatternName,
- });
-
- await indexPatterns.create(true);
- const id = await getIndexPatternId(indexPatternName);
- const indexPattern = await indexPatternService.get(id);
+ const indexPattern = await indexPatternService.createAndSave(
+ {
+ title: indexPatternName,
+ },
+ true
+ );
return {
success: true,
- id,
+ id: indexPattern.id,
fields: indexPattern.fields,
};
} catch (error) {
@@ -212,18 +209,6 @@ export async function createIndexPattern(indexPatternName) {
}
}
-async function getIndexPatternId(name) {
- const savedObjectSearch = await savedObjectsClient.find({ type: 'index-pattern', perPage: 1000 });
- const indexPatternSavedObjects = savedObjectSearch.savedObjects;
-
- if (indexPatternSavedObjects) {
- const ip = indexPatternSavedObjects.find((i) => i.attributes.title === name);
- return ip !== undefined ? ip.id : undefined;
- } else {
- return undefined;
- }
-}
-
export const getExistingIndexNames = async () => {
const indexes = await httpService({
url: `/api/index_management/indices`,
diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/use_create_analytics_form.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/use_create_analytics_form.ts
index 161dde51df43e9..1c8bfafeb10ffa 100644
--- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/use_create_analytics_form.ts
+++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/use_create_analytics_form.ts
@@ -12,6 +12,7 @@ import { extractErrorMessage } from '../../../../../../../common/util/errors';
import { DeepReadonly } from '../../../../../../../common/types/common';
import { ml } from '../../../../../services/ml_api_service';
import { useMlContext } from '../../../../../contexts/ml';
+import { DuplicateIndexPatternError } from '../../../../../../../../../../src/plugins/data/public';
import {
useRefreshAnalyticsList,
@@ -130,19 +131,25 @@ export const useCreateAnalyticsForm = (): CreateAnalyticsFormProps => {
const indexPatternName = destinationIndex;
try {
- const newIndexPattern = await mlContext.indexPatterns.make();
+ await mlContext.indexPatterns.createAndSave(
+ {
+ title: indexPatternName,
+ },
+ false,
+ true
+ );
- Object.assign(newIndexPattern, {
- id: '',
- title: indexPatternName,
+ addRequestMessage({
+ message: i18n.translate(
+ 'xpack.ml.dataframe.analytics.create.createIndexPatternSuccessMessage',
+ {
+ defaultMessage: 'Kibana index pattern {indexPatternName} created.',
+ values: { indexPatternName },
+ }
+ ),
});
-
- const id = await newIndexPattern.create();
-
- await mlContext.indexPatterns.clearCache();
-
- // id returns false if there's a duplicate index pattern.
- if (id === false) {
+ } catch (e) {
+ if (e instanceof DuplicateIndexPatternError) {
addRequestMessage({
error: i18n.translate(
'xpack.ml.dataframe.analytics.create.duplicateIndexPatternErrorMessageError',
@@ -158,34 +165,17 @@ export const useCreateAnalyticsForm = (): CreateAnalyticsFormProps => {
}
),
});
- return;
- }
-
- // check if there's a default index pattern, if not,
- // set the newly created one as the default index pattern.
- if (!mlContext.kibanaConfig.get('defaultIndex')) {
- await mlContext.kibanaConfig.set('defaultIndex', id);
+ } else {
+ addRequestMessage({
+ error: extractErrorMessage(e),
+ message: i18n.translate(
+ 'xpack.ml.dataframe.analytics.create.createIndexPatternErrorMessage',
+ {
+ defaultMessage: 'An error occurred creating the Kibana index pattern:',
+ }
+ ),
+ });
}
-
- addRequestMessage({
- message: i18n.translate(
- 'xpack.ml.dataframe.analytics.create.createIndexPatternSuccessMessage',
- {
- defaultMessage: 'Kibana index pattern {indexPatternName} created.',
- values: { indexPatternName },
- }
- ),
- });
- } catch (e) {
- addRequestMessage({
- error: extractErrorMessage(e),
- message: i18n.translate(
- 'xpack.ml.dataframe.analytics.create.createIndexPatternErrorMessage',
- {
- defaultMessage: 'An error occurred creating the Kibana index pattern:',
- }
- ),
- });
}
};
diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js
index 08b61a5fa4eed2..2ad0c9b1ac2633 100644
--- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js
+++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js
@@ -215,7 +215,7 @@ export class ImportView extends Component {
// mappings, use this field as the time field.
// This relies on the field being populated by
// the ingest pipeline on ingest
- if (mappings[DEFAULT_TIME_FIELD] !== undefined) {
+ if (mappings.properties[DEFAULT_TIME_FIELD] !== undefined) {
timeFieldName = DEFAULT_TIME_FIELD;
this.setState({ timeFieldName });
}
@@ -615,34 +615,16 @@ export class ImportView extends Component {
}
}
-async function createKibanaIndexPattern(
- indexPatternName,
- indexPatterns,
- timeFieldName,
- kibanaConfig
-) {
+async function createKibanaIndexPattern(indexPatternName, indexPatterns, timeFieldName) {
try {
- const emptyPattern = await indexPatterns.make();
-
- Object.assign(emptyPattern, {
- id: '',
+ const emptyPattern = await indexPatterns.createAndSave({
title: indexPatternName,
timeFieldName,
});
- const id = await emptyPattern.create();
-
- await indexPatterns.clearCache();
-
- // check if there's a default index pattern, if not,
- // set the newly created one as the default index pattern.
- if (!kibanaConfig.get('defaultIndex')) {
- await kibanaConfig.set('defaultIndex', id);
- }
-
return {
success: true,
- id,
+ id: emptyPattern.id,
};
} catch (error) {
return {
diff --git a/x-pack/plugins/ml/public/application/util/index_utils.ts b/x-pack/plugins/ml/public/application/util/index_utils.ts
index 192552b25d15a1..42be3dd8252f95 100644
--- a/x-pack/plugins/ml/public/application/util/index_utils.ts
+++ b/x-pack/plugins/ml/public/application/util/index_utils.ts
@@ -104,7 +104,11 @@ export function getQueryFromSavedSearch(savedSearch: SavedSearchSavedObject) {
export function getIndexPatternById(id: string): Promise {
if (indexPatternsContract !== null) {
- return indexPatternsContract.get(id);
+ if (id) {
+ return indexPatternsContract.get(id);
+ } else {
+ return indexPatternsContract.create({});
+ }
} else {
throw new Error('Index patterns are not initialized!');
}
diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.tsx
index fa601bbaed91e2..418dcf78eda5ca 100644
--- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.tsx
+++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.tsx
@@ -43,6 +43,7 @@ import { useApi } from '../../../../hooks/use_api';
import { useAppDependencies, useToastNotifications } from '../../../../app_dependencies';
import { RedirectToTransformManagement } from '../../../../common/navigation';
import { ToastNotificationText } from '../../../../components';
+import { DuplicateIndexPatternError } from '../../../../../../../../../src/plugins/data/public';
export interface StepDetailsExposedState {
created: boolean;
@@ -83,7 +84,6 @@ export const StepCreateForm: FC = React.memo(
const deps = useAppDependencies();
const indexPatterns = deps.data.indexPatterns;
- const uiSettings = deps.uiSettings;
const toastNotifications = useToastNotifications();
useEffect(() => {
@@ -189,35 +189,14 @@ export const StepCreateForm: FC = React.memo(
const indexPatternName = transformConfig.dest.index;
try {
- const newIndexPattern = await indexPatterns.make();
-
- Object.assign(newIndexPattern, {
- id: '',
- title: indexPatternName,
- timeFieldName,
- });
- const id = await newIndexPattern.create();
-
- await indexPatterns.clearCache();
-
- // id returns false if there's a duplicate index pattern.
- if (id === false) {
- toastNotifications.addDanger(
- i18n.translate('xpack.transform.stepCreateForm.duplicateIndexPatternErrorMessage', {
- defaultMessage:
- 'An error occurred creating the Kibana index pattern {indexPatternName}: The index pattern already exists.',
- values: { indexPatternName },
- })
- );
- setLoading(false);
- return;
- }
-
- // check if there's a default index pattern, if not,
- // set the newly created one as the default index pattern.
- if (!uiSettings.get('defaultIndex')) {
- await uiSettings.set('defaultIndex', id);
- }
+ const newIndexPattern = await indexPatterns.createAndSave(
+ {
+ title: indexPatternName,
+ timeFieldName,
+ },
+ false,
+ true
+ );
toastNotifications.addSuccess(
i18n.translate('xpack.transform.stepCreateForm.createIndexPatternSuccessMessage', {
@@ -226,22 +205,32 @@ export const StepCreateForm: FC = React.memo(
})
);
- setIndexPatternId(id);
+ setIndexPatternId(newIndexPattern.id);
setLoading(false);
return true;
} catch (e) {
- toastNotifications.addDanger({
- title: i18n.translate('xpack.transform.stepCreateForm.createIndexPatternErrorMessage', {
- defaultMessage:
- 'An error occurred creating the Kibana index pattern {indexPatternName}:',
- values: { indexPatternName },
- }),
- text: toMountPoint(
-
- ),
- });
- setLoading(false);
- return false;
+ if (e instanceof DuplicateIndexPatternError) {
+ toastNotifications.addDanger(
+ i18n.translate('xpack.transform.stepCreateForm.duplicateIndexPatternErrorMessage', {
+ defaultMessage:
+ 'An error occurred creating the Kibana index pattern {indexPatternName}: The index pattern already exists.',
+ values: { indexPatternName },
+ })
+ );
+ } else {
+ toastNotifications.addDanger({
+ title: i18n.translate('xpack.transform.stepCreateForm.createIndexPatternErrorMessage', {
+ defaultMessage:
+ 'An error occurred creating the Kibana index pattern {indexPatternName}:',
+ values: { indexPatternName },
+ }),
+ text: toMountPoint(
+
+ ),
+ });
+ setLoading(false);
+ return false;
+ }
}
};
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index afcbf89ae80adb..890ba48eccf1f2 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -801,8 +801,6 @@
"data.indexPatterns.ensureDefaultIndexPattern.bannerLabel": "Kibanaでデータの可視化と閲覧を行うには、Elasticsearchからデータを取得するためのインデックスパターンの作成が必要です。",
"data.indexPatterns.fetchFieldErrorTitle": "インデックスパターンのフィールド取得中にエラーが発生 {title} (ID: {id})",
"data.indexPatterns.unableWriteLabel": "インデックスパターンを書き込めません!このインデックスパターンへの最新の変更を取得するには、ページを更新してください。",
- "data.indexPatterns.unknownFieldErrorMessage": "インデックスパターン「{title}」のフィールド「{name}」が不明なフィールドタイプを使用しています。",
- "data.indexPatterns.unknownFieldHeader": "不明なフィールドタイプ {type}",
"data.noDataPopover.content": "この時間範囲にはデータが含まれていません表示するフィールドを増やし、グラフを作成するには、時間範囲を広げるか、調整してください。",
"data.noDataPopover.dismissAction": "今後表示しない",
"data.noDataPopover.subtitle": "ヒント",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index e5dfbe60eb88a5..53e0f49d7877e6 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -801,8 +801,6 @@
"data.indexPatterns.ensureDefaultIndexPattern.bannerLabel": "若要在 Kibana 中可视化和浏览数据,您需要创建索引模式,以从 Elasticsearch 检索数据。",
"data.indexPatterns.fetchFieldErrorTitle": "提取索引模式 {title} (ID: {id}) 的字段时出错",
"data.indexPatterns.unableWriteLabel": "无法写入索引模式!请刷新页面以获取此索引模式的最新更改。",
- "data.indexPatterns.unknownFieldErrorMessage": "indexPattern “{title}” 中的字段 “{name}” 使用未知字段类型。",
- "data.indexPatterns.unknownFieldHeader": "未知字段类型 {type}",
"data.noDataPopover.content": "此时间范围不包含任何数据。增大或调整时间范围,以查看更多的字段并创建图表。",
"data.noDataPopover.dismissAction": "不再显示",
"data.noDataPopover.subtitle": "提示",