From 9a79acf4c5334504f7d2b2fce25a64e697242a93 Mon Sep 17 00:00:00 2001 From: Liza Katz Date: Fri, 7 Feb 2020 11:54:40 +0200 Subject: [PATCH] TS of esKuery\node_types (#56857) * TS of node types and collector * Code review --- .../node_types/{function.js => function.ts} | 22 ++++++++++++++----- .../kuery/node_types/{index.js => index.ts} | 5 ++++- .../node_types/{literal.js => literal.ts} | 6 +++-- .../node_types/{named_arg.js => named_arg.ts} | 6 +++-- .../kuery/node_types/{index.d.ts => types.ts} | 22 +++++++++---------- .../node_types/{wildcard.js => wildcard.ts} | 22 ++++++++++--------- 6 files changed, 51 insertions(+), 32 deletions(-) rename src/plugins/data/common/es_query/kuery/node_types/{function.js => function.ts} (72%) rename src/plugins/data/common/es_query/kuery/node_types/{index.js => index.ts} (91%) rename src/plugins/data/common/es_query/kuery/node_types/{literal.js => literal.ts} (78%) rename src/plugins/data/common/es_query/kuery/node_types/{named_arg.js => named_arg.ts} (83%) rename src/plugins/data/common/es_query/kuery/node_types/{index.d.ts => types.ts} (81%) rename src/plugins/data/common/es_query/kuery/node_types/{wildcard.js => wildcard.ts} (73%) diff --git a/src/plugins/data/common/es_query/kuery/node_types/function.js b/src/plugins/data/common/es_query/kuery/node_types/function.ts similarity index 72% rename from src/plugins/data/common/es_query/kuery/node_types/function.js rename to src/plugins/data/common/es_query/kuery/node_types/function.ts index c0e7dffde8f5ec..5b09bc2a67349b 100644 --- a/src/plugins/data/common/es_query/kuery/node_types/function.js +++ b/src/plugins/data/common/es_query/kuery/node_types/function.ts @@ -18,9 +18,13 @@ */ import _ from 'lodash'; +// @ts-ignore import { functions } from '../functions'; +import { IIndexPattern } from '../../..'; +import { FunctionName, FunctionTypeBuildNode } from './types'; +import { JsonValue } from '..'; -export function buildNode(functionName, ...functionArgs) { +export function buildNode(functionName: FunctionName, ...args: any[]) { const kueryFunction = functions[functionName]; if (_.isUndefined(kueryFunction)) { throw new Error(`Unknown function "${functionName}"`); @@ -29,12 +33,15 @@ export function buildNode(functionName, ...functionArgs) { return { type: 'function', function: functionName, - ...kueryFunction.buildNodeParams(...functionArgs), + ...kueryFunction.buildNodeParams(...args), }; } // Mainly only useful in the grammar where we'll already have real argument nodes in hand -export function buildNodeWithArgumentNodes(functionName, argumentNodes) { +export function buildNodeWithArgumentNodes( + functionName: FunctionName, + args: any[] +): FunctionTypeBuildNode { if (_.isUndefined(functions[functionName])) { throw new Error(`Unknown function "${functionName}"`); } @@ -42,11 +49,16 @@ export function buildNodeWithArgumentNodes(functionName, argumentNodes) { return { type: 'function', function: functionName, - arguments: argumentNodes, + arguments: args, }; } -export function toElasticsearchQuery(node, indexPattern, config = {}, context = {}) { +export function toElasticsearchQuery( + node: any, + indexPattern?: IIndexPattern, + config?: Record, + context?: Record +): JsonValue { const kueryFunction = functions[node.function]; return kueryFunction.toElasticsearchQuery(node, indexPattern, config, context); } diff --git a/src/plugins/data/common/es_query/kuery/node_types/index.js b/src/plugins/data/common/es_query/kuery/node_types/index.ts similarity index 91% rename from src/plugins/data/common/es_query/kuery/node_types/index.js rename to src/plugins/data/common/es_query/kuery/node_types/index.ts index 4bca179e2a4d13..6023952b634f21 100644 --- a/src/plugins/data/common/es_query/kuery/node_types/index.js +++ b/src/plugins/data/common/es_query/kuery/node_types/index.ts @@ -21,8 +21,11 @@ import * as functionType from './function'; import * as literal from './literal'; import * as namedArg from './named_arg'; import * as wildcard from './wildcard'; +import { NodeTypes } from './types'; -export const nodeTypes = { +export { NodeTypes }; + +export const nodeTypes: NodeTypes = { function: functionType, literal, namedArg, diff --git a/src/plugins/data/common/es_query/kuery/node_types/literal.js b/src/plugins/data/common/es_query/kuery/node_types/literal.ts similarity index 78% rename from src/plugins/data/common/es_query/kuery/node_types/literal.js rename to src/plugins/data/common/es_query/kuery/node_types/literal.ts index 9fc836660eba3c..070ea09e0f6477 100644 --- a/src/plugins/data/common/es_query/kuery/node_types/literal.js +++ b/src/plugins/data/common/es_query/kuery/node_types/literal.ts @@ -17,13 +17,15 @@ * under the License. */ -export function buildNode(value) { +import { LiteralTypeBuildNode } from './types'; + +export function buildNode(value: LiteralTypeBuildNode['value']): LiteralTypeBuildNode { return { type: 'literal', value, }; } -export function toElasticsearchQuery(node) { +export function toElasticsearchQuery(node: LiteralTypeBuildNode): LiteralTypeBuildNode['value'] { return node.value; } diff --git a/src/plugins/data/common/es_query/kuery/node_types/named_arg.js b/src/plugins/data/common/es_query/kuery/node_types/named_arg.ts similarity index 83% rename from src/plugins/data/common/es_query/kuery/node_types/named_arg.js rename to src/plugins/data/common/es_query/kuery/node_types/named_arg.ts index d99bc1fcce343b..750801990f44e6 100644 --- a/src/plugins/data/common/es_query/kuery/node_types/named_arg.js +++ b/src/plugins/data/common/es_query/kuery/node_types/named_arg.ts @@ -20,8 +20,10 @@ import _ from 'lodash'; import * as ast from '../ast'; import { nodeTypes } from '../node_types'; +import { NamedArgTypeBuildNode } from './types'; +import { JsonObject } from '../types'; -export function buildNode(name, value) { +export function buildNode(name: string, value: any): NamedArgTypeBuildNode { const argumentNode = _.get(value, 'type') === 'literal' ? value : nodeTypes.literal.buildNode(value); return { @@ -31,6 +33,6 @@ export function buildNode(name, value) { }; } -export function toElasticsearchQuery(node) { +export function toElasticsearchQuery(node: any): JsonObject { return ast.toElasticsearchQuery(node.value); } diff --git a/src/plugins/data/common/es_query/kuery/node_types/index.d.ts b/src/plugins/data/common/es_query/kuery/node_types/types.ts similarity index 81% rename from src/plugins/data/common/es_query/kuery/node_types/index.d.ts rename to src/plugins/data/common/es_query/kuery/node_types/types.ts index 720d64e11a0f89..1af4a20583d46d 100644 --- a/src/plugins/data/common/es_query/kuery/node_types/index.d.ts +++ b/src/plugins/data/common/es_query/kuery/node_types/types.ts @@ -22,9 +22,9 @@ */ import { IIndexPattern } from '../../../index_patterns'; -import { KueryNode, JsonValue } from '..'; +import { JsonValue, KueryNode } from '..'; -type FunctionName = +export type FunctionName = | 'is' | 'and' | 'or' @@ -37,7 +37,7 @@ type FunctionName = interface FunctionType { buildNode: (functionName: FunctionName, ...args: any[]) => FunctionTypeBuildNode; - buildNodeWithArgumentNodes: (functionName: FunctionName, ...args: any[]) => FunctionTypeBuildNode; + buildNodeWithArgumentNodes: (functionName: FunctionName, args: any[]) => FunctionTypeBuildNode; toElasticsearchQuery: ( node: any, indexPattern?: IIndexPattern, @@ -46,7 +46,7 @@ interface FunctionType { ) => JsonValue; } -interface FunctionTypeBuildNode { +export interface FunctionTypeBuildNode { type: 'function'; function: FunctionName; // TODO -> Need to define a better type for DSL query @@ -58,40 +58,38 @@ interface LiteralType { toElasticsearchQuery: (node: any) => null | boolean | number | string; } -interface LiteralTypeBuildNode { +export interface LiteralTypeBuildNode { type: 'literal'; value: null | boolean | number | string; } interface NamedArgType { buildNode: (name: string, value: any) => NamedArgTypeBuildNode; - toElasticsearchQuery: (node: any) => string; + toElasticsearchQuery: (node: any) => JsonValue; } -interface NamedArgTypeBuildNode { +export interface NamedArgTypeBuildNode { type: 'namedArg'; name: string; value: any; } interface WildcardType { - buildNode: (value: string) => WildcardTypeBuildNode; + buildNode: (value: string) => WildcardTypeBuildNode | KueryNode; test: (node: any, string: string) => boolean; toElasticsearchQuery: (node: any) => string; toQueryStringQuery: (node: any) => string; hasLeadingWildcard: (node: any) => boolean; } -interface WildcardTypeBuildNode { +export interface WildcardTypeBuildNode { type: 'wildcard'; value: string; } -interface NodeTypes { +export interface NodeTypes { function: FunctionType; literal: LiteralType; namedArg: NamedArgType; wildcard: WildcardType; } - -export const nodeTypes: NodeTypes; diff --git a/src/plugins/data/common/es_query/kuery/node_types/wildcard.js b/src/plugins/data/common/es_query/kuery/node_types/wildcard.ts similarity index 73% rename from src/plugins/data/common/es_query/kuery/node_types/wildcard.js rename to src/plugins/data/common/es_query/kuery/node_types/wildcard.ts index 8c6bf1009b3a18..87fcfa1ca2f64e 100644 --- a/src/plugins/data/common/es_query/kuery/node_types/wildcard.js +++ b/src/plugins/data/common/es_query/kuery/node_types/wildcard.ts @@ -18,20 +18,22 @@ */ import { fromLiteralExpression } from '../ast/ast'; +import { WildcardTypeBuildNode } from './types'; +import { KueryNode } from '..'; export const wildcardSymbol = '@kuery-wildcard@'; // Copied from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +function escapeRegExp(str: string) { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string } // See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters -function escapeQueryString(string) { - return string.replace(/[+-=&|>