Skip to content

Commit

Permalink
[expressions] decrease bundle size (#114229)
Browse files Browse the repository at this point in the history
  • Loading branch information
ppisljar committed Oct 20, 2021
1 parent 109e966 commit 73a0fc0
Show file tree
Hide file tree
Showing 39 changed files with 873 additions and 671 deletions.
13 changes: 2 additions & 11 deletions examples/expressions_explorer/public/actions_and_expressions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,7 @@ import {
EuiText,
EuiTitle,
} from '@elastic/eui';
import {
ExpressionsStart,
ReactExpressionRenderer,
ExpressionsInspectorAdapter,
} from '../../../src/plugins/expressions/public';
import { ExpressionsStart } from '../../../src/plugins/expressions/public';
import { ExpressionEditor } from './editor/expression_editor';
import { UiActionsStart } from '../../../src/plugins/ui_actions/public';
import { NAVIGATE_TRIGGER_ID } from './actions/navigate_trigger';
Expand All @@ -42,10 +38,6 @@ export function ActionsExpressionsExample({ expressions, actions }: Props) {
updateExpression(value);
};

const inspectorAdapters = {
expression: new ExpressionsInspectorAdapter(),
};

const handleEvents = (event: any) => {
if (event.name !== 'NAVIGATE') return;
// enrich event context with some extra data
Expand Down Expand Up @@ -83,10 +75,9 @@ export function ActionsExpressionsExample({ expressions, actions }: Props) {
</EuiFlexItem>
<EuiFlexItem>
<EuiPanel paddingSize="none" role="figure">
<ReactExpressionRenderer
<expressions.ReactExpressionRenderer
expression={expression}
debug={true}
inspectorAdapters={inspectorAdapters}
onEvent={handleEvents}
renderError={(message: any) => {
return <div>{message}</div>;
Expand Down
13 changes: 2 additions & 11 deletions examples/expressions_explorer/public/actions_and_expressions2.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,7 @@ import {
EuiText,
EuiTitle,
} from '@elastic/eui';
import {
ExpressionsStart,
ReactExpressionRenderer,
ExpressionsInspectorAdapter,
} from '../../../src/plugins/expressions/public';
import { ExpressionsStart } from '../../../src/plugins/expressions/public';
import { ExpressionEditor } from './editor/expression_editor';
import { UiActionsStart } from '../../../src/plugins/ui_actions/public';

Expand All @@ -45,10 +41,6 @@ export function ActionsExpressionsExample2({ expressions, actions }: Props) {
updateExpression(value);
};

const inspectorAdapters = {
expression: new ExpressionsInspectorAdapter(),
};

const handleEvents = (event: any) => {
updateVariables({ color: event.data.href === 'http://www.google.com' ? 'red' : 'blue' });
};
Expand Down Expand Up @@ -81,11 +73,10 @@ export function ActionsExpressionsExample2({ expressions, actions }: Props) {
</EuiFlexItem>
<EuiFlexItem>
<EuiPanel paddingSize="none" role="figure">
<ReactExpressionRenderer
<expressions.ReactExpressionRenderer
data-test-subj="expressionsVariablesTestRenderer"
expression={expression}
debug={true}
inspectorAdapters={inspectorAdapters}
variables={variables}
onEvent={handleEvents}
renderError={(message: any) => {
Expand Down
16 changes: 6 additions & 10 deletions examples/expressions_explorer/public/render_expressions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,7 @@ import {
EuiTitle,
EuiButton,
} from '@elastic/eui';
import {
ExpressionsStart,
ReactExpressionRenderer,
ExpressionsInspectorAdapter,
} from '../../../src/plugins/expressions/public';
import { ExpressionsStart } from '../../../src/plugins/expressions/public';
import { ExpressionEditor } from './editor/expression_editor';
import { Start as InspectorStart } from '../../../src/plugins/inspector/public';

Expand All @@ -42,9 +38,7 @@ export function RenderExpressionsExample({ expressions, inspector }: Props) {
updateExpression(value);
};

const inspectorAdapters = {
expression: new ExpressionsInspectorAdapter(),
};
const inspectorAdapters = {};

return (
<EuiPageBody>
Expand Down Expand Up @@ -83,10 +77,12 @@ export function RenderExpressionsExample({ expressions, inspector }: Props) {
</EuiFlexItem>
<EuiFlexItem>
<EuiPanel data-test-subj="expressionRender" paddingSize="none" role="figure">
<ReactExpressionRenderer
<expressions.ReactExpressionRenderer
expression={expression}
debug={true}
inspectorAdapters={inspectorAdapters}
onData$={(result, panels) => {
Object.assign(inspectorAdapters, panels);
}}
renderError={(message: any) => {
return <div>{message}</div>;
}}
Expand Down
28 changes: 12 additions & 16 deletions examples/expressions_explorer/public/run_expressions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Side Public License, v 1.
*/

import React, { useState, useEffect, useMemo } from 'react';
import React, { useState, useEffect } from 'react';
import { pluck } from 'rxjs/operators';
import {
EuiCodeBlock,
Expand All @@ -22,12 +22,9 @@ import {
EuiTitle,
EuiButton,
} from '@elastic/eui';
import {
ExpressionsStart,
ExpressionsInspectorAdapter,
} from '../../../src/plugins/expressions/public';
import { ExpressionsStart } from '../../../src/plugins/expressions/public';
import { ExpressionEditor } from './editor/expression_editor';
import { Start as InspectorStart } from '../../../src/plugins/inspector/public';
import { Adapters, Start as InspectorStart } from '../../../src/plugins/inspector/public';

interface Props {
expressions: ExpressionsStart;
Expand All @@ -37,25 +34,24 @@ interface Props {
export function RunExpressionsExample({ expressions, inspector }: Props) {
const [expression, updateExpression] = useState('markdownVis "## expressions explorer"');
const [result, updateResult] = useState<unknown>({});
const [inspectorAdapters, updateInspectorAdapters] = useState<Adapters>({});

const expressionChanged = (value: string) => {
updateExpression(value);
};

const inspectorAdapters = useMemo(
() => ({
expression: new ExpressionsInspectorAdapter(),
}),
[]
);

useEffect(() => {
const execution = expressions.execute(expression, null, {
debug: true,
inspectorAdapters,
});
const subscription = execution.getData().pipe(pluck('result')).subscribe(updateResult);

const subscription = execution
.getData()
.pipe(pluck('result'))
.subscribe((data) => {
updateResult(data);
updateInspectorAdapters(execution.inspect());
});
execution.inspect();
return () => subscription.unsubscribe();
}, [expression, expressions, inspectorAdapters]);

Expand Down
13 changes: 7 additions & 6 deletions src/plugins/data/public/search/expressions/esaggs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import {
EsaggsExpressionFunctionDefinition,
EsaggsStartDependencies,
getEsaggsMeta,
handleEsaggsRequest,
} from '../../../common/search/expressions';
import { DataPublicPluginStart, DataStartDependencies } from '../../types';

Expand Down Expand Up @@ -48,10 +47,12 @@ export function getFunctionDefinition({
);
aggConfigs.hierarchical = args.metricsAtAllLevels;

return { aggConfigs, indexPattern, searchSource, getNow };
const { handleEsaggsRequest } = await import('../../../common/search/expressions');

return { aggConfigs, indexPattern, searchSource, getNow, handleEsaggsRequest };
}).pipe(
switchMap(({ aggConfigs, indexPattern, searchSource, getNow }) =>
handleEsaggsRequest({
switchMap(({ aggConfigs, indexPattern, searchSource, getNow, handleEsaggsRequest }) => {
return handleEsaggsRequest({
abortSignal,
aggs: aggConfigs,
filters: get(input, 'filters', undefined),
Expand All @@ -65,8 +66,8 @@ export function getFunctionDefinition({
timeRange: get(input, 'timeRange', undefined),
getNow,
executionContext: getExecutionContext(),
})
)
});
})
);
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { catchError } from 'rxjs/operators';
import { Execution, ExecutionResult } from './execution';
import { ExpressionValueError } from '../expression_types/specs';
import { ExpressionAstExpression } from '../ast';
import { Adapters } from '../../../inspector/common/adapters';

/**
* `ExecutionContract` is a wrapper around `Execution` class. It provides the
Expand Down Expand Up @@ -75,5 +76,5 @@ export class ExecutionContract<Input = unknown, Output = unknown, InspectorAdapt
* Get Inspector adapters provided to all functions of expression through
* execution context.
*/
inspect = () => this.execution.inspectorAdapters;
inspect = (): Adapters => this.execution.inspectorAdapters;
}
4 changes: 3 additions & 1 deletion src/plugins/expressions/common/execution/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import type { KibanaExecutionContext } from 'src/core/public';
import { Datatable, ExpressionType } from '../expression_types';
import { Adapters, RequestAdapter } from '../../../inspector/common';
import { TablesAdapter } from '../util/tables_adapter';
import { ExpressionsInspectorAdapter } from '../util';

/**
* `ExecutionContext` is an object available to all functions during a single execution;
Expand Down Expand Up @@ -79,7 +80,8 @@ export interface ExecutionContext<
/**
* Default inspector adapters created if inspector adapters are not set explicitly.
*/
export interface DefaultInspectorAdapters extends Adapters {
export interface DefaultInspectorAdapters {
requests: RequestAdapter;
tables: TablesAdapter;
expression: ExpressionsInspectorAdapter;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import { i18n } from '@kbn/i18n';
import { ExpressionFunctionDefinition } from '../types';
import { Datatable } from '../../expression_types';
import { buildResultColumns, getBucketIdentifier } from '../series_calculation_helpers';

export interface CumulativeSumArgs {
by?: string[];
Expand All @@ -22,7 +21,7 @@ export type ExpressionFunctionCumulativeSum = ExpressionFunctionDefinition<
'cumulative_sum',
Datatable,
CumulativeSumArgs,
Datatable
Promise<Datatable>
>;

/**
Expand Down Expand Up @@ -94,37 +93,8 @@ export const cumulativeSum: ExpressionFunctionCumulativeSum = {
},
},

fn(input, { by, inputColumnId, outputColumnId, outputColumnName }) {
const resultColumns = buildResultColumns(
input,
outputColumnId,
inputColumnId,
outputColumnName
);

if (!resultColumns) {
return input;
}

const accumulators: Partial<Record<string, number>> = {};
return {
...input,
columns: resultColumns,
rows: input.rows.map((row) => {
const newRow = { ...row };

const bucketIdentifier = getBucketIdentifier(row, by);
const accumulatorValue = accumulators[bucketIdentifier] ?? 0;
const currentValue = newRow[inputColumnId];
if (currentValue != null) {
newRow[outputColumnId] = Number(currentValue) + accumulatorValue;
accumulators[bucketIdentifier] = newRow[outputColumnId];
} else {
newRow[outputColumnId] = accumulatorValue;
}

return newRow;
}),
};
async fn(input, args) {
const { cumulativeSumFn } = await import('./cumulative_sum_fn');
return cumulativeSumFn(input, args);
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* 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.
*/

import { Datatable } from '../../expression_types';
import { buildResultColumns, getBucketIdentifier } from '../series_calculation_helpers';
import { CumulativeSumArgs } from './cumulative_sum';

export const cumulativeSumFn = (
input: Datatable,
{ by, inputColumnId, outputColumnId, outputColumnName }: CumulativeSumArgs
): Datatable => {
const resultColumns = buildResultColumns(input, outputColumnId, inputColumnId, outputColumnName);

if (!resultColumns) {
return input;
}

const accumulators: Partial<Record<string, number>> = {};
return {
...input,
columns: resultColumns,
rows: input.rows.map((row) => {
const newRow = { ...row };

const bucketIdentifier = getBucketIdentifier(row, by);
const accumulatorValue = accumulators[bucketIdentifier] ?? 0;
const currentValue = newRow[inputColumnId];
if (currentValue != null) {
newRow[outputColumnId] = Number(currentValue) + accumulatorValue;
accumulators[bucketIdentifier] = newRow[outputColumnId];
} else {
newRow[outputColumnId] = accumulatorValue;
}

return newRow;
}),
};
};
Loading

0 comments on commit 73a0fc0

Please sign in to comment.