mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
Upgrade Typescript to 4.3.5 (#104470)
Co-authored-by: Mikhail Shustov <restrry@gmail.com> Co-authored-by: Dario Gieselaar <dario.gieselaar@elastic.co> Co-authored-by: CJ Cenizal <cj@cenizal.com> Co-authored-by: Justin Kambic <justin.kambic@elastic.co> Co-authored-by: Stratoula Kalafateli <efstratia.kalafateli@elastic.co> Co-authored-by: Jean-Louis Leysens <jloleysens@gmail.com> Co-authored-by: Kyle Pollich <kpollich1@gmail.com> Co-authored-by: Xavier Mouligneau <189600+XavierM@users.noreply.github.com> Co-authored-by: Kevin Qualters <kevin.qualters@elastic.co> Co-authored-by: Candace Park <candace.park@elastic.co> Co-authored-by: Brian Seeders <brian.seeders@elastic.co> Co-authored-by: spalger <spencer@elastic.co>
This commit is contained in:
parent
964f0929fc
commit
92a8636f0f
159 changed files with 4100 additions and 5956 deletions
|
@ -9,13 +9,13 @@ Constructs a new instance of the `ScopedHistory` class
|
||||||
<b>Signature:</b>
|
<b>Signature:</b>
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
constructor(parentHistory: History, basePath: string);
|
constructor(parentHistory: History<HistoryLocationState>, basePath: string);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Parameters
|
## Parameters
|
||||||
|
|
||||||
| Parameter | Type | Description |
|
| Parameter | Type | Description |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| parentHistory | History | |
|
| parentHistory | History<HistoryLocationState> | |
|
||||||
| basePath | string | |
|
| basePath | string | |
|
||||||
|
|
||||||
|
|
|
@ -9,5 +9,5 @@ Add a block prompt requesting user confirmation when navigating away from the cu
|
||||||
<b>Signature:</b>
|
<b>Signature:</b>
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
block: (prompt?: string | boolean | History.TransitionPromptHook<HistoryLocationState> | undefined) => UnregisterCallback;
|
block: (prompt?: string | boolean | TransitionPromptHook<HistoryLocationState> | undefined) => UnregisterCallback;
|
||||||
```
|
```
|
||||||
|
|
|
@ -9,5 +9,5 @@ Creates a `ScopedHistory` for a subpath of this `ScopedHistory`<!-- -->. Useful
|
||||||
<b>Signature:</b>
|
<b>Signature:</b>
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
createSubHistory: <SubHistoryLocationState = unknown>(basePath: string) => ScopedHistory<SubHistoryLocationState>;
|
createSubHistory: (basePath: string) => ScopedHistory<HistoryLocationState>;
|
||||||
```
|
```
|
||||||
|
|
|
@ -28,9 +28,9 @@ export declare class ScopedHistory<HistoryLocationState = unknown> implements Hi
|
||||||
| Property | Modifiers | Type | Description |
|
| Property | Modifiers | Type | Description |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| [action](./kibana-plugin-core-public.scopedhistory.action.md) | | Action | The last action dispatched on the history stack. |
|
| [action](./kibana-plugin-core-public.scopedhistory.action.md) | | Action | The last action dispatched on the history stack. |
|
||||||
| [block](./kibana-plugin-core-public.scopedhistory.block.md) | | (prompt?: string \| boolean \| History.TransitionPromptHook<HistoryLocationState> \| undefined) => UnregisterCallback | Add a block prompt requesting user confirmation when navigating away from the current page. |
|
| [block](./kibana-plugin-core-public.scopedhistory.block.md) | | (prompt?: string \| boolean \| TransitionPromptHook<HistoryLocationState> \| undefined) => UnregisterCallback | Add a block prompt requesting user confirmation when navigating away from the current page. |
|
||||||
| [createHref](./kibana-plugin-core-public.scopedhistory.createhref.md) | | (location: LocationDescriptorObject<HistoryLocationState>, { prependBasePath }?: { prependBasePath?: boolean \| undefined; }) => Href | Creates an href (string) to the location. If <code>prependBasePath</code> is true (default), it will prepend the location's path with the scoped history basePath. |
|
| [createHref](./kibana-plugin-core-public.scopedhistory.createhref.md) | | (location: LocationDescriptorObject<HistoryLocationState>, { prependBasePath }?: { prependBasePath?: boolean \| undefined; }) => Href | Creates an href (string) to the location. If <code>prependBasePath</code> is true (default), it will prepend the location's path with the scoped history basePath. |
|
||||||
| [createSubHistory](./kibana-plugin-core-public.scopedhistory.createsubhistory.md) | | <SubHistoryLocationState = unknown>(basePath: string) => ScopedHistory<SubHistoryLocationState> | Creates a <code>ScopedHistory</code> for a subpath of this <code>ScopedHistory</code>. Useful for applications that may have sub-apps that do not need access to the containing application's history. |
|
| [createSubHistory](./kibana-plugin-core-public.scopedhistory.createsubhistory.md) | | (basePath: string) => ScopedHistory<HistoryLocationState> | Creates a <code>ScopedHistory</code> for a subpath of this <code>ScopedHistory</code>. Useful for applications that may have sub-apps that do not need access to the containing application's history. |
|
||||||
| [go](./kibana-plugin-core-public.scopedhistory.go.md) | | (n: number) => void | Send the user forward or backwards in the history stack. |
|
| [go](./kibana-plugin-core-public.scopedhistory.go.md) | | (n: number) => void | Send the user forward or backwards in the history stack. |
|
||||||
| [goBack](./kibana-plugin-core-public.scopedhistory.goback.md) | | () => void | Send the user one location back in the history stack. Equivalent to calling [ScopedHistory.go(-1)](./kibana-plugin-core-public.scopedhistory.go.md)<!-- -->. If no more entries are available backwards, this is a no-op. |
|
| [goBack](./kibana-plugin-core-public.scopedhistory.goback.md) | | () => void | Send the user one location back in the history stack. Equivalent to calling [ScopedHistory.go(-1)](./kibana-plugin-core-public.scopedhistory.go.md)<!-- -->. If no more entries are available backwards, this is a no-op. |
|
||||||
| [goForward](./kibana-plugin-core-public.scopedhistory.goforward.md) | | () => void | Send the user one location forward in the history stack. Equivalent to calling [ScopedHistory.go(1)](./kibana-plugin-core-public.scopedhistory.go.md)<!-- -->. If no more entries are available forwards, this is a no-op. |
|
| [goForward](./kibana-plugin-core-public.scopedhistory.goforward.md) | | () => void | Send the user one location forward in the history stack. Equivalent to calling [ScopedHistory.go(1)](./kibana-plugin-core-public.scopedhistory.go.md)<!-- -->. If no more entries are available forwards, this is a no-op. |
|
||||||
|
|
|
@ -12,14 +12,32 @@ Set of helpers used to create `KibanaResponse` to form HTTP response on an incom
|
||||||
kibanaResponseFactory: {
|
kibanaResponseFactory: {
|
||||||
custom: <T extends string | Record<string, any> | Error | Buffer | Stream | {
|
custom: <T extends string | Record<string, any> | Error | Buffer | Stream | {
|
||||||
message: string | Error;
|
message: string | Error;
|
||||||
attributes?: Record<string, any> | undefined;
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
} | undefined>(options: CustomHttpResponseOptions<T>) => KibanaResponse<T>;
|
} | undefined>(options: CustomHttpResponseOptions<T>) => KibanaResponse<T>;
|
||||||
badRequest: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
badRequest: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
unauthorized: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
message: string | Error;
|
||||||
forbidden: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
notFound: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
}>;
|
||||||
conflict: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
unauthorized: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
customError: (options: CustomHttpResponseOptions<ResponseError>) => KibanaResponse<ResponseError>;
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
forbidden: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
notFound: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
conflict: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
customError: (options: CustomHttpResponseOptions<ResponseError>) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
redirected: (options: RedirectResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
redirected: (options: RedirectResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
||||||
ok: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
ok: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
||||||
accepted: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
accepted: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
||||||
|
|
10
package.json
10
package.json
|
@ -88,9 +88,9 @@
|
||||||
"**/react-syntax-highlighter": "^15.3.1",
|
"**/react-syntax-highlighter": "^15.3.1",
|
||||||
"**/react-syntax-highlighter/**/highlight.js": "^10.4.1",
|
"**/react-syntax-highlighter/**/highlight.js": "^10.4.1",
|
||||||
"**/trim": "1.0.1",
|
"**/trim": "1.0.1",
|
||||||
"**/typescript": "4.1.3",
|
"**/typescript": "4.3.5",
|
||||||
"**/underscore": "^1.13.1",
|
"**/underscore": "^1.13.1",
|
||||||
"globby/fast-glob": "3.2.5"
|
"globby/fast-glob": "3.2.7"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.16.3",
|
"@babel/runtime": "^7.16.3",
|
||||||
|
@ -538,7 +538,7 @@
|
||||||
"@types/hapi__inert": "^5.2.3",
|
"@types/hapi__inert": "^5.2.3",
|
||||||
"@types/has-ansi": "^3.0.0",
|
"@types/has-ansi": "^3.0.0",
|
||||||
"@types/he": "^1.1.1",
|
"@types/he": "^1.1.1",
|
||||||
"@types/history": "^4.7.3",
|
"@types/history": "^4.7.9",
|
||||||
"@types/hjson": "^2.4.2",
|
"@types/hjson": "^2.4.2",
|
||||||
"@types/http-proxy": "^1.17.4",
|
"@types/http-proxy": "^1.17.4",
|
||||||
"@types/http-proxy-agent": "^2.0.2",
|
"@types/http-proxy-agent": "^2.0.2",
|
||||||
|
@ -823,9 +823,9 @@
|
||||||
"terser-webpack-plugin": "^4.2.3",
|
"terser-webpack-plugin": "^4.2.3",
|
||||||
"tough-cookie": "^4.0.0",
|
"tough-cookie": "^4.0.0",
|
||||||
"ts-loader": "^7.0.5",
|
"ts-loader": "^7.0.5",
|
||||||
"ts-morph": "^9.1.0",
|
"ts-morph": "^11.0.0",
|
||||||
"tsd": "^0.13.1",
|
"tsd": "^0.13.1",
|
||||||
"typescript": "4.1.3",
|
"typescript": "4.3.5",
|
||||||
"unlazy-loader": "^0.1.3",
|
"unlazy-loader": "^0.1.3",
|
||||||
"url-loader": "^2.2.0",
|
"url-loader": "^2.2.0",
|
||||||
"val-loader": "^1.1.1",
|
"val-loader": "^1.1.1",
|
||||||
|
|
|
@ -34,13 +34,11 @@ RUNTIME_DEPS = [
|
||||||
"@npm//@elastic/eui",
|
"@npm//@elastic/eui",
|
||||||
"@npm//enzyme",
|
"@npm//enzyme",
|
||||||
"@npm//react",
|
"@npm//react",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
TYPES_DEPS = [
|
TYPES_DEPS = [
|
||||||
"//packages/kbn-i18n:npm_module_types",
|
"//packages/kbn-i18n:npm_module_types",
|
||||||
"@npm//@elastic/eui",
|
"@npm//@elastic/eui",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
"@npm//tslib",
|
"@npm//tslib",
|
||||||
"@npm//@types/enzyme",
|
"@npm//@types/enzyme",
|
||||||
"@npm//@types/jest",
|
"@npm//@types/jest",
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
"rootDir": "src",
|
"rootDir": "src",
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"sourceRoot": "../../../../packages/kbn-alerts/src",
|
"sourceRoot": "../../../../packages/kbn-alerts/src",
|
||||||
"types": ["jest", "node", "resize-observer-polyfill"]
|
"types": ["jest", "node"]
|
||||||
},
|
},
|
||||||
"include": ["src/**/*"],
|
"include": ["src/**/*"],
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,8 @@ it('Function inside interface has a label', () => {
|
||||||
expect(fn?.type).toBe(TypeKind.FunctionKind);
|
expect(fn?.type).toBe(TypeKind.FunctionKind);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Test ReactElement signature', () => {
|
// FAILING: https://github.com/elastic/kibana/issues/120125
|
||||||
|
it.skip('Test ReactElement signature', () => {
|
||||||
const node = nodes.find((n) => getNodeName(n) === 'AReactElementFn');
|
const node = nodes.find((n) => getNodeName(n) === 'AReactElementFn');
|
||||||
expect(node).toBeDefined();
|
expect(node).toBeDefined();
|
||||||
const def = buildApiDeclarationTopNode(node!, {
|
const def = buildApiDeclarationTopNode(node!, {
|
||||||
|
|
|
@ -48,7 +48,7 @@ export function buildBasicApiDeclaration(node: Node, opts: BuildApiDecOpts): Api
|
||||||
signature: getSignature(node, opts.plugins, opts.log),
|
signature: getSignature(node, opts.plugins, opts.log),
|
||||||
path: getSourceForNode(node),
|
path: getSourceForNode(node),
|
||||||
deprecated,
|
deprecated,
|
||||||
removeBy: removeByTag ? removeByTag.getComment() : undefined,
|
removeBy: removeByTag ? removeByTag.getCommentText() : undefined,
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
...apiDec,
|
...apiDec,
|
||||||
|
|
|
@ -43,14 +43,14 @@ export function getJSDocs(node: Node): JSDoc[] | undefined {
|
||||||
export function getJSDocReturnTagComment(node: Node | JSDoc[]): TextWithLinks {
|
export function getJSDocReturnTagComment(node: Node | JSDoc[]): TextWithLinks {
|
||||||
const tags = getJSDocTags(node);
|
const tags = getJSDocTags(node);
|
||||||
const returnTag = tags.find((tag) => Node.isJSDocReturnTag(tag));
|
const returnTag = tags.find((tag) => Node.isJSDocReturnTag(tag));
|
||||||
if (returnTag) return getTextWithLinks(returnTag.getComment());
|
if (returnTag) return getTextWithLinks(returnTag.getCommentText());
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getJSDocParamComment(node: Node | JSDoc[], name: string): TextWithLinks {
|
export function getJSDocParamComment(node: Node | JSDoc[], name: string): TextWithLinks {
|
||||||
const tags = getJSDocTags(node);
|
const tags = getJSDocTags(node);
|
||||||
const paramTag = tags.find((tag) => Node.isJSDocParameterTag(tag) && tag.getName() === name);
|
const paramTag = tags.find((tag) => Node.isJSDocParameterTag(tag) && tag.getName() === name);
|
||||||
if (paramTag) return getTextWithLinks(paramTag.getComment());
|
if (paramTag) return getTextWithLinks(paramTag.getCommentText());
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ ${
|
||||||
|
|
||||||
**Code health stats**
|
**Code health stats**
|
||||||
|
|
||||||
| Public API count | Any count | Items lacking comments | Missing exports |
|
| Public API count | Any count | Items lacking comments | Missing exports |
|
||||||
|-------------------|-----------|------------------------|-----------------|
|
|-------------------|-----------|------------------------|-----------------|
|
||||||
| ${pluginStats.apiCount} | ${pluginStats.isAnyType.length} | ${
|
| ${pluginStats.apiCount} | ${pluginStats.isAnyType.length} | ${
|
||||||
pluginStats.missingComments.length
|
pluginStats.missingComments.length
|
||||||
|
|
|
@ -330,7 +330,7 @@ describe('Types', () => {
|
||||||
"section": "def-public.MyProps",
|
"section": "def-public.MyProps",
|
||||||
"text": "MyProps",
|
"text": "MyProps",
|
||||||
},
|
},
|
||||||
">",
|
", string | React.JSXElementConstructor<any>>",
|
||||||
]
|
]
|
||||||
`);
|
`);
|
||||||
});
|
});
|
||||||
|
|
|
@ -76,7 +76,7 @@
|
||||||
"label": "component",
|
"label": "component",
|
||||||
"description": [],
|
"description": [],
|
||||||
"signature": [
|
"signature": [
|
||||||
"React.ComponentClass<{}, any> | React.FunctionComponent<{}> | undefined"
|
"React.ComponentType<{}> | undefined"
|
||||||
],
|
],
|
||||||
"path": "packages/kbn-docs-utils/src/api_docs/tests/__fixtures__/src/plugin_a/public/classes.ts",
|
"path": "packages/kbn-docs-utils/src/api_docs/tests/__fixtures__/src/plugin_a/public/classes.ts",
|
||||||
"deprecated": false
|
"deprecated": false
|
||||||
|
@ -1241,7 +1241,7 @@
|
||||||
"section": "def-public.MyProps",
|
"section": "def-public.MyProps",
|
||||||
"text": "MyProps"
|
"text": "MyProps"
|
||||||
},
|
},
|
||||||
">"
|
", string | React.JSXElementConstructor<any>>"
|
||||||
],
|
],
|
||||||
"path": "packages/kbn-docs-utils/src/api_docs/tests/__fixtures__/src/plugin_a/public/types.ts",
|
"path": "packages/kbn-docs-utils/src/api_docs/tests/__fixtures__/src/plugin_a/public/types.ts",
|
||||||
"deprecated": false,
|
"deprecated": false,
|
||||||
|
@ -2356,7 +2356,7 @@
|
||||||
"deprecated": false,
|
"deprecated": false,
|
||||||
"children": [],
|
"children": [],
|
||||||
"returnComment": [
|
"returnComment": [
|
||||||
"The currently selected {@link SearchLanguage}"
|
"The currently selected {@link SearchLanguage }"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -16,7 +16,7 @@ Contact Kibana Core for questions regarding this plugin.
|
||||||
|
|
||||||
**Code health stats**
|
**Code health stats**
|
||||||
|
|
||||||
| Public API count | Any count | Items lacking comments | Missing exports |
|
| Public API count | Any count | Items lacking comments | Missing exports |
|
||||||
|-------------------|-----------|------------------------|-----------------|
|
|-------------------|-----------|------------------------|-----------------|
|
||||||
| 131 | 1 | 71 | 2 |
|
| 131 | 1 | 71 | 2 |
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ Contact Kibana Core for questions regarding this plugin.
|
||||||
|
|
||||||
**Code health stats**
|
**Code health stats**
|
||||||
|
|
||||||
| Public API count | Any count | Items lacking comments | Missing exports |
|
| Public API count | Any count | Items lacking comments | Missing exports |
|
||||||
|-------------------|-----------|------------------------|-----------------|
|
|-------------------|-----------|------------------------|-----------------|
|
||||||
| 131 | 1 | 71 | 2 |
|
| 131 | 1 | 71 | 2 |
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ Contact Kibana Core for questions regarding this plugin.
|
||||||
|
|
||||||
**Code health stats**
|
**Code health stats**
|
||||||
|
|
||||||
| Public API count | Any count | Items lacking comments | Missing exports |
|
| Public API count | Any count | Items lacking comments | Missing exports |
|
||||||
|-------------------|-----------|------------------------|-----------------|
|
|-------------------|-----------|------------------------|-----------------|
|
||||||
| 2 | 0 | 2 | 0 |
|
| 2 | 0 | 2 | 0 |
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,6 @@ TYPES_DEPS = [
|
||||||
"@npm//@types/node",
|
"@npm//@types/node",
|
||||||
"@npm//@types/node-forge",
|
"@npm//@types/node-forge",
|
||||||
"@npm//@types/testing-library__jest-dom",
|
"@npm//@types/testing-library__jest-dom",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
"@npm//@emotion/react",
|
"@npm//@emotion/react",
|
||||||
"@npm//jest-styled-components",
|
"@npm//jest-styled-components",
|
||||||
]
|
]
|
||||||
|
|
|
@ -51,7 +51,6 @@ RUNTIME_DEPS = [
|
||||||
"@npm//node-sass",
|
"@npm//node-sass",
|
||||||
"@npm//normalize-path",
|
"@npm//normalize-path",
|
||||||
"@npm//pirates",
|
"@npm//pirates",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
"@npm//rxjs",
|
"@npm//rxjs",
|
||||||
"@npm//source-map-support",
|
"@npm//source-map-support",
|
||||||
"@npm//watchpack",
|
"@npm//watchpack",
|
||||||
|
@ -77,7 +76,6 @@ TYPES_DEPS = [
|
||||||
"@npm//jest-diff",
|
"@npm//jest-diff",
|
||||||
"@npm//lmdb-store",
|
"@npm//lmdb-store",
|
||||||
"@npm//pirates",
|
"@npm//pirates",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
"@npm//rxjs",
|
"@npm//rxjs",
|
||||||
"@npm//zlib",
|
"@npm//zlib",
|
||||||
"@npm//@types/compression-webpack-plugin",
|
"@npm//@types/compression-webpack-plugin",
|
||||||
|
|
8646
packages/kbn-pm/dist/index.js
vendored
8646
packages/kbn-pm/dist/index.js
vendored
File diff suppressed because one or more lines are too long
|
@ -49,7 +49,6 @@ TYPES_DEPS = [
|
||||||
"@npm//@types/classnames",
|
"@npm//@types/classnames",
|
||||||
"@npm//@types/react",
|
"@npm//@types/react",
|
||||||
"@npm//@elastic/eui",
|
"@npm//@elastic/eui",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
jsts_transpiler(
|
jsts_transpiler(
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
"types": [
|
"types": [
|
||||||
"jest",
|
"jest",
|
||||||
"node",
|
"node",
|
||||||
"resize-observer-polyfill"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
|
|
|
@ -42,7 +42,6 @@ RUNTIME_DEPS = [
|
||||||
"@npm//enzyme",
|
"@npm//enzyme",
|
||||||
"@npm//moment",
|
"@npm//moment",
|
||||||
"@npm//react",
|
"@npm//react",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
TYPES_DEPS = [
|
TYPES_DEPS = [
|
||||||
|
@ -55,7 +54,6 @@ TYPES_DEPS = [
|
||||||
"@npm//@testing-library/react",
|
"@npm//@testing-library/react",
|
||||||
"@npm//@testing-library/react-hooks",
|
"@npm//@testing-library/react-hooks",
|
||||||
"@npm//moment",
|
"@npm//moment",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
"@npm//@types/enzyme",
|
"@npm//@types/enzyme",
|
||||||
"@npm//@types/jest",
|
"@npm//@types/jest",
|
||||||
"@npm//@types/node",
|
"@npm//@types/node",
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"sourceRoot": "../../../../packages/kbn-securitysolution-autocomplete/src",
|
"sourceRoot": "../../../../packages/kbn-securitysolution-autocomplete/src",
|
||||||
"rootDir": "src",
|
"rootDir": "src",
|
||||||
"types": ["jest", "node", "resize-observer-polyfill"]
|
"types": ["jest", "node"]
|
||||||
},
|
},
|
||||||
"include": ["src/**/*"],
|
"include": ["src/**/*"],
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,9 +32,11 @@ function isHtmlPlugin(plugin: any): plugin is { options: { template: string } }
|
||||||
return !!(typeof plugin.options?.template === 'string');
|
return !!(typeof plugin.options?.template === 'string');
|
||||||
}
|
}
|
||||||
|
|
||||||
function isBabelLoaderRule(rule: webpack.RuleSetRule): rule is webpack.RuleSetRule & {
|
interface BabelLoaderRule extends webpack.RuleSetRule {
|
||||||
use: webpack.RuleSetLoader[];
|
use: webpack.RuleSetLoader[];
|
||||||
} {
|
}
|
||||||
|
|
||||||
|
function isBabelLoaderRule(rule: webpack.RuleSetRule): rule is BabelLoaderRule {
|
||||||
return !!(
|
return !!(
|
||||||
rule.use &&
|
rule.use &&
|
||||||
Array.isArray(rule.use) &&
|
Array.isArray(rule.use) &&
|
||||||
|
|
|
@ -36,8 +36,7 @@ declare global {
|
||||||
interface Global {}
|
interface Global {}
|
||||||
interface InspectOptions {}
|
interface InspectOptions {}
|
||||||
|
|
||||||
interface ConsoleConstructor
|
interface ConsoleConstructor extends console.ConsoleConstructor {}
|
||||||
extends console.ConsoleConstructor {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* eslint-enable */
|
/* eslint-enable */
|
||||||
|
@ -59,7 +58,7 @@ export function runJest(configName = 'jest.config.js') {
|
||||||
const cwd: string = process.env.INIT_CWD || process.cwd();
|
const cwd: string = process.env.INIT_CWD || process.cwd();
|
||||||
|
|
||||||
if (!argv.config) {
|
if (!argv.config) {
|
||||||
testFiles = argv._.splice(2).map((p) => resolve(cwd, p));
|
testFiles = argv._.splice(2).map((p) => resolve(cwd, p.toString()));
|
||||||
const commonTestFiles = commonBasePath(testFiles);
|
const commonTestFiles = commonBasePath(testFiles);
|
||||||
const testFilesProvided = testFiles.length > 0;
|
const testFilesProvided = testFiles.length > 0;
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ TYPES_DEPS = [
|
||||||
"@npm//query-string",
|
"@npm//query-string",
|
||||||
"@npm//utility-types",
|
"@npm//utility-types",
|
||||||
"@npm//@types/jest",
|
"@npm//@types/jest",
|
||||||
|
"@npm//@types/history",
|
||||||
"@npm//@types/node",
|
"@npm//@types/node",
|
||||||
"@npm//@types/react-router-config",
|
"@npm//@types/react-router-config",
|
||||||
"@npm//@types/react-router-dom",
|
"@npm//@types/react-router-dom",
|
||||||
|
|
|
@ -267,6 +267,7 @@ describe('createRouter', () => {
|
||||||
|
|
||||||
const matches = router.matchRoutes('/', history.location);
|
const matches = router.matchRoutes('/', history.location);
|
||||||
|
|
||||||
|
// @ts-expect-error 4.3.5 upgrade - router doesn't seem able to merge properly when two routes match
|
||||||
expect(matches[1]?.match.params).toEqual({
|
expect(matches[1]?.match.params).toEqual({
|
||||||
query: {
|
query: {
|
||||||
rangeFrom: 'now-30m',
|
rangeFrom: 'now-30m',
|
||||||
|
@ -285,6 +286,7 @@ describe('createRouter', () => {
|
||||||
|
|
||||||
expect(matchedRoutes.length).toEqual(4);
|
expect(matchedRoutes.length).toEqual(4);
|
||||||
|
|
||||||
|
// @ts-expect-error 4.3.5 upgrade - router doesn't seem able to merge properly when two routes match
|
||||||
expect(matchedRoutes[matchedRoutes.length - 1].match).toEqual({
|
expect(matchedRoutes[matchedRoutes.length - 1].match).toEqual({
|
||||||
isExact: true,
|
isExact: true,
|
||||||
params: {
|
params: {
|
||||||
|
|
|
@ -23,7 +23,7 @@ function toReactRouterPath(path: string) {
|
||||||
return path.replace(/(?:{([^\/]+)})/g, ':$1');
|
return path.replace(/(?:{([^\/]+)})/g, ':$1');
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createRouter<TRoutes extends Route[]>(routes: TRoutes): Router<TRoutes> {
|
export function createRouter<TRoute extends Route>(routes: TRoute[]): Router<TRoute[]> {
|
||||||
const routesByReactRouterConfig = new Map<ReactRouterConfig, Route>();
|
const routesByReactRouterConfig = new Map<ReactRouterConfig, Route>();
|
||||||
const reactRouterConfigsByRoute = new Map<Route, ReactRouterConfig>();
|
const reactRouterConfigsByRoute = new Map<Route, ReactRouterConfig>();
|
||||||
|
|
||||||
|
@ -181,10 +181,8 @@ export function createRouter<TRoutes extends Route[]>(routes: TRoutes): Router<T
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
const router = {
|
||||||
link: (path, ...args) => {
|
link,
|
||||||
return link(path, ...args);
|
|
||||||
},
|
|
||||||
getParams: (...args: any[]) => {
|
getParams: (...args: any[]) => {
|
||||||
const matches = matchRoutes(...args);
|
const matches = matchRoutes(...args);
|
||||||
return matches.length
|
return matches.length
|
||||||
|
@ -197,11 +195,13 @@ export function createRouter<TRoutes extends Route[]>(routes: TRoutes): Router<T
|
||||||
matchRoutes: (...args: any[]) => {
|
matchRoutes: (...args: any[]) => {
|
||||||
return matchRoutes(...args) as any;
|
return matchRoutes(...args) as any;
|
||||||
},
|
},
|
||||||
getRoutePath: (route) => {
|
getRoutePath: (route: Route) => {
|
||||||
return reactRouterConfigsByRoute.get(route)!.path as string;
|
return reactRouterConfigsByRoute.get(route)!.path as string;
|
||||||
},
|
},
|
||||||
getRoutesToMatch: (path: string) => {
|
getRoutesToMatch: (path: string) => {
|
||||||
return getRoutesToMatch(path) as unknown as FlattenRoutesOf<TRoutes>;
|
return getRoutesToMatch(path) as unknown as FlattenRoutesOf<typeof routes>;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return router;
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ export interface RouteMatch<TRoute extends Route = Route> {
|
||||||
params: t.Type<any>;
|
params: t.Type<any>;
|
||||||
}
|
}
|
||||||
? t.TypeOf<TRoute['params']>
|
? t.TypeOf<TRoute['params']>
|
||||||
: {};
|
: AnyObj;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,10 +160,11 @@ interface ReadonlyPlainRoute {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Route = PlainRoute | ReadonlyPlainRoute;
|
export type Route = PlainRoute | ReadonlyPlainRoute;
|
||||||
|
type AnyObj = Record<string, any>;
|
||||||
|
|
||||||
interface DefaultOutput {
|
interface DefaultOutput {
|
||||||
path: {};
|
path: AnyObj;
|
||||||
query: {};
|
query: AnyObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
type OutputOfRouteMatch<TRouteMatch extends RouteMatch> = TRouteMatch extends {
|
type OutputOfRouteMatch<TRouteMatch extends RouteMatch> = TRouteMatch extends {
|
||||||
|
@ -190,20 +191,21 @@ type TypeOfRouteMatch<TRouteMatch extends RouteMatch> = TRouteMatch extends {
|
||||||
route: { params: t.Type<any> };
|
route: { params: t.Type<any> };
|
||||||
}
|
}
|
||||||
? t.TypeOf<TRouteMatch['route']['params']>
|
? t.TypeOf<TRouteMatch['route']['params']>
|
||||||
: {};
|
: AnyObj;
|
||||||
|
|
||||||
type TypeOfMatches<TRouteMatches extends RouteMatch[]> = TRouteMatches extends [RouteMatch]
|
type TypeOfMatches<TRouteMatches extends RouteMatch[]> = TRouteMatches extends [RouteMatch]
|
||||||
? TypeOfRouteMatch<TRouteMatches[0]>
|
? TypeOfRouteMatch<TRouteMatches[0]>
|
||||||
: TRouteMatches extends [RouteMatch, ...infer TNextRouteMatches]
|
: TRouteMatches extends [RouteMatch, ...infer TNextRouteMatches]
|
||||||
? TypeOfRouteMatch<TRouteMatches[0]> &
|
? TypeOfRouteMatch<TRouteMatches[0]> &
|
||||||
(TNextRouteMatches extends RouteMatch[] ? TypeOfMatches<TNextRouteMatches> : {})
|
(TNextRouteMatches extends RouteMatch[] ? TypeOfMatches<TNextRouteMatches> : AnyObj)
|
||||||
: {};
|
: AnyObj;
|
||||||
|
|
||||||
export type TypeOf<
|
export type TypeOf<
|
||||||
TRoutes extends Route[],
|
TRoutes extends Route[],
|
||||||
TPath extends PathsOf<TRoutes>,
|
TPath extends PathsOf<TRoutes>,
|
||||||
TWithDefaultOutput extends boolean = true
|
TWithDefaultOutput extends boolean = true
|
||||||
> = TypeOfMatches<Match<TRoutes, TPath>> & (TWithDefaultOutput extends true ? DefaultOutput : {});
|
> = TypeOfMatches<Match<TRoutes, TPath>> &
|
||||||
|
(TWithDefaultOutput extends true ? DefaultOutput : AnyObj);
|
||||||
|
|
||||||
export type TypeAsArgs<TObject> = keyof TObject extends never
|
export type TypeAsArgs<TObject> = keyof TObject extends never
|
||||||
? []
|
? []
|
||||||
|
@ -276,7 +278,7 @@ type MapRoute<TRoute extends Route, TParents extends Route[] = []> = MaybeUnion<
|
||||||
>;
|
>;
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
: {}
|
: AnyObj
|
||||||
>;
|
>;
|
||||||
|
|
||||||
type MapRoutes<TRoutes, TParents extends Route[] = []> = TRoutes extends [Route]
|
type MapRoutes<TRoutes, TParents extends Route[] = []> = TRoutes extends [Route]
|
||||||
|
@ -341,7 +343,7 @@ type MapRoutes<TRoutes, TParents extends Route[] = []> = TRoutes extends [Route]
|
||||||
MapRoute<TRoutes[8], TParents> &
|
MapRoute<TRoutes[8], TParents> &
|
||||||
MapRoute<TRoutes[7], TParents> &
|
MapRoute<TRoutes[7], TParents> &
|
||||||
MapRoute<TRoutes[9], TParents>
|
MapRoute<TRoutes[9], TParents>
|
||||||
: {};
|
: AnyObj;
|
||||||
|
|
||||||
// const element = null as any;
|
// const element = null as any;
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,6 @@ RUNTIME_DEPS = [
|
||||||
"@npm//react-router",
|
"@npm//react-router",
|
||||||
"@npm//react",
|
"@npm//react",
|
||||||
"@npm//regenerator-runtime",
|
"@npm//regenerator-runtime",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
"@npm//rison-node",
|
"@npm//rison-node",
|
||||||
"@npm//rxjs",
|
"@npm//rxjs",
|
||||||
"@npm//styled-components",
|
"@npm//styled-components",
|
||||||
|
@ -90,7 +89,6 @@ TYPES_DEPS = [
|
||||||
"@npm//react-router",
|
"@npm//react-router",
|
||||||
"@npm//react-router-dom",
|
"@npm//react-router-dom",
|
||||||
"@npm//regenerator-runtime",
|
"@npm//regenerator-runtime",
|
||||||
"@npm//resize-observer-polyfill",
|
|
||||||
"@npm//rison-node",
|
"@npm//rison-node",
|
||||||
"@npm//rxjs",
|
"@npm//rxjs",
|
||||||
"@npm//styled-components",
|
"@npm//styled-components",
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
"sourceRoot": "../../../../packages/kbn-ui-shared-deps-npm/src",
|
"sourceRoot": "../../../../packages/kbn-ui-shared-deps-npm/src",
|
||||||
"types": [
|
"types": [
|
||||||
"node",
|
"node",
|
||||||
"resize-observer-polyfill"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
"sourceRoot": "../../../../packages/kbn-ui-shared-deps-src/src",
|
"sourceRoot": "../../../../packages/kbn-ui-shared-deps-src/src",
|
||||||
"types": [
|
"types": [
|
||||||
"node",
|
"node",
|
||||||
"resize-observer-polyfill"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
|
|
|
@ -57,7 +57,10 @@ export class ScopedHistory<HistoryLocationState = unknown>
|
||||||
*/
|
*/
|
||||||
private blockUnregisterCallbacks: Set<UnregisterCallback> = new Set();
|
private blockUnregisterCallbacks: Set<UnregisterCallback> = new Set();
|
||||||
|
|
||||||
constructor(private readonly parentHistory: History, private readonly basePath: string) {
|
constructor(
|
||||||
|
private readonly parentHistory: History<HistoryLocationState>,
|
||||||
|
private readonly basePath: string
|
||||||
|
) {
|
||||||
const parentPath = this.parentHistory.location.pathname;
|
const parentPath = this.parentHistory.location.pathname;
|
||||||
if (!parentPath.startsWith(basePath)) {
|
if (!parentPath.startsWith(basePath)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
@ -75,10 +78,8 @@ export class ScopedHistory<HistoryLocationState = unknown>
|
||||||
*
|
*
|
||||||
* @param basePath the URL path scope for the sub history
|
* @param basePath the URL path scope for the sub history
|
||||||
*/
|
*/
|
||||||
public createSubHistory = <SubHistoryLocationState = unknown>(
|
public createSubHistory = (basePath: string) => {
|
||||||
basePath: string
|
return new ScopedHistory<HistoryLocationState>(this, basePath);
|
||||||
): ScopedHistory<SubHistoryLocationState> => {
|
|
||||||
return new ScopedHistory<SubHistoryLocationState>(this, basePath);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -43,7 +43,7 @@ interface ConstructorParams {
|
||||||
kibanaVersion: string;
|
kibanaVersion: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface StartDeps {
|
export interface StartDeps {
|
||||||
application: InternalApplicationStart;
|
application: InternalApplicationStart;
|
||||||
docLinks: DocLinksStart;
|
docLinks: DocLinksStart;
|
||||||
http: HttpStart;
|
http: HttpStart;
|
||||||
|
|
|
@ -26,14 +26,14 @@ import {
|
||||||
import { renderApp as renderStatusApp } from './status';
|
import { renderApp as renderStatusApp } from './status';
|
||||||
import { DocLinksStart } from '../doc_links';
|
import { DocLinksStart } from '../doc_links';
|
||||||
|
|
||||||
interface SetupDeps {
|
export interface SetupDeps {
|
||||||
application: InternalApplicationSetup;
|
application: InternalApplicationSetup;
|
||||||
http: HttpSetup;
|
http: HttpSetup;
|
||||||
injectedMetadata: InjectedMetadataSetup;
|
injectedMetadata: InjectedMetadataSetup;
|
||||||
notifications: NotificationsSetup;
|
notifications: NotificationsSetup;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface StartDeps {
|
export interface StartDeps {
|
||||||
application: InternalApplicationStart;
|
application: InternalApplicationStart;
|
||||||
docLinks: DocLinksStart;
|
docLinks: DocLinksStart;
|
||||||
http: HttpStart;
|
http: HttpStart;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
import { deepFreeze } from '@kbn/std';
|
import { deepFreeze } from '@kbn/std';
|
||||||
import { InjectedMetadataSetup } from '../injected_metadata';
|
import { InjectedMetadataSetup } from '../injected_metadata';
|
||||||
|
|
||||||
interface StartDeps {
|
export interface StartDeps {
|
||||||
injectedMetadata: InjectedMetadataSetup;
|
injectedMetadata: InjectedMetadataSetup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ import { InjectedMetadataSetup } from '../injected_metadata';
|
||||||
import { FatalErrorsScreen } from './fatal_errors_screen';
|
import { FatalErrorsScreen } from './fatal_errors_screen';
|
||||||
import { FatalErrorInfo, getErrorInfo } from './get_error_info';
|
import { FatalErrorInfo, getErrorInfo } from './get_error_info';
|
||||||
|
|
||||||
interface Deps {
|
export interface Deps {
|
||||||
i18n: I18nStart;
|
i18n: I18nStart;
|
||||||
injectedMetadata: InjectedMetadataSetup;
|
injectedMetadata: InjectedMetadataSetup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ import { CoreService } from '../../types';
|
||||||
import { MomentService } from './moment';
|
import { MomentService } from './moment';
|
||||||
import { StylesService } from './styles';
|
import { StylesService } from './styles';
|
||||||
|
|
||||||
interface Deps {
|
export interface Deps {
|
||||||
uiSettings: IUiSettingsClient;
|
uiSettings: IUiSettingsClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,11 @@ import { ToastsService, ToastsSetup, ToastsStart } from './toasts';
|
||||||
import { IUiSettingsClient } from '../ui_settings';
|
import { IUiSettingsClient } from '../ui_settings';
|
||||||
import { OverlayStart } from '../overlays';
|
import { OverlayStart } from '../overlays';
|
||||||
|
|
||||||
interface SetupDeps {
|
export interface SetupDeps {
|
||||||
uiSettings: IUiSettingsClient;
|
uiSettings: IUiSettingsClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface StartDeps {
|
export interface StartDeps {
|
||||||
i18n: I18nStart;
|
i18n: I18nStart;
|
||||||
overlays: OverlayStart;
|
overlays: OverlayStart;
|
||||||
theme: ThemeServiceStart;
|
theme: ThemeServiceStart;
|
||||||
|
|
|
@ -42,6 +42,7 @@ import { Request as Request_2 } from '@hapi/hapi';
|
||||||
import * as Rx from 'rxjs';
|
import * as Rx from 'rxjs';
|
||||||
import { SchemaTypeError } from '@kbn/config-schema';
|
import { SchemaTypeError } from '@kbn/config-schema';
|
||||||
import type { ThemeVersion } from '@kbn/ui-shared-deps-npm';
|
import type { ThemeVersion } from '@kbn/ui-shared-deps-npm';
|
||||||
|
import { TransitionPromptHook } from 'history';
|
||||||
import type { TransportRequestOptions } from '@elastic/elasticsearch';
|
import type { TransportRequestOptions } from '@elastic/elasticsearch';
|
||||||
import type { TransportRequestParams } from '@elastic/elasticsearch';
|
import type { TransportRequestParams } from '@elastic/elasticsearch';
|
||||||
import type { TransportResult } from '@elastic/elasticsearch';
|
import type { TransportResult } from '@elastic/elasticsearch';
|
||||||
|
@ -1680,13 +1681,13 @@ export interface SavedObjectsUpdateOptions<Attributes = unknown> {
|
||||||
|
|
||||||
// @public
|
// @public
|
||||||
export class ScopedHistory<HistoryLocationState = unknown> implements History_2<HistoryLocationState> {
|
export class ScopedHistory<HistoryLocationState = unknown> implements History_2<HistoryLocationState> {
|
||||||
constructor(parentHistory: History_2, basePath: string);
|
constructor(parentHistory: History_2<HistoryLocationState>, basePath: string);
|
||||||
get action(): Action;
|
get action(): Action;
|
||||||
block: (prompt?: string | boolean | History_2.TransitionPromptHook<HistoryLocationState> | undefined) => UnregisterCallback;
|
block: (prompt?: string | boolean | TransitionPromptHook<HistoryLocationState> | undefined) => UnregisterCallback;
|
||||||
createHref: (location: LocationDescriptorObject<HistoryLocationState>, { prependBasePath }?: {
|
createHref: (location: LocationDescriptorObject<HistoryLocationState>, { prependBasePath }?: {
|
||||||
prependBasePath?: boolean | undefined;
|
prependBasePath?: boolean | undefined;
|
||||||
}) => Href;
|
}) => Href;
|
||||||
createSubHistory: <SubHistoryLocationState = unknown>(basePath: string) => ScopedHistory<SubHistoryLocationState>;
|
createSubHistory: (basePath: string) => ScopedHistory<HistoryLocationState>;
|
||||||
go: (n: number) => void;
|
go: (n: number) => void;
|
||||||
goBack: () => void;
|
goBack: () => void;
|
||||||
goForward: () => void;
|
goForward: () => void;
|
||||||
|
|
|
@ -18,7 +18,7 @@ import type { I18nStart } from '../i18n';
|
||||||
import { CoreContextProvider } from '../utils';
|
import { CoreContextProvider } from '../utils';
|
||||||
import { AppWrapper } from './app_containers';
|
import { AppWrapper } from './app_containers';
|
||||||
|
|
||||||
interface StartDeps {
|
export interface StartDeps {
|
||||||
application: InternalApplicationStart;
|
application: InternalApplicationStart;
|
||||||
chrome: InternalChromeStart;
|
chrome: InternalChromeStart;
|
||||||
overlays: OverlayStart;
|
overlays: OverlayStart;
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { shareReplay, takeUntil } from 'rxjs/operators';
|
||||||
import { InjectedMetadataSetup } from '../injected_metadata';
|
import { InjectedMetadataSetup } from '../injected_metadata';
|
||||||
import type { CoreTheme, ThemeServiceSetup, ThemeServiceStart } from './types';
|
import type { CoreTheme, ThemeServiceSetup, ThemeServiceStart } from './types';
|
||||||
|
|
||||||
interface SetupDeps {
|
export interface SetupDeps {
|
||||||
injectedMetadata: InjectedMetadataSetup;
|
injectedMetadata: InjectedMetadataSetup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ import { UiSettingsApi } from './ui_settings_api';
|
||||||
import { UiSettingsClient } from './ui_settings_client';
|
import { UiSettingsClient } from './ui_settings_client';
|
||||||
import { IUiSettingsClient } from './types';
|
import { IUiSettingsClient } from './types';
|
||||||
|
|
||||||
interface UiSettingsServiceDeps {
|
export interface UiSettingsServiceDeps {
|
||||||
http: HttpSetup;
|
http: HttpSetup;
|
||||||
injectedMetadata: InjectedMetadataSetup;
|
injectedMetadata: InjectedMetadataSetup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,6 @@ export type ContextContainerMock = jest.Mocked<IContextContainer>;
|
||||||
|
|
||||||
const createContextMock = (mockContext: any = {}) => {
|
const createContextMock = (mockContext: any = {}) => {
|
||||||
const contextMock: ContextContainerMock = {
|
const contextMock: ContextContainerMock = {
|
||||||
// @ts-expect-error since ContextContainerMock cannot infer ContextName and fallsback to never
|
|
||||||
registerContext: jest.fn(),
|
registerContext: jest.fn(),
|
||||||
createHandler: jest.fn(),
|
createHandler: jest.fn(),
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,7 +12,7 @@ import { CoreContext } from '../core_context';
|
||||||
|
|
||||||
type PrebootDeps = SetupDeps;
|
type PrebootDeps = SetupDeps;
|
||||||
|
|
||||||
interface SetupDeps {
|
export interface SetupDeps {
|
||||||
pluginDependencies: ReadonlyMap<PluginOpaqueId, PluginOpaqueId[]>;
|
pluginDependencies: ReadonlyMap<PluginOpaqueId, PluginOpaqueId[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,6 @@ const createAuthMock = () => {
|
||||||
const createInternalPrebootContractMock = () => {
|
const createInternalPrebootContractMock = () => {
|
||||||
const mock: InternalHttpServicePrebootMock = {
|
const mock: InternalHttpServicePrebootMock = {
|
||||||
registerRoutes: jest.fn(),
|
registerRoutes: jest.fn(),
|
||||||
// @ts-expect-error tsc cannot infer ContextName and uses never
|
|
||||||
registerRouteHandlerContext: jest.fn(),
|
registerRouteHandlerContext: jest.fn(),
|
||||||
registerStaticDir: jest.fn(),
|
registerStaticDir: jest.fn(),
|
||||||
basePath: createBasePathMock(),
|
basePath: createBasePathMock(),
|
||||||
|
@ -89,6 +88,15 @@ const createInternalPrebootContractMock = () => {
|
||||||
externalUrl: ExternalUrlConfig.DEFAULT,
|
externalUrl: ExternalUrlConfig.DEFAULT,
|
||||||
auth: createAuthMock(),
|
auth: createAuthMock(),
|
||||||
getServerInfo: jest.fn(),
|
getServerInfo: jest.fn(),
|
||||||
|
server: {
|
||||||
|
name: 'http-preboot-server-test',
|
||||||
|
version: 'kibana',
|
||||||
|
route: jest.fn(),
|
||||||
|
start: jest.fn(),
|
||||||
|
stop: jest.fn(),
|
||||||
|
config: jest.fn().mockReturnValue(configMock.create()),
|
||||||
|
// @ts-expect-error somehow it thinks that `Server` isn't a `Construtable`
|
||||||
|
} as unknown as jest.MockedClass<Server>,
|
||||||
};
|
};
|
||||||
return mock;
|
return mock;
|
||||||
};
|
};
|
||||||
|
@ -122,7 +130,6 @@ const createInternalSetupContractMock = () => {
|
||||||
registerOnPreAuth: jest.fn(),
|
registerOnPreAuth: jest.fn(),
|
||||||
registerAuth: jest.fn(),
|
registerAuth: jest.fn(),
|
||||||
registerOnPostAuth: jest.fn(),
|
registerOnPostAuth: jest.fn(),
|
||||||
// @ts-expect-error tsc cannot infer ContextName and uses never
|
|
||||||
registerRouteHandlerContext: jest.fn(),
|
registerRouteHandlerContext: jest.fn(),
|
||||||
registerOnPreResponse: jest.fn(),
|
registerOnPreResponse: jest.fn(),
|
||||||
createRouter: jest.fn().mockImplementation(() => mockRouter.create({})),
|
createRouter: jest.fn().mockImplementation(() => mockRouter.create({})),
|
||||||
|
@ -134,6 +141,7 @@ const createInternalSetupContractMock = () => {
|
||||||
getAuthHeaders: jest.fn(),
|
getAuthHeaders: jest.fn(),
|
||||||
getServerInfo: jest.fn(),
|
getServerInfo: jest.fn(),
|
||||||
registerPrebootRoutes: jest.fn(),
|
registerPrebootRoutes: jest.fn(),
|
||||||
|
registerRouterAfterListening: jest.fn(),
|
||||||
};
|
};
|
||||||
mock.createCookieSessionStorageFactory.mockResolvedValue(sessionStorageMock.createFactory());
|
mock.createCookieSessionStorageFactory.mockResolvedValue(sessionStorageMock.createFactory());
|
||||||
mock.createRouter.mockImplementation(() => mockRouter.create());
|
mock.createRouter.mockImplementation(() => mockRouter.create());
|
||||||
|
@ -160,7 +168,6 @@ const createSetupContractMock = () => {
|
||||||
basePath: internalMock.basePath,
|
basePath: internalMock.basePath,
|
||||||
csp: CspConfig.DEFAULT,
|
csp: CspConfig.DEFAULT,
|
||||||
createRouter: jest.fn(),
|
createRouter: jest.fn(),
|
||||||
// @ts-expect-error tsc cannot infer ContextName and uses never
|
|
||||||
registerRouteHandlerContext: jest.fn(),
|
registerRouteHandlerContext: jest.fn(),
|
||||||
auth: {
|
auth: {
|
||||||
get: internalMock.auth.get,
|
get: internalMock.auth.get,
|
||||||
|
|
|
@ -40,11 +40,11 @@ import {
|
||||||
ExternalUrlConfig,
|
ExternalUrlConfig,
|
||||||
} from '../external_url';
|
} from '../external_url';
|
||||||
|
|
||||||
interface PrebootDeps {
|
export interface PrebootDeps {
|
||||||
context: InternalContextPreboot;
|
context: InternalContextPreboot;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SetupDeps {
|
export interface SetupDeps {
|
||||||
context: ContextSetup;
|
context: ContextSetup;
|
||||||
executionContext: InternalExecutionContextSetup;
|
executionContext: InternalExecutionContextSetup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,16 @@
|
||||||
import { IncomingHttpHeaders } from 'http';
|
import { IncomingHttpHeaders } from 'http';
|
||||||
import { pick } from '@kbn/std';
|
import { pick } from '@kbn/std';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts an object type to a new object type where each string
|
||||||
|
* key is copied to the values of the object, and non string keys are
|
||||||
|
* given a `never` value. This allows us to map over the values and
|
||||||
|
* get the list of all string keys on a type in `KnownKeys<T>`
|
||||||
|
*/
|
||||||
|
type StringKeysAsVals<T> = {
|
||||||
|
[K in keyof T]: string extends K ? never : number extends K ? never : K;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a Union type of all known keys of a given interface.
|
* Creates a Union type of all known keys of a given interface.
|
||||||
* @example
|
* @example
|
||||||
|
@ -21,11 +31,7 @@ import { pick } from '@kbn/std';
|
||||||
* type PersonKnownKeys = KnownKeys<Person>; // "age" | "name"
|
* type PersonKnownKeys = KnownKeys<Person>; // "age" | "name"
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
type KnownKeys<T> = {
|
type KnownKeys<T> = StringKeysAsVals<T> extends { [_ in keyof T]: infer U } ? U : never;
|
||||||
[K in keyof T]: string extends K ? never : number extends K ? never : K;
|
|
||||||
} extends { [_ in keyof T]: infer U }
|
|
||||||
? U
|
|
||||||
: never;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set of well-known HTTP headers.
|
* Set of well-known HTTP headers.
|
||||||
|
|
|
@ -16,12 +16,12 @@ import { getKibanaTranslationFiles } from './get_kibana_translation_files';
|
||||||
import { initTranslations } from './init_translations';
|
import { initTranslations } from './init_translations';
|
||||||
import { registerRoutes } from './routes';
|
import { registerRoutes } from './routes';
|
||||||
|
|
||||||
interface PrebootDeps {
|
export interface PrebootDeps {
|
||||||
http: InternalHttpServicePreboot;
|
http: InternalHttpServicePreboot;
|
||||||
pluginPaths: string[];
|
pluginPaths: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SetupDeps {
|
export interface SetupDeps {
|
||||||
http: InternalHttpServiceSetup;
|
http: InternalHttpServiceSetup;
|
||||||
pluginPaths: string[];
|
pluginPaths: string[];
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ export interface InternalLoggingServicePreboot {
|
||||||
/** @internal */
|
/** @internal */
|
||||||
export type InternalLoggingServiceSetup = InternalLoggingServicePreboot;
|
export type InternalLoggingServiceSetup = InternalLoggingServicePreboot;
|
||||||
|
|
||||||
interface PrebootDeps {
|
export interface PrebootDeps {
|
||||||
loggingSystem: ILoggingSystem;
|
loggingSystem: ILoggingSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ import { OpsMetricsCollector } from './ops_metrics_collector';
|
||||||
import { opsConfig, OpsConfigType } from './ops_config';
|
import { opsConfig, OpsConfigType } from './ops_config';
|
||||||
import { getEcsOpsMetricsLog } from './logging';
|
import { getEcsOpsMetricsLog } from './logging';
|
||||||
|
|
||||||
interface MetricsServiceSetupDeps {
|
export interface MetricsServiceSetupDeps {
|
||||||
http: InternalHttpServiceSetup;
|
http: InternalHttpServiceSetup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,6 @@ import type { KibanaClient } from '@elastic/elasticsearch/lib/api/kibana';
|
||||||
import { Logger } from '@kbn/logging';
|
import { Logger } from '@kbn/logging';
|
||||||
import { LoggerFactory } from '@kbn/logging';
|
import { LoggerFactory } from '@kbn/logging';
|
||||||
import { LogLevel as LogLevel_2 } from '@kbn/logging';
|
import { LogLevel as LogLevel_2 } from '@kbn/logging';
|
||||||
import { LogLevelId } from '@kbn/logging';
|
|
||||||
import { LogMeta } from '@kbn/logging';
|
import { LogMeta } from '@kbn/logging';
|
||||||
import { LogRecord } from '@kbn/logging';
|
import { LogRecord } from '@kbn/logging';
|
||||||
import type { MaybePromise } from '@kbn/utility-types';
|
import type { MaybePromise } from '@kbn/utility-types';
|
||||||
|
@ -1372,14 +1371,32 @@ export type KibanaResponseFactory = typeof kibanaResponseFactory;
|
||||||
export const kibanaResponseFactory: {
|
export const kibanaResponseFactory: {
|
||||||
custom: <T extends string | Record<string, any> | Error | Buffer | Stream | {
|
custom: <T extends string | Record<string, any> | Error | Buffer | Stream | {
|
||||||
message: string | Error;
|
message: string | Error;
|
||||||
attributes?: Record<string, any> | undefined;
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
} | undefined>(options: CustomHttpResponseOptions<T>) => KibanaResponse<T>;
|
} | undefined>(options: CustomHttpResponseOptions<T>) => KibanaResponse<T>;
|
||||||
badRequest: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
badRequest: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
unauthorized: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
message: string | Error;
|
||||||
forbidden: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
notFound: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
}>;
|
||||||
conflict: (options?: ErrorHttpResponseOptions) => KibanaResponse<ResponseError>;
|
unauthorized: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
customError: (options: CustomHttpResponseOptions<ResponseError>) => KibanaResponse<ResponseError>;
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
forbidden: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
notFound: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
conflict: (options?: ErrorHttpResponseOptions) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
|
customError: (options: CustomHttpResponseOptions<ResponseError>) => KibanaResponse<string | Error | {
|
||||||
|
message: string | Error;
|
||||||
|
attributes?: ResponseErrorAttributes | undefined;
|
||||||
|
}>;
|
||||||
redirected: (options: RedirectResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
redirected: (options: RedirectResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
||||||
ok: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
ok: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
||||||
accepted: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
accepted: (options?: HttpResponseOptions) => KibanaResponse<string | Record<string, any> | Buffer | Stream>;
|
||||||
|
|
|
@ -32,7 +32,7 @@ interface StatusLogMeta extends LogMeta {
|
||||||
kibana: { status: ServiceStatus };
|
kibana: { status: ServiceStatus };
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SetupDeps {
|
export interface SetupDeps {
|
||||||
elasticsearch: Pick<InternalElasticsearchServiceSetup, 'status$'>;
|
elasticsearch: Pick<InternalElasticsearchServiceSetup, 'status$'>;
|
||||||
environment: InternalEnvironmentServiceSetup;
|
environment: InternalEnvironmentServiceSetup;
|
||||||
pluginDependencies: ReadonlyMap<PluginName, PluginName[]>;
|
pluginDependencies: ReadonlyMap<PluginName, PluginName[]>;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ValuesType } from 'utility-types';
|
import { ValuesType, UnionToIntersection } from 'utility-types';
|
||||||
import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||||
|
|
||||||
type InvalidAggregationRequest = unknown;
|
type InvalidAggregationRequest = unknown;
|
||||||
|
@ -21,11 +21,15 @@ type KeyOfSource<T> = Record<
|
||||||
(T extends Record<string, { terms: { missing_bucket: true } }> ? null : never) | string | number
|
(T extends Record<string, { terms: { missing_bucket: true } }> ? null : never) | string | number
|
||||||
>;
|
>;
|
||||||
|
|
||||||
type KeysOfSources<T extends any[]> = T extends [infer U, ...infer V]
|
type KeysOfSources<T extends any[]> = T extends [any]
|
||||||
? KeyOfSource<U> & KeysOfSources<V>
|
? KeyOfSource<T[0]>
|
||||||
: T extends Array<infer U>
|
: T extends [any, any]
|
||||||
? KeyOfSource<U>
|
? KeyOfSource<T[0]> & KeyOfSource<T[1]>
|
||||||
: {};
|
: T extends [any, any, any]
|
||||||
|
? KeyOfSource<T[0]> & KeyOfSource<T[1]> & KeyOfSource<T[2]>
|
||||||
|
: T extends [any, any, any, any]
|
||||||
|
? KeyOfSource<T[0]> & KeyOfSource<T[1]> & KeyOfSource<T[2]> & KeyOfSource<T[3]>
|
||||||
|
: Record<string, null | string | number>;
|
||||||
|
|
||||||
type CompositeKeysOf<TAggregationContainer extends estypes.AggregationsAggregationContainer> =
|
type CompositeKeysOf<TAggregationContainer extends estypes.AggregationsAggregationContainer> =
|
||||||
TAggregationContainer extends {
|
TAggregationContainer extends {
|
||||||
|
@ -36,6 +40,13 @@ type CompositeKeysOf<TAggregationContainer extends estypes.AggregationsAggregati
|
||||||
|
|
||||||
type Source = estypes.SearchSourceFilter | boolean | estypes.Fields;
|
type Source = estypes.SearchSourceFilter | boolean | estypes.Fields;
|
||||||
|
|
||||||
|
type TopMetricKeysOf<TAggregationContainer extends estypes.AggregationsAggregationContainer> =
|
||||||
|
TAggregationContainer extends { top_metrics: { metrics: { field: infer TField } } }
|
||||||
|
? TField
|
||||||
|
: TAggregationContainer extends { top_metrics: { metrics: Array<{ field: infer TField }> } }
|
||||||
|
? TField
|
||||||
|
: string;
|
||||||
|
|
||||||
type ValueTypeOfField<T> = T extends Record<string, string | number>
|
type ValueTypeOfField<T> = T extends Record<string, string | number>
|
||||||
? ValuesType<T>
|
? ValuesType<T>
|
||||||
: T extends Array<infer U>
|
: T extends Array<infer U>
|
||||||
|
@ -532,12 +543,7 @@ export type AggregateOf<
|
||||||
top_metrics: {
|
top_metrics: {
|
||||||
top: Array<{
|
top: Array<{
|
||||||
sort: number[] | string[];
|
sort: number[] | string[];
|
||||||
metrics: Record<
|
metrics: Record<TopMetricKeysOf<TAggregationContainer>, string | number | null>;
|
||||||
TAggregationContainer extends Record<string, { metrics: Array<{ field: infer TKeys }> }>
|
|
||||||
? TKeys
|
|
||||||
: string,
|
|
||||||
string | number | null
|
|
||||||
>;
|
|
||||||
}>;
|
}>;
|
||||||
};
|
};
|
||||||
weighted_avg: { value: number | null };
|
weighted_avg: { value: number | null };
|
||||||
|
@ -547,8 +553,8 @@ export type AggregateOf<
|
||||||
// t_test: {} not defined
|
// t_test: {} not defined
|
||||||
})[ValidAggregationKeysOf<TAggregationContainer> & AggregationTypeName];
|
})[ValidAggregationKeysOf<TAggregationContainer> & AggregationTypeName];
|
||||||
|
|
||||||
type AggregateOfMap<TAggregationMap extends AggregationMap, TDocument> = {
|
type AggregateOfMap<TAggregationMap extends AggregationMap | undefined, TDocument> = {
|
||||||
[TAggregationName in keyof TAggregationMap]: TAggregationMap[TAggregationName] extends estypes.AggregationsAggregationContainer
|
[TAggregationName in keyof TAggregationMap]: Required<TAggregationMap>[TAggregationName] extends estypes.AggregationsAggregationContainer
|
||||||
? AggregateOf<TAggregationMap[TAggregationName], TDocument>
|
? AggregateOf<TAggregationMap[TAggregationName], TDocument>
|
||||||
: never; // using never means we effectively ignore optional keys, using {} creates a union type of { ... } | {}
|
: never; // using never means we effectively ignore optional keys, using {} creates a union type of { ... } | {}
|
||||||
};
|
};
|
||||||
|
@ -567,7 +573,7 @@ type SearchResponseOf<
|
||||||
> = SubAggregateOf<TAggregationRequest, TDocument>;
|
> = SubAggregateOf<TAggregationRequest, TDocument>;
|
||||||
|
|
||||||
// if aggregation response cannot be inferred, fall back to unknown
|
// if aggregation response cannot be inferred, fall back to unknown
|
||||||
type WrapAggregationResponse<T> = keyof T extends never
|
type WrapAggregationResponse<T> = keyof UnionToIntersection<T> extends never
|
||||||
? { aggregations?: unknown }
|
? { aggregations?: unknown }
|
||||||
: { aggregations?: T };
|
: { aggregations?: T };
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
import { ToolingLog } from '@kbn/dev-utils';
|
import { ToolingLog } from '@kbn/dev-utils';
|
||||||
|
|
||||||
import { Config, createRunner } from './lib';
|
import { Config, createRunner, Task, GlobalTask } from './lib';
|
||||||
import * as Tasks from './tasks';
|
import * as Tasks from './tasks';
|
||||||
|
|
||||||
export interface BuildOptions {
|
export interface BuildOptions {
|
||||||
|
@ -32,12 +32,12 @@ export interface BuildOptions {
|
||||||
createExamplePlugins: boolean;
|
createExamplePlugins: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function buildDistributables(log: ToolingLog, options: BuildOptions) {
|
export async function buildDistributables(log: ToolingLog, options: BuildOptions): Promise<void> {
|
||||||
log.verbose('building distributables with options:', options);
|
log.verbose('building distributables with options:', options);
|
||||||
|
|
||||||
const config = await Config.create(options);
|
const config: Config = await Config.create(options);
|
||||||
|
|
||||||
const run = createRunner({
|
const run: (task: Task | GlobalTask) => Promise<void> = createRunner({
|
||||||
config,
|
config,
|
||||||
log,
|
log,
|
||||||
});
|
});
|
||||||
|
|
|
@ -97,6 +97,7 @@ export const IGNORE_DIRECTORY_GLOBS = [
|
||||||
'packages/kbn-pm/src/utils/__fixtures__/*',
|
'packages/kbn-pm/src/utils/__fixtures__/*',
|
||||||
'x-pack/dev-tools',
|
'x-pack/dev-tools',
|
||||||
'packages/kbn-optimizer/src/__fixtures__/mock_repo/x-pack',
|
'packages/kbn-optimizer/src/__fixtures__/mock_repo/x-pack',
|
||||||
|
'typings/*',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -75,7 +75,7 @@ export async function runTypeCheckCli() {
|
||||||
[
|
[
|
||||||
'--max-old-space-size=5120',
|
'--max-old-space-size=5120',
|
||||||
require.resolve('typescript/bin/tsc'),
|
require.resolve('typescript/bin/tsc'),
|
||||||
...['--project', p.tsConfigPath, ...(flags.verbose ? ['--verbose'] : [])],
|
...['--project', p.tsConfigPath],
|
||||||
...tscArgs,
|
...tscArgs,
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|
|
@ -492,7 +492,9 @@ export class SenseEditor {
|
||||||
return result.join('\n');
|
return result.join('\n');
|
||||||
};
|
};
|
||||||
|
|
||||||
updateActionsBar = () => this.coreEditor.legacyUpdateUI(this.currentReqRange);
|
updateActionsBar = () => {
|
||||||
|
return this.coreEditor.legacyUpdateUI(this.currentReqRange);
|
||||||
|
};
|
||||||
|
|
||||||
getCoreEditor() {
|
getCoreEditor() {
|
||||||
return this.coreEditor;
|
return this.coreEditor;
|
||||||
|
|
|
@ -17,7 +17,7 @@ import classNames from 'classnames';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
import ReactGridLayout, { Layout } from 'react-grid-layout';
|
import ReactGridLayout, { Layout, ReactGridLayoutProps } from 'react-grid-layout';
|
||||||
import { GridData } from '../../../../common';
|
import { GridData } from '../../../../common';
|
||||||
import { ViewMode } from '../../../services/embeddable';
|
import { ViewMode } from '../../../services/embeddable';
|
||||||
import { DASHBOARD_GRID_COLUMN_COUNT, DASHBOARD_GRID_HEIGHT } from '../dashboard_constants';
|
import { DASHBOARD_GRID_COLUMN_COUNT, DASHBOARD_GRID_HEIGHT } from '../dashboard_constants';
|
||||||
|
@ -54,9 +54,9 @@ function ResponsiveGrid({
|
||||||
size: { width: number };
|
size: { width: number };
|
||||||
isViewMode: boolean;
|
isViewMode: boolean;
|
||||||
layout: Layout[];
|
layout: Layout[];
|
||||||
onLayoutChange: () => void;
|
onLayoutChange: ReactGridLayoutProps['onLayoutChange'];
|
||||||
children: JSX.Element[];
|
children: JSX.Element[];
|
||||||
maximizedPanelId: string;
|
maximizedPanelId?: string;
|
||||||
useMargins: boolean;
|
useMargins: boolean;
|
||||||
}) {
|
}) {
|
||||||
// This is to prevent a bug where view mode changes when the panel is expanded. View mode changes will trigger
|
// This is to prevent a bug where view mode changes when the panel is expanded. View mode changes will trigger
|
||||||
|
|
|
@ -383,7 +383,7 @@ export class SearchInterceptor {
|
||||||
|
|
||||||
private showTimeoutErrorMemoized = memoize(
|
private showTimeoutErrorMemoized = memoize(
|
||||||
this.showTimeoutErrorToast,
|
this.showTimeoutErrorToast,
|
||||||
(_: SearchTimeoutError, sessionId: string) => {
|
(_: SearchTimeoutError, sessionId?: string) => {
|
||||||
return sessionId;
|
return sessionId;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -400,12 +400,7 @@ export class SearchInterceptor {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
private showRestoreWarning = memoize(
|
private showRestoreWarning = memoize(this.showRestoreWarningToast);
|
||||||
this.showRestoreWarningToast,
|
|
||||||
(_: SearchTimeoutError, sessionId: string) => {
|
|
||||||
return sessionId;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show one error notification per session.
|
* Show one error notification per session.
|
||||||
|
|
|
@ -25,7 +25,7 @@ import { FilterBar } from '../filter_bar/filter_bar';
|
||||||
import { SavedQueryMeta, SaveQueryForm } from '../saved_query_form';
|
import { SavedQueryMeta, SaveQueryForm } from '../saved_query_form';
|
||||||
import { SavedQueryManagementComponent } from '../saved_query_management';
|
import { SavedQueryManagementComponent } from '../saved_query_management';
|
||||||
|
|
||||||
interface SearchBarInjectedDeps {
|
export interface SearchBarInjectedDeps {
|
||||||
kibana: KibanaReactContextValue<IDataPluginServices>;
|
kibana: KibanaReactContextValue<IDataPluginServices>;
|
||||||
intl: InjectedIntl;
|
intl: InjectedIntl;
|
||||||
timeHistory: TimeHistoryContract;
|
timeHistory: TimeHistoryContract;
|
||||||
|
|
|
@ -62,15 +62,15 @@ export function usageProvider(core: CoreSetup): SearchUsage {
|
||||||
{ maxWait: 5000 }
|
{ maxWait: 5000 }
|
||||||
);
|
);
|
||||||
|
|
||||||
const trackSuccess = (duration: number) => {
|
const trackSuccess = async (duration: number) => {
|
||||||
collectedUsage.successCount++;
|
collectedUsage.successCount++;
|
||||||
collectedUsage.totalDuration += duration;
|
collectedUsage.totalDuration += duration;
|
||||||
return updateSearchUsage();
|
return await updateSearchUsage();
|
||||||
};
|
};
|
||||||
|
|
||||||
const trackError = () => {
|
const trackError = async () => {
|
||||||
collectedUsage.errorCount++;
|
collectedUsage.errorCount++;
|
||||||
return updateSearchUsage();
|
return await updateSearchUsage();
|
||||||
};
|
};
|
||||||
|
|
||||||
return { trackSuccess, trackError };
|
return { trackSuccess, trackError };
|
||||||
|
|
|
@ -26,7 +26,7 @@ export class NumberFormatEditor extends DefaultFormatEditor<NumberFormatEditorPa
|
||||||
static contextType = contextType;
|
static contextType = contextType;
|
||||||
static formatId = formatId;
|
static formatId = formatId;
|
||||||
|
|
||||||
context!: React.ContextType<typeof contextType>;
|
declare context: React.ContextType<typeof contextType>;
|
||||||
state = {
|
state = {
|
||||||
...defaultState,
|
...defaultState,
|
||||||
sampleInputs: [10000, 12.345678, -1, -999, 0.52],
|
sampleInputs: [10000, 12.345678, -1, -999, 0.52],
|
||||||
|
|
|
@ -51,7 +51,7 @@ interface TestScriptState {
|
||||||
export class TestScript extends Component<TestScriptProps, TestScriptState> {
|
export class TestScript extends Component<TestScriptProps, TestScriptState> {
|
||||||
static contextType = contextType;
|
static contextType = contextType;
|
||||||
|
|
||||||
public readonly context!: IndexPatternManagmentContextValue;
|
public declare readonly context: IndexPatternManagmentContextValue;
|
||||||
|
|
||||||
defaultProps = {
|
defaultProps = {
|
||||||
name: 'myScriptedField',
|
name: 'myScriptedField',
|
||||||
|
|
|
@ -125,7 +125,7 @@ export interface FieldEdiorProps {
|
||||||
export class FieldEditor extends PureComponent<FieldEdiorProps, FieldEditorState> {
|
export class FieldEditor extends PureComponent<FieldEdiorProps, FieldEditorState> {
|
||||||
static contextType = contextType;
|
static contextType = contextType;
|
||||||
|
|
||||||
public readonly context!: IndexPatternManagmentContextValue;
|
public declare readonly context: IndexPatternManagmentContextValue;
|
||||||
|
|
||||||
supportedLangs: estypes.ScriptLanguage[] = [];
|
supportedLangs: estypes.ScriptLanguage[] = [];
|
||||||
deprecatedLangs: estypes.ScriptLanguage[] = [];
|
deprecatedLangs: estypes.ScriptLanguage[] = [];
|
||||||
|
|
|
@ -31,8 +31,10 @@ export class DiscoverSearchSessionManager {
|
||||||
* skips if `searchSessionId` matches current search session id
|
* skips if `searchSessionId` matches current search session id
|
||||||
*/
|
*/
|
||||||
readonly newSearchSessionIdFromURL$: Rx.Observable<string | null>;
|
readonly newSearchSessionIdFromURL$: Rx.Observable<string | null>;
|
||||||
|
private readonly deps: DiscoverSearchSessionManagerDeps;
|
||||||
|
|
||||||
constructor(private readonly deps: DiscoverSearchSessionManagerDeps) {
|
constructor(deps: DiscoverSearchSessionManagerDeps) {
|
||||||
|
this.deps = deps;
|
||||||
this.newSearchSessionIdFromURL$ = createQueryParamObservable<string>(
|
this.newSearchSessionIdFromURL$ = createQueryParamObservable<string>(
|
||||||
this.deps.history,
|
this.deps.history,
|
||||||
SEARCH_SESSION_ID_QUERY_PARAM
|
SEARCH_SESSION_ID_QUERY_PARAM
|
||||||
|
|
|
@ -40,6 +40,10 @@ import { EmbeddableStart } from '../../embeddable/public';
|
||||||
|
|
||||||
import type { SpacesApi } from '../../../../x-pack/plugins/spaces/public';
|
import type { SpacesApi } from '../../../../x-pack/plugins/spaces/public';
|
||||||
|
|
||||||
|
export interface HistoryLocationState {
|
||||||
|
referrer: string;
|
||||||
|
}
|
||||||
|
|
||||||
export interface DiscoverServices {
|
export interface DiscoverServices {
|
||||||
addBasePath: (path: string) => string;
|
addBasePath: (path: string) => string;
|
||||||
capabilities: Capabilities;
|
capabilities: Capabilities;
|
||||||
|
@ -48,7 +52,7 @@ export interface DiscoverServices {
|
||||||
data: DataPublicPluginStart;
|
data: DataPublicPluginStart;
|
||||||
docLinks: DocLinksStart;
|
docLinks: DocLinksStart;
|
||||||
embeddable: EmbeddableStart;
|
embeddable: EmbeddableStart;
|
||||||
history: () => History;
|
history: () => History<HistoryLocationState>;
|
||||||
theme: ChartsPluginStart['theme'];
|
theme: ChartsPluginStart['theme'];
|
||||||
filterManager: FilterManager;
|
filterManager: FilterManager;
|
||||||
fieldFormats: FieldFormatsStart;
|
fieldFormats: FieldFormatsStart;
|
||||||
|
|
|
@ -10,7 +10,7 @@ import { once } from 'lodash';
|
||||||
import { createHashHistory } from 'history';
|
import { createHashHistory } from 'history';
|
||||||
import type { ScopedHistory, AppMountParameters } from 'kibana/public';
|
import type { ScopedHistory, AppMountParameters } from 'kibana/public';
|
||||||
import type { UiActionsStart } from 'src/plugins/ui_actions/public';
|
import type { UiActionsStart } from 'src/plugins/ui_actions/public';
|
||||||
import { DiscoverServices } from './build_services';
|
import { DiscoverServices, HistoryLocationState } from './build_services';
|
||||||
import { createGetterSetter } from '../../kibana_utils/public';
|
import { createGetterSetter } from '../../kibana_utils/public';
|
||||||
import { DocViewsRegistry } from './services/doc_views/doc_views_registry';
|
import { DocViewsRegistry } from './services/doc_views/doc_views_registry';
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ export const [getDocViewsRegistry, setDocViewsRegistry] =
|
||||||
* Makes sure discover and context are using one instance of history.
|
* Makes sure discover and context are using one instance of history.
|
||||||
*/
|
*/
|
||||||
export const getHistory = once(() => {
|
export const getHistory = once(() => {
|
||||||
const history = createHashHistory();
|
const history = createHashHistory<HistoryLocationState>();
|
||||||
history.listen(() => {
|
history.listen(() => {
|
||||||
// keep at least one listener so that `history.location` always in sync
|
// keep at least one listener so that `history.location` always in sync
|
||||||
});
|
});
|
||||||
|
|
|
@ -94,7 +94,7 @@ export class AttributeService<
|
||||||
? await this.options.unwrapMethod(input.savedObjectId)
|
? await this.options.unwrapMethod(input.savedObjectId)
|
||||||
: await this.defaultUnwrapMethod(input);
|
: await this.defaultUnwrapMethod(input);
|
||||||
}
|
}
|
||||||
return { attributes: input[ATTRIBUTE_SERVICE_KEY] };
|
return { attributes: (input as ValType)[ATTRIBUTE_SERVICE_KEY] };
|
||||||
}
|
}
|
||||||
|
|
||||||
public async wrapAttributes(
|
public async wrapAttributes(
|
||||||
|
@ -141,7 +141,7 @@ export class AttributeService<
|
||||||
|
|
||||||
getInputAsValueType = async (input: ValType | RefType): Promise<ValType> => {
|
getInputAsValueType = async (input: ValType | RefType): Promise<ValType> => {
|
||||||
if (!this.inputIsRefType(input)) {
|
if (!this.inputIsRefType(input)) {
|
||||||
return input;
|
return input as ValType;
|
||||||
}
|
}
|
||||||
const { attributes } = await this.unwrapAttributes(input);
|
const { attributes } = await this.unwrapAttributes(input);
|
||||||
const { savedObjectId, ...originalInputToPropagate } = input;
|
const { savedObjectId, ...originalInputToPropagate } = input;
|
||||||
|
@ -162,7 +162,7 @@ export class AttributeService<
|
||||||
const onSave = async (props: OnSaveProps): Promise<SaveResult> => {
|
const onSave = async (props: OnSaveProps): Promise<SaveResult> => {
|
||||||
await this.options.checkForDuplicateTitle(props);
|
await this.options.checkForDuplicateTitle(props);
|
||||||
try {
|
try {
|
||||||
const newAttributes = { ...input[ATTRIBUTE_SERVICE_KEY] };
|
const newAttributes = { ...(input as ValType)[ATTRIBUTE_SERVICE_KEY] };
|
||||||
newAttributes.title = props.newTitle;
|
newAttributes.title = props.newTitle;
|
||||||
const wrappedInput = (await this.wrapAttributes(newAttributes, true)) as RefType;
|
const wrappedInput = (await this.wrapAttributes(newAttributes, true)) as RefType;
|
||||||
|
|
||||||
|
@ -182,7 +182,11 @@ export class AttributeService<
|
||||||
<SavedObjectSaveModal
|
<SavedObjectSaveModal
|
||||||
onSave={onSave}
|
onSave={onSave}
|
||||||
onClose={() => reject()}
|
onClose={() => reject()}
|
||||||
title={get(saveOptions, 'saveModalTitle', input[ATTRIBUTE_SERVICE_KEY].title)}
|
title={get(
|
||||||
|
saveOptions,
|
||||||
|
'saveModalTitle',
|
||||||
|
(input as ValType)[ATTRIBUTE_SERVICE_KEY].title
|
||||||
|
)}
|
||||||
showCopyOnSave={false}
|
showCopyOnSave={false}
|
||||||
objectType={this.type}
|
objectType={this.type}
|
||||||
showDescription={false}
|
showDescription={false}
|
||||||
|
|
|
@ -29,15 +29,17 @@ export const EMBEDDABLE_STATE_TRANSFER_STORAGE_KEY = 'EMBEDDABLE_STATE_TRANSFER'
|
||||||
export class EmbeddableStateTransfer {
|
export class EmbeddableStateTransfer {
|
||||||
public isTransferInProgress: boolean;
|
public isTransferInProgress: boolean;
|
||||||
private storage: Storage;
|
private storage: Storage;
|
||||||
|
private appList: ReadonlyMap<string, PublicAppInfo> | undefined;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private navigateToApp: ApplicationStart['navigateToApp'],
|
private navigateToApp: ApplicationStart['navigateToApp'],
|
||||||
currentAppId$: ApplicationStart['currentAppId$'],
|
currentAppId$: ApplicationStart['currentAppId$'],
|
||||||
private appList?: ReadonlyMap<string, PublicAppInfo> | undefined,
|
appList?: ReadonlyMap<string, PublicAppInfo> | undefined,
|
||||||
customStorage?: Storage
|
customStorage?: Storage
|
||||||
) {
|
) {
|
||||||
this.storage = customStorage ? customStorage : new Storage(sessionStorage);
|
this.storage = customStorage ? customStorage : new Storage(sessionStorage);
|
||||||
this.isTransferInProgress = false;
|
this.isTransferInProgress = false;
|
||||||
|
this.appList = appList;
|
||||||
currentAppId$.subscribe(() => {
|
currentAppId$.subscribe(() => {
|
||||||
this.isTransferInProgress = false;
|
this.isTransferInProgress = false;
|
||||||
});
|
});
|
||||||
|
|
|
@ -24,7 +24,11 @@ export class ExecutionContract<Input = unknown, Output = unknown, InspectorAdapt
|
||||||
return !finished;
|
return !finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(protected readonly execution: Execution<Input, Output, InspectorAdapters>) {}
|
protected readonly execution: Execution<Input, Output, InspectorAdapters>;
|
||||||
|
|
||||||
|
constructor(execution: Execution<Input, Output, InspectorAdapters>) {
|
||||||
|
this.execution = execution;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancel the execution of the expression. This will set abort signal
|
* Cancel the execution of the expression. This will set abort signal
|
||||||
|
|
|
@ -30,8 +30,9 @@ export class ExpressionType {
|
||||||
*/
|
*/
|
||||||
serialize?: (value: Serializable) => unknown;
|
serialize?: (value: Serializable) => unknown;
|
||||||
deserialize?: (serialized: unknown[]) => Serializable;
|
deserialize?: (serialized: unknown[]) => Serializable;
|
||||||
|
private readonly definition: AnyExpressionTypeDefinition;
|
||||||
|
|
||||||
constructor(private readonly definition: AnyExpressionTypeDefinition) {
|
constructor(definition: AnyExpressionTypeDefinition) {
|
||||||
const { name, help, deserialize, serialize, validate } = definition;
|
const { name, help, deserialize, serialize, validate } = definition;
|
||||||
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
@ -43,6 +44,7 @@ export class ExpressionType {
|
||||||
|
|
||||||
this.serialize = serialize;
|
this.serialize = serialize;
|
||||||
this.deserialize = deserialize;
|
this.deserialize = deserialize;
|
||||||
|
this.definition = definition;
|
||||||
}
|
}
|
||||||
|
|
||||||
getToFn = (
|
getToFn = (
|
||||||
|
|
|
@ -177,7 +177,7 @@ export class FieldFormatsRegistry {
|
||||||
|
|
||||||
return new ConcreteFieldFormat(params, this.getConfig);
|
return new ConcreteFieldFormat(params, this.getConfig);
|
||||||
},
|
},
|
||||||
(formatId: FieldFormatId, params: FieldFormatParams) =>
|
(formatId: FieldFormatId, params?: FieldFormatParams) =>
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
formatId,
|
formatId,
|
||||||
...params,
|
...params,
|
||||||
|
@ -212,10 +212,10 @@ export class FieldFormatsRegistry {
|
||||||
* https://lodash.com/docs#memoize
|
* https://lodash.com/docs#memoize
|
||||||
*
|
*
|
||||||
* @param {KBN_FIELD_TYPES} fieldType
|
* @param {KBN_FIELD_TYPES} fieldType
|
||||||
* @param {ES_FIELD_TYPES[]} esTypes
|
* @param {ES_FIELD_TYPES[] | undefined} esTypes
|
||||||
* @return {String}
|
* @return {String}
|
||||||
*/
|
*/
|
||||||
getDefaultInstanceCacheResolver(fieldType: KBN_FIELD_TYPES, esTypes: ES_FIELD_TYPES[]): string {
|
getDefaultInstanceCacheResolver(fieldType: KBN_FIELD_TYPES, esTypes?: ES_FIELD_TYPES[]): string {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return Array.isArray(esTypes) && esTypes.indexOf(fieldType) === -1
|
return Array.isArray(esTypes) && esTypes.indexOf(fieldType) === -1
|
||||||
? [fieldType, ...esTypes].join('-')
|
? [fieldType, ...esTypes].join('-')
|
||||||
|
|
|
@ -25,6 +25,10 @@ function isRangeControl(control: RangeControl | ListControl): control is RangeCo
|
||||||
return control.type === CONTROL_TYPES.RANGE;
|
return control.type === CONTROL_TYPES.RANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface UnknownControl {
|
||||||
|
type: string;
|
||||||
|
}
|
||||||
|
|
||||||
interface InputControlVisProps {
|
interface InputControlVisProps {
|
||||||
stageFilter: (controlIndex: number, newValue: any) => void;
|
stageFilter: (controlIndex: number, newValue: any) => void;
|
||||||
submitFilters: () => void;
|
submitFilters: () => void;
|
||||||
|
@ -90,7 +94,7 @@ export class InputControlVis extends Component<InputControlVisProps> {
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Unhandled control type ${control!.type}`);
|
throw new Error(`Unhandled control type ${(control as UnknownControl)!.type}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -12,7 +12,10 @@ import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '
|
||||||
import { FormattedMessage } from '@kbn/i18n-react';
|
import { FormattedMessage } from '@kbn/i18n-react';
|
||||||
import { CoreStart } from 'kibana/public';
|
import { CoreStart } from 'kibana/public';
|
||||||
import { RedirectAppLinks, useKibana } from '../../../../../../src/plugins/kibana_react/public';
|
import { RedirectAppLinks, useKibana } from '../../../../../../src/plugins/kibana_react/public';
|
||||||
import { FeatureCatalogueEntry } from '../../../../../../src/plugins/home/public';
|
import {
|
||||||
|
FeatureCatalogueEntry,
|
||||||
|
FeatureCatalogueCategory,
|
||||||
|
} from '../../../../../../src/plugins/home/public';
|
||||||
// @ts-expect-error untyped component
|
// @ts-expect-error untyped component
|
||||||
import { Synopsis } from '../synopsis';
|
import { Synopsis } from '../synopsis';
|
||||||
import { METRIC_TYPE, trackUiMetric } from '../../lib/ui_metric';
|
import { METRIC_TYPE, trackUiMetric } from '../../lib/ui_metric';
|
||||||
|
@ -94,8 +97,8 @@ AddData.propTypes = {
|
||||||
icon: PropTypes.string.isRequired,
|
icon: PropTypes.string.isRequired,
|
||||||
path: PropTypes.string.isRequired,
|
path: PropTypes.string.isRequired,
|
||||||
showOnHomePage: PropTypes.bool.isRequired,
|
showOnHomePage: PropTypes.bool.isRequired,
|
||||||
category: PropTypes.string.isRequired,
|
category: PropTypes.oneOf(Object.values(FeatureCatalogueCategory)).isRequired,
|
||||||
order: PropTypes.number,
|
order: PropTypes.number as PropTypes.Validator<number | undefined>,
|
||||||
})
|
}).isRequired
|
||||||
),
|
).isRequired,
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,7 +12,10 @@ import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiSpacer, EuiTitle } fro
|
||||||
import { FormattedMessage } from '@kbn/i18n-react';
|
import { FormattedMessage } from '@kbn/i18n-react';
|
||||||
import { CoreStart } from 'kibana/public';
|
import { CoreStart } from 'kibana/public';
|
||||||
import { RedirectAppLinks, useKibana } from '../../../../../../src/plugins/kibana_react/public';
|
import { RedirectAppLinks, useKibana } from '../../../../../../src/plugins/kibana_react/public';
|
||||||
import { FeatureCatalogueEntry } from '../../../../../../src/plugins/home/public';
|
import {
|
||||||
|
FeatureCatalogueEntry,
|
||||||
|
FeatureCatalogueCategory,
|
||||||
|
} from '../../../../../../src/plugins/home/public';
|
||||||
// @ts-expect-error untyped component
|
// @ts-expect-error untyped component
|
||||||
import { Synopsis } from '../synopsis';
|
import { Synopsis } from '../synopsis';
|
||||||
import { METRIC_TYPE, trackUiMetric } from '../../lib/ui_metric';
|
import { METRIC_TYPE, trackUiMetric } from '../../lib/ui_metric';
|
||||||
|
@ -81,8 +84,8 @@ ManageData.propTypes = {
|
||||||
icon: PropTypes.string.isRequired,
|
icon: PropTypes.string.isRequired,
|
||||||
path: PropTypes.string.isRequired,
|
path: PropTypes.string.isRequired,
|
||||||
showOnHomePage: PropTypes.bool.isRequired,
|
showOnHomePage: PropTypes.bool.isRequired,
|
||||||
category: PropTypes.string.isRequired,
|
category: PropTypes.oneOf(Object.values(FeatureCatalogueCategory)).isRequired,
|
||||||
order: PropTypes.number,
|
order: PropTypes.number as PropTypes.Validator<number | undefined>,
|
||||||
})
|
}).isRequired
|
||||||
),
|
).isRequired,
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,6 @@ import {
|
||||||
export class ControlGroupContainerFactory implements EmbeddableFactoryDefinition {
|
export class ControlGroupContainerFactory implements EmbeddableFactoryDefinition {
|
||||||
public readonly isContainerType = true;
|
public readonly isContainerType = true;
|
||||||
public readonly type = CONTROL_GROUP_TYPE;
|
public readonly type = CONTROL_GROUP_TYPE;
|
||||||
|
|
||||||
public inject: EmbeddablePersistableStateService['inject'];
|
public inject: EmbeddablePersistableStateService['inject'];
|
||||||
public extract: EmbeddablePersistableStateService['extract'];
|
public extract: EmbeddablePersistableStateService['extract'];
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ describe('useEditorUpdates', () => {
|
||||||
|
|
||||||
describe('handle linked search changes', () => {
|
describe('handle linked search changes', () => {
|
||||||
test('should update saved search id in saved instance', () => {
|
test('should update saved search id in saved instance', () => {
|
||||||
// @ts-expect-error
|
// @ts-expect-error 4.3.5 upgrade
|
||||||
savedVisInstance.savedSearch = {
|
savedVisInstance.savedSearch = {
|
||||||
id: 'saved_search_id',
|
id: 'saved_search_id',
|
||||||
};
|
};
|
||||||
|
@ -287,7 +287,8 @@ describe('useEditorUpdates', () => {
|
||||||
savedVisInstance.savedVis = {
|
savedVisInstance.savedVis = {
|
||||||
savedSearchId: 'saved_search_id',
|
savedSearchId: 'saved_search_id',
|
||||||
};
|
};
|
||||||
// @ts-expect-error
|
|
||||||
|
// @ts-expect-error 4.3.5 upgrade
|
||||||
savedVisInstance.savedSearch = {
|
savedVisInstance.savedSearch = {
|
||||||
id: 'saved_search_id',
|
id: 'saved_search_id',
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"emitDeclarationOnly": true,
|
"emitDeclarationOnly": true,
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
"declarationMap": true,
|
"declarationMap": true,
|
||||||
"types": ["node", "resize-observer-polyfill", "@emotion/react/types/css-prop"]
|
"types": ["node", "@emotion/react/types/css-prop"]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"**/*",
|
"**/*",
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
"@emotion/core": [
|
"@emotion/core": [
|
||||||
"typings/@emotion"
|
"typings/@emotion"
|
||||||
],
|
],
|
||||||
|
"resize-observer-polyfill": [
|
||||||
|
"typings/resize-observer-polyfill"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
// Support .tsx files and transform JSX into calls to React.createElement
|
// Support .tsx files and transform JSX into calls to React.createElement
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
|
@ -68,7 +71,6 @@
|
||||||
"flot",
|
"flot",
|
||||||
"jest-styled-components",
|
"jest-styled-components",
|
||||||
"@testing-library/jest-dom",
|
"@testing-library/jest-dom",
|
||||||
"resize-observer-polyfill",
|
|
||||||
"@emotion/react/types/css-prop"
|
"@emotion/react/types/css-prop"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
10
typings/resize-observer-polyfill/index.d.ts
vendored
Normal file
10
typings/resize-observer-polyfill/index.d.ts
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// eslint-disable-next-line import/no-default-export
|
||||||
|
export default ResizeObserver;
|
|
@ -33,7 +33,9 @@ export interface Params {
|
||||||
export class DashboardToDiscoverDrilldown
|
export class DashboardToDiscoverDrilldown
|
||||||
implements Drilldown<Config, ApplyGlobalFilterActionContext>
|
implements Drilldown<Config, ApplyGlobalFilterActionContext>
|
||||||
{
|
{
|
||||||
constructor(protected readonly params: Params) {}
|
constructor(protected readonly params: Params) {
|
||||||
|
this.ReactCollectConfig = (props) => <CollectConfigContainer {...props} params={this.params} />;
|
||||||
|
}
|
||||||
|
|
||||||
public readonly id = SAMPLE_DASHBOARD_TO_DISCOVER_DRILLDOWN;
|
public readonly id = SAMPLE_DASHBOARD_TO_DISCOVER_DRILLDOWN;
|
||||||
|
|
||||||
|
@ -47,9 +49,7 @@ export class DashboardToDiscoverDrilldown
|
||||||
return [APPLY_FILTER_TRIGGER];
|
return [APPLY_FILTER_TRIGGER];
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly ReactCollectConfig: React.FC<CollectConfigProps> = (props) => (
|
private readonly ReactCollectConfig!: React.FC<CollectConfigProps>;
|
||||||
<CollectConfigContainer {...props} params={this.params} />
|
|
||||||
);
|
|
||||||
|
|
||||||
public readonly CollectConfig = reactToUiComponent(this.ReactCollectConfig);
|
public readonly CollectConfig = reactToUiComponent(this.ReactCollectConfig);
|
||||||
|
|
||||||
|
|
|
@ -22,14 +22,14 @@
|
||||||
"actions",
|
"actions",
|
||||||
"alerting",
|
"alerting",
|
||||||
"cloud",
|
"cloud",
|
||||||
|
"fleet",
|
||||||
"home",
|
"home",
|
||||||
"maps",
|
"maps",
|
||||||
"ml",
|
"ml",
|
||||||
"security",
|
"security",
|
||||||
"spaces",
|
"spaces",
|
||||||
"taskManager",
|
"taskManager",
|
||||||
"usageCollection",
|
"usageCollection"
|
||||||
"fleet"
|
|
||||||
],
|
],
|
||||||
"server": true,
|
"server": true,
|
||||||
"ui": true,
|
"ui": true,
|
||||||
|
|
|
@ -130,6 +130,7 @@ export function UXAppRoot({
|
||||||
services={{ ...core, ...plugins, embeddable, data }}
|
services={{ ...core, ...plugins, embeddable, data }}
|
||||||
>
|
>
|
||||||
<i18nCore.Context>
|
<i18nCore.Context>
|
||||||
|
{/* @ts-expect-error Type instantiation is excessively deep */}
|
||||||
<RouterProvider history={history} router={uxRouter}>
|
<RouterProvider history={history} router={uxRouter}>
|
||||||
<InspectorContextProvider>
|
<InspectorContextProvider>
|
||||||
<UrlParamsProvider>
|
<UrlParamsProvider>
|
||||||
|
|
|
@ -46,7 +46,9 @@ function useServicesFetcher() {
|
||||||
|
|
||||||
const {
|
const {
|
||||||
query: { rangeFrom, rangeTo, environment, kuery },
|
query: { rangeFrom, rangeTo, environment, kuery },
|
||||||
} = useApmParams('/services/{serviceName}', '/services');
|
} =
|
||||||
|
// @ts-ignore 4.3.5 upgrade - Type instantiation is excessively deep and possibly infinite.
|
||||||
|
useApmParams('/services/{serviceName}', '/services');
|
||||||
|
|
||||||
const { start, end } = useTimeRange({ rangeFrom, rangeTo });
|
const { start, end } = useTimeRange({ rangeFrom, rangeTo });
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ export function BackendContents({
|
||||||
start,
|
start,
|
||||||
end,
|
end,
|
||||||
}: ContentsProps) {
|
}: ContentsProps) {
|
||||||
|
// @ts-ignore 4.3.5 upgrade - Type instantiation is excessively deep and possibly infinite.
|
||||||
const { query } = useApmParams(
|
const { query } = useApmParams(
|
||||||
'/service-map',
|
'/service-map',
|
||||||
'/services/{serviceName}/service-map'
|
'/services/{serviceName}/service-map'
|
||||||
|
|
|
@ -138,6 +138,7 @@ function UnoptimizedManagedTable<T>(props: Props<T>) {
|
||||||
}, [isLoading, noItemsMessage]);
|
}, [isLoading, noItemsMessage]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
// @ts-expect-error TS thinks pagination should be non-nullable, but it's not
|
||||||
<EuiBasicTable
|
<EuiBasicTable
|
||||||
loading={isLoading}
|
loading={isLoading}
|
||||||
error={
|
error={
|
||||||
|
|
|
@ -121,6 +121,7 @@ export function TimeComparison() {
|
||||||
const { isSmall } = useBreakpoints();
|
const { isSmall } = useBreakpoints();
|
||||||
const {
|
const {
|
||||||
query: { rangeFrom, rangeTo },
|
query: { rangeFrom, rangeTo },
|
||||||
|
// @ts-expect-error Type instantiation is excessively deep and possibly infinite.
|
||||||
} = useApmParams('/services', '/backends/*', '/services/{serviceName}');
|
} = useApmParams('/services', '/backends/*', '/services/{serviceName}');
|
||||||
|
|
||||||
const { exactStart, exactEnd } = useTimeRange({
|
const { exactStart, exactEnd } = useTimeRange({
|
||||||
|
|
|
@ -13,9 +13,7 @@ export function useApmRouter() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { core } = useApmPluginContext();
|
const { core } = useApmPluginContext();
|
||||||
|
|
||||||
const link = (...args: any[]) => {
|
const link = (...args: [any]) => {
|
||||||
// a little too much effort needed to satisfy TS here
|
|
||||||
// @ts-ignore
|
|
||||||
return core.http.basePath.prepend('/app/apm' + router.link(...args));
|
return core.http.basePath.prepend('/app/apm' + router.link(...args));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,9 @@ import {
|
||||||
} from '../../../../../../../../src/core/server/mocks';
|
} from '../../../../../../../../src/core/server/mocks';
|
||||||
import { createHttpServer } from 'src/core/server/test_utils';
|
import { createHttpServer } from 'src/core/server/test_utils';
|
||||||
import supertest from 'supertest';
|
import supertest from 'supertest';
|
||||||
import { createApmEventClient } from '.';
|
import { APMEventClient } from '.';
|
||||||
|
|
||||||
describe('createApmEventClient', () => {
|
describe('APMEventClient', () => {
|
||||||
let server: ReturnType<typeof createHttpServer>;
|
let server: ReturnType<typeof createHttpServer>;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
@ -38,7 +38,7 @@ describe('createApmEventClient', () => {
|
||||||
router.get(
|
router.get(
|
||||||
{ path: '/', validate: false },
|
{ path: '/', validate: false },
|
||||||
async (context, request, res) => {
|
async (context, request, res) => {
|
||||||
const eventClient = createApmEventClient({
|
const eventClient = new APMEventClient({
|
||||||
esClient: {
|
esClient: {
|
||||||
search: async (
|
search: async (
|
||||||
params: any,
|
params: any,
|
||||||
|
|
|
@ -57,26 +57,13 @@ type TypeOfProcessorEvent<T extends ProcessorEvent> = {
|
||||||
profile: Profile;
|
profile: Profile;
|
||||||
}[T];
|
}[T];
|
||||||
|
|
||||||
type ESSearchRequestOf<TParams extends APMEventESSearchRequest> = Omit<
|
|
||||||
TParams,
|
|
||||||
'apm'
|
|
||||||
> & { index: string[] | string };
|
|
||||||
|
|
||||||
type TypedSearchResponse<TParams extends APMEventESSearchRequest> =
|
type TypedSearchResponse<TParams extends APMEventESSearchRequest> =
|
||||||
InferSearchResponseOf<
|
InferSearchResponseOf<
|
||||||
TypeOfProcessorEvent<ValuesType<TParams['apm']['events']>>,
|
TypeOfProcessorEvent<ValuesType<TParams['apm']['events']>>,
|
||||||
ESSearchRequestOf<TParams>
|
TParams
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export type APMEventClient = ReturnType<typeof createApmEventClient>;
|
export interface APMEventClientConfig {
|
||||||
|
|
||||||
export function createApmEventClient({
|
|
||||||
esClient,
|
|
||||||
debug,
|
|
||||||
request,
|
|
||||||
indices,
|
|
||||||
options: { includeFrozen } = { includeFrozen: false },
|
|
||||||
}: {
|
|
||||||
esClient: ElasticsearchClient;
|
esClient: ElasticsearchClient;
|
||||||
debug: boolean;
|
debug: boolean;
|
||||||
request: KibanaRequest;
|
request: KibanaRequest;
|
||||||
|
@ -84,102 +71,119 @@ export function createApmEventClient({
|
||||||
options: {
|
options: {
|
||||||
includeFrozen: boolean;
|
includeFrozen: boolean;
|
||||||
};
|
};
|
||||||
}) {
|
}
|
||||||
return {
|
|
||||||
async search<TParams extends APMEventESSearchRequest>(
|
export class APMEventClient {
|
||||||
operationName: string,
|
private readonly esClient: ElasticsearchClient;
|
||||||
params: TParams
|
private readonly debug: boolean;
|
||||||
): Promise<TypedSearchResponse<TParams>> {
|
private readonly request: KibanaRequest;
|
||||||
const withProcessorEventFilter = unpackProcessorEvents(params, indices);
|
private readonly indices: ApmIndicesConfig;
|
||||||
|
private readonly includeFrozen: boolean;
|
||||||
const { includeLegacyData = false } = params.apm;
|
|
||||||
|
constructor(config: APMEventClientConfig) {
|
||||||
const withPossibleLegacyDataFilter = !includeLegacyData
|
this.esClient = config.esClient;
|
||||||
? addFilterToExcludeLegacyData(withProcessorEventFilter)
|
this.debug = config.debug;
|
||||||
: withProcessorEventFilter;
|
this.request = config.request;
|
||||||
|
this.indices = config.indices;
|
||||||
const searchParams = {
|
this.includeFrozen = config.options.includeFrozen;
|
||||||
...withPossibleLegacyDataFilter,
|
}
|
||||||
...(includeFrozen ? { ignore_throttled: false } : {}),
|
|
||||||
ignore_unavailable: true,
|
async search<TParams extends APMEventESSearchRequest>(
|
||||||
preference: 'any',
|
operationName: string,
|
||||||
};
|
params: TParams
|
||||||
|
): Promise<TypedSearchResponse<TParams>> {
|
||||||
// only "search" operation is currently supported
|
const withProcessorEventFilter = unpackProcessorEvents(
|
||||||
const requestType = 'search';
|
params,
|
||||||
|
this.indices
|
||||||
return callAsyncWithDebug({
|
);
|
||||||
cb: () => {
|
|
||||||
const searchPromise = withApmSpan(operationName, () => {
|
const { includeLegacyData = false } = params.apm;
|
||||||
const controller = new AbortController();
|
|
||||||
return cancelEsRequestOnAbort(
|
const withPossibleLegacyDataFilter = !includeLegacyData
|
||||||
esClient.search(searchParams, { signal: controller.signal }),
|
? addFilterToExcludeLegacyData(withProcessorEventFilter)
|
||||||
request,
|
: withProcessorEventFilter;
|
||||||
controller
|
|
||||||
);
|
const searchParams = {
|
||||||
});
|
...withPossibleLegacyDataFilter,
|
||||||
|
...(this.includeFrozen ? { ignore_throttled: false } : {}),
|
||||||
return unwrapEsResponse(searchPromise);
|
ignore_unavailable: true,
|
||||||
},
|
preference: 'any',
|
||||||
getDebugMessage: () => ({
|
};
|
||||||
body: getDebugBody({
|
|
||||||
params: searchParams,
|
// only "search" operation is currently supported
|
||||||
requestType,
|
const requestType = 'search';
|
||||||
operationName,
|
|
||||||
}),
|
return callAsyncWithDebug({
|
||||||
title: getDebugTitle(request),
|
cb: () => {
|
||||||
}),
|
const searchPromise = withApmSpan(operationName, () => {
|
||||||
isCalledWithInternalUser: false,
|
const controller = new AbortController();
|
||||||
debug,
|
return cancelEsRequestOnAbort(
|
||||||
request,
|
this.esClient.search(searchParams, { signal: controller.signal }),
|
||||||
requestType,
|
this.request,
|
||||||
operationName,
|
controller
|
||||||
requestParams: searchParams,
|
);
|
||||||
});
|
});
|
||||||
},
|
|
||||||
|
return unwrapEsResponse(searchPromise);
|
||||||
async termsEnum(
|
},
|
||||||
operationName: string,
|
getDebugMessage: () => ({
|
||||||
params: APMEventESTermsEnumRequest
|
body: getDebugBody({
|
||||||
): Promise<TermsEnumResponse> {
|
params: searchParams,
|
||||||
const requestType = 'terms_enum';
|
requestType,
|
||||||
const { index } = unpackProcessorEvents(params, indices);
|
operationName,
|
||||||
|
}),
|
||||||
return callAsyncWithDebug({
|
title: getDebugTitle(this.request),
|
||||||
cb: () => {
|
}),
|
||||||
const { apm, ...rest } = params;
|
isCalledWithInternalUser: false,
|
||||||
const termsEnumPromise = withApmSpan(operationName, () => {
|
debug: this.debug,
|
||||||
const controller = new AbortController();
|
request: this.request,
|
||||||
return cancelEsRequestOnAbort(
|
requestType,
|
||||||
esClient.termsEnum(
|
operationName,
|
||||||
{
|
requestParams: searchParams,
|
||||||
index: Array.isArray(index) ? index.join(',') : index,
|
});
|
||||||
...rest,
|
}
|
||||||
},
|
|
||||||
{ signal: controller.signal }
|
async termsEnum(
|
||||||
),
|
operationName: string,
|
||||||
request,
|
params: APMEventESTermsEnumRequest
|
||||||
controller
|
): Promise<TermsEnumResponse> {
|
||||||
);
|
const requestType = 'terms_enum';
|
||||||
});
|
const { index } = unpackProcessorEvents(params, this.indices);
|
||||||
|
|
||||||
return unwrapEsResponse(termsEnumPromise);
|
return callAsyncWithDebug({
|
||||||
},
|
cb: () => {
|
||||||
getDebugMessage: () => ({
|
const { apm, ...rest } = params;
|
||||||
body: getDebugBody({
|
const termsEnumPromise = withApmSpan(operationName, () => {
|
||||||
params,
|
const controller = new AbortController();
|
||||||
requestType,
|
return cancelEsRequestOnAbort(
|
||||||
operationName,
|
this.esClient.termsEnum(
|
||||||
}),
|
{
|
||||||
title: getDebugTitle(request),
|
index: Array.isArray(index) ? index.join(',') : index,
|
||||||
}),
|
...rest,
|
||||||
isCalledWithInternalUser: false,
|
},
|
||||||
debug,
|
{ signal: controller.signal }
|
||||||
request,
|
),
|
||||||
requestType,
|
this.request,
|
||||||
operationName,
|
controller
|
||||||
requestParams: params,
|
);
|
||||||
});
|
});
|
||||||
},
|
|
||||||
};
|
return unwrapEsResponse(termsEnumPromise);
|
||||||
|
},
|
||||||
|
getDebugMessage: () => ({
|
||||||
|
body: getDebugBody({
|
||||||
|
params,
|
||||||
|
requestType,
|
||||||
|
operationName,
|
||||||
|
}),
|
||||||
|
title: getDebugTitle(this.request),
|
||||||
|
}),
|
||||||
|
isCalledWithInternalUser: false,
|
||||||
|
debug: this.debug,
|
||||||
|
request: this.request,
|
||||||
|
requestType,
|
||||||
|
operationName,
|
||||||
|
requestParams: params,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,10 +14,7 @@ import {
|
||||||
ApmIndicesConfig,
|
ApmIndicesConfig,
|
||||||
getApmIndices,
|
getApmIndices,
|
||||||
} from '../../routes/settings/apm_indices/get_apm_indices';
|
} from '../../routes/settings/apm_indices/get_apm_indices';
|
||||||
import {
|
import { APMEventClient } from './create_es_client/create_apm_event_client';
|
||||||
APMEventClient,
|
|
||||||
createApmEventClient,
|
|
||||||
} from './create_es_client/create_apm_event_client';
|
|
||||||
import {
|
import {
|
||||||
APMInternalClient,
|
APMInternalClient,
|
||||||
createInternalESClient,
|
createInternalESClient,
|
||||||
|
@ -58,7 +55,7 @@ export async function setupRequest({
|
||||||
|
|
||||||
return {
|
return {
|
||||||
indices,
|
indices,
|
||||||
apmEventClient: createApmEventClient({
|
apmEventClient: new APMEventClient({
|
||||||
esClient: context.core.elasticsearch.client.asCurrentUser,
|
esClient: context.core.elasticsearch.client.asCurrentUser,
|
||||||
debug: query._inspect,
|
debug: query._inspect,
|
||||||
request,
|
request,
|
||||||
|
|
|
@ -8,8 +8,10 @@
|
||||||
import { merge } from 'lodash';
|
import { merge } from 'lodash';
|
||||||
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||||
import {
|
import {
|
||||||
TRANSACTION_TYPE,
|
|
||||||
AGENT_NAME,
|
AGENT_NAME,
|
||||||
|
TRANSACTION_TYPE,
|
||||||
|
TRANSACTION_NAME,
|
||||||
|
SERVICE_NAME,
|
||||||
} from '../../../common/elasticsearch_fieldnames';
|
} from '../../../common/elasticsearch_fieldnames';
|
||||||
import { arrayUnionToCallable } from '../../../common/utils/array_union_to_callable';
|
import { arrayUnionToCallable } from '../../../common/utils/array_union_to_callable';
|
||||||
import { TransactionGroupRequestBase, TransactionGroupSetup } from './fetcher';
|
import { TransactionGroupRequestBase, TransactionGroupSetup } from './fetcher';
|
||||||
|
@ -21,7 +23,7 @@ interface MetricParams {
|
||||||
searchAggregatedTransactions: boolean;
|
searchAggregatedTransactions: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
type BucketKey = Record<string, string>;
|
type BucketKey = Record<typeof TRANSACTION_NAME | typeof SERVICE_NAME, string>;
|
||||||
|
|
||||||
function mergeRequestWithAggs<
|
function mergeRequestWithAggs<
|
||||||
TRequestBase extends TransactionGroupRequestBase,
|
TRequestBase extends TransactionGroupRequestBase,
|
||||||
|
|
|
@ -23,7 +23,7 @@ import { APM_FEATURE, registerFeaturesUsage } from './feature';
|
||||||
import { registerApmAlerts } from './routes/alerts/register_apm_alerts';
|
import { registerApmAlerts } from './routes/alerts/register_apm_alerts';
|
||||||
import { registerFleetPolicyCallbacks } from './routes/fleet/register_fleet_policy_callbacks';
|
import { registerFleetPolicyCallbacks } from './routes/fleet/register_fleet_policy_callbacks';
|
||||||
import { createApmTelemetry } from './lib/apm_telemetry';
|
import { createApmTelemetry } from './lib/apm_telemetry';
|
||||||
import { createApmEventClient } from './lib/helpers/create_es_client/create_apm_event_client';
|
import { APMEventClient } from './lib/helpers/create_es_client/create_apm_event_client';
|
||||||
import { getInternalSavedObjectsClient } from './lib/helpers/get_internal_saved_objects_client';
|
import { getInternalSavedObjectsClient } from './lib/helpers/get_internal_saved_objects_client';
|
||||||
import { createApmAgentConfigurationIndex } from './routes/settings/agent_configuration/create_agent_config_index';
|
import { createApmAgentConfigurationIndex } from './routes/settings/agent_configuration/create_agent_config_index';
|
||||||
import { getApmIndices } from './routes/settings/apm_indices/get_apm_indices';
|
import { getApmIndices } from './routes/settings/apm_indices/get_apm_indices';
|
||||||
|
@ -66,7 +66,7 @@ export class APMPlugin
|
||||||
|
|
||||||
public setup(
|
public setup(
|
||||||
core: CoreSetup<APMPluginStartDependencies>,
|
core: CoreSetup<APMPluginStartDependencies>,
|
||||||
plugins: Omit<APMPluginSetupDependencies, 'core'>
|
plugins: APMPluginSetupDependencies
|
||||||
) {
|
) {
|
||||||
this.logger = this.initContext.logger.get();
|
this.logger = this.initContext.logger.get();
|
||||||
const config$ = this.initContext.config.create<APMConfig>();
|
const config$ = this.initContext.config.create<APMConfig>();
|
||||||
|
@ -224,7 +224,7 @@ export class APMPlugin
|
||||||
|
|
||||||
const esClient = context.core.elasticsearch.client.asCurrentUser;
|
const esClient = context.core.elasticsearch.client.asCurrentUser;
|
||||||
|
|
||||||
return createApmEventClient({
|
return new APMEventClient({
|
||||||
debug: debug ?? false,
|
debug: debug ?? false,
|
||||||
esClient,
|
esClient,
|
||||||
request,
|
request,
|
||||||
|
|
|
@ -171,27 +171,29 @@ export function registerTransactionErrorRateAlertType({
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const results = response.aggregations.series.buckets
|
const results = [];
|
||||||
.map((bucket) => {
|
for (const bucket of response.aggregations.series.buckets) {
|
||||||
const [serviceName, environment, transactionType] = bucket.key;
|
const [serviceName, environment, transactionType] = bucket.key;
|
||||||
|
|
||||||
const failed =
|
const failed =
|
||||||
bucket.outcomes.buckets.find(
|
bucket.outcomes.buckets.find(
|
||||||
(outcomeBucket) => outcomeBucket.key === EventOutcome.failure
|
(outcomeBucket) => outcomeBucket.key === EventOutcome.failure
|
||||||
)?.doc_count ?? 0;
|
)?.doc_count ?? 0;
|
||||||
const succesful =
|
const succesful =
|
||||||
bucket.outcomes.buckets.find(
|
bucket.outcomes.buckets.find(
|
||||||
(outcomeBucket) => outcomeBucket.key === EventOutcome.success
|
(outcomeBucket) => outcomeBucket.key === EventOutcome.success
|
||||||
)?.doc_count ?? 0;
|
)?.doc_count ?? 0;
|
||||||
|
const errorRate = (failed / (failed + succesful)) * 100;
|
||||||
|
|
||||||
return {
|
if (errorRate >= alertParams.threshold) {
|
||||||
|
results.push({
|
||||||
serviceName,
|
serviceName,
|
||||||
environment,
|
environment,
|
||||||
transactionType,
|
transactionType,
|
||||||
errorRate: (failed / (failed + succesful)) * 100,
|
errorRate,
|
||||||
};
|
});
|
||||||
})
|
}
|
||||||
.filter((result) => result.errorRate >= alertParams.threshold);
|
}
|
||||||
|
|
||||||
results.forEach((result) => {
|
results.forEach((result) => {
|
||||||
const { serviceName, environment, transactionType, errorRate } =
|
const { serviceName, environment, transactionType, errorRate } =
|
||||||
|
|
|
@ -22,12 +22,13 @@ const staticDataViewRoute = createApmServerRoute({
|
||||||
config,
|
config,
|
||||||
} = resources;
|
} = resources;
|
||||||
|
|
||||||
const [setup, savedObjectsClient] = await Promise.all([
|
const setupPromise = setupRequest(resources);
|
||||||
setupRequest(resources),
|
const clientPromise = core
|
||||||
core
|
.start()
|
||||||
.start()
|
.then((coreStart) => coreStart.savedObjects.createInternalRepository());
|
||||||
.then((coreStart) => coreStart.savedObjects.createInternalRepository()),
|
|
||||||
]);
|
const setup = await setupPromise;
|
||||||
|
const savedObjectsClient = await clientPromise;
|
||||||
|
|
||||||
const spaceId = spaces?.setup.spacesService.getSpaceId(request);
|
const spaceId = spaces?.setup.spacesService.getSpaceId(request);
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ export async function getErrorGroupMainStatistics({
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
// @ts-ignore 4.3.5 upgrade - Expression produces a union type that is too complex to represent. ts(2590)
|
||||||
response.aggregations?.error_groups.buckets.map((bucket) => ({
|
response.aggregations?.error_groups.buckets.map((bucket) => ({
|
||||||
groupId: bucket.key as string,
|
groupId: bucket.key as string,
|
||||||
name: getErrorName(bucket.sample.hits.hits[0]._source),
|
name: getErrorName(bucket.sample.hits.hits[0]._source),
|
||||||
|
|
|
@ -120,6 +120,7 @@ export async function getServiceAnomalies({
|
||||||
const relevantBuckets = uniqBy(
|
const relevantBuckets = uniqBy(
|
||||||
sortBy(
|
sortBy(
|
||||||
// make sure we only return data for jobs that are available in this space
|
// make sure we only return data for jobs that are available in this space
|
||||||
|
// @ts-ignore 4.3.5 upgrade
|
||||||
typedAnomalyResponse.aggregations?.services.buckets.filter((bucket) =>
|
typedAnomalyResponse.aggregations?.services.buckets.filter((bucket) =>
|
||||||
jobIds.includes(bucket.key.jobId as string)
|
jobIds.includes(bucket.key.jobId as string)
|
||||||
) ?? [],
|
) ?? [],
|
||||||
|
|
|
@ -168,6 +168,7 @@ export async function getServiceInstancesTransactionStatistics<
|
||||||
const { timeseries } = serviceNodeBucket;
|
const { timeseries } = serviceNodeBucket;
|
||||||
return {
|
return {
|
||||||
serviceNodeName,
|
serviceNodeName,
|
||||||
|
// @ts-ignore 4.3.5 upgrade - Expression produces a union type that is too complex to represent.
|
||||||
errorRate: timeseries.buckets.map((dateBucket) => ({
|
errorRate: timeseries.buckets.map((dateBucket) => ({
|
||||||
x: dateBucket.key,
|
x: dateBucket.key,
|
||||||
y: dateBucket.failures.doc_count / dateBucket.doc_count,
|
y: dateBucket.failures.doc_count / dateBucket.doc_count,
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue