UNPKG

@elastic/prismjs-esql

Version:

Prism.js and Refractor ES|QL language syntax definitions for highlighting

355 lines (354 loc) 7.38 kB
"use strict"; /* * 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 = [];