Expose fatalErrors API from the Start contract (#55300)
* Expose FatalErrors from the Start contract. This API is intended to be used for runtime as well. * update docs * update data plugin snapshot to fix tests * address comments Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
parent
4ca2fbdb11
commit
4971a2c772
|
@ -0,0 +1,13 @@
|
|||
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
||||
|
||||
[Home](./index.md) > [kibana-plugin-public](./kibana-plugin-public.md) > [CoreStart](./kibana-plugin-public.corestart.md) > [fatalErrors](./kibana-plugin-public.corestart.fatalerrors.md)
|
||||
|
||||
## CoreStart.fatalErrors property
|
||||
|
||||
[FatalErrorsStart](./kibana-plugin-public.fatalerrorsstart.md)
|
||||
|
||||
<b>Signature:</b>
|
||||
|
||||
```typescript
|
||||
fatalErrors: FatalErrorsStart;
|
||||
```
|
|
@ -19,6 +19,7 @@ export interface CoreStart
|
|||
| [application](./kibana-plugin-public.corestart.application.md) | <code>ApplicationStart</code> | [ApplicationStart](./kibana-plugin-public.applicationstart.md) |
|
||||
| [chrome](./kibana-plugin-public.corestart.chrome.md) | <code>ChromeStart</code> | [ChromeStart](./kibana-plugin-public.chromestart.md) |
|
||||
| [docLinks](./kibana-plugin-public.corestart.doclinks.md) | <code>DocLinksStart</code> | [DocLinksStart](./kibana-plugin-public.doclinksstart.md) |
|
||||
| [fatalErrors](./kibana-plugin-public.corestart.fatalerrors.md) | <code>FatalErrorsStart</code> | [FatalErrorsStart](./kibana-plugin-public.fatalerrorsstart.md) |
|
||||
| [http](./kibana-plugin-public.corestart.http.md) | <code>HttpStart</code> | [HttpStart](./kibana-plugin-public.httpstart.md) |
|
||||
| [i18n](./kibana-plugin-public.corestart.i18n.md) | <code>I18nStart</code> | [I18nStart](./kibana-plugin-public.i18nstart.md) |
|
||||
| [injectedMetadata](./kibana-plugin-public.corestart.injectedmetadata.md) | <code>{</code><br/><code> getInjectedVar: (name: string, defaultValue?: any) => unknown;</code><br/><code> }</code> | exposed temporarily until https://github.com/elastic/kibana/issues/41990 done use \*only\* to retrieve config values. There is no way to set injected values in the new platform. Use the legacy platform API instead. |
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
||||
|
||||
[Home](./index.md) > [kibana-plugin-public](./kibana-plugin-public.md) > [FatalErrorsStart](./kibana-plugin-public.fatalerrorsstart.md)
|
||||
|
||||
## FatalErrorsStart type
|
||||
|
||||
FatalErrors stop the Kibana Public Core and displays a fatal error screen with details about the Kibana build and the error.
|
||||
|
||||
<b>Signature:</b>
|
||||
|
||||
```typescript
|
||||
export declare type FatalErrorsStart = FatalErrorsSetup;
|
||||
```
|
|
@ -129,6 +129,7 @@ The plugin integrates with the core system via lifecycle events: `setup`<!-- -->
|
|||
| [ChromeHelpExtensionMenuGitHubLink](./kibana-plugin-public.chromehelpextensionmenugithublink.md) | |
|
||||
| [ChromeHelpExtensionMenuLink](./kibana-plugin-public.chromehelpextensionmenulink.md) | |
|
||||
| [ChromeNavLinkUpdateableFields](./kibana-plugin-public.chromenavlinkupdateablefields.md) | |
|
||||
| [FatalErrorsStart](./kibana-plugin-public.fatalerrorsstart.md) | FatalErrors stop the Kibana Public Core and displays a fatal error screen with details about the Kibana build and the error. |
|
||||
| [HandlerContextType](./kibana-plugin-public.handlercontexttype.md) | Extracts the type of the first argument of a [HandlerFunction](./kibana-plugin-public.handlerfunction.md) to represent the type of the context. |
|
||||
| [HandlerFunction](./kibana-plugin-public.handlerfunction.md) | A function that accepts a context object and an optional number of additional arguments. Used for the generic types in [IContextContainer](./kibana-plugin-public.icontextcontainer.md) |
|
||||
| [HandlerParameters](./kibana-plugin-public.handlerparameters.md) | Extracts the types of the additional arguments of a [HandlerFunction](./kibana-plugin-public.handlerfunction.md)<!-- -->, excluding the [HandlerContextType](./kibana-plugin-public.handlercontexttype.md)<!-- -->. |
|
||||
|
|
|
@ -214,6 +214,7 @@ export class CoreSystem {
|
|||
const http = await this.http.start({ injectedMetadata, fatalErrors: this.fatalErrorsSetup! });
|
||||
const savedObjects = await this.savedObjects.start({ http });
|
||||
const i18n = await this.i18n.start();
|
||||
const fatalErrors = await this.fatalErrors.start();
|
||||
await this.integrations.start({ uiSettings });
|
||||
|
||||
const coreUiTargetDomElement = document.createElement('div');
|
||||
|
@ -271,6 +272,7 @@ export class CoreSystem {
|
|||
notifications,
|
||||
overlays,
|
||||
uiSettings,
|
||||
fatalErrors,
|
||||
};
|
||||
|
||||
const plugins = await this.plugins.start(core);
|
||||
|
|
|
@ -26,18 +26,22 @@ const createSetupContractMock = () => {
|
|||
|
||||
return setupContract;
|
||||
};
|
||||
const createStartContractMock = createSetupContractMock;
|
||||
|
||||
type FatalErrorsServiceContract = PublicMethodsOf<FatalErrorsService>;
|
||||
const createMock = () => {
|
||||
const mocked: jest.Mocked<FatalErrorsServiceContract> = {
|
||||
setup: jest.fn(),
|
||||
start: jest.fn(),
|
||||
};
|
||||
|
||||
mocked.setup.mockReturnValue(createSetupContractMock());
|
||||
mocked.start.mockReturnValue(createStartContractMock());
|
||||
return mocked;
|
||||
};
|
||||
|
||||
export const fatalErrorsServiceMock = {
|
||||
create: createMock,
|
||||
createSetupContract: createSetupContractMock,
|
||||
createStartContract: createStartContractMock,
|
||||
};
|
||||
|
|
|
@ -54,9 +54,18 @@ export interface FatalErrorsSetup {
|
|||
get$: () => Rx.Observable<FatalErrorInfo>;
|
||||
}
|
||||
|
||||
/**
|
||||
* FatalErrors stop the Kibana Public Core and displays a fatal error screen
|
||||
* with details about the Kibana build and the error.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export type FatalErrorsStart = FatalErrorsSetup;
|
||||
|
||||
/** @interal */
|
||||
export class FatalErrorsService {
|
||||
private readonly errorInfo$ = new Rx.ReplaySubject<FatalErrorInfo>();
|
||||
private fatalErrors?: FatalErrorsSetup;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -82,7 +91,7 @@ export class FatalErrorsService {
|
|||
},
|
||||
});
|
||||
|
||||
const fatalErrorsSetup: FatalErrorsSetup = {
|
||||
this.fatalErrors = {
|
||||
add: (error, source?) => {
|
||||
const errorInfo = getErrorInfo(error, source);
|
||||
|
||||
|
@ -101,9 +110,17 @@ export class FatalErrorsService {
|
|||
},
|
||||
};
|
||||
|
||||
this.setupGlobalErrorHandlers(fatalErrorsSetup);
|
||||
this.setupGlobalErrorHandlers(this.fatalErrors!);
|
||||
|
||||
return fatalErrorsSetup;
|
||||
return this.fatalErrors!;
|
||||
}
|
||||
|
||||
public start() {
|
||||
const { fatalErrors } = this;
|
||||
if (!fatalErrors) {
|
||||
throw new Error('FatalErrorsService#setup() must be invoked before start.');
|
||||
}
|
||||
return fatalErrors;
|
||||
}
|
||||
|
||||
private renderError(injectedMetadata: InjectedMetadataSetup, i18n: I18nStart) {
|
||||
|
|
|
@ -17,5 +17,5 @@
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
export { FatalErrorsSetup, FatalErrorsService } from './fatal_errors_service';
|
||||
export { FatalErrorsSetup, FatalErrorsStart, FatalErrorsService } from './fatal_errors_service';
|
||||
export { FatalErrorInfo } from './get_error_info';
|
||||
|
|
|
@ -55,7 +55,7 @@ import {
|
|||
ChromeRecentlyAccessed,
|
||||
ChromeRecentlyAccessedHistoryItem,
|
||||
} from './chrome';
|
||||
import { FatalErrorsSetup, FatalErrorInfo } from './fatal_errors';
|
||||
import { FatalErrorsSetup, FatalErrorsStart, FatalErrorInfo } from './fatal_errors';
|
||||
import { HttpSetup, HttpStart } from './http';
|
||||
import { I18nStart } from './i18n';
|
||||
import { InjectedMetadataSetup, InjectedMetadataStart, LegacyNavLink } from './injected_metadata';
|
||||
|
@ -232,6 +232,8 @@ export interface CoreStart {
|
|||
overlays: OverlayStart;
|
||||
/** {@link IUiSettingsClient} */
|
||||
uiSettings: IUiSettingsClient;
|
||||
/** {@link FatalErrorsStart} */
|
||||
fatalErrors: FatalErrorsStart;
|
||||
/**
|
||||
* exposed temporarily until https://github.com/elastic/kibana/issues/41990 done
|
||||
* use *only* to retrieve config values. There is no way to set injected values
|
||||
|
@ -302,6 +304,7 @@ export {
|
|||
DocLinksStart,
|
||||
FatalErrorInfo,
|
||||
FatalErrorsSetup,
|
||||
FatalErrorsStart,
|
||||
HttpSetup,
|
||||
HttpStart,
|
||||
I18nStart,
|
||||
|
|
|
@ -98,6 +98,7 @@ const notificationsStart = notificationServiceMock.createStartContract();
|
|||
const overlayStart = overlayServiceMock.createStartContract();
|
||||
const uiSettingsStart = uiSettingsServiceMock.createStartContract();
|
||||
const savedObjectsStart = savedObjectsMock.createStartContract();
|
||||
const fatalErrorsStart = fatalErrorsServiceMock.createStartContract();
|
||||
const mockStorage = { getItem: jest.fn() } as any;
|
||||
|
||||
const defaultStartDeps = {
|
||||
|
@ -112,6 +113,7 @@ const defaultStartDeps = {
|
|||
overlays: overlayStart,
|
||||
uiSettings: uiSettingsStart,
|
||||
savedObjects: savedObjectsStart,
|
||||
fatalErrors: fatalErrorsStart,
|
||||
},
|
||||
lastSubUrlStorage: mockStorage,
|
||||
targetDomElement: document.createElement('div'),
|
||||
|
|
|
@ -74,6 +74,7 @@ function createCoreStartMock({ basePath = '' } = {}) {
|
|||
injectedMetadata: {
|
||||
getInjectedVar: injectedMetadataServiceMock.createStartContract().getInjectedVar,
|
||||
},
|
||||
fatalErrors: fatalErrorsServiceMock.createStartContract(),
|
||||
};
|
||||
|
||||
return mock;
|
||||
|
|
|
@ -151,5 +151,6 @@ export function createPluginStartContext<
|
|||
injectedMetadata: {
|
||||
getInjectedVar: deps.injectedMetadata.getInjectedVar,
|
||||
},
|
||||
fatalErrors: deps.fatalErrors,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -111,6 +111,7 @@ describe('PluginsService', () => {
|
|||
overlays: overlayServiceMock.createStartContract(),
|
||||
uiSettings: uiSettingsServiceMock.createStartContract(),
|
||||
savedObjects: savedObjectsMock.createStartContract(),
|
||||
fatalErrors: fatalErrorsServiceMock.createStartContract(),
|
||||
};
|
||||
mockStartContext = {
|
||||
...mockStartDeps,
|
||||
|
|
|
@ -377,6 +377,8 @@ export interface CoreStart {
|
|||
// (undocumented)
|
||||
docLinks: DocLinksStart;
|
||||
// (undocumented)
|
||||
fatalErrors: FatalErrorsStart;
|
||||
// (undocumented)
|
||||
http: HttpStart;
|
||||
// (undocumented)
|
||||
i18n: I18nStart;
|
||||
|
@ -532,6 +534,9 @@ export interface FatalErrorsSetup {
|
|||
get$: () => Rx.Observable<FatalErrorInfo>;
|
||||
}
|
||||
|
||||
// @public
|
||||
export type FatalErrorsStart = FatalErrorsSetup;
|
||||
|
||||
// @public
|
||||
export type HandlerContextType<T extends HandlerFunction<any>> = T extends HandlerFunction<infer U> ? U : never;
|
||||
|
||||
|
|
|
@ -304,6 +304,10 @@ exports[`QueryStringInput Should disable autoFocus on EuiFieldText when disableA
|
|||
},
|
||||
},
|
||||
},
|
||||
"fatalErrors": Object {
|
||||
"add": [MockFunction],
|
||||
"get$": [MockFunction],
|
||||
},
|
||||
"http": Object {
|
||||
"addLoadingCountSource": [MockFunction],
|
||||
"anonymousPaths": Object {
|
||||
|
@ -930,6 +934,10 @@ exports[`QueryStringInput Should disable autoFocus on EuiFieldText when disableA
|
|||
},
|
||||
},
|
||||
},
|
||||
"fatalErrors": Object {
|
||||
"add": [MockFunction],
|
||||
"get$": [MockFunction],
|
||||
},
|
||||
"http": Object {
|
||||
"addLoadingCountSource": [MockFunction],
|
||||
"anonymousPaths": Object {
|
||||
|
@ -1538,6 +1546,10 @@ exports[`QueryStringInput Should pass the query language to the language switche
|
|||
},
|
||||
},
|
||||
},
|
||||
"fatalErrors": Object {
|
||||
"add": [MockFunction],
|
||||
"get$": [MockFunction],
|
||||
},
|
||||
"http": Object {
|
||||
"addLoadingCountSource": [MockFunction],
|
||||
"anonymousPaths": Object {
|
||||
|
@ -2161,6 +2173,10 @@ exports[`QueryStringInput Should pass the query language to the language switche
|
|||
},
|
||||
},
|
||||
},
|
||||
"fatalErrors": Object {
|
||||
"add": [MockFunction],
|
||||
"get$": [MockFunction],
|
||||
},
|
||||
"http": Object {
|
||||
"addLoadingCountSource": [MockFunction],
|
||||
"anonymousPaths": Object {
|
||||
|
@ -2769,6 +2785,10 @@ exports[`QueryStringInput Should render the given query 1`] = `
|
|||
},
|
||||
},
|
||||
},
|
||||
"fatalErrors": Object {
|
||||
"add": [MockFunction],
|
||||
"get$": [MockFunction],
|
||||
},
|
||||
"http": Object {
|
||||
"addLoadingCountSource": [MockFunction],
|
||||
"anonymousPaths": Object {
|
||||
|
@ -3392,6 +3412,10 @@ exports[`QueryStringInput Should render the given query 1`] = `
|
|||
},
|
||||
},
|
||||
},
|
||||
"fatalErrors": Object {
|
||||
"add": [MockFunction],
|
||||
"get$": [MockFunction],
|
||||
},
|
||||
"http": Object {
|
||||
"addLoadingCountSource": [MockFunction],
|
||||
"anonymousPaths": Object {
|
||||
|
|
Loading…
Reference in a new issue