Skip to content

Commit b6b1079

Browse files
authored
[expressions] Remove legacy APIs. (#75517) (#75573)
1 parent cf12eac commit b6b1079

File tree

16 files changed

+27
-504
lines changed

16 files changed

+27
-504
lines changed

src/legacy/ui/public/new_platform/new_platform.karma_mock.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -221,17 +221,6 @@ export const npSetup = {
221221
registerFunction: sinon.fake(),
222222
registerRenderer: sinon.fake(),
223223
registerType: sinon.fake(),
224-
__LEGACY: {
225-
renderers: {
226-
register: () => undefined,
227-
get: () => null,
228-
},
229-
getExecutor: () => ({
230-
interpreter: {
231-
interpretAst: () => {},
232-
},
233-
}),
234-
},
235224
},
236225
data: {
237226
autocomplete: {

src/plugins/expressions/kibana.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
"version": "kibana",
44
"server": true,
55
"ui": true,
6-
"requiredPlugins": [
7-
"bfetch"
8-
],
96
"extraPublicDirs": ["common", "common/fonts"],
107
"requiredBundles": [
118
"kibanaUtils",

src/plugins/expressions/public/loader.test.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import { first, skip, toArray } from 'rxjs/operators';
2121
import { loader, ExpressionLoader } from './loader';
2222
import { Observable } from 'rxjs';
23-
import { ExpressionAstExpression, parseExpression, IInterpreterRenderHandlers } from '../common';
23+
import { parseExpression, IInterpreterRenderHandlers } from '../common';
2424

2525
// eslint-disable-next-line
2626
const { __getLastExecution } = require('./services');
@@ -42,13 +42,6 @@ jest.mock('./services', () => {
4242
const moduleMock = {
4343
__execution: undefined,
4444
__getLastExecution: () => moduleMock.__execution,
45-
getInterpreter: () => {
46-
return {
47-
interpretAst: async (expression: ExpressionAstExpression) => {
48-
return { type: 'render', as: 'test' };
49-
},
50-
};
51-
},
5245
getRenderersRegistry: () => ({
5346
get: (id: string) => renderers[id],
5447
}),

src/plugins/expressions/public/mocks.tsx

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import React from 'react';
2121
import { ExpressionsSetup, ExpressionsStart, plugin as pluginInitializer } from '.';
2222

2323
import { coreMock } from '../../../core/public/mocks';
24-
import { bfetchPluginMock } from '../../bfetch/public/mocks';
2524

2625
export type Setup = jest.Mocked<ExpressionsSetup>;
2726
export type Start = jest.Mocked<ExpressionsStart>;
@@ -39,23 +38,6 @@ const createSetupContract = (): Setup => {
3938
registerRenderer: jest.fn(),
4039
registerType: jest.fn(),
4140
run: jest.fn(),
42-
__LEGACY: {
43-
functions: {
44-
register: () => {},
45-
} as any,
46-
renderers: {
47-
register: () => {},
48-
} as any,
49-
types: {
50-
register: () => {},
51-
} as any,
52-
getExecutor: () => ({
53-
interpreter: {
54-
interpretAst: (() => {}) as any,
55-
},
56-
}),
57-
loadLegacyServerFunctionWrappers: () => Promise.resolve(),
58-
},
5941
};
6042
return setupContract;
6143
};
@@ -84,20 +66,15 @@ const createPlugin = async () => {
8466
const coreSetup = coreMock.createSetup();
8567
const coreStart = coreMock.createStart();
8668
const plugin = pluginInitializer(pluginInitializerContext);
87-
const setup = await plugin.setup(coreSetup, {
88-
bfetch: bfetchPluginMock.createSetupContract(),
89-
});
69+
const setup = await plugin.setup(coreSetup);
9070

9171
return {
9272
pluginInitializerContext,
9373
coreSetup,
9474
coreStart,
9575
plugin,
9676
setup,
97-
doStart: async () =>
98-
await plugin.start(coreStart, {
99-
bfetch: bfetchPluginMock.createStartContract(),
100-
}),
77+
doStart: async () => await plugin.start(coreStart),
10178
};
10279
};
10380

src/plugins/expressions/public/plugin.ts

Lines changed: 9 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -17,75 +17,19 @@
1717
* under the License.
1818
*/
1919

20-
import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../core/public';
21-
import { ExpressionExecutor } from './types';
20+
import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'src/core/public';
2221
import {
23-
ExpressionRendererRegistry,
24-
FunctionsRegistry,
25-
serializeProvider,
26-
TypesRegistry,
2722
ExpressionsService,
2823
ExpressionsServiceSetup,
2924
ExpressionsServiceStart,
3025
ExecutionContext,
3126
} from '../common';
32-
import { BfetchPublicSetup, BfetchPublicStart } from '../../bfetch/public';
33-
import {
34-
setCoreStart,
35-
setInterpreter,
36-
setRenderersRegistry,
37-
setNotifications,
38-
setExpressionsService,
39-
} from './services';
27+
import { setRenderersRegistry, setNotifications, setExpressionsService } from './services';
4028
import { ReactExpressionRenderer } from './react_expression_renderer';
4129
import { ExpressionLoader, loader } from './loader';
4230
import { render, ExpressionRenderHandler } from './render';
4331

44-
export interface ExpressionsSetupDeps {
45-
bfetch: BfetchPublicSetup;
46-
}
47-
48-
export interface ExpressionsStartDeps {
49-
bfetch: BfetchPublicStart;
50-
}
51-
52-
export interface ExpressionsSetup extends ExpressionsServiceSetup {
53-
/**
54-
* @todo Get rid of these `__LEGACY` APIs.
55-
*
56-
* `__LEGACY` APIs are used by Canvas. It should be possible to stop
57-
* using all of them (except `loadLegacyServerFunctionWrappers`) and use
58-
* Kibana Platform plugin contracts instead.
59-
*/
60-
__LEGACY: {
61-
/**
62-
* Use `registerType` and `getTypes` instead.
63-
*/
64-
types: TypesRegistry;
65-
66-
/**
67-
* Use `registerFunction` and `getFunctions` instead.
68-
*/
69-
functions: FunctionsRegistry;
70-
71-
/**
72-
* Use `registerRenderer` and `getRenderers`, and `getRenderer` instead.
73-
*/
74-
renderers: ExpressionRendererRegistry;
75-
76-
/**
77-
* Use `run` function instead.
78-
*/
79-
getExecutor: () => ExpressionExecutor;
80-
81-
/**
82-
* This function is used by Canvas to load server-side function and create
83-
* browser-side "wrapper" for each one. This function can be removed once
84-
* we enable expressions on server-side: https://github.com/elastic/kibana/issues/46906
85-
*/
86-
loadLegacyServerFunctionWrappers: () => Promise<void>;
87-
};
88-
}
32+
export type ExpressionsSetup = ExpressionsServiceSetup;
8933

9034
export interface ExpressionsStart extends ExpressionsServiceStart {
9135
ExpressionLoader: typeof ExpressionLoader;
@@ -95,9 +39,7 @@ export interface ExpressionsStart extends ExpressionsServiceStart {
9539
render: typeof render;
9640
}
9741

98-
export class ExpressionsPublicPlugin
99-
implements
100-
Plugin<ExpressionsSetup, ExpressionsStart, ExpressionsSetupDeps, ExpressionsStartDeps> {
42+
export class ExpressionsPublicPlugin implements Plugin<ExpressionsSetup, ExpressionsStart> {
10143
private readonly expressions: ExpressionsService = new ExpressionsService();
10244

10345
constructor(initializerContext: PluginInitializerContext) {}
@@ -116,68 +58,21 @@ export class ExpressionsPublicPlugin
11658
});
11759
}
11860

119-
public setup(core: CoreSetup, { bfetch }: ExpressionsSetupDeps): ExpressionsSetup {
61+
public setup(core: CoreSetup): ExpressionsSetup {
12062
this.configureExecutor(core);
12163

12264
const { expressions } = this;
123-
const { executor, renderers } = expressions;
65+
const { renderers } = expressions;
12466

12567
setRenderersRegistry(renderers);
126-
setExpressionsService(this.expressions);
68+
setExpressionsService(expressions);
12769

128-
const expressionsSetup = expressions.setup();
129-
130-
// This is legacy. Should go away when we get rid of __LEGACY.
131-
const getExecutor = (): ExpressionExecutor => {
132-
return { interpreter: { interpretAst: expressionsSetup.run } };
133-
};
134-
135-
setInterpreter(getExecutor().interpreter);
136-
137-
let cached: Promise<void> | null = null;
138-
const loadLegacyServerFunctionWrappers = async () => {
139-
if (!cached) {
140-
cached = (async () => {
141-
const serverFunctionList = await core.http.get(`/api/interpreter/fns`);
142-
const batchedFunction = bfetch.batchedFunction({ url: `/api/interpreter/fns` });
143-
const { serialize } = serializeProvider(executor.getTypes());
144-
145-
// For every sever-side function, register a client-side
146-
// function that matches its definition, but which simply
147-
// calls the server-side function endpoint.
148-
Object.keys(serverFunctionList).forEach((functionName) => {
149-
if (expressionsSetup.getFunction(functionName)) {
150-
return;
151-
}
152-
const fn = () => ({
153-
...serverFunctionList[functionName],
154-
fn: (input: any, args: any) => {
155-
return batchedFunction({ functionName, args, context: serialize(input) });
156-
},
157-
});
158-
expressionsSetup.registerFunction(fn);
159-
});
160-
})();
161-
}
162-
return cached;
163-
};
164-
165-
const setup: ExpressionsSetup = {
166-
...expressionsSetup,
167-
__LEGACY: {
168-
types: executor.types,
169-
functions: executor.functions,
170-
renderers,
171-
getExecutor,
172-
loadLegacyServerFunctionWrappers,
173-
},
174-
};
70+
const setup = expressions.setup();
17571

17672
return Object.freeze(setup);
17773
}
17874

179-
public start(core: CoreStart, { bfetch }: ExpressionsStartDeps): ExpressionsStart {
180-
setCoreStart(core);
75+
public start(core: CoreStart): ExpressionsStart {
18176
setNotifications(core.notifications);
18277

18378
const { expressions } = this;

src/plugins/expressions/public/services.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,15 @@
1818
*/
1919

2020
import { NotificationsStart } from 'kibana/public';
21-
import { createKibanaUtilsCore, createGetterSetter } from '../../kibana_utils/public';
22-
import { ExpressionInterpreter } from './types';
23-
import { ExpressionsSetup } from './plugin';
24-
import { ExpressionsService } from '../common';
21+
import { createGetterSetter } from '../../kibana_utils/public';
22+
import { ExpressionsService, ExpressionRendererRegistry } from '../common';
2523

26-
export const { getCoreStart, setCoreStart } = createKibanaUtilsCore();
27-
28-
export const [getInterpreter, setInterpreter] = createGetterSetter<ExpressionInterpreter>(
29-
'Interpreter'
30-
);
3124
export const [getNotifications, setNotifications] = createGetterSetter<NotificationsStart>(
3225
'Notifications'
3326
);
3427

3528
export const [getRenderersRegistry, setRenderersRegistry] = createGetterSetter<
36-
ExpressionsSetup['__LEGACY']['renderers']
29+
ExpressionRendererRegistry
3730
>('Renderers registry');
3831

3932
export const [getExpressionsService, setExpressionsService] = createGetterSetter<

src/plugins/expressions/server/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
import { PluginInitializerContext } from '../../../core/server';
20+
import { PluginInitializerContext } from 'src/core/server';
2121
import { ExpressionsServerPlugin } from './plugin';
2222

2323
export { ExpressionsServerSetup, ExpressionsServerStart } from './plugin';

0 commit comments

Comments
 (0)