@elastic/esql-definitions
v4.33.0
Published
Shared definitions for the ES|QL language (commands, functions, operators).
Keywords
Readme
@elastic/esql-definitions
Shared definitions for the ES|QL and PromQL languages — commands, functions, operators, settings, and their metadata.
Install
npm install @elastic/esql-definitionsUsage
The main entry holds the hand-maintained name lists and the definition TypeScript types:
import { commandsNames, functionNames } from '@elastic/esql-definitions';
import type { FunctionDefinition } from '@elastic/esql-definitions';The full definition metadata (synced from the elasticsearch repo) is exposed
via subpath exports:
import { commandDefinitions } from '@elastic/esql-definitions/commands';
import { functionDefinitions } from '@elastic/esql-definitions/functions';
import { operatorDefinitions } from '@elastic/esql-definitions/operators';
import { settingDefinitions } from '@elastic/esql-definitions/settings';
import { inlineCasts } from '@elastic/esql-definitions/inline-cast';
import { timeSeriesAggregates } from '@elastic/esql-definitions/time-series-aggregates';
import { promqlFunctionDefinitions } from '@elastic/esql-definitions/promql-functions';
import { promqlOperatorDefinitions } from '@elastic/esql-definitions/promql-operators';timeSeriesAggregates maps each field type to the implicit aggregate ES|QL
inserts for a bare column in a time-series STATS, and to the type the
outer aggregate sees. counter_double becomes double, counter_integer
becomes integer, counter_long becomes long, and text becomes
keyword. The other entries (double, keyword, exponential_histogram,
…) keep the same type.
timeSeriesAggregates.counter_double;
// { function: 'last_over_time', returnType: 'double' }Documentation (descriptions, examples, notes, parameter docs) is split into parallel docs modules keyed by definition name:
import { functionDocs } from '@elastic/esql-definitions/function-docs';
import { operatorDocs } from '@elastic/esql-definitions/operator-docs';
import { promqlFunctionDocs } from '@elastic/esql-definitions/promql-function-docs';
import { promqlOperatorDocs } from '@elastic/esql-definitions/promql-operator-docs';
functionDocs.bucket.description;
functionDocs.bucket.params?.field; // ES|QL param docs live here, not in signaturesOne asymmetry to know about: ES|QL parameter descriptions are identical across
all signatures of a definition, so they live in docs.params keyed by
parameter name. PromQL parameter descriptions vary per signature (e.g. lhs
is "Instant vector." in one overload and "Scalar." in another).
How the definitions are synced
elasticsearch/— the machine-readable language definitions that Elasticsearch publishes for Kibana, copied verbatim fromdocs/reference/query-languages/{esql,promql}/kibana/generated/in theelasticsearchrepo by the grammar sync CI job (.buildkite/scripts/esql_grammar_sync.sh).src/generated/— TypeScript modules generated fromelasticsearch/byscripts/generate.ts.pnpm --filter @elastic/esql-definitions generatesrc/definition_types.ts— hand-written TypeScript shapes of the raw JSON, used by the codegen script and exported from the main entry.
Note: the synced commands/ data does not cover all commands (e.g. FROM,
ROW, JOIN variants are missing upstream), so the hand-maintained
commandsNames and functionNames lists remain the source of truth for name
lists.
