@elastic/prismjs-esql
Version:
Prism.js and Refractor ES|QL language syntax definitions for highlighting
355 lines (354 loc) • 7.38 kB
JavaScript
;
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the MIT license (the "License"); you may
* not use this file except in compliance with the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.esql = void 0;
const commands = [
'CHANGE_POINT',
'COMPLETION',
'DISSECT',
'DROP',
'ENRICH',
'EVAL',
'EXPLAIN',
'FORK',
'FROM',
'FULL JOIN',
'FUSE',
'GROK',
'INLINESTATS',
'JOIN',
'KEEP',
'LEFT JOIN',
'LIMIT',
'LOOKUP JOIN',
'METRICS_INFO',
'METRICS',
'MMR',
'MV_EXPAND',
'OPTIONS',
'PROMQL',
'REGISTERED_DOMAIN',
'RENAME',
'RERANK',
'RIGHT JOIN',
'ROW',
'SAMPLE',
'SET',
'SHOW',
'SORT',
'STATS',
'TIMESERIES',
'TS_INFO',
'URI_PARTS',
'USER_AGENT',
'WHERE',
];
const functions = [
'ABS',
'ABSENT',
'ABSENT_OVER_TIME',
'ACOS',
'ACOSH',
'ASIN',
'ASINH',
'ATAN',
'ATAN2',
'ATANH',
'AVG',
'AVG_OVER_TIME',
'BIT_LENGTH',
'BUCKET',
'BYTE_LENGTH',
'CASE',
'CATEGORIZE',
'CBRT',
'CEIL',
'CHUNK',
'CIDR_MATCH',
'CLAMP',
'CLAMP_MAX',
'CLAMP_MIN',
'COALESCE',
'CONCAT',
'CONTAINS',
'COPY_SIGN',
'COS',
'COSH',
'COUNT_DISTINCT',
'COUNT_DISTINCT_OVER_TIME',
'COUNT_OVER_TIME',
'COUNT',
'DATE_DIFF',
'DATE_EXTRACT',
'DATE_FORMAT',
'DATE_PARSE',
'DATE_TRUNC',
'DAY_NAME',
'DECAY',
'DELTA',
'DERIV',
'E',
'ENDS_WITH',
'EXP',
'FIRST',
'FIRST_OVER_TIME',
'FLOOR',
'FROM_BASE64',
'GREATEST',
'HASH',
'HYPOT',
'IDELTA',
'INCREASE',
'IP_PREFIX',
'IRATE',
'JSON_EXTRACT',
'KNN',
'KQL',
'LAST',
'LAST_OVER_TIME',
'LEAST',
'LEFT',
'LENGTH',
'LOCATE',
'LOG',
'LOG10',
'LTRIM',
'MATCH',
'MATCH_PHRASE',
'MAX',
'MAX_OVER_TIME',
'MD5',
'MEDIAN_ABSOLUTE_DEVIATION',
'MEDIAN',
'MIN',
'MIN_OVER_TIME',
'MONTH_NAME',
'MV_APPEND',
'MV_AVG',
'MV_CONCAT',
'MV_CONTAINS',
'MV_COUNT',
'MV_DEDUPE',
'MV_FIRST',
'MV_INTERSECTION',
'MV_INTERSECTS',
'MV_LAST',
'MV_MAX',
'MV_MEDIAN_ABSOLUTE_DEVIATION',
'MV_MEDIAN',
'MV_MIN',
'MV_PERCENTILE',
'MV_PSERIES_WEIGHTED_SUM',
'MV_SLICE',
'MV_SORT',
'MV_SUM',
'MV_UNION',
'MV_ZIP',
'NETWORK_DIRECTION',
'NOW',
'PERCENTILE',
'PERCENTILE_OVER_TIME',
'PI',
'POW',
'PRESENT',
'PRESENT_OVER_TIME',
'QSTR',
'RATE',
'REPEAT',
'REPLACE',
'REVERSE',
'RIGHT',
'ROUND',
'ROUND_TO',
'RTRIM',
'SAMPLE',
'SCALB',
'SCORE',
'SHA1',
'SHA256',
'SIGNUM',
'SIN',
'SINH',
'SPACE',
'SPARKLINE',
'SPLIT',
'SQRT',
'ST_BUFFER',
'ST_CENTROID_AGG',
'ST_CONTAINS',
'ST_DIMENSION',
'ST_DISJOINT',
'ST_DISTANCE',
'ST_ENVELOPE',
'ST_EXTENT_AGG',
'ST_GEOHASH',
'ST_GEOHEX',
'ST_GEOMETRYTYPE',
'ST_GEOTILE',
'ST_INTERSECTS',
'ST_ISEMPTY',
'ST_NPOINTS',
'ST_SIMPLIFY',
'ST_SIMPLIFYPRESERVETOPOLOGY',
'ST_WITHIN',
'ST_X',
'ST_XMAX',
'ST_XMIN',
'ST_Y',
'ST_YMAX',
'ST_YMIN',
'STARTS_WITH',
'STD_DEV',
'STDDEV_OVER_TIME',
'SUBSTRING',
'SUM',
'SUM_OVER_TIME',
'TAN',
'TANH',
'TAU',
'TBUCKET',
'TEXT_EMBEDDING',
'TO_AGGREGATE_METRIC_DOUBLE',
'TO_BASE64',
'TO_BOOLEAN',
'TO_CARTESIANPOINT',
'TO_CARTESIANSHAPE',
'TO_DATE_NANOS',
'TO_DATEPERIOD',
'TO_DATETIME',
'TO_DEGREES',
'TO_DENSE_VECTOR',
'TO_DOUBLE',
'TO_EXPONENTIAL_HISTOGRAM',
'TO_GEOHASH',
'TO_GEOHEX',
'TO_GEOPOINT',
'TO_GEOSHAPE',
'TO_GEOTILE',
'TO_INTEGER',
'TO_IP',
'TO_LONG',
'TO_LOWER',
'TO_RADIANS',
'TO_STRING',
'TO_TDIGEST',
'TO_TIMEDURATION',
'TO_UNSIGNED_LONG',
'TO_UPPER',
'TO_VERSION',
'TOP',
'TOP_SNIPPETS',
'TRANGE',
'TRIM',
'URL_DECODE',
'URL_ENCODE',
'URL_ENCODE_COMPONENT',
'V_COSINE',
'V_DOT_PRODUCT',
'V_HAMMING',
'V_L1_NORM',
'V_L2_NORM',
'V_MAGNITUDE',
'VALUES',
'VARIANCE',
'VARIANCE_OVER_TIME',
'WEIGHTED_AVG',
'ADD',
'CAST',
'DIV',
'EQUALS',
'GREATER_THAN',
'GREATER_THAN_OR_EQUAL',
'IN',
'IS_NOT_NULL',
'IS_NULL',
'LESS_THAN',
'LESS_THAN_OR_EQUAL',
'LIKE',
'MATCH_OPERATOR',
'MOD',
'MUL',
'NEG',
'NOT_IN',
'NOT_LIKE',
'NOT_RLIKE',
'NOT_EQUALS',
'RLIKE',
'SUB',
];
const keywords = ['BY', 'ASC', 'DESC', 'FIRST', 'LAST', 'ON', 'WITH', 'METADATA', 'NULLS', 'SCORE', 'KEY', 'GROUP'];
const namedBinaryOperators = ['AND', 'OR', 'IS', 'IN', 'AS', 'LIKE', 'RLIKE', 'RLIKE', 'WHERE'];
exports.esql = function esql(Prism) {
Prism.languages.esql = {
// Single line comment: // comment
comment: {
pattern: /\/\/.*/,
greedy: true,
},
// Slash-star multiline comments: /* comment */
'multiline-comment': {
pattern: /\/\*[\s\S]*?\*\//,
greedy: true,
alias: ['comment'],
},
// Triple quoted strings: """string"""
'triple-quoted-string': {
pattern: /"""(?:\\.|[^\\"])*"""/,
greedy: true,
alias: ['string'],
},
// Single quoted strings: "string"
string: {
pattern: /"(?:\\.|[^\\"])*"/,
greedy: true,
},
// ES|LQ params: "?paramName", "?1", "?"
variable: /\?\w{1,999}/,
// Command names
command: {
pattern: new RegExp('\\b(?:' + commands.join('|') + ')\\b', 'i'),
alias: ['keyword'],
},
// List of well known keywords
keyword: {
pattern: new RegExp('\\b(?:' + keywords.join('|') + ')\\b', 'i'),
},
'named-binary-operator': {
pattern: new RegExp('\\b(?:' + namedBinaryOperators.join('|') + ')\\b', 'i'),
alias: ['keyword'],
},
// Highlight list of known functions
function: {
pattern: new RegExp('\\b(?:' + functions.join('|') + ')\\b', 'i'),
},
boolean: /\b(?:false|true)\b/i,
// Floating point numbers (ES|QL "decimals")
float: {
pattern: /\b(?:\d{1,50}\.{1}\d{0,50}|\.\d{1,50})(?:[eE][+-]?\d+)?\b/,
alias: ['number'],
},
// Integer numbers
integer: {
pattern: /\b\d+\b/,
alias: ['number'],
},
// Cast expressions
cast: {
pattern: /::\s*\w+\b/,
alias: ['operator'],
},
// General operators
operator: /-|\+|\*|\||\/|%|==|=|<=|>=|<|>/,
// Mark "|" and "," and some other symbols as punctuation
punctuation: /\||,|\(|\)|\[|\]|\{|\}/,
};
};
exports.esql.displayName = 'esql';
exports.esql.aliases = [];