Skip to content

Commit bfd8100

Browse files
committed
Generate legacy vars when rendering all applications
1 parent 8c0440f commit bfd8100

10 files changed

Lines changed: 52 additions & 35 deletions

File tree

docs/development/core/server/kibana-plugin-server.iscopedrenderingclient.render.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ Generate a `KibanaResponse` which renders an HTML page bootstrapped with the `co
99
<b>Signature:</b>
1010

1111
```typescript
12-
render(options?: IRenderOptions): Promise<string>;
12+
render(options?: Pick<IRenderOptions, 'includeUserSettings'>): Promise<string>;
1313
```
1414

1515
## Parameters
1616

1717
| Parameter | Type | Description |
1818
| --- | --- | --- |
19-
| options | <code>IRenderOptions</code> | |
19+
| options | <code>Pick&lt;IRenderOptions, 'includeUserSettings'&gt;</code> | |
2020

2121
<b>Returns:</b>
2222

src/core/server/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ export {
152152
SessionCookieValidationResult,
153153
SessionStorageFactory,
154154
} from './http';
155-
export { RenderingServiceSetup, IRenderOptions, LegacyRenderOptions } from './rendering';
155+
export { RenderingServiceSetup, IRenderOptions } from './rendering';
156156
export { Logger, LoggerFactory, LogMeta, LogRecord, LogLevel } from './logging';
157157

158158
export {

src/core/server/legacy/legacy_internals.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919

2020
import { Server } from 'hapi';
2121

22-
import { LegacyRequest } from '../http';
22+
import { KibanaRequest, LegacyRequest } from '../http';
23+
import { ensureRawRequest } from '../http/router';
2324
import { mergeVars } from './merge_vars';
2425
import { ILegacyInternals, LegacyVars, VarsInjector, LegacyConfig, LegacyUiExports } from './types';
2526

@@ -51,11 +52,12 @@ export class LegacyInternals implements ILegacyInternals {
5152
));
5253
}
5354

54-
private replaceVars(vars: LegacyVars, request: LegacyRequest) {
55+
private replaceVars(vars: LegacyVars, request: KibanaRequest | LegacyRequest) {
5556
const { injectedVarsReplacers = [] } = this.uiExports;
5657

5758
return injectedVarsReplacers.reduce(
58-
async (injected, replacer) => replacer(await injected, request, this.server),
59+
async (injected, replacer) =>
60+
replacer(await injected, ensureRawRequest(request), this.server),
5961
Promise.resolve(vars)
6062
);
6163
}
@@ -78,7 +80,11 @@ export class LegacyInternals implements ILegacyInternals {
7880
);
7981
}
8082

81-
public async getVars(id: string, request: LegacyRequest, injected: LegacyVars = {}) {
83+
public async getVars(
84+
id: string,
85+
request: KibanaRequest | LegacyRequest,
86+
injected: LegacyVars = {}
87+
) {
8288
return this.replaceVars(
8389
mergeVars(this.defaultVars, await this.getInjectedUiAppVars(id), injected),
8490
request

src/core/server/legacy/legacy_service.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { PathConfigType } from '../path';
3131
import { findLegacyPluginSpecs } from './plugins';
3232
import { convertLegacyDeprecationProvider } from './config';
3333
import {
34+
ILegacyInternals,
3435
LegacyServiceSetupDeps,
3536
LegacyServiceStartDeps,
3637
LegacyPlugins,
@@ -82,6 +83,7 @@ export class LegacyService implements CoreService {
8283
private legacyRawConfig?: LegacyConfig;
8384
private legacyPlugins?: LegacyPlugins;
8485
private settings?: LegacyVars;
86+
public legacyInternals?: ILegacyInternals;
8587

8688
constructor(private readonly coreContext: CoreContext) {
8789
const { logger, configService } = coreContext;
@@ -183,6 +185,11 @@ export class LegacyService implements CoreService {
183185
// propagate the instance uuid to the legacy config, as it was the legacy way to access it.
184186
this.legacyRawConfig!.set('server.uuid', setupDeps.core.uuid.getInstanceUuid());
185187
this.setupDeps = setupDeps;
188+
this.legacyInternals = new LegacyInternals(
189+
this.legacyPlugins.uiExports,
190+
this.legacyRawConfig!,
191+
setupDeps.core.http.server
192+
);
186193
}
187194

188195
public async start(startDeps: LegacyServiceStartDeps) {
@@ -317,7 +324,7 @@ export class LegacyService implements CoreService {
317324
rendering: setupDeps.core.rendering,
318325
uiSettings: setupDeps.core.uiSettings,
319326
savedObjectsClientProvider: startDeps.core.savedObjects.clientProvider,
320-
legacy: new LegacyInternals(legacyPlugins.uiExports, config, setupDeps.core.http.server),
327+
legacy: this.legacyInternals,
321328
},
322329
logger: this.coreContext.logger,
323330
},

src/core/server/legacy/types.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import { Server } from 'hapi';
2121

2222
import { ChromeNavLink } from '../../public';
23-
import { LegacyRequest } from '../http';
23+
import { KibanaRequest, LegacyRequest } from '../http';
2424
import { InternalCoreSetup, InternalCoreStart } from '../internal_types';
2525
import { PluginsServiceSetup, PluginsServiceStart } from '../plugins';
2626
import { RenderingServiceSetup } from '../rendering';
@@ -198,7 +198,11 @@ export interface ILegacyInternals {
198198
/**
199199
* Get the metadata vars for a particular plugin
200200
*/
201-
getVars(id: string, request: LegacyRequest, injected?: LegacyVars): Promise<LegacyVars>;
201+
getVars(
202+
id: string,
203+
request: KibanaRequest | LegacyRequest,
204+
injected?: LegacyVars
205+
): Promise<LegacyVars>;
202206
}
203207

204208
/**

src/core/server/rendering/rendering_service.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ import { CoreService } from '../../types';
2727
import { CoreContext } from '../core_context';
2828
import { Template } from './views';
2929
import {
30+
IRenderOptions,
3031
RenderingSetupDeps,
3132
RenderingServiceSetup,
3233
RenderingMetadata,
33-
LegacyRenderOptions,
3434
} from './types';
3535

3636
/** @internal */
@@ -56,7 +56,7 @@ export class RenderingService implements CoreService<RenderingServiceSetup> {
5656
app = { getId: () => 'core' },
5757
includeUserSettings = true,
5858
vars = {},
59-
}: LegacyRenderOptions = {}
59+
}: IRenderOptions = {}
6060
) => {
6161
const { env } = this.coreContext;
6262
const basePath = http.basePath.get(request);

src/core/server/rendering/types.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,19 @@ export interface IRenderOptions {
8484
* `true` by default.
8585
*/
8686
includeUserSettings?: boolean;
87-
}
8887

89-
/**
90-
* @internal
91-
* @deprecated for legacy use only, remove with ui_render_mixin
92-
*/
93-
export interface LegacyRenderOptions extends IRenderOptions {
9488
/**
9589
* Render the bootstrapped HTML content for an optional legacy application.
9690
* Defaults to `core`.
91+
* @deprecated for legacy use only, remove with ui_render_mixin
92+
* @internal
9793
*/
9894
app?: { getId(): string };
9995

10096
/**
10197
* Inject custom vars into the page metadata.
98+
* @deprecated for legacy use only, remove with ui_render_mixin
99+
* @internal
102100
*/
103101
vars?: Record<string, any>;
104102
}
@@ -123,7 +121,7 @@ export interface IScopedRenderingClient {
123121
* );
124122
* ```
125123
*/
126-
render(options?: IRenderOptions): Promise<string>;
124+
render(options?: Pick<IRenderOptions, 'includeUserSettings'>): Promise<string>;
127125
}
128126

129127
/** @internal */
@@ -140,6 +138,6 @@ export interface RenderingServiceSetup {
140138
render<R extends KibanaRequest | LegacyRequest>(
141139
request: R,
142140
uiSettings: IUiSettingsClient,
143-
options?: R extends LegacyRequest ? LegacyRenderOptions : IRenderOptions
141+
options?: IRenderOptions
144142
): Promise<string>;
145143
}

src/core/server/server.api.md

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,13 @@ export interface IndexSettingsDeprecationInfo {
803803

804804
// @public (undocumented)
805805
export interface IRenderOptions {
806+
// @internal @deprecated
807+
app?: {
808+
getId(): string;
809+
};
806810
includeUserSettings?: boolean;
811+
// @internal @deprecated
812+
vars?: Record<string, any>;
807813
}
808814

809815
// @public
@@ -832,7 +838,7 @@ export type IScopedClusterClient = Pick<ScopedClusterClient, 'callAsCurrentUser'
832838

833839
// @public (undocumented)
834840
export interface IScopedRenderingClient {
835-
render(options?: IRenderOptions): Promise<string>;
841+
render(options?: Pick<IRenderOptions, 'includeUserSettings'>): Promise<string>;
836842
}
837843

838844
// @public
@@ -932,21 +938,13 @@ export class LegacyInternals implements ILegacyInternals {
932938
// (undocumented)
933939
getInjectedUiAppVars(id: string): Promise<Record<string, any>>;
934940
// (undocumented)
935-
getVars(id: string, request: LegacyRequest, injected?: LegacyVars): Promise<Record<string, any>>;
941+
getVars(id: string, request: KibanaRequest | LegacyRequest, injected?: LegacyVars): Promise<Record<string, any>>;
936942
// Warning: (ae-forgotten-export) The symbol "VarsInjector" needs to be exported by the entry point index.d.ts
937943
//
938944
// (undocumented)
939945
injectUiAppVars(id: string, injector: VarsInjector): void;
940946
}
941947

942-
// @internal @deprecated (undocumented)
943-
export interface LegacyRenderOptions extends IRenderOptions {
944-
app?: {
945-
getId(): string;
946-
};
947-
vars?: Record<string, any>;
948-
}
949-
950948
// @public @deprecated (undocumented)
951949
export interface LegacyRequest extends Request {
952950
}
@@ -1233,7 +1231,7 @@ export type RedirectResponseOptions = HttpResponseOptions & {
12331231

12341232
// @internal (undocumented)
12351233
export interface RenderingServiceSetup {
1236-
render<R extends KibanaRequest | LegacyRequest>(request: R, uiSettings: IUiSettingsClient, options?: R extends LegacyRequest ? LegacyRenderOptions : IRenderOptions): Promise<string>;
1234+
render<R extends KibanaRequest | LegacyRequest>(request: R, uiSettings: IUiSettingsClient, options?: IRenderOptions): Promise<string>;
12371235
}
12381236

12391237
// @public

src/core/server/server.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,11 @@ export class Server {
220220

221221
return {
222222
rendering: {
223-
render: rendering.render.bind(rendering, req, uiSettingsClient),
223+
render: async (options = {}) =>
224+
rendering.render(req, uiSettingsClient, {
225+
...options,
226+
vars: await this.legacy.legacyInternals!.getVars('core', req),
227+
}),
224228
},
225229
savedObjects: {
226230
client: savedObjectsClient,

src/plugins/testbed/server/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { schema, TypeOf } from '@kbn/config-schema';
2323
import {
2424
CoreSetup,
2525
CoreStart,
26-
LegacyRenderOptions,
26+
IRenderOptions,
2727
Logger,
2828
PluginInitializerContext,
2929
PluginConfigDescriptor,
@@ -89,13 +89,13 @@ class Plugin {
8989
},
9090
async (context, req, res) => {
9191
const { id } = req.params;
92-
const options: Partial<LegacyRenderOptions> = { app: { getId: () => id! } };
92+
const options: Partial<IRenderOptions> = { app: { getId: () => id! } };
9393
const body = await context.core.rendering.render(options);
9494

9595
return res.ok({
9696
body,
9797
headers: {
98-
'content-securty-policy': core.http.csp.header,
98+
'content-security-policy': core.http.csp.header,
9999
},
100100
});
101101
}

0 commit comments

Comments
 (0)