@fc-components/monaco-editor 0.1.25 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-editor.esm.js","sources":["../src/promql/promql.ts","../src/promql/util.ts","../src/promql/completion/DataProvider.ts","../src/promql/completion/situation.ts","../src/promql/completion/completions.ts","../src/promql/completion/getCompletionProvider.ts","../src/promql/validation.ts","../src/promql/index.tsx","../src/yaml/yaml.ts","../src/yaml/completion/getCompletionProvider.ts","../src/yaml/validation.ts","../src/yaml/index.tsx","../src/sql/sql.ts","../src/sql/completion/getCompletionProvider.ts","../src/sql/index.tsx"],"sourcesContent":["export const languageConfiguration = {\n // the default separators except `@$`\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^`~!#%^&*()\\-=+\\[{\\]}\\\\|;:'\",.<>\\/?\\s]+)/g,\n // Not possible to make comments in PromQL syntax\n comments: {\n lineComment: '#',\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n { open: '<', close: '>' },\n ],\n folding: {},\n};\n// PromQL Aggregation Operators\n// (https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators)\nconst aggregations = [\n 'sum',\n 'min',\n 'max',\n 'avg',\n 'group',\n 'stddev',\n 'stdvar',\n 'count',\n 'count_values',\n 'bottomk',\n 'topk',\n 'quantile',\n 'quantiles',\n 'distinct',\n 'geomean',\n 'histogram',\n 'mad',\n 'mode',\n // metricsql aggregations\n 'any',\n 'bottomk_avg',\n 'bottomk_max',\n 'bottomk_median',\n 'bottomk_last',\n 'bottomk_min',\n 'topk_avg',\n 'topk_max',\n 'topk_median',\n 'topk_last',\n 'topk_min',\n 'outliers_mad',\n 'outliersk',\n 'share',\n 'sum2',\n 'zscore',\n];\n// PromQL functions\n// (https://prometheus.io/docs/prometheus/latest/querying/functions/)\nconst functions = [\n 'abs',\n 'absent',\n 'ceil',\n 'changes',\n 'clamp_max',\n 'clamp_min',\n 'day_of_month',\n 'day_of_week',\n 'days_in_month',\n 'delta',\n 'deriv',\n 'exp',\n 'floor',\n 'histogram_quantile',\n 'histogram_avg',\n 'histogram_count',\n 'histogram_sum',\n 'histogram_fraction',\n 'histogram_stddev',\n 'histogram_stdvar',\n 'holt_winters',\n 'hour',\n 'idelta',\n 'increase',\n 'irate',\n 'label_join',\n 'label_replace',\n 'ln',\n 'log2',\n 'log10',\n 'minute',\n 'month',\n 'predict_linear',\n 'rate',\n 'resets',\n 'round',\n 'scalar',\n 'sort',\n 'sort_desc',\n 'sqrt',\n 'time',\n 'timestamp',\n 'vector',\n 'year',\n // metricsql functions\n 'aggr_over_time',\n 'alias',\n 'ascent_over_time',\n 'bitmap_and',\n 'bitmap_or',\n 'bitmap_xor',\n 'buckets_limit',\n 'changes_prometheus',\n 'count_eq_over_time',\n 'count_gt_over_time',\n 'count_le_over_time',\n 'count_ne_over_time',\n 'decreases_over_time',\n 'default_rollup',\n 'delta_prometheus',\n 'deriv_fast',\n 'descent_over_time',\n 'distinct_over_time',\n 'drop_common_labels',\n 'duration_over_time',\n 'first_over_time',\n 'geomean_over_time',\n 'histogram_avg',\n 'histogram_over_time',\n 'histogram_quantiles',\n 'histogram_share',\n 'hoeffding_bound_lower',\n 'hoeffding_bound_upper',\n 'ideriv',\n 'increase_prometheus',\n 'increase_pure',\n 'increases_over_time',\n 'integrate',\n 'interpolate',\n 'keep_last_value',\n 'keep_next_value',\n 'label_copy',\n 'label_del',\n 'label_graphite_group',\n 'label_keep',\n 'label_lowercase',\n 'label_map',\n 'label_match',\n 'label_mismatch',\n 'label_move',\n 'label_set',\n 'label_transform',\n 'label_uppercase',\n 'label_value',\n 'lag',\n 'lifetime',\n 'limit_offset',\n 'mad_over_time',\n 'median_over_time',\n 'mode_over_time',\n 'now',\n 'prometheus_buckets',\n 'quantiles_over_time',\n 'rand',\n 'rand_exponential',\n 'rand_normal',\n 'range_avg',\n 'range_first',\n 'range_last',\n 'range_linear_regression',\n 'range_mad',\n 'range_max',\n 'range_min',\n 'range_normalize',\n 'range_over_time',\n 'range_quantile',\n 'range_stddev',\n 'range_stdvar',\n 'range_sum',\n 'range_trim_outliers',\n 'range_trim_spikes',\n 'range_trim_zscore',\n 'range_zscore',\n 'rate_over_sum',\n 'remove_resets',\n 'rollup',\n 'rollup_candlestick',\n 'rollup_delta',\n 'rollup_deriv',\n 'rollup_increase',\n 'rollup_rate',\n 'rollup_scrape_interval',\n 'running_avg',\n 'running_max',\n 'running_min',\n 'running_sum',\n 'scrape_interval',\n 'share_eq_over_time',\n 'share_gt_over_time',\n 'share_le_over_time',\n 'smooth_exponential',\n 'smooth_exponential',\n 'sort_by_label_desc',\n 'sort_by_label_numeric',\n 'sort_by_label_numeric_desc',\n 'stale_samples_over_time',\n 'step',\n 'sum2_over_time',\n 'tfirst_over_time',\n 'timestamp_with_name',\n 'timezone_offset',\n 'tlast_change_over_time',\n 'tlast_over_time',\n 'tmax_over_time',\n 'tmin_over_time',\n 'union',\n 'zscore_over_time',\n 'avg_daily',\n 'median_daily',\n 'avg_weekly',\n 'median_weekly',\n 'median_weekly_with_trends',\n];\n// PromQL specific functions: Aggregations over time\n// (https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time)\nconst aggregationsOverTime: string[] = [];\nfor (let _i = 0, aggregations_1 = aggregations; _i < aggregations_1.length; _i++) {\n let agg = aggregations_1[_i];\n aggregationsOverTime.push(agg + '_over_time');\n}\n\n// PromQL vector matching + the by and without clauses\n// (https://prometheus.io/docs/prometheus/latest/querying/operators/#vector-matching)\nconst vectorMatching = ['on', 'ignoring', 'group_right', 'group_left', 'by', 'without'];\n// Produce a regex matching elements : (elt1|elt2|...)\nconst vectorMatchingRegex =\n '(' +\n vectorMatching.reduce(function (prev, curr) {\n return prev + '|' + curr;\n }) +\n ')';\n// PromQL Operators\n// (https://prometheus.io/docs/prometheus/latest/querying/operators/)\nconst operators = ['+', '-', '*', '/', '%', '^', '==', '!=', '>', '<', '>=', '<=', 'and', 'or', 'unless'];\n// PromQL offset modifier\n// (https://prometheus.io/docs/prometheus/latest/querying/basics/#offset-modifier)\nconst offsetModifier = ['offset'];\n// Merging all the keywords in one list\nconst keywords = aggregations.concat(functions).concat(aggregationsOverTime).concat(vectorMatching).concat(offsetModifier);\n// noinspection JSUnusedGlobalSymbols\nexport const language = {\n ignoreCase: false,\n defaultToken: '',\n tokenPostfix: '.promql',\n keywords: keywords,\n operators: operators,\n vectorMatching: vectorMatchingRegex,\n // we include these common regular expressions\n symbols: /[=><!~?:&|+\\-*\\/^%]+/,\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n digits: /\\d+(_+\\d+)*/,\n octaldigits: /[0-7]+(_+[0-7]+)*/,\n binarydigits: /[0-1]+(_+[0-1]+)*/,\n hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n integersuffix: /(ll|LL|u|U|l|L)?(ll|LL|u|U|l|L)?/,\n floatsuffix: /[fFlL]?/,\n // The main tokenizer for our languages\n tokenizer: {\n root: [\n // 'by', 'without' and vector matching\n [/@vectorMatching\\s*(?=\\()/, 'type', '@clauses'],\n // labels\n [/[a-z_]\\w*(?=\\s*(=|!=|=~|!~))/, 'tag'],\n // comments\n [/(^#.*$)/, 'comment'],\n // all keywords have the same color\n [\n /[a-zA-Z_]\\w*/,\n {\n cases: {\n '@keywords': 'type',\n '@default': 'identifier',\n },\n },\n ],\n // strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n [/\"/, 'string', '@string_double'],\n [/'/, 'string', '@string_single'],\n [/`/, 'string', '@string_backtick'],\n // whitespace\n { include: '@whitespace' },\n // delimiters and operators\n [/[{}()\\[\\]]/, '@brackets'],\n [/[<>](?!@symbols)/, '@brackets'],\n [\n /@symbols/,\n {\n cases: {\n '@operators': 'delimiter',\n '@default': '',\n },\n },\n ],\n // numbers\n [/\\d+[smhdwy]/, 'number'],\n [/\\d*\\d+[eE]([\\-+]?\\d+)?(@floatsuffix)/, 'number.float'],\n [/\\d*\\.\\d+([eE][\\-+]?\\d+)?(@floatsuffix)/, 'number.float'],\n [/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/, 'number.hex'],\n [/0[0-7']*[0-7](@integersuffix)/, 'number.octal'],\n [/0[bB][0-1']*[0-1](@integersuffix)/, 'number.binary'],\n [/\\d[\\d']*\\d(@integersuffix)/, 'number'],\n [/\\d(@integersuffix)/, 'number'],\n ],\n string_double: [\n [/[^\\\\\"]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, 'string', '@pop'],\n ],\n string_single: [\n [/[^\\\\']+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/'/, 'string', '@pop'],\n ],\n string_backtick: [\n [/[^\\\\`$]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/`/, 'string', '@pop'],\n ],\n clauses: [\n [/[^(,)]/, 'tag'],\n [/\\)/, 'identifier', '@pop'],\n ],\n whitespace: [[/[ \\t\\r\\n]+/, 'white']],\n },\n};\n// noinspection JSUnusedGlobalSymbols\n// export const completionItemProvider = {\n// provideCompletionItems: function () {\n// // To simplify, we made the choice to never create automatically the parenthesis behind keywords\n// // It is because in PromQL, some keywords need parenthesis behind, some don't, some can have but it's optional.\n// const suggestions = keywords.map(function (value) {\n// return {\n// label: value,\n// kind: languages.CompletionItemKind.Keyword,\n// insertText: value,\n// insertTextRules: languages.CompletionItemInsertTextRule.InsertAsSnippet\n// };\n// });\n// return { suggestions: suggestions };\n// }\n// };\n\ninterface CompletionItem {\n label: string;\n insertText: string;\n detail?: string;\n documentation?: string;\n}\n\nconst TRIGONOMETRIC_FUNCTIONS: CompletionItem[] = [\n {\n label: 'acos',\n insertText: 'acos',\n detail: 'acos(v instant-vector)',\n documentation: 'calculates the arccosine of all elements in v',\n },\n {\n label: 'acosh',\n insertText: 'acosh',\n detail: 'acosh(v instant-vector)',\n documentation: 'calculates the inverse hyperbolic cosine of all elements in v',\n },\n {\n label: 'asin',\n insertText: 'asin',\n detail: 'asin(v instant-vector)',\n documentation: 'calculates the arcsine of all elements in v',\n },\n {\n label: 'asinh',\n insertText: 'asinh',\n detail: 'asinh(v instant-vector)',\n documentation: 'calculates the inverse hyperbolic sine of all elements in v',\n },\n {\n label: 'atan',\n insertText: 'atan',\n detail: 'atan(v instant-vector)',\n documentation: 'calculates the arctangent of all elements in v',\n },\n {\n label: 'atanh',\n insertText: 'atanh',\n detail: 'atanh(v instant-vector)',\n documentation: 'calculates the inverse hyperbolic tangent of all elements in v',\n },\n {\n label: 'cos',\n insertText: 'cos',\n detail: 'cos(v instant-vector)',\n documentation: 'calculates the cosine of all elements in v',\n },\n {\n label: 'cosh',\n insertText: 'cosh',\n detail: 'cosh(v instant-vector)',\n documentation: 'calculates the hyperbolic cosine of all elements in v',\n },\n {\n label: 'sin',\n insertText: 'sin',\n detail: 'sin(v instant-vector)',\n documentation: 'calculates the sine of all elements in v',\n },\n {\n label: 'sinh',\n insertText: 'sinh',\n detail: 'sinh(v instant-vector)',\n documentation: 'calculates the hyperbolic sine of all elements in v',\n },\n {\n label: 'tan',\n insertText: 'tan',\n detail: 'tan(v instant-vector)',\n documentation: 'calculates the tangent of all elements in v',\n },\n {\n label: 'tanh',\n insertText: 'tanh',\n detail: 'tanh(v instant-vector)',\n documentation: 'calculates the hyperbolic tangent of all elements in v',\n },\n];\n\nconst AGGREGATION_OPERATORS: CompletionItem[] = [\n {\n label: 'sum',\n insertText: 'sum',\n documentation: 'Calculate sum over dimensions',\n },\n {\n label: 'min',\n insertText: 'min',\n documentation: 'Select minimum over dimensions',\n },\n {\n label: 'max',\n insertText: 'max',\n documentation: 'Select maximum over dimensions',\n },\n {\n label: 'avg',\n insertText: 'avg',\n documentation: 'Calculate the average over dimensions',\n },\n {\n label: 'group',\n insertText: 'group',\n documentation: 'All values in the resulting vector are 1',\n },\n {\n label: 'stddev',\n insertText: 'stddev',\n documentation: 'Calculate population standard deviation over dimensions',\n },\n {\n label: 'stdvar',\n insertText: 'stdvar',\n documentation: 'Calculate population standard variance over dimensions',\n },\n {\n label: 'count',\n insertText: 'count',\n documentation: 'Count number of elements in the vector',\n },\n {\n label: 'count_values',\n insertText: 'count_values',\n documentation: 'Count number of elements with the same value',\n },\n {\n label: 'bottomk',\n insertText: 'bottomk',\n documentation: 'Smallest k elements by sample value',\n },\n {\n label: 'topk',\n insertText: 'topk',\n documentation: 'Largest k elements by sample value',\n },\n {\n label: 'quantile',\n insertText: 'quantile',\n documentation: 'Calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions',\n },\n];\n\nexport const FUNCTIONS = [\n ...AGGREGATION_OPERATORS,\n ...TRIGONOMETRIC_FUNCTIONS,\n {\n insertText: 'abs',\n label: 'abs',\n detail: 'abs(v instant-vector)',\n documentation: 'Returns the input vector with all sample values converted to their absolute value.',\n },\n {\n insertText: 'absent',\n label: 'absent',\n detail: 'absent(v instant-vector)',\n documentation:\n 'Returns an empty vector if the vector passed to it has any elements and a 1-element vector with the value 1 if the vector passed to it has no elements. This is useful for alerting on when no time series exist for a given metric name and label combination.',\n },\n {\n insertText: 'absent_over_time',\n label: 'absent_over_time',\n detail: 'absent(v range-vector)',\n documentation:\n 'Returns an empty vector if the range vector passed to it has any elements and a 1-element vector with the value 1 if the range vector passed to it has no elements.',\n },\n {\n insertText: 'ceil',\n label: 'ceil',\n detail: 'ceil(v instant-vector)',\n documentation: 'Rounds the sample values of all elements in `v` up to the nearest integer.',\n },\n {\n insertText: 'changes',\n label: 'changes',\n detail: 'changes(v range-vector)',\n documentation: 'For each input time series, `changes(v range-vector)` returns the number of times its value has changed within the provided time range as an instant vector.',\n },\n {\n insertText: 'clamp',\n label: 'clamp',\n detail: 'clamp(v instant-vector, min scalar, max scalar)',\n documentation: 'Clamps the sample values of all elements in `v` to have a lower limit of `min` and an upper limit of `max`.',\n },\n {\n insertText: 'clamp_max',\n label: 'clamp_max',\n detail: 'clamp_max(v instant-vector, max scalar)',\n documentation: 'Clamps the sample values of all elements in `v` to have an upper limit of `max`.',\n },\n {\n insertText: 'clamp_min',\n label: 'clamp_min',\n detail: 'clamp_min(v instant-vector, min scalar)',\n documentation: 'Clamps the sample values of all elements in `v` to have a lower limit of `min`.',\n },\n {\n insertText: 'count_scalar',\n label: 'count_scalar',\n detail: 'count_scalar(v instant-vector)',\n documentation:\n 'Returns the number of elements in a time series vector as a scalar. This is in contrast to the `count()` aggregation operator, which always returns a vector (an empty one if the input vector is empty) and allows grouping by labels via a `by` clause.',\n },\n {\n insertText: 'deg',\n label: 'deg',\n detail: 'deg(v instant-vector)',\n documentation: 'Converts radians to degrees for all elements in v',\n },\n {\n insertText: 'day_of_month',\n label: 'day_of_month',\n detail: 'day_of_month(v=vector(time()) instant-vector)',\n documentation: 'Returns the day of the month for each of the given times in UTC. Returned values are from 1 to 31.',\n },\n {\n insertText: 'day_of_week',\n label: 'day_of_week',\n detail: 'day_of_week(v=vector(time()) instant-vector)',\n documentation: 'Returns the day of the week for each of the given times in UTC. Returned values are from 0 to 6, where 0 means Sunday etc.',\n },\n {\n insertText: 'day_of_year',\n label: 'day_of_year',\n detail: 'day_of_year(v=vector(time()) instant-vector)',\n documentation: 'Returns the day of the year for each of the given times in UTC. Returned values are from 1 to 365 for non-leap years, and 1 to 366 in leap years.',\n },\n {\n insertText: 'days_in_month',\n label: 'days_in_month',\n detail: 'days_in_month(v=vector(time()) instant-vector)',\n documentation: 'Returns number of days in the month for each of the given times in UTC. Returned values are from 28 to 31.',\n },\n {\n insertText: 'delta',\n label: 'delta',\n detail: 'delta(v range-vector)',\n documentation:\n 'Calculates the difference between the first and last value of each time series element in a range vector `v`, returning an instant vector with the given deltas and equivalent labels. The delta is extrapolated to cover the full time range as specified in the range vector selector, so that it is possible to get a non-integer result even if the sample values are all integers.',\n },\n {\n insertText: 'deriv',\n label: 'deriv',\n detail: 'deriv(v range-vector)',\n documentation: 'Calculates the per-second derivative of the time series in a range vector `v`, using simple linear regression.',\n },\n {\n insertText: 'drop_common_labels',\n label: 'drop_common_labels',\n detail: 'drop_common_labels(instant-vector)',\n documentation: 'Drops all labels that have the same name and value across all series in the input vector.',\n },\n {\n insertText: 'exp',\n label: 'exp',\n detail: 'exp(v instant-vector)',\n documentation: 'Calculates the exponential function for all elements in `v`.\\nSpecial cases are:\\n* `Exp(+Inf) = +Inf` \\n* `Exp(NaN) = NaN`',\n },\n {\n insertText: 'floor',\n label: 'floor',\n detail: 'floor(v instant-vector)',\n documentation: 'Rounds the sample values of all elements in `v` down to the nearest integer.',\n },\n {\n insertText: 'histogram_quantile',\n label: 'histogram_quantile',\n detail: 'histogram_quantile(φ float, b instant-vector)',\n documentation:\n 'Calculates the φ-quantile (0 ≤ φ ≤ 1) from the buckets `b` of a histogram. The samples in `b` are the counts of observations in each bucket. Each sample must have a label `le` where the label value denotes the inclusive upper bound of the bucket. (Samples without such a label are silently ignored.) The histogram metric type automatically provides time series with the `_bucket` suffix and the appropriate labels.',\n },\n {\n insertText: 'holt_winters',\n label: 'holt_winters',\n detail: 'holt_winters(v range-vector, sf scalar, tf scalar)',\n documentation:\n 'Produces a smoothed value for time series based on the range in `v`. The lower the smoothing factor `sf`, the more importance is given to old data. The higher the trend factor `tf`, the more trends in the data is considered. Both `sf` and `tf` must be between 0 and 1.',\n },\n {\n insertText: 'hour',\n label: 'hour',\n detail: 'hour(v=vector(time()) instant-vector)',\n documentation: 'Returns the hour of the day for each of the given times in UTC. Returned values are from 0 to 23.',\n },\n {\n insertText: 'idelta',\n label: 'idelta',\n detail: 'idelta(v range-vector)',\n documentation: 'Calculates the difference between the last two samples in the range vector `v`, returning an instant vector with the given deltas and equivalent labels.',\n },\n {\n insertText: 'increase',\n label: 'increase',\n detail: 'increase(v range-vector)',\n documentation:\n 'Calculates the increase in the time series in the range vector. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for. The increase is extrapolated to cover the full time range as specified in the range vector selector, so that it is possible to get a non-integer result even if a counter increases only by integer increments.',\n },\n {\n insertText: 'irate',\n label: 'irate',\n detail: 'irate(v range-vector)',\n documentation:\n 'Calculates the per-second instant rate of increase of the time series in the range vector. This is based on the last two data points. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for.',\n },\n {\n insertText: 'label_join',\n label: 'label_join',\n detail: 'label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)',\n documentation:\n 'For each timeseries in `v`, joins all the values of all the `src_labels` using `separator` and returns the timeseries with the label `dst_label` containing the joined value. There can be any number of `src_labels` in this function.',\n },\n {\n insertText: 'label_replace',\n label: 'label_replace',\n detail: 'label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)',\n documentation:\n \"For each timeseries in `v`, `label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)` matches the regular expression `regex` against the label `src_label`. If it matches, then the timeseries is returned with the label `dst_label` replaced by the expansion of `replacement`. `$1` is replaced with the first matching subgroup, `$2` with the second etc. If the regular expression doesn't match then the timeseries is returned unchanged.\",\n },\n {\n insertText: 'ln',\n label: 'ln',\n detail: 'ln(v instant-vector)',\n documentation:\n 'Calculates the natural logarithm for all elements in `v`.\\nSpecial cases are:\\n * `ln(+Inf) = +Inf`\\n * `ln(0) = -Inf`\\n * `ln(x < 0) = NaN`\\n * `ln(NaN) = NaN`',\n },\n {\n insertText: 'log2',\n label: 'log2',\n detail: 'log2(v instant-vector)',\n documentation: 'Calculates the binary logarithm for all elements in `v`. The special cases are equivalent to those in `ln`.',\n },\n {\n insertText: 'log10',\n label: 'log10',\n detail: 'log10(v instant-vector)',\n documentation: 'Calculates the decimal logarithm for all elements in `v`. The special cases are equivalent to those in `ln`.',\n },\n {\n insertText: 'minute',\n label: 'minute',\n detail: 'minute(v=vector(time()) instant-vector)',\n documentation: 'Returns the minute of the hour for each of the given times in UTC. Returned values are from 0 to 59.',\n },\n {\n insertText: 'month',\n label: 'month',\n detail: 'month(v=vector(time()) instant-vector)',\n documentation: 'Returns the month of the year for each of the given times in UTC. Returned values are from 1 to 12, where 1 means January etc.',\n },\n {\n insertText: 'pi',\n label: 'pi',\n detail: 'pi()',\n documentation: 'Returns pi',\n },\n {\n insertText: 'predict_linear',\n label: 'predict_linear',\n detail: 'predict_linear(v range-vector, t scalar)',\n documentation: 'Predicts the value of time series `t` seconds from now, based on the range vector `v`, using simple linear regression.',\n },\n {\n insertText: 'rad',\n label: 'rad',\n detail: 'rad(v instant-vector)',\n documentation: 'Converts degrees to radians for all elements in v',\n },\n {\n insertText: 'rate',\n label: 'rate',\n detail: 'rate(v range-vector)',\n documentation:\n \"Calculates the per-second average rate of increase of the time series in the range vector. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for. Also, the calculation extrapolates to the ends of the time range, allowing for missed scrapes or imperfect alignment of scrape cycles with the range's time period.\",\n },\n {\n insertText: 'resets',\n label: 'resets',\n detail: 'resets(v range-vector)',\n documentation:\n 'For each input time series, `resets(v range-vector)` returns the number of counter resets within the provided time range as an instant vector. Any decrease in the value between two consecutive samples is interpreted as a counter reset.',\n },\n {\n insertText: 'round',\n label: 'round',\n detail: 'round(v instant-vector, to_nearest=1 scalar)',\n documentation:\n 'Rounds the sample values of all elements in `v` to the nearest integer. Ties are resolved by rounding up. The optional `to_nearest` argument allows specifying the nearest multiple to which the sample values should be rounded. This multiple may also be a fraction.',\n },\n {\n insertText: 'scalar',\n label: 'scalar',\n detail: 'scalar(v instant-vector)',\n documentation:\n 'Given a single-element input vector, `scalar(v instant-vector)` returns the sample value of that single element as a scalar. If the input vector does not have exactly one element, `scalar` will return `NaN`.',\n },\n {\n insertText: 'sgn',\n label: 'sgn',\n detail: 'sgn(v instant-vector)',\n documentation: 'Returns a vector with all sample values converted to their sign, defined as this: 1 if v is positive, -1 if v is negative and 0 if v is equal to zero.',\n },\n {\n insertText: 'sort',\n label: 'sort',\n detail: 'sort(v instant-vector)',\n documentation: 'Returns vector elements sorted by their sample values, in ascending order.',\n },\n {\n insertText: 'sort_desc',\n label: 'sort_desc',\n detail: 'sort_desc(v instant-vector)',\n documentation: 'Returns vector elements sorted by their sample values, in descending order.',\n },\n {\n insertText: 'sqrt',\n label: 'sqrt',\n detail: 'sqrt(v instant-vector)',\n documentation: 'Calculates the square root of all elements in `v`.',\n },\n {\n insertText: 'time',\n label: 'time',\n detail: 'time()',\n documentation:\n 'Returns the number of seconds since January 1, 1970 UTC. Note that this does not actually return the current time, but the time at which the expression is to be evaluated.',\n },\n {\n insertText: 'timestamp',\n label: 'timestamp',\n detail: 'timestamp(v instant-vector)',\n documentation: 'Returns the timestamp of each of the samples of the given vector as the number of seconds since January 1, 1970 UTC.',\n },\n {\n insertText: 'vector',\n label: 'vector',\n detail: 'vector(s scalar)',\n documentation: 'Returns the scalar `s` as a vector with no labels.',\n },\n {\n insertText: 'year',\n label: 'year',\n detail: 'year(v=vector(time()) instant-vector)',\n documentation: 'Returns the year for each of the given times in UTC.',\n },\n {\n insertText: 'avg_over_time',\n label: 'avg_over_time',\n detail: 'avg_over_time(range-vector)',\n documentation: 'The average value of all points in the specified interval.',\n },\n {\n insertText: 'min_over_time',\n label: 'min_over_time',\n detail: 'min_over_time(range-vector)',\n documentation: 'The minimum value of all points in the specified interval.',\n },\n {\n insertText: 'max_over_time',\n label: 'max_over_time',\n detail: 'max_over_time(range-vector)',\n documentation: 'The maximum value of all points in the specified interval.',\n },\n {\n insertText: 'sum_over_time',\n label: 'sum_over_time',\n detail: 'sum_over_time(range-vector)',\n documentation: 'The sum of all values in the specified interval.',\n },\n {\n insertText: 'count_over_time',\n label: 'count_over_time',\n detail: 'count_over_time(range-vector)',\n documentation: 'The count of all values in the specified interval.',\n },\n {\n insertText: 'quantile_over_time',\n label: 'quantile_over_time',\n detail: 'quantile_over_time(scalar, range-vector)',\n documentation: 'The φ-quantile (0 ≤ φ ≤ 1) of the values in the specified interval.',\n },\n {\n insertText: 'stddev_over_time',\n label: 'stddev_over_time',\n detail: 'stddev_over_time(range-vector)',\n documentation: 'The population standard deviation of the values in the specified interval.',\n },\n {\n insertText: 'stdvar_over_time',\n label: 'stdvar_over_time',\n detail: 'stdvar_over_time(range-vector)',\n documentation: 'The population standard variance of the values in the specified interval.',\n },\n {\n insertText: 'last_over_time',\n label: 'last_over_time',\n detail: 'last_over_time(range-vector)',\n documentation: 'The most recent point value in specified interval.',\n },\n {\n insertText: 'present_over_time',\n label: 'present_over_time',\n detail: 'present_over_time(range-vector)',\n documentation: 'The value 1 for any series in the specified interval.',\n },\n {\n insertText: 'histogram_avg',\n label: 'histogram_avg',\n detail: 'histogram_avg(v instant-vector)',\n documentation:\n 'Returns the arithmetic average of observed values stored in a native histogram. Samples that are not native histograms are ignored and do not show up in the returned vector.',\n },\n {\n insertText: 'histogram_count',\n label: 'histogram_count',\n detail: 'histogram_count(v instant-vector)',\n documentation: 'Returns the count of observations stored in a native histogram.',\n },\n {\n insertText: 'histogram_sum',\n label: 'histogram_sum',\n detail: 'histogram_sum(v instant-vector)',\n documentation: 'Returns the sum of observations stored in a native histogram.',\n },\n {\n insertText: 'histogram_fraction',\n label: 'histogram_fraction',\n detail: 'histogram_fraction(lower scalar, upper scalar, v instant-vector)',\n documentation: 'Returns the estimated fraction of observations between the provided lower and upper values.',\n },\n {\n insertText: 'histogram_stddev',\n label: 'histogram_stddev',\n detail: 'histogram_stddev(v instant-vector)',\n documentation: 'Returns the estimated standard deviation of observations in a native histogram, based on the geometric mean of the buckets where the observations lie.',\n },\n {\n insertText: 'histogram_stdvar',\n label: 'histogram_stdvar',\n detail: 'histogram_stdvar(v instant-vector)',\n documentation: 'Returns the estimated standard variance of observations in a native histogram.',\n },\n];\n","import { Label } from './types';\n\nexport class NeverCaseError extends Error {\n constructor(_value: never) {\n super('should never happen');\n }\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function makeSelector(metricName: string, labels?: Label[], labelName?: string): string {\n if (!labels || labels.length === 0) {\n return metricName;\n }\n\n const allLabels = [...labels].filter((label) => label.name !== labelName && label.value !== '');\n\n const allLabelTexts = allLabels.map((label) => {\n return `${label.name}${label.op}\"${escapeLabelValueInExactSelector(label.value)}\"`;\n });\n\n return `${metricName}{${allLabelTexts.join(',')}}`;\n}\n","import { makeSelector } from '../util';\nimport type { Metric, PromMetricsMetadata, DataProviderParams } from '../types';\n\ntype CustomRequest = (input: RequestInfo, init?: RequestInit) => Promise<Response>;\n\ninterface APIResponse<T> {\n status: 'success' | 'error';\n data?: T;\n error?: string;\n warnings?: string[];\n}\n\nconst DEFAULT_SERIES_LIMIT = '40000';\nconst badRequest = 400;\nconst unprocessableEntity = 422;\nconst serviceUnavailable = 503;\nconst CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT = 'codeModeSuggestionsIncomplete';\n\nexport class DataProvider {\n readonly metricNamesSuggestionLimit: number;\n private inputInRange: string;\n private suggestionsIncomplete: boolean;\n private readonly lookbackInterval = 60 * 60 * 1000 * 12; // 12 hours\n private variablesNames: string[] = [];\n private readonly url: string;\n private readonly errorHandler?: (error: any) => void;\n private readonly httpMethod: 'POST' | 'GET' = 'GET';\n private readonly apiPrefix: string = '/api/v1';\n private enableRequests: boolean = true;\n private readonly customRequest: CustomRequest = (input: RequestInfo, init?: RequestInit): Promise<Response> => fetch(input, init);\n metrics: string[];\n labelKeys: string[];\n metricsMetadata?: PromMetricsMetadata;\n durationVariablesCompletion: boolean;\n\n constructor(params: DataProviderParams) {\n this.inputInRange = '';\n this.metricNamesSuggestionLimit = 1000;\n this.suggestionsIncomplete = false;\n\n this.url = params.url ? params.url : '';\n this.errorHandler = params.httpErrorHandler;\n if (params.lookbackInterval) {\n this.lookbackInterval = params.lookbackInterval;\n }\n if (params.variablesNames) {\n this.variablesNames = [...params.variablesNames];\n }\n this.durationVariablesCompletion = params.durationVariablesCompletion ?? true;\n if (params.request) {\n this.customRequest = params.request;\n }\n if (params.httpMethod) {\n this.httpMethod = params.httpMethod;\n }\n if (params.apiPrefix) {\n this.apiPrefix = params.apiPrefix;\n }\n\n // control whether DataProvider should actually send network requests\n if (typeof params.enableRequests !== 'undefined') {\n this.enableRequests = !!params.enableRequests;\n }\n\n this.metrics = [];\n this.labelKeys = [];\n }\n\n getVariablesNames(): string[] {\n return this.variablesNames;\n }\n\n setVariablesNames(variablesNames: string[]) {\n this.variablesNames = [...variablesNames];\n }\n\n private buildRequest(endpoint: string, params: URLSearchParams) {\n let uri = endpoint;\n let body: URLSearchParams | null = params;\n if (this.httpMethod === 'GET') {\n uri = `${uri}?${params}`;\n body = null;\n }\n return { uri, body };\n }\n\n private request<T>(resource: string, init?: RequestInit): Promise<T> {\n return this.customRequest(this.url + resource, init)\n .then((res) => {\n if (!res.ok && ![badRequest, unprocessableEntity, serviceUnavailable].includes(res.status)) {\n throw new Error(res.statusText);\n }\n return res;\n })\n .then((res) => res.json())\n .then((apiRes: APIResponse<T>) => {\n if (apiRes.status === 'error') {\n const error = new Error(apiRes.error !== undefined ? apiRes.error : 'missing \"error\" field in response JSON');\n if (this.errorHandler) {\n this.errorHandler(error);\n }\n throw error;\n }\n if (apiRes.data === undefined) {\n const error = new Error(apiRes.error !== undefined ? apiRes.error : 'missing \"data\" field in response JSON');\n if (this.errorHandler) {\n this.errorHandler(error);\n }\n throw error;\n }\n return apiRes.data;\n })\n .catch((error) => {\n if (this.errorHandler) {\n this.errorHandler(error);\n }\n throw error;\n });\n }\n\n fetchSeries = async (selector: string, withLimit?: string): Promise<Record<string, string | undefined>[]> => {\n if (!this.enableRequests) {\n return [] as Record<string, string | undefined>[];\n }\n const end = new Date();\n const start = new Date(end.getTime() - this.lookbackInterval);\n const url = `${this.apiPrefix}/series`;\n let urlParams: any = {\n start: start.toISOString() as string,\n end: end.toISOString() as string,\n };\n if (selector) {\n urlParams['match[]'] = selector;\n }\n\n if (withLimit !== 'none') {\n urlParams = { ...urlParams, limit: withLimit ?? DEFAULT_SERIES_LIMIT };\n }\n const request = this.buildRequest(url, new URLSearchParams(urlParams));\n\n return await this.request<Record<string, string>[]>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n }).catch(() => {\n return [] as Record<string, string>[];\n });\n };\n\n fetchLabels = async (selector: string): Promise<string[]> => {\n if (!this.enableRequests) {\n return [] as string[];\n }\n const end = new Date();\n const start = new Date(end.getTime() - this.lookbackInterval);\n const url = `${this.apiPrefix}/labels`;\n const urlParams: any = {\n start: start.toISOString(),\n end: end.toISOString(),\n };\n if (selector) {\n urlParams['match[]'] = selector;\n }\n const request = this.buildRequest(url, new URLSearchParams(urlParams));\n\n return await this.request<string[]>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n })\n .then((res) => {\n this.labelKeys = res;\n return res;\n })\n .catch(() => {\n return [] as string[];\n });\n };\n\n fetchLabelValues = async (labelName: string, selector: string): Promise<string[]> => {\n if (!this.enableRequests) {\n return [] as string[];\n }\n const end = new Date();\n const start = new Date(end.getTime() - this.lookbackInterval);\n const url = `${this.apiPrefix}/label/${labelName}/values`;\n const urlParams: any = {\n start: start.toISOString(),\n end: end.toISOString(),\n };\n if (selector) {\n urlParams['match[]'] = selector;\n }\n\n const request = this.buildRequest(url, new URLSearchParams(urlParams));\n\n return await this.request<string[]>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n }).catch(() => {\n return [] as string[];\n });\n };\n\n getAllMetricNames(): string[] {\n return this.metrics;\n }\n\n start = async () => {\n this.metrics = (await this.fetchLabelValues('__name__', makeSelector('', [], '__name__'))) || [];\n\n return Promise.all([\n this.loadMetricsMetadata(),\n // this.fetchLabels()\n ]);\n };\n\n async loadMetricsMetadata(): Promise<PromMetricsMetadata> {\n if (!this.enableRequests) {\n this.metricsMetadata = {} as PromMetricsMetadata;\n return this.metricsMetadata;\n }\n const request = this.buildRequest(`${this.apiPrefix}/metadata`, new URLSearchParams({}));\n this.metricsMetadata = await this.request<PromMetricsMetadata>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n }).catch(() => {\n return {} as PromMetricsMetadata;\n });\n\n return this.metricsMetadata || ({} as PromMetricsMetadata);\n }\n\n metricNamesToMetrics(metricNames: string[]): Metric[] {\n const result: Metric[] = metricNames.map((m) => {\n const metaItem = this.metricsMetadata?.[m];\n return {\n name: m,\n help: metaItem?.help ?? '',\n type: metaItem?.type ?? '',\n };\n });\n\n return result;\n }\n\n private setInputInRange(textInput: string): void {\n this.inputInRange = textInput;\n }\n\n private enableAutocompleteSuggestionsUpdate(): void {\n this.suggestionsIncomplete = true;\n dispatchEvent(\n new CustomEvent(CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, {\n detail: {\n limit: this.metricNamesSuggestionLimit,\n },\n }),\n );\n }\n\n get monacoSettings() {\n return {\n /**\n * Enable autocomplete suggestions update on every input change.\n *\n * @remarks\n * If fuzzy search is used in `getCompletions` to trim down results to improve performance,\n * we need to instruct Monaco to update the completions on every input change, so that the\n * completions reflect the current input.\n */\n enableAutocompleteSuggestionsUpdate: this.enableAutocompleteSuggestionsUpdate.bind(this),\n inputInRange: this.inputInRange,\n setInputInRange: this.setInputInRange.bind(this),\n suggestionsIncomplete: this.suggestionsIncomplete,\n };\n }\n}\n","import type { SyntaxNode, Tree } from '@lezer/common';\nimport {\n AggregateExpr,\n AggregateModifier,\n BinaryExpr,\n EqlRegex,\n EqlSingle,\n FunctionCallBody,\n GroupingLabels,\n Identifier,\n LabelMatchers,\n LabelName,\n MatchOp,\n MatrixSelector,\n Neq,\n NeqRegex,\n NumberDurationLiteralInDurationContext,\n parser,\n PromQL,\n StringLiteral,\n UnquotedLabelMatcher,\n VectorSelector,\n} from '@fc-components/lezer-metricsql';\n\nimport { NeverCaseError } from '../util';\nimport { LabelOperator, Label } from '../types';\n\ntype Direction = 'parent' | 'firstChild' | 'lastChild' | 'nextSibling';\n\ntype NodeTypeId =\n | 0 // this is used as error-id\n | typeof AggregateExpr\n | typeof AggregateModifier\n | typeof FunctionCallBody\n | typeof GroupingLabels\n | typeof Identifier\n | typeof UnquotedLabelMatcher\n | typeof LabelMatchers\n | typeof LabelName\n | typeof PromQL\n | typeof StringLiteral\n | typeof VectorSelector\n | typeof MatrixSelector\n | typeof MatchOp\n | typeof EqlSingle\n | typeof Neq\n | typeof EqlRegex\n | typeof NeqRegex;\n\ntype Path = Array<[Direction, NodeTypeId]>;\n\nfunction move(node: SyntaxNode, direction: Direction): SyntaxNode | null {\n switch (direction) {\n case 'parent':\n return node.parent;\n case 'firstChild':\n return node.firstChild;\n case 'lastChild':\n return node.lastChild;\n case 'nextSibling':\n return node.nextSibling;\n default:\n throw new NeverCaseError(direction);\n }\n}\n\nfunction walk(node: SyntaxNode, path: Path): SyntaxNode | null {\n let current: SyntaxNode | null = node;\n for (const [direction, expectedType] of path) {\n current = move(current, direction);\n if (current === null) {\n // we could not move in the direction, we stop\n return null;\n }\n if (current.type.id !== expectedType) {\n // the reached node has wrong type, we stop\n return null;\n }\n }\n return current;\n}\n\nfunction getNodeText(node: SyntaxNode, text: string): string {\n return text.slice(node.from, node.to);\n}\n\nfunction parsePromQLStringLiteral(text: string): string {\n // if it is a string-literal, it is inside quotes of some kind\n const inside = text.slice(1, text.length - 1);\n\n // FIXME: support https://prometheus.io/docs/prometheus/latest/querying/basics/#string-literals\n // FIXME: maybe check other promql code, if all is supported or not\n\n // for now we do only some very simple un-escaping\n\n // we start with double-quotes\n if (text.startsWith('\"') && text.endsWith('\"')) {\n // NOTE: this is not 100% perfect, we only unescape the double-quote,\n // there might be other characters too\n return inside.replace(/\\\\\"/, '\"');\n }\n\n // then single-quote\n if (text.startsWith(\"'\") && text.endsWith(\"'\")) {\n // NOTE: this is not 100% perfect, we only unescape the single-quote,\n // there might be other characters too\n return inside.replace(/\\\\'/, \"'\");\n }\n\n // then backticks\n if (text.startsWith('`') && text.endsWith('`')) {\n return inside;\n }\n\n throw new Error('FIXME: invalid string literal');\n}\n\nexport type Situation =\n | {\n type: 'IN_FUNCTION';\n }\n | {\n type: 'AT_ROOT';\n }\n | {\n type: 'EMPTY';\n }\n | {\n type: 'IN_DURATION';\n }\n | {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME';\n metricName?: string;\n otherLabels: Label[];\n hasOperator: boolean;\n }\n | {\n type: 'IN_GROUPING';\n metricName: string;\n otherLabels: Label[];\n }\n | {\n type: 'IN_LABEL_SELECTOR_WITH_LABEL_NAME';\n metricName?: string;\n labelName: string;\n betweenQuotes: boolean;\n otherLabels: Label[];\n };\n\ntype Resolver = {\n path: NodeTypeId[];\n fun: (node: SyntaxNode, text: string, pos: number) => Situation | null;\n};\n\nfunction isPathMatch(resolverPath: NodeTypeId[], cursorPath: number[]): boolean {\n return resolverPath.every((item, index) => item === cursorPath[index]);\n}\n\nconst ERROR_NODE_NAME: NodeTypeId = 0; // this is used as error-id\n\nconst RESOLVERS: Resolver[] = [\n {\n path: [LabelName, UnquotedLabelMatcher],\n fun: resolveLabelName,\n },\n {\n path: [UnquotedLabelMatcher, LabelMatchers],\n fun: resolveLabelName,\n },\n {\n path: [LabelMatchers, VectorSelector],\n fun: resolveLabelKeysWithEquals,\n },\n {\n path: [LabelMatchers, VectorSelector, PromQL],\n fun: resolveLabelKeysWithEquals,\n },\n {\n path: [PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [VectorSelector, PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [Identifier, VectorSelector],\n fun: resolveTopLevel,\n },\n {\n path: [Identifier, VectorSelector, PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [FunctionCallBody],\n fun: resolveInFunction,\n },\n {\n path: [StringLiteral, UnquotedLabelMatcher],\n fun: resolveLabelMatcher,\n },\n {\n path: [ERROR_NODE_NAME, BinaryExpr, PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [ERROR_NODE_NAME, UnquotedLabelMatcher],\n fun: resolveErrorInLabelMatcher,\n },\n {\n path: [ERROR_NODE_NAME, NumberDurationLiteralInDurationContext, MatrixSelector],\n fun: resolveDurations,\n },\n {\n path: [GroupingLabels],\n fun: resolveLabelsForGrouping,\n },\n];\n\nconst LABEL_OP_MAP = new Map<number, LabelOperator>([\n [EqlSingle, '='],\n [EqlRegex, '=~'],\n [Neq, '!='],\n [NeqRegex, '!~'],\n]);\n\nfunction getLabelOp(opNode: SyntaxNode): LabelOperator | null {\n const opChild = opNode.firstChild;\n if (opChild === null) {\n return null;\n }\n\n return LABEL_OP_MAP.get(opChild.type.id) ?? null;\n}\n\nfunction getLabel(labelMatcherNode: SyntaxNode, text: string): Label | null {\n if (labelMatcherNode.type.id !== UnquotedLabelMatcher) {\n return null;\n }\n\n const nameNode = walk(labelMatcherNode, [['firstChild', LabelName]]);\n\n if (nameNode === null) {\n return null;\n }\n\n const opNode = walk(nameNode, [['nextSibling', MatchOp]]);\n if (opNode === null) {\n return null;\n }\n\n const op = getLabelOp(opNode);\n if (op === null) {\n return null;\n }\n\n const valueNode = walk(labelMatcherNode, [['lastChild', StringLiteral]]);\n\n if (valueNode === null) {\n return null;\n }\n\n const name = getNodeText(nameNode, text);\n const value = parsePromQLStringLiteral(getNodeText(valueNode, text));\n\n return { name, value, op };\n}\n\nfunction getLabels(labelMatchersNode: SyntaxNode, text: string): Label[] {\n if (labelMatchersNode.type.id !== LabelMatchers) {\n return [];\n }\n\n const labelNodes = labelMatchersNode.getChildren(UnquotedLabelMatcher);\n return labelNodes.map((ln) => getLabel(ln, text)).filter(notEmpty);\n}\n\nfunction getNodeChildren(node: SyntaxNode): SyntaxNode[] {\n let child: SyntaxNode | null = node.firstChild;\n const children: SyntaxNode[] = [];\n while (child !== null) {\n children.push(child);\n child = child.nextSibling;\n }\n return children;\n}\n\nfunction getNodeInSubtree(node: SyntaxNode, typeId: NodeTypeId): SyntaxNode | null {\n // first we try the current node\n if (node.type.id === typeId) {\n return node;\n }\n\n // then we try the children\n const children = getNodeChildren(node);\n for (const child of children) {\n const n = getNodeInSubtree(child, typeId);\n if (n !== null) {\n return n;\n }\n }\n\n return null;\n}\n\nfunction resolveLabelsForGrouping(node: SyntaxNode, text: string, _pos: number): Situation | null {\n const aggrExpNode = walk(node, [\n ['parent', AggregateModifier],\n ['parent', AggregateExpr],\n ]);\n if (aggrExpNode === null) {\n return null;\n }\n const bodyNode = aggrExpNode.getChild(FunctionCallBody);\n if (bodyNode === null) {\n return null;\n }\n\n const metricIdNode = getNodeInSubtree(bodyNode, Identifier);\n if (metricIdNode === null) {\n return null;\n }\n\n const metricName = getNodeText(metricIdNode, text);\n return {\n type: 'IN_GROUPING',\n metricName,\n otherLabels: [],\n };\n}\n\nfunction resolveLabelMatcher(node: SyntaxNode, text: string, _pos: number): Situation | null {\n // we can arrive here in two situation. `node` is either:\n // - a StringNode (like in `{job=\"^\"}`)\n // - or an error node (like in `{job=^}`)\n const inStringNode = !node.type.isError;\n\n const parent = walk(node, [['parent', UnquotedLabelMatcher]]);\n if (parent === null) {\n return null;\n }\n\n const labelNameNode = walk(parent, [['firstChild', LabelName]]);\n if (labelNameNode === null) {\n return null;\n }\n\n const labelName = getNodeText(labelNameNode, text);\n\n const labelMatchersNode = walk(parent, [['parent', LabelMatchers]]);\n if (labelMatchersNode === null) {\n return null;\n }\n\n // now we need to find the other names\n const allLabels = getLabels(labelMatchersNode, text);\n\n // we need to remove \"our\" label from all-labels, if it is in there\n const otherLabels = allLabels.filter((label) => label.name !== labelName);\n\n const metricNameNode = walk(labelMatchersNode, [\n ['parent', VectorSelector],\n ['firstChild', Identifier],\n ]);\n\n if (metricNameNode === null) {\n // we are probably in a situation without a metric name\n return {\n type: 'IN_LABEL_SELECTOR_WITH_LABEL_NAME',\n labelName,\n betweenQuotes: inStringNode,\n otherLabels,\n };\n }\n\n const metricName = getNodeText(metricNameNode, text);\n\n return {\n type: 'IN_LABEL_SELECTOR_WITH_LABEL_NAME',\n metricName,\n labelName,\n betweenQuotes: inStringNode,\n otherLabels,\n };\n}\n\nfunction resolveErrorInLabelMatcher(node: SyntaxNode, text: string, pos: number): Situation | null {\n // 处理错误节点在 UnquotedLabelMatcher 中的情况\n // 需要判断是删除值还是删除名称\n\n const parent = walk(node, [['parent', UnquotedLabelMatcher]]);\n if (parent === null) {\n return null;\n }\n\n const labelNameNode = walk(parent, [['firstChild', LabelName]]);\n\n // 情况1: 有完整的标签名 -> 提示 label value\n if (labelNameNode !== null) {\n // 检查是否有 MatchOp(=, =~, !=, !~)\n const hasMatchOp = walk(labelNameNode, [['nextSibling', MatchOp]]) !== null;\n if (hasMatchOp) {\n // 这是值场景,使用 resolveLabelMatcher 的逻辑\n return resolveLabelMatcher(node, text, pos);\n }\n }\n\n // 情况2: 没有完整的标签名或没有 MatchOp -> 提示 label name\n // 使用 resolveLabelName 的逻辑\n return resolveLabelName(parent, text, pos);\n}\n\nfunction resolveTopLevel(): Situation {\n return {\n type: 'AT_ROOT',\n };\n}\n\nfunction resolveInFunction(): Situation {\n return {\n type: 'IN_FUNCTION',\n };\n}\n\nfunction resolveDurations(): Situation {\n return {\n type: 'IN_DURATION',\n };\n}\n\nfunction resolveLabelName(node: SyntaxNode, text: string, pos: number): Situation | null {\n let labelMatcherNode: SyntaxNode | null = node;\n\n // 如果节点是错误节点,尝试找到其父节点 UnquotedLabelMatcher\n if (node.type.isError) {\n const parent = node.parent;\n if (parent !== null && parent.type.id === UnquotedLabelMatcher) {\n labelMatcherNode = parent;\n } else {\n return null;\n }\n } else if (node.type.id === LabelName) {\n labelMatcherNode = walk(node, [['parent', UnquotedLabelMatcher]]);\n }\n\n if (labelMatcherNode === null || labelMatcherNode.type.id !== UnquotedLabelMatcher) {\n return null;\n }\n\n const labelNameNode = walk(labelMatcherNode, [['firstChild', LabelName]]);\n if (labelNameNode === null) {\n return null;\n }\n\n if (pos > labelNameNode.to) {\n return null;\n }\n\n const labelMatchersNode = walk(labelMatcherNode, [['parent', LabelMatchers]]);\n if (labelMatchersNode === null) {\n return null;\n }\n\n const currentLabelName = getNodeText(labelNameNode, text);\n const allLabels = getLabels(labelMatchersNode, text);\n const otherLabels = allLabels.filter((label) => label.name !== currentLabelName);\n const hasOperator = walk(labelNameNode, [['nextSibling', MatchOp]]) !== null;\n\n const metricNameNode = walk(labelMatchersNode, [\n ['parent', VectorSelector],\n ['firstChild', Identifier],\n ]);\n\n if (metricNameNode === null) {\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n otherLabels,\n hasOperator,\n };\n }\n\n const metricName = getNodeText(metricNameNode, text);\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n metricName,\n otherLabels,\n hasOperator,\n };\n}\n\nfunction resolveLabelKeysWithEquals(node: SyntaxNode, text: string, pos: number): Situation | null {\n // next false positive:\n // `something{a=\"1\"^}`\n const child = walk(node, [['firstChild', UnquotedLabelMatcher]]);\n if (child !== null) {\n // means the label-matching part contains at least one label already.\n //\n // in this case, we will need to have a `,` character at the end,\n // to be able to suggest adding the next label.\n // the area between the end-of-the-child-node and the cursor-pos\n // must contain a `,` in this case.\n const textToCheck = text.slice(child.to, pos);\n\n if (!textToCheck.includes(',')) {\n return null;\n }\n }\n\n const metricNameNode = walk(node, [\n ['parent', VectorSelector],\n ['firstChild', Identifier],\n ]);\n\n const otherLabels = getLabels(node, text);\n\n if (metricNameNode === null) {\n // we are probably in a situation without a metric name.\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n otherLabels,\n hasOperator: false,\n };\n }\n\n const metricName = getNodeText(metricNameNode, text);\n\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n metricName,\n otherLabels,\n hasOperator: false,\n };\n}\n\n// we find the first error-node in the tree that is at the cursor-position.\n// NOTE: this might be too slow, might need to optimize it\n// (ideas: we do not need to go into every subtree, based on from/to)\n// also, only go to places that are in the sub-tree of the node found\n// by default by lezer. problem is, `next()` will go upward too,\n// and we do not want to go higher than our node\nfunction getErrorNode(tree: Tree, pos: number): SyntaxNode | null {\n const cur = tree.cursorAt(pos);\n while (true) {\n if (cur.from === pos && cur.to === pos) {\n const { node } = cur;\n if (node.type.isError) {\n return node;\n }\n }\n\n if (!cur.next()) {\n break;\n }\n }\n return null;\n}\n\nexport function getSituation(text: string, pos: number): Situation | null {\n // there is a special-case when we are at the start of writing text,\n // so we handle that case first\n\n if (text === '') {\n return {\n type: 'EMPTY',\n };\n }\n\n /**\n PromQL\n Expr\n VectorSelector\n LabelMatchers\n */\n const tree = parser.parse(text);\n\n // if the tree contains error, it is very probable that\n // our node is one of those error-nodes.\n // also, if there are errors, the node lezer finds us,\n // might not be the best node.\n // so first we check if there is an error-node at the cursor-position\n const maybeErrorNode = getErrorNode(tree, pos);\n\n const cur = maybeErrorNode != null ? maybeErrorNode.cursor() : tree.cursorAt(pos);\n const currentNode = cur.node;\n\n const ids = [cur.type.id];\n // const names = [cur.type.name];\n while (cur.parent()) {\n ids.push(cur.type.id);\n // names.push(cur.type.name);\n }\n\n for (let resolver of RESOLVERS) {\n // i do not use a foreach because i want to stop as soon\n // as i find something\n if (isPathMatch(resolver.path, ids)) {\n return resolver.fun(currentNode, text, pos);\n }\n }\n\n return null;\n}\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined;\n}\n","// import UFuzzy from '@leeoniya/ufuzzy';\n\nimport { FUNCTIONS } from '../promql';\nimport { makeSelector, NeverCaseError } from '../util';\nimport type { DataProvider } from './DataProvider';\nimport type { Situation } from './situation';\nimport type { Label } from '../types';\n\nexport type CompletionType = 'HISTORY' | 'FUNCTION' | 'METRIC_NAME' | 'DURATION' | 'LABEL_NAME' | 'LABEL_VALUE';\n\ntype Completion = {\n type: CompletionType;\n label: string;\n insertText: string;\n detail?: string;\n documentation?: string;\n triggerOnInsert?: boolean;\n};\n\n// const metricNamesSearchClient = new UFuzzy({ intraMode: 1 });\n\n// we order items like: history, functions, metrics\nfunction getAllMetricNamesCompletions(dataProvider: DataProvider): Completion[] {\n let metricNames = dataProvider.getAllMetricNames();\n\n // if (metricNames.length > dataProvider.metricNamesSuggestionLimit) {\n // const { monacoSettings } = dataProvider;\n // monacoSettings.enableAutocompleteSuggestionsUpdate();\n\n // if (monacoSettings.inputInRange) {\n // metricNames =\n // metricNamesSearchClient\n // .filter(metricNames, monacoSettings.inputInRange)\n // ?.slice(0, dataProvider.metricNamesSuggestionLimit)\n // .map((idx) => metricNames[idx]) ?? [];\n // } else {\n // metricNames = metricNames.slice(0, dataProvider.metricNamesSuggestionLimit);\n // }\n // }\n\n return dataProvider.metricNamesToMetrics(metricNames).map((metric) => ({\n type: 'METRIC_NAME',\n label: metric.name,\n insertText: metric.name,\n detail: `${metric.name} : ${metric.type}`,\n documentation: metric.help,\n }));\n}\n\nconst FUNCTION_COMPLETIONS: Completion[] = FUNCTIONS.map((f) => ({\n type: 'FUNCTION',\n label: f.label,\n insertText: f.insertText ?? '', // i don't know what to do when this is nullish. it should not be.\n detail: f.detail,\n documentation: f.documentation,\n}));\n\nasync function getAllFunctionsAndMetricNamesCompletions(dataProvider: DataProvider): Promise<Completion[]> {\n const metricNames = getAllMetricNamesCompletions(dataProvider);\n\n return [...FUNCTION_COMPLETIONS, ...metricNames];\n}\n\nconst DURATION_COMPLETIONS: Completion[] = ['1m', '5m', '10m', '30m', '1h', '1d'].map((text) => ({\n type: 'DURATION',\n label: text,\n insertText: text,\n}));\n\nconst DURATION_VARIABLES_COMPLETIONS: Completion[] = ['$__interval', '$__range', '$__rate_interval'].map((text) => ({\n type: 'DURATION',\n label: text,\n insertText: text,\n}));\n\nfunction getAllHistoryCompletions(_dataProvider: DataProvider): Completion[] {\n return [];\n // function getAllHistoryCompletions(queryHistory: PromHistoryItem[]): Completion[] {\n // NOTE: the typescript types are wrong. historyItem.query.expr can be undefined\n // const allHistory = dataProvider.getHistory();\n // FIXME: find a better history-limit\n // return allHistory.slice(0, 10).map((expr) => ({\n // type: 'HISTORY',\n // label: expr,\n // insertText: expr,\n // }));\n}\n\nasync function getLabelNames(metric: string | undefined, otherLabels: Label[], dataProvider: DataProvider): Promise<string[]> {\n if (metric === undefined || metric === '') {\n const selector = makeSelector('', otherLabels);\n return await dataProvider.fetchLabels(selector);\n } else {\n const selector = makeSelector(metric, otherLabels);\n const series = await dataProvider.fetchSeries(selector);\n const labelNames = new Set<string>();\n for (const labelSet of series) {\n for (const [key] of Object.entries(labelSet)) {\n if (key === '__name__') {\n continue;\n }\n labelNames.add(key);\n }\n }\n return Array.from(labelNames);\n }\n}\n\nasync function getLabelNamesForCompletions(\n metric: string | undefined,\n suffix: string,\n triggerOnInsert: boolean,\n otherLabels: Label[],\n dataProvider: DataProvider,\n): Promise<Completion[]> {\n const labelNames = await getLabelNames(metric, otherLabels, dataProvider);\n return labelNames.map((text) => ({\n type: 'LABEL_NAME',\n label: text,\n insertText: `${text}${suffix}`,\n triggerOnInsert,\n }));\n}\n\nasync function getLabelNamesForSelectorCompletions(metric: string | undefined, hasOperator: boolean, otherLabels: Label[], dataProvider: DataProvider): Promise<Completion[]> {\n return getLabelNamesForCompletions(metric, hasOperator ? '' : '=', true, otherLabels, dataProvider);\n}\n\nasync function getLabelNamesForByCompletions(metric: string | undefined, otherLabels: Label[], dataProvider: DataProvider): Promise<Completion[]> {\n return getLabelNamesForCompletions(metric, '', false, otherLabels, dataProvider);\n}\n\nasync function getLabelValues(metric: string | undefined, labelName: string, otherLabels: Label[], dataProvider: DataProvider): Promise<string[]> {\n if (metric === undefined || metric === '') {\n const selector = makeSelector('', otherLabels);\n return await dataProvider.fetchLabelValues(labelName, selector);\n } else {\n const selector = makeSelector(metric, otherLabels, labelName);\n const series = await dataProvider.fetchSeries(selector);\n const labelValues = new Set<string>();\n for (const labelSet of series) {\n for (const [key, value] of Object.entries(labelSet)) {\n if (key === '__name__') {\n continue;\n }\n if (key === labelName && value) {\n labelValues.add(value);\n }\n }\n }\n const variablesNames = dataProvider.getVariablesNames();\n return variablesNames.concat(Array.from(labelValues));\n }\n}\n\nasync function getLabelValuesForMetricCompletions(\n metric: string | undefined,\n labelName: string,\n betweenQuotes: boolean,\n otherLabels: Label[],\n dataProvider: DataProvider,\n): Promise<Completion[]> {\n const values = await getLabelValues(metric, labelName, otherLabels, dataProvider);\n return values.map((text) => ({\n type: 'LABEL_VALUE',\n label: text,\n insertText: betweenQuotes ? text : `\"${text}\"`, // FIXME: escaping strange characters?\n }));\n}\n\nexport function getCompletions(situation: Situation, dataProvider: DataProvider): Promise<Completion[]> {\n switch (situation.type) {\n case 'IN_DURATION':\n if (dataProvider.durationVariablesCompletion) {\n return Promise.resolve(DURATION_VARIABLES_COMPLETIONS.concat(DURATION_COMPLETIONS));\n }\n return Promise.resolve(DURATION_COMPLETIONS);\n case 'IN_FUNCTION':\n return getAllFunctionsAndMetricNamesCompletions(dataProvider);\n case 'AT_ROOT': {\n return getAllFunctionsAndMetricNamesCompletions(dataProvider);\n }\n case 'EMPTY': {\n const metricNames = getAllMetricNamesCompletions(dataProvider);\n const historyCompletions = getAllHistoryCompletions(dataProvider);\n return Promise.resolve([...historyCompletions, ...FUNCTION_COMPLETIONS, ...metricNames]);\n }\n case 'IN_LABEL_SELECTOR_NO_LABEL_NAME':\n return getLabelNamesForSelectorCompletions(situation.metricName, situation.hasOperator, situation.otherLabels, dataProvider);\n case 'IN_GROUPING':\n return getLabelNamesForByCompletions(situation.metricName, situation.otherLabels, dataProvider);\n case 'IN_LABEL_SELECTOR_WITH_LABEL_NAME':\n return getLabelValuesForMetricCompletions(situation.metricName, situation.labelName, situation.betweenQuotes, situation.otherLabels, dataProvider);\n default:\n throw new NeverCaseError(situation);\n }\n}\n","import type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\n\nimport { NeverCaseError } from '../util';\nimport { DataProvider } from './DataProvider';\nimport { getSituation } from './situation';\nimport { getCompletions } from './completions';\n\nexport type { monacoTypes };\nexport type Monaco = typeof monacoTypes;\nexport type CompletionType = 'HISTORY' | 'FUNCTION' | 'METRIC_NAME' | 'DURATION' | 'LABEL_NAME' | 'LABEL_VALUE';\n\nfunction getMonacoCompletionItemKind(type: CompletionType, monaco: Monaco): monacoTypes.languages.CompletionItemKind {\n switch (type) {\n case 'DURATION':\n return monaco.languages.CompletionItemKind.Unit;\n case 'FUNCTION':\n return monaco.languages.CompletionItemKind.Variable;\n case 'HISTORY':\n return monaco.languages.CompletionItemKind.Snippet;\n case 'LABEL_NAME':\n return monaco.languages.CompletionItemKind.Enum;\n case 'LABEL_VALUE':\n return monaco.languages.CompletionItemKind.EnumMember;\n case 'METRIC_NAME':\n return monaco.languages.CompletionItemKind.Constructor;\n default:\n throw new NeverCaseError(type);\n }\n}\n\nexport function getCompletionProvider(monaco: Monaco, dataProvider: DataProvider): monacoTypes.languages.CompletionItemProvider {\n const provideCompletionItems = (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n ): monacoTypes.languages.ProviderResult<monacoTypes.languages.CompletionList> => {\n const word = model.getWordAtPosition(position);\n const range =\n word != null\n ? monaco.Range.lift({\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n })\n : monaco.Range.fromPositions(position);\n // documentation says `position` will be \"adjusted\" in `getOffsetAt`\n // i don't know what that means, to be sure i clone it\n\n const positionClone = {\n column: position.column,\n lineNumber: position.lineNumber,\n };\n dataProvider.monacoSettings.setInputInRange(model.getValueInRange(range));\n\n // Check to see if the browser supports window.getSelection()\n if (window.getSelection) {\n const selectedText = window.getSelection()?.toString();\n // If the user has selected text, adjust the cursor position to be at the start of the selection, instead of the end\n if (selectedText && selectedText.length > 0) {\n positionClone.column = positionClone.column - selectedText.length;\n }\n }\n\n const offset = model.getOffsetAt(positionClone);\n const situation = getSituation(model.getValue(), offset);\n const completionsPromise = situation != null ? getCompletions(situation, dataProvider) : Promise.resolve([]);\n\n return completionsPromise.then((items) => {\n // monaco by-default alphabetically orders the items.\n // to stop it, we use a number-as-string sortkey,\n // so that monaco keeps the order we use\n const maxIndexDigits = items.length.toString().length;\n const suggestions: monacoTypes.languages.CompletionItem[] = items.map((item, index) => ({\n kind: getMonacoCompletionItemKind(item.type, monaco),\n label: item.label,\n insertText: item.insertText,\n detail: item.detail,\n documentation: item.documentation,\n sortText: index.toString().padStart(maxIndexDigits, '0'), // to force the order we have\n range,\n command: item.triggerOnInsert\n ? {\n id: 'editor.action.triggerSuggest',\n title: '',\n }\n : undefined,\n }));\n return { suggestions, incomplete: dataProvider.monacoSettings.suggestionsIncomplete };\n });\n };\n\n return {\n triggerCharacters: ['{', ',', '[', '(', '=', '~', ' ', '\"'],\n provideCompletionItems,\n };\n}\n","import { SyntaxNode } from '@lezer/common';\nimport { LRParser } from '@lezer/lr';\n\nexport const ErrorId = 0;\n\ninterface ParserErrorBoundary {\n startLineNumber: number;\n startColumn: number;\n endLineNumber: number;\n endColumn: number;\n error: string;\n}\n\ninterface ParseError {\n text: string;\n node: SyntaxNode;\n}\n\nexport function validateQuery(query: string, interpolatedQuery: string, queryLines: string[], parser: LRParser): ParserErrorBoundary[] | false {\n if (!query) {\n return false;\n }\n\n const interpolatedErrors: ParseError[] = parseQuery(interpolatedQuery, parser);\n if (!interpolatedErrors.length) {\n return false;\n }\n\n let parseErrors: ParseError[] = interpolatedErrors;\n if (query !== interpolatedQuery) {\n const queryErrors: ParseError[] = parseQuery(query, parser);\n parseErrors = interpolatedErrors.flatMap((interpolatedError) => queryErrors.filter((queryError) => interpolatedError.text === queryError.text) || interpolatedError);\n }\n\n return parseErrors.map((parseError) => findErrorBoundary(query, queryLines, parseError)).filter(isErrorBoundary);\n}\n\nfunction parseQuery(query: string, parser: LRParser) {\n const parseErrors: ParseError[] = [];\n const tree = parser.parse(query);\n tree.iterate({\n enter: (nodeRef): false | void => {\n if (nodeRef.type.id === ErrorId) {\n const node = nodeRef.node;\n parseErrors.push({\n node: node,\n text: query.substring(node.from, node.to),\n });\n }\n },\n });\n return parseErrors;\n}\n\nfunction findErrorBoundary(query: string, queryLines: string[], parseError: ParseError): ParserErrorBoundary | null {\n if (queryLines.length === 1) {\n const isEmptyString = parseError.node.from === parseError.node.to;\n const errorNode = isEmptyString && parseError.node.parent ? parseError.node.parent : parseError.node;\n const error = isEmptyString ? query.substring(errorNode.from, errorNode.to) : parseError.text;\n return {\n startLineNumber: 1,\n startColumn: errorNode.from + 1,\n endLineNumber: 1,\n endColumn: errorNode.to + 1,\n error,\n };\n }\n\n let startPos = 0,\n endPos = 0;\n for (let line = 0; line < queryLines.length; line++) {\n endPos = startPos + queryLines[line].length;\n\n if (parseError.node.from > endPos) {\n startPos += queryLines[line].length + 1;\n continue;\n }\n\n return {\n startLineNumber: line + 1,\n startColumn: parseError.node.from - startPos + 1,\n endLineNumber: line + 1,\n endColumn: parseError.node.to - startPos + 1,\n error: parseError.text,\n };\n }\n\n return null;\n}\n\nfunction isErrorBoundary(boundary: ParserErrorBoundary | null): boundary is ParserErrorBoundary {\n return boundary !== null;\n}\n","import React, { useEffect, useRef } from 'react';\nimport MonacoEditor from 'react-monaco-editor';\nimport * as monaco from 'monaco-editor';\nimport { promLanguageDefinition } from 'monaco-promql';\nimport type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { parser } from '@fc-components/lezer-metricsql';\nimport { v4 as uuidv4 } from 'uuid';\nimport { css } from '@emotion/css';\n\nimport { language, languageConfiguration } from './promql';\nimport { DataProvider } from './completion/DataProvider';\nimport { getCompletionProvider } from './completion/getCompletionProvider';\nimport type { DataProviderParams } from './types';\nimport { validateQuery } from './validation';\n\ninterface PromQLEditorProps {\n className?: string;\n size?: 'small' | 'middle' | 'large';\n theme?: 'light' | 'dark';\n value?: string;\n placeholder?: string;\n enableAutocomplete?: boolean;\n durationVariablesCompletion?: boolean;\n // When false, DataProvider will not send network requests. Default: true\n enableRequests?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n interpolateString?: (query: string) => string;\n onChange?: (value: string) => void;\n onEnter?: (value: string) => void;\n onBlur?: (value: string) => void;\n editorDidMount?: (editor: monacoTypes.editor.IStandaloneCodeEditor) => void;\n}\n\nconst PROMQL_LANG_ID = promLanguageDefinition.id;\nconst SIZE_MAP: Record<\n string,\n {\n className: string;\n top: number;\n bottom: number;\n }\n> = {\n small: {\n className: 'ant-input-sm',\n top: 1,\n bottom: 1,\n },\n middle: {\n className: 'ant-input-md',\n top: 1,\n bottom: 1,\n },\n large: {\n className: 'ant-input-lg',\n top: 3,\n bottom: 2,\n },\n};\nconst themeMap: Record<string, string> = {\n light: 'n9e-light',\n dark: 'n9e-dark',\n};\n\nconst containerDisabledClassName = css`\n .monaco-editor {\n user-select: none;\n pointer-events: none;\n }\n`;\n\nconst containerReadOnlyClassName = css`\n .monaco-editor .cursors-layer > .cursor {\n opacity: 0 !important; /* 完全透明 */\n }\n`;\n\nconst getStyles = (placeholder?: string) => {\n return {\n placeholder: css({\n '::after': {\n content: `'${placeholder}'`,\n opacity: 0.6,\n },\n }),\n };\n};\n\nexport default function PromQLEditor(props: PromQLEditorProps & DataProviderParams) {\n const id = uuidv4();\n const {\n className,\n size = 'middle',\n theme = 'light',\n value,\n placeholder,\n interpolateString,\n enableAutocomplete = true,\n enableRequests = true,\n readOnly = false,\n disabled = false,\n onChange,\n onEnter,\n onBlur,\n editorDidMount,\n } = props;\n const autocompleteDisposeFun = useRef<(() => void) | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const dataProviderRef = useRef<DataProvider | null>(null);\n const editorRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const previousContentRef = useRef<string>('');\n const lastDeletionTriggerTimeRef = useRef<number>(0);\n const styles = getStyles(placeholder);\n const handleEditorDidMount = (editor: monacoTypes.editor.IStandaloneCodeEditor) => {\n editorRef.current = editor;\n\n monaco.editor.defineTheme('n9e-light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n monaco.editor.defineTheme('n9e-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n const isEditorFocused = editor.createContextKey<boolean>('isEditorFocused' + id, false);\n // we setup on-blur\n editor.onDidBlurEditorWidget(() => {\n isEditorFocused.set(false);\n onBlur?.(editor.getValue());\n // reset the selection to the current position\n const position = editor.getPosition();\n if (position) {\n const newSelection = new monaco.Selection(position.lineNumber, position.column, position.lineNumber, position.column);\n editor.setSelection(newSelection);\n }\n });\n\n editor.onDidFocusEditorText(() => {\n isEditorFocused.set(true);\n });\n\n // set the height of the editor container\n const updateElementHeight = () => {\n const containerDiv = containerRef.current;\n if (containerDiv !== null) {\n const pixelHeight = editor.getContentHeight();\n containerDiv.style.height = `${pixelHeight}px`;\n containerDiv.style.width = '100%';\n const pixelWidth = containerDiv.clientWidth;\n editor.layout({ width: pixelWidth, height: pixelHeight });\n }\n };\n\n editor.onDidContentSizeChange(updateElementHeight);\n updateElementHeight();\n\n // Fixes Monaco capturing the search key binding and displaying a useless search box within the Editor.\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n command: null,\n });\n\n // 设置 Shift + Enter 为在光标位置换行\n editor.addCommand(\n monaco.KeyMod.Shift | monaco.KeyCode.Enter,\n () => {\n // 在光标位置插入换行符\n const position = editor.getPosition();\n if (position) {\n editor.executeEdits('shift-enter', [\n {\n range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: '\\n',\n },\n ]);\n // 将光标移动到新行\n editor.setPosition({\n lineNumber: position.lineNumber + 1,\n column: 1,\n });\n }\n },\n 'isEditorFocused' + id,\n );\n\n // 完全阻止 Enter 键的默认行为(包括换行)\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyCode.Enter,\n command: '-',\n when: '!suggestWidgetVisible',\n });\n\n // handle: enter - 只有在没有建议窗口时才执行自定义行为\n editor.addCommand(\n monaco.KeyCode.Enter,\n () => {\n onEnter?.(editor.getValue());\n },\n '!suggestWidgetVisible && isEditorFocused' + id,\n );\n\n // Initialize previous content tracking\n previousContentRef.current = editor.getValue();\n lastDeletionTriggerTimeRef.current = 0;\n const DELETION_TRIGGER_DEBOUNCE_MS = 1000;\n\n editor.onDidChangeModelContent(() => {\n const model = editor.getModel();\n if (model) {\n const query = model.getValue();\n const errors = validateQuery(query, interpolateString ? interpolateString(query) : query, model.getLinesContent(), parser) || [];\n const markers = errors.map(({ error, ...boundary }) => ({\n message: `${error ? `Error parsing \"${error}\"` : 'Parse error'}. The query appears to be incorrect and could fail to be executed.`,\n severity: monaco.MarkerSeverity.Error,\n ...boundary,\n }));\n\n monaco.editor.setModelMarkers(model, 'owner', markers);\n\n // Detect deletion and trigger completion\n const previousContent = previousContentRef.current;\n const isDeletion = query.length < previousContent.length;\n\n if (isDeletion && enableAutocomplete) {\n const now = Date.now();\n if (now - lastDeletionTriggerTimeRef.current >= DELETION_TRIGGER_DEBOUNCE_MS) {\n lastDeletionTriggerTimeRef.current = now;\n // Trigger completion after deletion\n setTimeout(() => {\n editor.trigger('keyboard', 'editor.action.triggerSuggest', {});\n }, 0);\n }\n }\n\n previousContentRef.current = query;\n }\n });\n\n editorDidMount?.(editor);\n };\n\n useEffect(() => {\n // 注册 PromQL 语言\n const { aliases, extensions, mimetypes } = promLanguageDefinition;\n monaco.languages.register({\n id: PROMQL_LANG_ID,\n aliases,\n extensions,\n mimetypes,\n });\n\n // 设置语法高亮\n monaco.languages.setMonarchTokensProvider(PROMQL_LANG_ID, language as any);\n\n // 设置语言配置\n monaco.languages.setLanguageConfiguration(PROMQL_LANG_ID, languageConfiguration as any);\n\n return () => {\n autocompleteDisposeFun.current?.();\n dataProviderRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // clean up previous autocomplete provider\n if (autocompleteDisposeFun.current) {\n autocompleteDisposeFun.current();\n autocompleteDisposeFun.current = null;\n }\n dataProviderRef.current = null;\n\n // If autocomplete is enabled, set up a new autocomplete provider\n if (enableAutocomplete) {\n const dataProvider = new DataProvider({\n url: props.url,\n lookbackInterval: props.lookbackInterval,\n variablesNames: props.variablesNames,\n durationVariablesCompletion: props.durationVariablesCompletion,\n request: props.request,\n httpMethod: props.httpMethod,\n apiPrefix: props.apiPrefix,\n httpErrorHandler: props.httpErrorHandler,\n enableRequests: enableRequests,\n });\n dataProviderRef.current = dataProvider;\n dataProvider.start();\n\n const completionProvider = getCompletionProvider(monaco, dataProvider);\n\n const filteringCompletionProvider: monacoTypes.languages.CompletionItemProvider = {\n ...completionProvider,\n provideCompletionItems: (model, position, context, token) => {\n if (editor.getModel()?.id !== model.id) {\n return { suggestions: [] };\n }\n return completionProvider.provideCompletionItems(model, position, context, token);\n },\n };\n\n const { dispose } = monaco.languages.registerCompletionItemProvider(PROMQL_LANG_ID, filteringCompletionProvider);\n autocompleteDisposeFun.current = dispose;\n }\n\n // clean up previous placeholder decorations\n const model = editor.getModel();\n if (model) {\n model.deltaDecorations(\n model.getAllDecorations().map((d) => d.id),\n [],\n );\n }\n\n if (placeholder) {\n const placeholderDecorators = [\n {\n range: new monaco.Range(1, 1, 1, 1),\n options: {\n className: styles.placeholder,\n isWholeLine: true,\n },\n },\n ];\n\n let decorators: string[] = [];\n\n const checkDecorators: () => void = () => {\n const model = editor.getModel();\n\n if (!model) {\n return;\n }\n\n const newDecorators = model.getValueLength() === 0 ? placeholderDecorators : [];\n decorators = model.deltaDecorations(decorators, newDecorators);\n };\n\n checkDecorators();\n editor.onDidChangeModelContent(checkDecorators);\n }\n }, [\n enableAutocomplete,\n props.url,\n props.lookbackInterval,\n JSON.stringify(props.variablesNames),\n props.durationVariablesCompletion,\n props.httpMethod,\n props.apiPrefix,\n placeholder,\n enableRequests,\n ]);\n\n return (\n <div\n className={\n 'ant-input' +\n (size ? ` ${SIZE_MAP[size].className}` : '') +\n (disabled ? ` ant-input-disabled ${containerDisabledClassName}` : '') +\n (readOnly ? ` ${containerReadOnlyClassName}` : '') +\n (className ? ` ${className}` : '')\n }\n >\n <div ref={containerRef}>\n <MonacoEditor\n width='100%'\n height='100%'\n language='promql'\n theme={themeMap[theme]}\n value={value}\n onChange={onChange}\n editorDidMount={handleEditorDidMount}\n options={{\n readOnly,\n codeLens: false,\n contextmenu: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontSize: 12,\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n minimap: { enabled: false },\n overviewRulerBorder: false,\n overviewRulerLanes: 0,\n padding: {\n top: SIZE_MAP[size].top,\n bottom: SIZE_MAP[size].bottom,\n },\n renderLineHighlight: 'none',\n scrollbar: {\n vertical: 'hidden',\n verticalScrollbarSize: 8,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n suggest: {\n showWords: false,\n // 防止补全层自动关闭的关键配置\n filterGraceful: false, // 禁用优雅过滤,避免在输入时关闭补全\n snippetsPreventQuickSuggestions: false, // 允许在代码片段后继续显示补全\n shareSuggestSelections: false, // 不共享选择状态,避免意外关闭\n },\n suggestFontSize: 12,\n wordWrap: 'on',\n automaticLayout: true,\n occurrencesHighlight: 'off', // Disable word highlighting\n }}\n />\n </div>\n </div>\n );\n}\n","export const languageConfiguration = {\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n comments: {\n lineComment: '#',\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n folding: {\n offSide: true,\n },\n};\n\n// YAML keywords\nconst keywords = ['true', 'false', 'null', 'True', 'False', 'Null', 'TRUE', 'FALSE', 'NULL', 'yes', 'no', 'Yes', 'No', 'YES', 'NO', 'on', 'off', 'On', 'Off', 'ON', 'OFF'];\n\n// YAML operators and special characters (for future use)\n// const operators = [':', '-', '|', '>', '&', '*', '!', '%', '@'];\n\nexport const language = {\n tokenPostfix: '.yaml',\n brackets: [\n { token: 'delimiter.bracket', open: '{', close: '}' },\n { token: 'delimiter.square', open: '[', close: ']' },\n ],\n keywords: keywords,\n numberInteger: /(?:0|[+-]?[0-9]+)/,\n numberFloat: /(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,\n numberOctal: /0o[0-7]+/,\n numberHex: /0x[0-9a-fA-F]+/,\n numberInfinity: /[+-]?\\.(?:inf|Inf|INF)/,\n numberNaN: /\\.(?:nan|Nan|NAN)/,\n numberDate: /\\d{4}-\\d{2}-\\d{2}(?:[Tt ]\\d{1,2}:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \\t]*(?:Z|[-+]\\d{1,2}(?::\\d{2})?))?)?/,\n escapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n tokenizer: {\n root: [\n { include: '@whitespace' },\n { include: '@comment' },\n\n // Document markers\n [/^---/, 'meta.document'],\n [/^\\.{3}/, 'meta.document'],\n\n // Keys (property names)\n [/^(\\s*)([^:\\s]+)(\\s*)(:)/, ['white', 'key', 'white', 'delimiter']],\n [/(\\s*)([^:\\s]+)(\\s*)(:)/, ['white', 'key', 'white', 'delimiter']],\n\n // Flow collections\n [/\\{/, '@brackets', '@flowMap'],\n [/\\[/, '@brackets', '@flowSequence'],\n\n // Block scalars\n [/[|>][-+]?(\\d+)?/, 'string.block', '@blockScalar'],\n\n // Numbers\n [/@numberInfinity/, 'number.infinity'],\n [/@numberNaN/, 'number.nan'],\n [/@numberDate/, 'number.date'],\n [/@numberHex/, 'number.hex'],\n [/@numberOctal/, 'number.octal'],\n [/@numberFloat/, 'number.float'],\n [/@numberInteger/, 'number'],\n\n // Strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n [/\"/, 'string', '@doubleQuotedString'],\n [/'/, 'string', '@singleQuotedString'],\n\n // Anchors and aliases\n [/&\\w+/, 'tag.anchor'],\n [/\\*\\w+/, 'tag.alias'],\n\n // Tags\n [/![\\w\\-\\/]+/, 'tag'],\n\n // Keywords\n [\n /[^\\s\\[\\{\\,]+/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'string.unquoted',\n },\n },\n ],\n\n // List items\n [/^(\\s*)(-\\s)/, ['white', 'delimiter']],\n [/(\\s*)(-\\s)/, ['white', 'delimiter']],\n ],\n\n whitespace: [[/[ \\t\\r\\n]+/, 'white']],\n\n comment: [[/#.*$/, 'comment']],\n\n doubleQuotedString: [\n [/[^\\\\\"]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, 'string', '@pop'],\n ],\n\n singleQuotedString: [\n [/[^\\\\']+/, 'string'],\n [/''/, 'string.escape'],\n [/'/, 'string', '@pop'],\n ],\n\n blockScalar: [\n [/^(\\s*).+$/, 'string.block'],\n [/^(?!\\s)/, '', '@pop'],\n ],\n\n flowMap: [\n { include: '@whitespace' },\n { include: '@comment' },\n [/\\}/, '@brackets', '@pop'],\n [/,/, 'delimiter'],\n [/:/, 'delimiter'],\n [/\"/, 'string', '@doubleQuotedString'],\n [/'/, 'string', '@singleQuotedString'],\n [/[^\\s\\,\\}\\:]+/, 'string.unquoted'],\n ],\n\n flowSequence: [\n { include: '@whitespace' },\n { include: '@comment' },\n [/\\]/, '@brackets', '@pop'],\n [/,/, 'delimiter'],\n [/\"/, 'string', '@doubleQuotedString'],\n [/'/, 'string', '@singleQuotedString'],\n [/[^\\s\\,\\]]+/, 'string.unquoted'],\n ],\n },\n};\n","import type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { YamlCompletionItem, YamlCompletionType, YamlEditorSchema } from '../types';\n\nexport type Monaco = typeof monacoTypes;\n\nfunction getMonacoCompletionItemKind(type: YamlCompletionType, monaco: Monaco): monacoTypes.languages.CompletionItemKind {\n switch (type) {\n case 'KEYWORD':\n return monaco.languages.CompletionItemKind.Keyword;\n case 'VALUE':\n return monaco.languages.CompletionItemKind.Value;\n case 'KEY':\n return monaco.languages.CompletionItemKind.Property;\n case 'BOOLEAN':\n return monaco.languages.CompletionItemKind.Constant;\n case 'NUMBER':\n return monaco.languages.CompletionItemKind.Value;\n case 'STRING':\n return monaco.languages.CompletionItemKind.Text;\n default:\n return monaco.languages.CompletionItemKind.Text;\n }\n}\n\nexport function getYamlCompletionProvider(monaco: Monaco, schemas: YamlEditorSchema[] = []): monacoTypes.languages.CompletionItemProvider {\n // 更准确的位置分析\n const analyzePosition = (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position) => {\n const line = model.getLineContent(position.lineNumber);\n const column = position.column;\n const beforeCursor = line.substring(0, column - 1);\n const trimmedLine = line.trim();\n\n // 检查是否在值位置\n const colonIndex = beforeCursor.indexOf(':');\n const isAfterColon = colonIndex !== -1;\n\n // 如果在冒号后面,检查是否是值位置\n let isInValuePosition = false;\n let currentKey = null;\n\n if (isAfterColon) {\n let keyPart = beforeCursor.substring(0, colonIndex).trim();\n // 如果键名以 - 开头(数组项),去掉 - 和后面的空格\n if (keyPart.startsWith('- ')) {\n keyPart = keyPart.substring(2).trim();\n } else if (keyPart === '-') {\n // 如果只有一个 -,说明键名在下一个词\n keyPart = '';\n }\n currentKey = keyPart;\n // 检查冒号后面是否有空格或者光标紧跟在冒号后面\n const afterColon = beforeCursor.substring(colonIndex + 1);\n isInValuePosition = afterColon.length === 0 || /^\\s+$/.test(afterColon);\n }\n\n // 检查是否已经有完整的值\n const hasCompleteValue = trimmedLine.includes(':') && !trimmedLine.endsWith(':') && trimmedLine.split(':')[1].trim().length > 0;\n\n return {\n isInKeyPosition: !isAfterColon || trimmedLine.endsWith(':'),\n isInValuePosition: isInValuePosition && !hasCompleteValue,\n isAtEndOfCompletedValue: hasCompleteValue,\n currentKey,\n line: trimmedLine,\n beforeCursor,\n afterCursor: line.substring(column - 1),\n };\n }; // 从 schemas 中提取某个键的枚举值\n const getEnumValuesFromSchemas = (keyName: string, path: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n\n for (const schemaItem of schemas) {\n const enumValues = extractEnumValues(schemaItem.schema, keyName, path);\n completions.push(...enumValues);\n }\n\n return completions;\n };\n\n // 递归提取 schema 中的枚举值\n const extractEnumValues = (schema: any, targetKey: string, currentPath: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n\n if (!schema || !schema.properties) {\n return completions;\n }\n\n // 如果路径为空,直接在当前层级查找\n if (currentPath.length === 0) {\n const prop = schema.properties[targetKey];\n if (prop && prop.enum) {\n return createEnumCompletions(prop);\n }\n return completions;\n }\n\n // 按路径导航到目标位置\n let currentSchema = schema;\n for (const pathSegment of currentPath) {\n if (currentSchema.properties && currentSchema.properties[pathSegment]) {\n currentSchema = currentSchema.properties[pathSegment];\n // 如果是数组类型,使用 items 的 schema\n if (currentSchema.type === 'array' && currentSchema.items) {\n currentSchema = currentSchema.items;\n }\n } else {\n // 路径不存在,返回空\n return completions;\n }\n }\n\n // 在目标位置查找枚举值\n if (currentSchema.properties && currentSchema.properties[targetKey]) {\n const prop = currentSchema.properties[targetKey];\n if (prop.enum) {\n return createEnumCompletions(prop);\n }\n }\n\n return completions;\n };\n\n // 创建枚举值补全项,支持 enumDescriptions 描述\n const createEnumCompletions = (prop: any): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n\n if (!prop.enum) {\n return completions;\n }\n\n prop.enum.forEach((enumValue: string, index: number) => {\n let description = prop.description || `Enum value: ${enumValue}`;\n\n // 如果有 enumDescriptions 数组,使用对应索引的描述\n if (prop.enumDescriptions && prop.enumDescriptions[index]) {\n description = prop.enumDescriptions[index];\n }\n\n completions.push({\n label: enumValue,\n insertText: enumValue,\n detail: description,\n documentation: description,\n type: 'VALUE',\n });\n });\n\n return completions;\n };\n\n // 从 schemas 中提取可用的键名\n const getKeyCompletionsFromSchemas = (path: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n const addedKeys = new Set<string>(); // 避免重复\n\n for (const schemaItem of schemas) {\n const keyCompletions = extractKeyCompletions(schemaItem.schema, path);\n for (const completion of keyCompletions) {\n if (!addedKeys.has(completion.label)) {\n addedKeys.add(completion.label);\n completions.push(completion);\n }\n }\n }\n\n return completions;\n };\n\n // 递归提取 schema 中的键名\n const extractKeyCompletions = (schema: any, targetPath: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n let currentSchema = schema;\n\n // 导航到目标路径\n for (const pathSegment of targetPath) {\n if (currentSchema.properties && currentSchema.properties[pathSegment]) {\n currentSchema = currentSchema.properties[pathSegment];\n if (currentSchema.type === 'array' && currentSchema.items) {\n currentSchema = currentSchema.items;\n }\n } else {\n return completions; // 路径不存在\n }\n }\n\n // 获取当前层级的属性\n if (currentSchema.properties) {\n for (const [key, property] of Object.entries(currentSchema.properties)) {\n const prop = property as any;\n let insertText = `${key}: `;\n let shouldTriggerOnInsert = false;\n\n // 根据属性类型调整插入文本和是否触发补全\n if (prop.type === 'object') {\n insertText = `${key}:\\n `;\n shouldTriggerOnInsert = true; // 对象类型需要触发键补全\n } else if (prop.type === 'array') {\n insertText = `${key}:\\n - `;\n shouldTriggerOnInsert = true; // 数组类型需要触发补全\n } else if (prop.enum && prop.enum.length > 0) {\n // 有枚举值的字段需要触发值补全\n shouldTriggerOnInsert = true;\n } else if (prop.type === 'boolean') {\n // 布尔类型需要触发 true/false 补全\n shouldTriggerOnInsert = true;\n } else if (prop.type === 'number') {\n // 数字类型需要触发数字补全\n shouldTriggerOnInsert = true;\n }\n // 对于普通字符串字段,不触发补全\n\n completions.push({\n label: key,\n insertText,\n detail: prop.description || `Property: ${key}`,\n documentation: prop.description,\n type: 'KEY',\n triggerOnInsert: shouldTriggerOnInsert,\n });\n }\n }\n\n return completions;\n };\n\n const getFieldType = (keyName: string, path: string[] = []): string | null => {\n for (const schemaItem of schemas) {\n const fieldType = extractFieldType(schemaItem.schema, keyName, path);\n if (fieldType) {\n return fieldType;\n }\n }\n return null;\n };\n\n const extractFieldType = (schema: any, targetKey: string, currentPath: string[] = []): string | null => {\n if (!schema || !schema.properties) {\n return null;\n }\n\n // 如果路径为空,直接在当前层级查找\n if (currentPath.length === 0) {\n const prop = schema.properties[targetKey];\n return prop ? prop.type : null;\n }\n\n // 按路径导航到目标位置\n let currentSchema = schema;\n for (const pathSegment of currentPath) {\n if (currentSchema.properties && currentSchema.properties[pathSegment]) {\n currentSchema = currentSchema.properties[pathSegment];\n // 如果是数组类型,使用 items 的 schema\n if (currentSchema.type === 'array' && currentSchema.items) {\n currentSchema = currentSchema.items;\n }\n } else {\n // 路径不存在,返回空\n return null;\n }\n }\n\n // 在目标位置查找字段类型\n if (currentSchema.properties && currentSchema.properties[targetKey]) {\n const prop = currentSchema.properties[targetKey];\n return prop.type;\n }\n\n return null;\n };\n\n const getCompletions = (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position): YamlCompletionItem[] => {\n const wordInfo = model.getWordAtPosition(position);\n const word = wordInfo ? wordInfo.word : '';\n\n // 使用新的位置分析\n const positionInfo = analyzePosition(model, position);\n const currentPath = getCurrentPath(model, position);\n\n const completions: YamlCompletionItem[] = [];\n\n // 如果已经有完整的值,不提供任何补全\n if (positionInfo.isAtEndOfCompletedValue) {\n return [];\n }\n\n // 如果在值位置,提供值的补全\n if (positionInfo.isInValuePosition && positionInfo.currentKey) {\n // 查找枚举值补全\n const enumCompletions = getEnumValuesFromSchemas(positionInfo.currentKey, currentPath);\n\n if (enumCompletions.length > 0) {\n // 如果有枚举值,只返回枚举值\n completions.push(...enumCompletions);\n } else {\n // 如果没有枚举值,检查字段类型\n const fieldType = getFieldType(positionInfo.currentKey, currentPath);\n\n if (fieldType === 'boolean') {\n // 只为布尔类型提供 true/false\n completions.push(\n {\n label: 'true',\n insertText: 'true',\n detail: 'Boolean true value',\n type: 'BOOLEAN',\n },\n {\n label: 'false',\n insertText: 'false',\n detail: 'Boolean false value',\n type: 'BOOLEAN',\n },\n );\n } else if (fieldType === 'number') {\n // 为数字类型提供基本示例\n completions.push({\n label: '0',\n insertText: '0',\n detail: 'Number value',\n type: 'NUMBER',\n });\n }\n // 对于 string 类型或其他类型,不提供任何补全\n }\n }\n // 如果在键位置且不在值位置,提供键的补全\n else if (positionInfo.isInKeyPosition && !positionInfo.isInValuePosition) {\n // 从 schemas 中获取键补全\n const schemaKeyCompletions = getKeyCompletionsFromSchemas(currentPath);\n completions.push(...schemaKeyCompletions);\n }\n\n // 过滤匹配的项目\n const filtered = completions.filter((item) => !word || item.label.toLowerCase().includes(word.toLowerCase()));\n\n return filtered;\n };\n\n const getCurrentPath = (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position): string[] => {\n const path: string[] = [];\n const lines = model.getLinesContent();\n const currentLineNumber = position.lineNumber - 1; // Monaco uses 1-based line numbers\n\n if (currentLineNumber >= lines.length) {\n return path;\n }\n\n const currentLine = lines[currentLineNumber];\n const currentIndent = getIndentLevel(currentLine);\n\n // 从当前行开始向上查找父级键\n let targetIndent = currentIndent;\n\n for (let i = currentLineNumber; i >= 0; i--) {\n const line = lines[i];\n const lineIndent = getIndentLevel(line);\n const trimmed = line.trim();\n\n // 跳过空行和注释\n if (!trimmed || trimmed.startsWith('#')) {\n continue;\n }\n\n // 如果缩进小于目标缩进\n if (lineIndent < targetIndent) {\n // 检查是否是数组项(以 - 开头)\n if (trimmed.startsWith('-')) {\n // 数组项不添加到路径中,只更新缩进继续查找\n targetIndent = lineIndent;\n continue;\n }\n\n // 如果包含冒号,这是一个父级键\n if (trimmed.includes(':')) {\n const key = trimmed.split(':')[0].trim();\n if (key) {\n path.unshift(key);\n targetIndent = lineIndent; // 更新目标缩进,继续向上查找\n }\n }\n }\n }\n\n return path;\n };\n\n const getIndentLevel = (line: string): number => {\n return line.length - line.trimLeft().length;\n };\n\n const provideCompletionItems = (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n ): monacoTypes.languages.ProviderResult<monacoTypes.languages.CompletionList> => {\n const word = model.getWordAtPosition(position);\n const range =\n word != null\n ? monaco.Range.lift({\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n })\n : monaco.Range.fromPositions(position);\n\n const items = getCompletions(model, position);\n\n const suggestions: monacoTypes.languages.CompletionItem[] = items.map((item, index) => ({\n kind: getMonacoCompletionItemKind(item.type, monaco),\n label: item.label,\n insertText: item.insertText,\n detail: item.detail,\n documentation: item.documentation,\n sortText: index.toString().padStart(3, '0'),\n range,\n command: item.triggerOnInsert\n ? {\n id: 'editor.action.triggerSuggest',\n title: '',\n }\n : undefined,\n }));\n\n return { suggestions };\n };\n\n return {\n triggerCharacters: [':', ' ', '-', '\\n', '\\t'],\n provideCompletionItems,\n };\n}\n","import { YamlValidationError, YamlEditorSchema } from './types';\n\nexport function validateYaml(content: string, schemas: YamlEditorSchema[] = []): YamlValidationError[] {\n const errors: YamlValidationError[] = [];\n\n if (!content.trim()) {\n return errors;\n }\n\n try {\n // 基础 YAML 语法验证\n const lines = content.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNumber = i + 1;\n\n // 检查缩进一致性\n if (line.trim() && !isValidIndentation(line)) {\n errors.push({\n message: 'Invalid indentation. YAML requires consistent indentation.',\n startLineNumber: lineNumber,\n endLineNumber: lineNumber,\n startColumn: 1,\n endColumn: line.length + 1,\n severity: 'error',\n });\n }\n\n // 检查冒号后是否有空格\n const colonMatch = line.match(/^(\\s*)([^:\\s]+)(:)(\\S)/);\n if (colonMatch) {\n const startColumn = colonMatch[1].length + colonMatch[2].length + 2;\n errors.push({\n message: 'Missing space after colon. Use \": \" instead of \":\"',\n startLineNumber: lineNumber,\n endLineNumber: lineNumber,\n startColumn: startColumn,\n endColumn: startColumn + 1,\n severity: 'error',\n });\n }\n\n // 检查列表项格式\n const listMatch = line.match(/^(\\s*)-(\\S)/);\n if (listMatch) {\n const startColumn = listMatch[1].length + 2;\n errors.push({\n message: 'Missing space after dash. Use \"- \" instead of \"-\"',\n startLineNumber: lineNumber,\n endLineNumber: lineNumber,\n startColumn: startColumn,\n endColumn: startColumn + 1,\n severity: 'error',\n });\n }\n }\n\n // Schema 验证\n if (schemas.length > 0) {\n const schemaErrors = validateAgainstSchemas(content, schemas);\n errors.push(...schemaErrors);\n }\n } catch (error) {\n errors.push({\n message: `YAML parsing error: ${error}`,\n startLineNumber: 1,\n endLineNumber: 1,\n startColumn: 1,\n endColumn: 1,\n severity: 'error',\n });\n }\n\n return errors;\n}\n\nfunction isValidIndentation(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return true;\n\n const leadingSpaces = line.length - line.trimLeft().length;\n // YAML 通常使用 2 或 4 个空格缩进\n return leadingSpaces % 2 === 0;\n}\n\nfunction validateAgainstSchemas(_content: string, _schemas: YamlEditorSchema[]): YamlValidationError[] {\n const errors: YamlValidationError[] = [];\n\n // TODO: 实现更复杂的 schema 验证逻辑\n // 目前提供基础的结构验证\n // 可以在这里添加对 content 和 schemas 的具体验证\n\n return errors;\n}\n\nexport function parseYamlValue(value: string): any {\n const trimmed = value.trim();\n\n // Boolean values\n if (['true', 'True', 'TRUE', 'yes', 'Yes', 'YES', 'on', 'On', 'ON'].includes(trimmed)) {\n return true;\n }\n if (['false', 'False', 'FALSE', 'no', 'No', 'NO', 'off', 'Off', 'OFF'].includes(trimmed)) {\n return false;\n }\n\n // Null values\n if (['null', 'Null', 'NULL', '~'].includes(trimmed)) {\n return null;\n }\n\n // Number values\n if (/^-?\\d+$/.test(trimmed)) {\n return parseInt(trimmed, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(trimmed)) {\n return parseFloat(trimmed);\n }\n\n // String values (remove quotes if present)\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) || (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n\n return trimmed;\n}\n","import React, { useEffect, useRef } from 'react';\nimport MonacoEditor from 'react-monaco-editor';\nimport * as monaco from 'monaco-editor';\nimport type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { v4 as uuidv4 } from 'uuid';\nimport { css } from '@emotion/css';\n\nimport { language, languageConfiguration } from './yaml';\nimport { getYamlCompletionProvider } from './completion/getCompletionProvider';\nimport { validateYaml } from './validation';\nimport type { YamlEditorSchema } from './types';\n\ninterface YamlEditorProps {\n size?: 'small' | 'middle' | 'large';\n theme?: 'light' | 'dark';\n value?: string;\n placeholder?: string;\n enableAutocomplete?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n schemas?: YamlEditorSchema[];\n onChange?: (value: string) => void;\n onEnter?: (value: string) => void;\n onBlur?: (value: string) => void;\n editorDidMount?: (editor: monacoTypes.editor.IStandaloneCodeEditor) => void;\n}\n\nconst YAML_LANG_ID = 'yaml';\nconst SIZE_MAP: Record<\n string,\n {\n className: string;\n top: number;\n bottom: number;\n }\n> = {\n small: {\n className: 'ant-input-sm',\n top: 1,\n bottom: 1,\n },\n middle: {\n className: 'ant-input-md',\n top: 1,\n bottom: 1,\n },\n large: {\n className: 'ant-input-lg',\n top: 3,\n bottom: 2,\n },\n};\n\nconst themeMap: Record<string, string> = {\n light: 'yaml-light',\n dark: 'yaml-dark',\n};\n\nconst containerDisabledClassName = css`\n .monaco-editor {\n user-select: none;\n pointer-events: none;\n }\n`;\n\nconst containerReadOnlyClassName = css`\n .monaco-editor .cursors-layer > .cursor {\n opacity: 0 !important;\n }\n`;\n\nconst getStyles = (placeholder?: string) => {\n return {\n placeholder: css({\n '::after': {\n content: `'${placeholder}'`,\n opacity: 0.6,\n },\n }),\n };\n};\n\nexport default function YamlEditor(props: YamlEditorProps) {\n const id = uuidv4();\n const {\n size = 'middle',\n theme = 'light',\n value,\n placeholder,\n enableAutocomplete = true,\n readOnly = false,\n disabled = false,\n schemas = [],\n onChange,\n onEnter,\n onBlur,\n editorDidMount,\n } = props;\n\n const autocompleteDisposeFun = useRef<(() => void) | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const styles = getStyles(placeholder);\n\n const handleEditorDidMount = (editor: monacoTypes.editor.IStandaloneCodeEditor) => {\n editorRef.current = editor;\n\n // 定义主题\n monaco.editor.defineTheme('yaml-light', {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'key', foreground: '0000FF' },\n { token: 'string', foreground: '008000' },\n { token: 'number', foreground: '098658' },\n { token: 'comment', foreground: '008000', fontStyle: 'italic' },\n { token: 'delimiter', foreground: '000000' },\n { token: 'tag', foreground: '800080' },\n { token: 'keyword', foreground: '0000FF', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editor.lineHighlightBorder': '#00000000',\n },\n });\n\n monaco.editor.defineTheme('yaml-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'key', foreground: '9CDCFE' },\n { token: 'string', foreground: 'CE9178' },\n { token: 'number', foreground: 'B5CEA8' },\n { token: 'comment', foreground: '6A9955', fontStyle: 'italic' },\n { token: 'delimiter', foreground: 'D4D4D4' },\n { token: 'tag', foreground: 'C586C0' },\n { token: 'keyword', foreground: '569CD6', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editor.lineHighlightBorder': '#00000000',\n },\n });\n\n const isEditorFocused = editor.createContextKey<boolean>('isEditorFocused' + id, false);\n\n // 设置焦点状态\n editor.onDidBlurEditorWidget(() => {\n isEditorFocused.set(false);\n onBlur?.(editor.getValue());\n const position = editor.getPosition();\n if (position) {\n const newSelection = new monaco.Selection(position.lineNumber, position.column, position.lineNumber, position.column);\n editor.setSelection(newSelection);\n }\n });\n\n editor.onDidFocusEditorText(() => {\n isEditorFocused.set(true);\n });\n\n // 设置编辑器高度自适应\n const updateElementHeight = () => {\n const containerDiv = containerRef.current;\n if (containerDiv !== null) {\n const pixelHeight = Math.max(editor.getContentHeight(), 20);\n containerDiv.style.height = `${pixelHeight}px`;\n containerDiv.style.width = '100%';\n const pixelWidth = containerDiv.clientWidth;\n editor.layout({ width: pixelWidth, height: pixelHeight });\n }\n };\n\n editor.onDidContentSizeChange(updateElementHeight);\n updateElementHeight();\n\n // 禁用默认的搜索快捷键\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n command: null,\n });\n\n // Shift + Enter 换行\n editor.addCommand(\n monaco.KeyMod.Shift | monaco.KeyCode.Enter,\n () => {\n const position = editor.getPosition();\n if (position) {\n editor.executeEdits('shift-enter', [\n {\n range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: '\\n',\n },\n ]);\n editor.setPosition({\n lineNumber: position.lineNumber + 1,\n column: 1,\n });\n }\n },\n 'isEditorFocused' + id,\n );\n\n // Enter 键处理 - 移除阻止默认行为的规则,允许正常换行\n // 只有当提供了 onEnter 回调且没有建议窗口时才触发回调\n if (onEnter) {\n editor.addCommand(\n monaco.KeyCode.Enter,\n () => {\n onEnter(editor.getValue());\n },\n '!suggestWidgetVisible && isEditorFocused' + id,\n );\n }\n\n // 内容变化时进行验证\n editor.onDidChangeModelContent(() => {\n const model = editor.getModel();\n if (model) {\n const content = model.getValue();\n const errors = validateYaml(content, schemas);\n const markers = errors.map((error) => ({\n message: error.message,\n severity: error.severity === 'error' ? monaco.MarkerSeverity.Error : error.severity === 'warning' ? monaco.MarkerSeverity.Warning : monaco.MarkerSeverity.Info,\n startLineNumber: error.startLineNumber,\n endLineNumber: error.endLineNumber,\n startColumn: error.startColumn,\n endColumn: error.endColumn,\n }));\n\n monaco.editor.setModelMarkers(model, 'yaml', markers);\n }\n });\n\n editorDidMount?.(editor);\n };\n\n useEffect(() => {\n // 注册 YAML 语言\n monaco.languages.register({\n id: YAML_LANG_ID,\n aliases: ['YAML', 'yaml'],\n extensions: ['.yaml', '.yml'],\n mimetypes: ['application/x-yaml', 'text/x-yaml'],\n });\n\n // 设置语法高亮\n monaco.languages.setMonarchTokensProvider(YAML_LANG_ID, language as any);\n\n // 设置语言配置\n monaco.languages.setLanguageConfiguration(YAML_LANG_ID, languageConfiguration as any);\n\n return () => {\n autocompleteDisposeFun.current?.();\n };\n }, []);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // 清理之前的自动补全提供器\n if (autocompleteDisposeFun.current) {\n autocompleteDisposeFun.current();\n autocompleteDisposeFun.current = null;\n }\n\n // 如果启用自动补全,设置新的补全提供器\n if (enableAutocomplete) {\n const completionProvider = getYamlCompletionProvider(monaco, schemas);\n\n const filteringCompletionProvider: monacoTypes.languages.CompletionItemProvider = {\n ...completionProvider,\n provideCompletionItems: (model, position, context, token) => {\n if (editor.getModel()?.id !== model.id) {\n return { suggestions: [] };\n }\n return completionProvider.provideCompletionItems(model, position, context, token);\n },\n };\n\n const { dispose } = monaco.languages.registerCompletionItemProvider(YAML_LANG_ID, filteringCompletionProvider);\n autocompleteDisposeFun.current = dispose;\n }\n\n // 处理占位符\n const model = editor.getModel();\n if (model) {\n model.deltaDecorations(\n model.getAllDecorations().map((d) => d.id),\n [],\n );\n }\n\n if (placeholder) {\n const placeholderDecorators = [\n {\n range: new monaco.Range(1, 1, 1, 1),\n options: {\n className: styles.placeholder,\n isWholeLine: true,\n },\n },\n ];\n\n let decorators: string[] = [];\n\n const checkDecorators = () => {\n const model = editor.getModel();\n if (!model) return;\n\n const newDecorators = model.getValueLength() === 0 ? placeholderDecorators : [];\n decorators = model.deltaDecorations(decorators, newDecorators);\n };\n\n checkDecorators();\n editor.onDidChangeModelContent(checkDecorators);\n }\n }, [enableAutocomplete, JSON.stringify(schemas), placeholder]);\n\n return (\n <div\n className={\n 'ant-input' +\n (size ? ` ${SIZE_MAP[size].className}` : '') +\n (disabled ? ` ant-input-disabled ${containerDisabledClassName}` : '') +\n (readOnly ? ` ${containerReadOnlyClassName}` : '')\n }\n >\n <div ref={containerRef}>\n <MonacoEditor\n width='100%'\n height='100%'\n language={YAML_LANG_ID}\n theme={themeMap[theme]}\n value={value}\n onChange={onChange}\n editorDidMount={handleEditorDidMount}\n options={{\n readOnly,\n codeLens: false,\n contextmenu: false,\n fixedOverflowWidgets: true,\n folding: true,\n fontSize: 12,\n lineDecorationsWidth: 0,\n lineNumbers: 'on',\n minimap: { enabled: false },\n overviewRulerBorder: false,\n overviewRulerLanes: 0,\n padding: {\n top: SIZE_MAP[size].top,\n bottom: SIZE_MAP[size].bottom,\n },\n renderLineHighlight: 'none',\n renderLineHighlightOnlyWhenFocus: false,\n hideCursorInOverviewRuler: true,\n scrollbar: {\n vertical: 'auto',\n verticalScrollbarSize: 8,\n horizontal: 'auto',\n horizontalScrollbarSize: 8,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n suggest: {\n showWords: true,\n filterGraceful: true,\n snippetsPreventQuickSuggestions: false,\n shareSuggestSelections: false,\n },\n quickSuggestions: {\n other: true,\n comments: false,\n strings: true,\n },\n quickSuggestionsDelay: 0,\n suggestFontSize: 12,\n wordWrap: 'on',\n automaticLayout: true,\n occurrencesHighlight: 'off',\n }}\n />\n </div>\n </div>\n );\n}\n","export const languageConfiguration = {\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n comments: {\n lineComment: '--',\n blockComment: ['/*', '*/'] as [string, string],\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ] as any,\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n { open: '`', close: '`' },\n ] as any,\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n { open: '`', close: '`' },\n ] as any,\n folding: {\n offSide: false,\n },\n};\n\n// SQL keywords\nconst keywords = [\n 'SELECT',\n 'FROM',\n 'WHERE',\n 'AND',\n 'OR',\n 'NOT',\n 'JOIN',\n 'INNER',\n 'LEFT',\n 'RIGHT',\n 'FULL',\n 'OUTER',\n 'ON',\n 'ORDER',\n 'BY',\n 'GROUP',\n 'HAVING',\n 'LIMIT',\n 'OFFSET',\n 'INSERT',\n 'INTO',\n 'VALUES',\n 'UPDATE',\n 'SET',\n 'DELETE',\n 'CREATE',\n 'TABLE',\n 'ALTER',\n 'DROP',\n 'PRIMARY',\n 'KEY',\n 'FOREIGN',\n 'CONSTRAINT',\n 'UNIQUE',\n 'INDEX',\n 'VIEW',\n 'DATABASE',\n 'SCHEMA',\n 'AS',\n 'DISTINCT',\n 'CASE',\n 'WHEN',\n 'THEN',\n 'ELSE',\n 'END',\n 'CAST',\n 'BETWEEN',\n 'IN',\n 'LIKE',\n 'IS',\n 'NULL',\n 'TRUE',\n 'FALSE',\n 'WITH',\n 'UNION',\n 'EXCEPT',\n 'INTERSECT',\n];\n\nexport const language = {\n defaultToken: '',\n tokenPostfix: '.sql',\n ignoreCase: true,\n\n brackets: [\n { open: '(', close: ')', token: 'delimiter.parenthesis' },\n { open: '{', close: '}', token: 'delimiter.curly' },\n { open: '[', close: ']', token: 'delimiter.square' },\n ],\n\n keywords,\n\n operators: ['=', '>', '<', '!', '%', '&', '|', '^', '~', '?', ':', '+', '-', '*', '/'],\n\n builtinFunctions: [\n 'COUNT',\n 'SUM',\n 'AVG',\n 'MIN',\n 'MAX',\n 'UPPER',\n 'LOWER',\n 'LENGTH',\n 'SUBSTRING',\n 'TRIM',\n 'ROUND',\n 'ABS',\n 'COALESCE',\n 'NULLIF',\n 'IFNULL',\n 'CONCAT',\n 'DATE',\n 'NOW',\n 'YEAR',\n 'MONTH',\n 'DAY',\n 'HOUR',\n 'MINUTE',\n 'SECOND',\n ],\n\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n digits: /\\d+(_+\\d+)*/,\n\n octaldigits: /[0-7]+(_+[0-7]+)*/,\n\n hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n\n regexpctl: /[(){}\\[\\]\\|;,.?*+^$\\\\]/,\n\n regexpattern: /(\\{[0-9]+\\})|(\\{[0-9]*,[0-9]*\\})|(\\?(?:\\?)?|[*+]|\\^|\\$|\\|\\\\)/,\n\n tokenizer: {\n root: [\n { include: '@comments' },\n { include: '@whitespace' },\n { include: '@pseudo-columns' },\n [/[;,.]/, 'delimiter'],\n [/[{}()\\[\\]]/, '@brackets'],\n { include: '@builtinVariables' },\n { include: '@numbers' },\n { include: '@strings' },\n [/[a-zA-Z_#][a-zA-Z0-9_$#@]*(?=\\s*\\()/, { cases: { '@builtinFunctions': 'keyword.function', '@default': 'identifier.function' } }],\n [\n /[a-zA-Z_#][a-zA-Z0-9_$#@]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'identifier',\n },\n },\n ],\n [/[<>=!%&+\\-*/|~^]/, 'operator'],\n ],\n\n whitespace: [[/\\s+/, 'white']],\n\n comments: [\n [/--+.*/, 'comment'],\n [/\\/\\*/, { token: 'comment.quote', next: '@comment' }],\n ],\n\n comment: [\n [/[^*/]+/, 'comment'],\n [/\\*\\//, { token: 'comment.quote', next: '@pop' }],\n [/./, 'comment'],\n ],\n\n 'pseudo-columns': [\n [\n /[$][A-Za-z_][A-Za-z0-9_]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'variable',\n },\n },\n ],\n [\n /@[A-Za-z_][A-Za-z0-9_]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'variable',\n },\n },\n ],\n ],\n\n builtinVariables: [\n [\n /@@?[a-zA-Z_][a-zA-Z0-9_]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'variable',\n },\n },\n ],\n ],\n\n numbers: [\n [/0[xX][0-9a-fA-F]*[0-9a-fA-F]/, 'number.hex'],\n [/0[0-7]+(?!\\d)/, 'number.octal'],\n [/(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?/, 'number'],\n ],\n\n strings: [\n [/'/, { token: 'string', next: '@string' }],\n [/\"/, { token: 'string.double', next: '@string_double' }],\n [/`/, { token: 'string.backtick', next: '@string_backtick' }],\n ],\n\n string: [\n [/[^'\\\\]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/'/, { token: 'string', next: '@pop' }],\n ],\n\n string_double: [\n [/[^\"\\\\]+/, 'string.double'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, { token: 'string.double', next: '@pop' }],\n ],\n\n string_backtick: [\n [/[^`\\\\]+/, 'string.backtick'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/`/, { token: 'string.backtick', next: '@pop' }],\n ],\n },\n};\n","import * as monaco from 'monaco-editor';\n\nconst SQL_KEYWORDS = [\n 'SELECT',\n 'FROM',\n 'WHERE',\n 'AND',\n 'OR',\n 'NOT',\n 'JOIN',\n 'INNER',\n 'LEFT',\n 'RIGHT',\n 'FULL',\n 'OUTER',\n 'ON',\n 'ORDER',\n 'BY',\n 'GROUP',\n 'HAVING',\n 'LIMIT',\n 'OFFSET',\n 'INSERT',\n 'INTO',\n 'VALUES',\n 'UPDATE',\n 'SET',\n 'DELETE',\n 'CREATE',\n 'TABLE',\n 'ALTER',\n 'DROP',\n 'PRIMARY',\n 'KEY',\n 'FOREIGN',\n 'CONSTRAINT',\n 'UNIQUE',\n 'INDEX',\n 'VIEW',\n 'DATABASE',\n 'SCHEMA',\n 'AS',\n 'DISTINCT',\n 'CASE',\n 'WHEN',\n 'THEN',\n 'ELSE',\n 'END',\n 'CAST',\n 'BETWEEN',\n 'IN',\n 'LIKE',\n 'IS',\n 'NULL',\n 'TRUE',\n 'FALSE',\n 'WITH',\n 'UNION',\n 'EXCEPT',\n 'INTERSECT',\n 'ASC',\n 'DESC',\n 'ALL',\n 'ANY',\n 'EXISTS',\n 'CROSS',\n];\n\nconst SQL_FUNCTIONS = [\n { name: 'COUNT', signature: 'COUNT(expression)', description: 'Returns the number of rows' },\n { name: 'SUM', signature: 'SUM(expression)', description: 'Returns the sum of values' },\n { name: 'AVG', signature: 'AVG(expression)', description: 'Returns the average value' },\n { name: 'MIN', signature: 'MIN(expression)', description: 'Returns the minimum value' },\n { name: 'MAX', signature: 'MAX(expression)', description: 'Returns the maximum value' },\n { name: 'UPPER', signature: 'UPPER(string)', description: 'Converts string to uppercase' },\n { name: 'LOWER', signature: 'LOWER(string)', description: 'Converts string to lowercase' },\n { name: 'LENGTH', signature: 'LENGTH(string)', description: 'Returns the length of string' },\n { name: 'SUBSTRING', signature: 'SUBSTRING(string, start, length)', description: 'Extracts substring' },\n { name: 'TRIM', signature: 'TRIM(string)', description: 'Removes leading and trailing spaces' },\n { name: 'ROUND', signature: 'ROUND(number, decimals)', description: 'Rounds a number' },\n { name: 'ABS', signature: 'ABS(number)', description: 'Returns absolute value' },\n { name: 'COALESCE', signature: 'COALESCE(value1, value2, ...)', description: 'Returns first non-null value' },\n { name: 'NULLIF', signature: 'NULLIF(value1, value2)', description: 'Returns null if two values are equal' },\n { name: 'IFNULL', signature: 'IFNULL(value, default)', description: 'Returns alternative if null' },\n { name: 'CONCAT', signature: 'CONCAT(string1, string2, ...)', description: 'Concatenates strings' },\n { name: 'DATE', signature: 'DATE(date)', description: 'Extracts date part' },\n { name: 'NOW', signature: 'NOW()', description: 'Returns current date and time' },\n];\n\nexport const getSqlCompletionProvider = () => {\n return {\n provideCompletionItems(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n _context: monaco.languages.CompletionContext,\n _token: monaco.CancellationToken,\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const word = model.getWordUntilPosition(position);\n const range = new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\n\n const suggestions: monaco.languages.CompletionItem[] = [\n ...SQL_KEYWORDS.map((keyword) => ({\n label: keyword,\n kind: monaco.languages.CompletionItemKind.Keyword,\n insertText: keyword,\n range: range,\n sortText: '1' + keyword,\n })),\n ...SQL_FUNCTIONS.map((func) => ({\n label: func.name,\n kind: monaco.languages.CompletionItemKind.Function,\n insertText: func.name,\n detail: func.signature,\n documentation: func.description,\n range: range,\n sortText: '2' + func.name,\n })),\n ];\n\n return {\n suggestions: suggestions,\n };\n },\n };\n};\n","import React, { useEffect, useRef } from 'react';\nimport MonacoEditor from 'react-monaco-editor';\nimport * as monaco from 'monaco-editor';\nimport type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { v4 as uuidv4 } from 'uuid';\nimport { css } from '@emotion/css';\nimport { language, languageConfiguration } from './sql';\nimport { getSqlCompletionProvider } from './completion/getCompletionProvider';\n\ninterface SqlEditorProps {\n className?: string;\n maxHeight?: number | string;\n fontSize?: number;\n size?: 'small' | 'middle' | 'large';\n theme?: 'light' | 'dark';\n value?: string;\n placeholder?: string;\n enableAutocomplete?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n onChange?: (value: string) => void;\n onEnter?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (value: string) => void;\n editorDidMount?: (editor: monacoTypes.editor.IStandaloneCodeEditor) => void;\n}\n\nconst SQL_LANG_ID = 'sql';\nconst SIZE_MAP: Record<\n string,\n {\n className: string;\n top: number;\n bottom: number;\n minHeight: number;\n }\n> = {\n small: {\n className: 'ant-input-sm',\n top: 1,\n bottom: 1,\n minHeight: 24,\n },\n middle: {\n className: 'ant-input-md',\n top: 1,\n bottom: 1,\n minHeight: 32,\n },\n large: {\n className: 'ant-input-lg',\n top: 3,\n bottom: 2,\n minHeight: 40,\n },\n};\n\nconst themeMap: Record<string, string> = {\n light: 'sql-light',\n dark: 'sql-dark',\n};\n\nconst containerDisabledClassName = css`\n .monaco-editor {\n user-select: none;\n pointer-events: none;\n }\n`;\n\nconst containerReadOnlyClassName = css`\n .monaco-editor .cursors-layer > .cursor {\n opacity: 0 !important;\n }\n`;\n\nexport default function SqlEditor(props: SqlEditorProps) {\n const id = uuidv4();\n const {\n className,\n maxHeight,\n fontSize,\n size = 'middle',\n theme = 'light',\n value = '',\n placeholder,\n enableAutocomplete = true,\n readOnly = false,\n disabled = false,\n onChange,\n onEnter,\n onBlur,\n onFocus,\n editorDidMount,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const modelRef = useRef<monaco.editor.ITextModel | null>(null);\n const disposablesRef = useRef<monaco.IDisposable[]>([]);\n\n useEffect(() => {\n // Register language\n if (!monaco.languages.getLanguages().some((lang) => lang.id === SQL_LANG_ID)) {\n monaco.languages.register({ id: SQL_LANG_ID });\n monaco.languages.setMonarchTokensProvider(SQL_LANG_ID, language as any);\n monaco.languages.setLanguageConfiguration(SQL_LANG_ID, languageConfiguration);\n }\n\n // Register completion provider\n if (enableAutocomplete) {\n const disposable = monaco.languages.registerCompletionItemProvider(SQL_LANG_ID, getSqlCompletionProvider());\n disposablesRef.current.push(disposable);\n }\n\n return () => {\n disposablesRef.current.forEach((disposable) => disposable.dispose());\n disposablesRef.current = [];\n };\n }, [enableAutocomplete]);\n\n const handleEditorMount = (editor: monacoTypes.editor.IStandaloneCodeEditor) => {\n editorRef.current = editor;\n modelRef.current = editor.getModel();\n\n monaco.editor.defineTheme('sql-light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n monaco.editor.defineTheme('sql-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n const isEditorFocused = editor.createContextKey<boolean>('isEditorFocused' + id, false);\n // we setup on-blur\n editor.onDidBlurEditorWidget(() => {\n isEditorFocused.set(false);\n onBlur?.(editor.getValue());\n // reset the selection to the current position\n const position = editor.getPosition();\n if (position) {\n const newSelection = new monaco.Selection(position.lineNumber, position.column, position.lineNumber, position.column);\n editor.setSelection(newSelection);\n }\n });\n\n editor.onDidFocusEditorText(() => {\n isEditorFocused.set(true);\n onFocus?.(editor.getValue());\n });\n\n // set the height of the editor container\n const updateElementHeight = () => {\n const containerDiv = containerRef.current;\n if (containerDiv !== null) {\n const pixelHeight = editor.getContentHeight();\n containerDiv.style.minHeight = `${pixelHeight}px`;\n containerDiv.style.width = '100%';\n const pixelWidth = containerDiv.clientWidth;\n editor.layout({ width: pixelWidth, height: pixelHeight });\n }\n };\n\n editor.onDidContentSizeChange(updateElementHeight);\n updateElementHeight();\n\n // Fixes Monaco capturing the search key binding and displaying a useless search box within the Editor.\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n command: null,\n });\n\n // 设置 Shift + Enter 为在光标位置换行\n editor.addCommand(\n monaco.KeyMod.Shift | monaco.KeyCode.Enter,\n () => {\n // 在光标位置插入换行符\n const position = editor.getPosition();\n if (position) {\n editor.executeEdits('shift-enter', [\n {\n range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: '\\n',\n },\n ]);\n // 将光标移动到新行\n editor.setPosition({\n lineNumber: position.lineNumber + 1,\n column: 1,\n });\n }\n },\n 'isEditorFocused' + id,\n );\n\n // 完全阻止 Enter 键的默认行为(包括换行)\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyCode.Enter,\n command: '-',\n when: '!suggestWidgetVisible',\n });\n\n // handle: enter - 只有在没有建议窗口时才执行自定义行为\n editor.addCommand(\n monaco.KeyCode.Enter,\n () => {\n onEnter?.(editor.getValue());\n },\n '!suggestWidgetVisible && isEditorFocused' + id,\n );\n\n editorDidMount?.(editor);\n };\n\n const themeValue = themeMap[theme];\n\n return (\n <div\n className={\n 'ant-input' +\n (size ? ` ${SIZE_MAP[size].className}` : '') +\n (disabled ? ` ant-input-disabled ${containerDisabledClassName}` : '') +\n (readOnly ? ` ${containerReadOnlyClassName}` : '') +\n (className ? ` ${className}` : '')\n }\n style={{\n display: 'block',\n resize: 'vertical',\n overflow: 'auto',\n minHeight: SIZE_MAP[size].minHeight,\n maxHeight,\n }}\n >\n <div\n ref={containerRef}\n style={{\n height: '100%',\n }}\n >\n <MonacoEditor\n width='100%'\n height='100%'\n language={SQL_LANG_ID}\n theme={themeValue}\n value={value}\n onChange={onChange}\n editorDidMount={handleEditorMount}\n options={{\n minimap: { enabled: false },\n autoClosingBrackets: 'always',\n autoClosingQuotes: 'always',\n autoIndent: 'full',\n formatOnPaste: true,\n formatOnType: true,\n readOnly: readOnly || disabled,\n scrollBeyondLastLine: false,\n smoothScrolling: true,\n fontSize,\n tabSize: 2,\n wordWrap: 'on',\n automaticLayout: true,\n fixedOverflowWidgets: true,\n glyphMargin: false,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n folding: false,\n lineDecorationsWidth: 0,\n overviewRulerBorder: false,\n overviewRulerLanes: 0,\n placeholder: placeholder,\n renderLineHighlight: 'none',\n occurrencesHighlight: 'off',\n scrollbar: { vertical: 'hidden', horizontal: 'hidden', alwaysConsumeMouseWheel: false },\n }}\n />\n </div>\n </div>\n );\n}\n"],"names":["languageConfiguration","wordPattern","comments","lineComment","brackets","autoClosingPairs","open","close","surroundingPairs","folding","aggregations","functions","aggregationsOverTime","_i","aggregations_1","length","agg","push","vectorMatching","vectorMatchingRegex","reduce","prev","curr","operators","offsetModifier","keywords","concat","language","ignoreCase","defaultToken","tokenPostfix","symbols","escapes","digits","octaldigits","binarydigits","hexdigits","integersuffix","floatsuffix","tokenizer","root","cases","include","string_double","string_single","string_backtick","clauses","whitespace","TRIGONOMETRIC_FUNCTIONS","label","insertText","detail","documentation","AGGREGATION_OPERATORS","FUNCTIONS","NeverCaseError","_Error","_value","call","_inheritsLoose","_wrapNativeSuper","Error","escapeLabelValueInExactSelector","labelValue","replace","makeSelector","metricName","labels","labelName","allLabels","filter","name","value","allLabelTexts","map","op","join","DEFAULT_SERIES_LIMIT","badRequest","unprocessableEntity","serviceUnavailable","CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT","DataProvider","params","input","init","fetch","_ref","_asyncToGenerator","_regenerator","m","_callee","selector","withLimit","end","start","url","urlParams","request","w","_context","n","_this","enableRequests","a","Date","getTime","lookbackInterval","apiPrefix","toISOString","_extends","limit","buildRequest","URLSearchParams","uri","method","httpMethod","body","v","_x","_x2","apply","arguments","_ref2","_callee2","_context2","then","res","labelKeys","_x3","_ref3","_callee3","_context3","_x4","_x5","_callee4","_t","_context4","fetchLabelValues","metrics","Promise","all","loadMetricsMetadata","inputInRange","metricNamesSuggestionLimit","suggestionsIncomplete","errorHandler","httpErrorHandler","variablesNames","durationVariablesCompletion","_params$durationVaria","customRequest","_proto","prototype","getVariablesNames","setVariablesNames","endpoint","resource","ok","includes","status","statusText","json","apiRes","error","undefined","_this2","data","getAllMetricNames","_loadMetricsMetadata","_callee5","_context5","metricsMetadata","metricNamesToMetrics","metricNames","result","metaItem","_this3$metricsMetadat","_this3","help","_metaItem$help","type","_metaItem$type","setInputInRange","textInput","enableAutocompleteSuggestionsUpdate","dispatchEvent","CustomEvent","_createClass","key","get","bind","move","node","direction","parent","firstChild","lastChild","nextSibling","walk","path","current","_iterator","_createForOfIteratorHelperLoose","_step","done","_step$value","expectedType","id","getNodeText","text","slice","from","to","parsePromQLStringLiteral","inside","startsWith","endsWith","isPathMatch","resolverPath","cursorPath","every","item","index","ERROR_NODE_NAME","RESOLVERS","LabelName","UnquotedLabelMatcher","fun","resolveLabelName","LabelMatchers","VectorSelector","resolveLabelKeysWithEquals","PromQL","resolveTopLevel","Identifier","FunctionCallBody","resolveInFunction","StringLiteral","resolveLabelMatcher","BinaryExpr","resolveErrorInLabelMatcher","NumberDurationLiteralInDurationContext","MatrixSelector","resolveDurations","GroupingLabels","resolveLabelsForGrouping","LABEL_OP_MAP","Map","EqlSingle","EqlRegex","Neq","NeqRegex","getLabelOp","opNode","opChild","_LABEL_OP_MAP$get","getLabel","labelMatcherNode","nameNode","MatchOp","valueNode","getLabels","labelMatchersNode","labelNodes","getChildren","ln","notEmpty","getNodeChildren","child","children","getNodeInSubtree","typeId","_iterator2","_step2","_pos","aggrExpNode","AggregateModifier","AggregateExpr","bodyNode","getChild","metricIdNode","otherLabels","inStringNode","isError","labelNameNode","metricNameNode","betweenQuotes","pos","hasMatchOp","currentLabelName","hasOperator","textToCheck","getErrorNode","tree","cur","cursorAt","next","getSituation","parser","parse","maybeErrorNode","cursor","currentNode","ids","_iterator3","_step3","resolver","getAllMetricNamesCompletions","dataProvider","metric","FUNCTION_COMPLETIONS","f","_f$insertText","getAllFunctionsAndMetricNamesCompletions","_getAllFunctionsAndMetricNamesCompletions","DURATION_COMPLETIONS","DURATION_VARIABLES_COMPLETIONS","getAllHistoryCompletions","_dataProvider","getLabelNames","_getLabelNames","_selector","series","labelNames","labelSet","_Object$entries","_Object$entries$_i","fetchLabels","fetchSeries","Set","Object","entries","add","Array","getLabelNamesForCompletions","_x6","_x7","_x8","_x9","_getLabelNamesForCompletions","suffix","triggerOnInsert","getLabelNamesForSelectorCompletions","_x0","_x1","_x10","_x11","_getLabelNamesForSelectorCompletions","getLabelNamesForByCompletions","_x12","_x13","_x14","_getLabelNamesForByCompletions","getLabelValues","_x15","_x16","_x17","_x18","_getLabelValues","_callee6","_selector2","labelValues","_i2","_Object$entries2","_Object$entries2$_i","_context6","getLabelValuesForMetricCompletions","_x19","_x20","_x21","_x22","_x23","_getLabelValuesForMetricCompletions","_callee7","values","_context7","getCompletions","situation","resolve","historyCompletions","getMonacoCompletionItemKind","monaco","languages","CompletionItemKind","Unit","Variable","Snippet","Enum","EnumMember","Constructor","getCompletionProvider","provideCompletionItems","model","position","word","getWordAtPosition","range","Range","lift","startLineNumber","lineNumber","endLineNumber","startColumn","endColumn","fromPositions","positionClone","column","monacoSettings","getValueInRange","window","getSelection","_window$getSelection","selectedText","toString","offset","getOffsetAt","getValue","completionsPromise","items","maxIndexDigits","suggestions","kind","sortText","padStart","command","title","incomplete","triggerCharacters","ErrorId","validateQuery","query","interpolatedQuery","queryLines","interpolatedErrors","parseQuery","parseErrors","queryErrors","flatMap","interpolatedError","queryError","parseError","findErrorBoundary","isErrorBoundary","iterate","enter","nodeRef","substring","isEmptyString","errorNode","startPos","endPos","line","boundary","PROMQL_LANG_ID","promLanguageDefinition","SIZE_MAP","small","className","top","bottom","middle","large","themeMap","light","dark","containerDisabledClassName","css","_templateObject","_taggedTemplateLiteralLoose","containerReadOnlyClassName","_templateObject2","getStyles","placeholder","content","opacity","PromQLEditor","props","uuidv4","_props$size","size","_props$theme","theme","interpolateString","_props$enableAutocomp","enableAutocomplete","_props$enableRequests","_props$readOnly","readOnly","_props$disabled","disabled","onChange","onEnter","onBlur","editorDidMount","autocompleteDisposeFun","useRef","containerRef","dataProviderRef","editorRef","previousContentRef","lastDeletionTriggerTimeRef","styles","handleEditorDidMount","editor","defineTheme","base","inherit","rules","colors","focusBorder","isEditorFocused","createContextKey","onDidBlurEditorWidget","set","getPosition","newSelection","setSelection","onDidFocusEditorText","updateElementHeight","containerDiv","pixelHeight","getContentHeight","style","height","width","pixelWidth","clientWidth","layout","onDidContentSizeChange","addKeybindingRule","keybinding","CtrlCmd","KeyF","addCommand","Shift","Enter","executeEdits","setPosition","when","DELETION_TRIGGER_DEBOUNCE_MS","onDidChangeModelContent","getModel","errors","getLinesContent","markers","_objectWithoutPropertiesLoose","_excluded","message","severity","setModelMarkers","previousContent","isDeletion","now","setTimeout","trigger","useEffect","aliases","extensions","mimetypes","register","setMonarchTokensProvider","setLanguageConfiguration","completionProvider","filteringCompletionProvider","context","token","_editor$getModel","_monaco$languages$reg","registerCompletionItemProvider","dispose","deltaDecorations","getAllDecorations","d","placeholderDecorators","options","isWholeLine","decorators","checkDecorators","newDecorators","getValueLength","JSON","stringify","React","ref","MonacoEditor","codeLens","contextmenu","fixedOverflowWidgets","fontSize","lineDecorationsWidth","lineNumbers","minimap","enabled","overviewRulerBorder","overviewRulerLanes","padding","renderLineHighlight","scrollbar","vertical","verticalScrollbarSize","horizontal","horizontalScrollbarSize","alwaysConsumeMouseWheel","scrollBeyondLastLine","suggest","showWords","filterGraceful","snippetsPreventQuickSuggestions","shareSuggestSelections","suggestFontSize","wordWrap","automaticLayout","occurrencesHighlight","offSide","numberInteger","numberFloat","numberOctal","numberHex","numberInfinity","numberNaN","numberDate","comment","doubleQuotedString","singleQuotedString","blockScalar","flowMap","flowSequence","Keyword","Value","Property","Constant","Text","getYamlCompletionProvider","schemas","analyzePosition","getLineContent","beforeCursor","trimmedLine","trim","colonIndex","indexOf","isAfterColon","isInValuePosition","currentKey","keyPart","afterColon","test","hasCompleteValue","split","isInKeyPosition","isAtEndOfCompletedValue","afterCursor","getEnumValuesFromSchemas","keyName","completions","schemaItem","enumValues","extractEnumValues","schema","targetKey","currentPath","properties","prop","createEnumCompletions","currentSchema","pathSegment","forEach","enumValue","description","enumDescriptions","getKeyCompletionsFromSchemas","addedKeys","keyCompletions","extractKeyCompletions","_iterator4","_step4","completion","has","targetPath","_iterator5","_step5","property","shouldTriggerOnInsert","getFieldType","_iterator6","_step6","fieldType","extractFieldType","_iterator7","_step7","wordInfo","positionInfo","getCurrentPath","enumCompletions","schemaKeyCompletions","filtered","toLowerCase","lines","currentLineNumber","currentLine","currentIndent","getIndentLevel","targetIndent","i","lineIndent","trimmed","unshift","trimLeft","validateYaml","isValidIndentation","colonMatch","match","listMatch","schemaErrors","validateAgainstSchemas","leadingSpaces","_content","_schemas","YAML_LANG_ID","YamlEditor","_props$schemas","foreground","fontStyle","Math","max","Warning","Info","renderLineHighlightOnlyWhenFocus","hideCursorInOverviewRuler","quickSuggestions","other","strings","quickSuggestionsDelay","blockComment","builtinFunctions","regexpctl","regexpattern","builtinVariables","numbers","string","SQL_KEYWORDS","SQL_FUNCTIONS","signature","getSqlCompletionProvider","_token","getWordUntilPosition","keyword","func","Function","SQL_LANG_ID","minHeight","SqlEditor","maxHeight","_props$value","onFocus","modelRef","disposablesRef","getLanguages","some","lang","disposable","handleEditorMount","themeValue","display","resize","overflow","autoClosingBrackets","autoClosingQuotes","autoIndent","formatOnPaste","formatOnType","smoothScrolling","tabSize","glyphMargin","lineNumbersMinChars"],"mappings":"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"}
1
+ {"version":3,"file":"monaco-editor.esm.js","sources":["../src/promql/promql.ts","../src/promql/util.ts","../src/promql/completion/DataProvider.ts","../src/promql/completion/situation.ts","../src/promql/completion/completions.ts","../src/promql/completion/getCompletionProvider.ts","../src/promql/validation.ts","../src/promql/index.tsx","../src/yaml/yaml.ts","../src/yaml/completion/getCompletionProvider.ts","../src/yaml/validation.ts","../src/yaml/index.tsx","../src/sql/sql.ts","../src/sql/completion/getCompletionProvider.ts","../src/sql/index.tsx"],"sourcesContent":["export const languageConfiguration = {\n // the default separators except `@$`\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^`~!#%^&*()\\-=+\\[{\\]}\\\\|;:'\",.<>\\/?\\s]+)/g,\n // Not possible to make comments in PromQL syntax\n comments: {\n lineComment: '#',\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n { open: '<', close: '>' },\n ],\n folding: {},\n};\n// PromQL Aggregation Operators\n// (https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators)\nconst aggregations = [\n 'sum',\n 'min',\n 'max',\n 'avg',\n 'group',\n 'stddev',\n 'stdvar',\n 'count',\n 'count_values',\n 'bottomk',\n 'topk',\n 'quantile',\n 'quantiles',\n 'distinct',\n 'geomean',\n 'histogram',\n 'mad',\n 'mode',\n // metricsql aggregations\n 'any',\n 'bottomk_avg',\n 'bottomk_max',\n 'bottomk_median',\n 'bottomk_last',\n 'bottomk_min',\n 'topk_avg',\n 'topk_max',\n 'topk_median',\n 'topk_last',\n 'topk_min',\n 'outliers_mad',\n 'outliersk',\n 'share',\n 'sum2',\n 'zscore',\n];\n// PromQL functions\n// (https://prometheus.io/docs/prometheus/latest/querying/functions/)\nconst functions = [\n 'abs',\n 'absent',\n 'ceil',\n 'changes',\n 'clamp_max',\n 'clamp_min',\n 'day_of_month',\n 'day_of_week',\n 'days_in_month',\n 'delta',\n 'deriv',\n 'exp',\n 'floor',\n 'histogram_quantile',\n 'histogram_avg',\n 'histogram_count',\n 'histogram_sum',\n 'histogram_fraction',\n 'histogram_stddev',\n 'histogram_stdvar',\n 'holt_winters',\n 'hour',\n 'idelta',\n 'increase',\n 'irate',\n 'label_join',\n 'label_replace',\n 'ln',\n 'log2',\n 'log10',\n 'minute',\n 'month',\n 'predict_linear',\n 'rate',\n 'resets',\n 'round',\n 'scalar',\n 'sort',\n 'sort_desc',\n 'sqrt',\n 'time',\n 'timestamp',\n 'vector',\n 'year',\n // metricsql functions\n 'aggr_over_time',\n 'alias',\n 'ascent_over_time',\n 'bitmap_and',\n 'bitmap_or',\n 'bitmap_xor',\n 'buckets_limit',\n 'changes_prometheus',\n 'count_eq_over_time',\n 'count_gt_over_time',\n 'count_le_over_time',\n 'count_ne_over_time',\n 'decreases_over_time',\n 'default_rollup',\n 'delta_prometheus',\n 'deriv_fast',\n 'descent_over_time',\n 'distinct_over_time',\n 'drop_common_labels',\n 'duration_over_time',\n 'first_over_time',\n 'geomean_over_time',\n 'histogram_avg',\n 'histogram_over_time',\n 'histogram_quantiles',\n 'histogram_share',\n 'hoeffding_bound_lower',\n 'hoeffding_bound_upper',\n 'ideriv',\n 'increase_prometheus',\n 'increase_pure',\n 'increases_over_time',\n 'integrate',\n 'interpolate',\n 'keep_last_value',\n 'keep_next_value',\n 'label_copy',\n 'label_del',\n 'label_graphite_group',\n 'label_keep',\n 'label_lowercase',\n 'label_map',\n 'label_match',\n 'label_mismatch',\n 'label_move',\n 'label_set',\n 'label_transform',\n 'label_uppercase',\n 'label_value',\n 'lag',\n 'lifetime',\n 'limit_offset',\n 'mad_over_time',\n 'median_over_time',\n 'mode_over_time',\n 'now',\n 'prometheus_buckets',\n 'quantiles_over_time',\n 'rand',\n 'rand_exponential',\n 'rand_normal',\n 'range_avg',\n 'range_first',\n 'range_last',\n 'range_linear_regression',\n 'range_mad',\n 'range_max',\n 'range_min',\n 'range_normalize',\n 'range_over_time',\n 'range_quantile',\n 'range_stddev',\n 'range_stdvar',\n 'range_sum',\n 'range_trim_outliers',\n 'range_trim_spikes',\n 'range_trim_zscore',\n 'range_zscore',\n 'rate_over_sum',\n 'remove_resets',\n 'rollup',\n 'rollup_candlestick',\n 'rollup_delta',\n 'rollup_deriv',\n 'rollup_increase',\n 'rollup_rate',\n 'rollup_scrape_interval',\n 'running_avg',\n 'running_max',\n 'running_min',\n 'running_sum',\n 'scrape_interval',\n 'share_eq_over_time',\n 'share_gt_over_time',\n 'share_le_over_time',\n 'smooth_exponential',\n 'smooth_exponential',\n 'sort_by_label_desc',\n 'sort_by_label_numeric',\n 'sort_by_label_numeric_desc',\n 'stale_samples_over_time',\n 'step',\n 'sum2_over_time',\n 'tfirst_over_time',\n 'timestamp_with_name',\n 'timezone_offset',\n 'tlast_change_over_time',\n 'tlast_over_time',\n 'tmax_over_time',\n 'tmin_over_time',\n 'union',\n 'zscore_over_time',\n 'avg_daily',\n 'median_daily',\n 'avg_weekly',\n 'median_weekly',\n 'median_weekly_with_trends',\n];\n// PromQL specific functions: Aggregations over time\n// (https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time)\nconst aggregationsOverTime: string[] = [];\nfor (let _i = 0, aggregations_1 = aggregations; _i < aggregations_1.length; _i++) {\n let agg = aggregations_1[_i];\n aggregationsOverTime.push(agg + '_over_time');\n}\n\n// PromQL vector matching + the by and without clauses\n// (https://prometheus.io/docs/prometheus/latest/querying/operators/#vector-matching)\nconst vectorMatching = ['on', 'ignoring', 'group_right', 'group_left', 'by', 'without'];\n// Produce a regex matching elements : (elt1|elt2|...)\nconst vectorMatchingRegex =\n '(' +\n vectorMatching.reduce(function (prev, curr) {\n return prev + '|' + curr;\n }) +\n ')';\n// PromQL Operators\n// (https://prometheus.io/docs/prometheus/latest/querying/operators/)\nconst operators = ['+', '-', '*', '/', '%', '^', '==', '!=', '>', '<', '>=', '<=', 'and', 'or', 'unless'];\n// PromQL offset modifier\n// (https://prometheus.io/docs/prometheus/latest/querying/basics/#offset-modifier)\nconst offsetModifier = ['offset'];\n// Merging all the keywords in one list\nconst keywords = aggregations.concat(functions).concat(aggregationsOverTime).concat(vectorMatching).concat(offsetModifier);\n// noinspection JSUnusedGlobalSymbols\nexport const language = {\n ignoreCase: false,\n defaultToken: '',\n tokenPostfix: '.promql',\n keywords: keywords,\n operators: operators,\n vectorMatching: vectorMatchingRegex,\n // we include these common regular expressions\n symbols: /[=><!~?:&|+\\-*\\/^%]+/,\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n digits: /\\d+(_+\\d+)*/,\n octaldigits: /[0-7]+(_+[0-7]+)*/,\n binarydigits: /[0-1]+(_+[0-1]+)*/,\n hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n integersuffix: /(ll|LL|u|U|l|L)?(ll|LL|u|U|l|L)?/,\n floatsuffix: /[fFlL]?/,\n // The main tokenizer for our languages\n tokenizer: {\n root: [\n // 'by', 'without' and vector matching\n [/@vectorMatching\\s*(?=\\()/, 'type', '@clauses'],\n // labels\n [/[a-z_]\\w*(?=\\s*(=|!=|=~|!~))/, 'tag'],\n // comments\n [/(^#.*$)/, 'comment'],\n // all keywords have the same color\n [\n /[a-zA-Z_]\\w*/,\n {\n cases: {\n '@keywords': 'type',\n '@default': 'identifier',\n },\n },\n ],\n // strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n [/\"/, 'string', '@string_double'],\n [/'/, 'string', '@string_single'],\n [/`/, 'string', '@string_backtick'],\n // whitespace\n { include: '@whitespace' },\n // delimiters and operators\n [/[{}()\\[\\]]/, '@brackets'],\n [/[<>](?!@symbols)/, '@brackets'],\n [\n /@symbols/,\n {\n cases: {\n '@operators': 'delimiter',\n '@default': '',\n },\n },\n ],\n // numbers\n [/\\d+[smhdwy]/, 'number'],\n [/\\d*\\d+[eE]([\\-+]?\\d+)?(@floatsuffix)/, 'number.float'],\n [/\\d*\\.\\d+([eE][\\-+]?\\d+)?(@floatsuffix)/, 'number.float'],\n [/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/, 'number.hex'],\n [/0[0-7']*[0-7](@integersuffix)/, 'number.octal'],\n [/0[bB][0-1']*[0-1](@integersuffix)/, 'number.binary'],\n [/\\d[\\d']*\\d(@integersuffix)/, 'number'],\n [/\\d(@integersuffix)/, 'number'],\n ],\n string_double: [\n [/[^\\\\\"]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, 'string', '@pop'],\n ],\n string_single: [\n [/[^\\\\']+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/'/, 'string', '@pop'],\n ],\n string_backtick: [\n [/[^\\\\`$]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/`/, 'string', '@pop'],\n ],\n clauses: [\n [/[^(,)]/, 'tag'],\n [/\\)/, 'identifier', '@pop'],\n ],\n whitespace: [[/[ \\t\\r\\n]+/, 'white']],\n },\n};\n// noinspection JSUnusedGlobalSymbols\n// export const completionItemProvider = {\n// provideCompletionItems: function () {\n// // To simplify, we made the choice to never create automatically the parenthesis behind keywords\n// // It is because in PromQL, some keywords need parenthesis behind, some don't, some can have but it's optional.\n// const suggestions = keywords.map(function (value) {\n// return {\n// label: value,\n// kind: languages.CompletionItemKind.Keyword,\n// insertText: value,\n// insertTextRules: languages.CompletionItemInsertTextRule.InsertAsSnippet\n// };\n// });\n// return { suggestions: suggestions };\n// }\n// };\n\ninterface CompletionItem {\n label: string;\n insertText: string;\n detail?: string;\n documentation?: string;\n}\n\nconst TRIGONOMETRIC_FUNCTIONS: CompletionItem[] = [\n {\n label: 'acos',\n insertText: 'acos',\n detail: 'acos(v instant-vector)',\n documentation: 'calculates the arccosine of all elements in v',\n },\n {\n label: 'acosh',\n insertText: 'acosh',\n detail: 'acosh(v instant-vector)',\n documentation: 'calculates the inverse hyperbolic cosine of all elements in v',\n },\n {\n label: 'asin',\n insertText: 'asin',\n detail: 'asin(v instant-vector)',\n documentation: 'calculates the arcsine of all elements in v',\n },\n {\n label: 'asinh',\n insertText: 'asinh',\n detail: 'asinh(v instant-vector)',\n documentation: 'calculates the inverse hyperbolic sine of all elements in v',\n },\n {\n label: 'atan',\n insertText: 'atan',\n detail: 'atan(v instant-vector)',\n documentation: 'calculates the arctangent of all elements in v',\n },\n {\n label: 'atanh',\n insertText: 'atanh',\n detail: 'atanh(v instant-vector)',\n documentation: 'calculates the inverse hyperbolic tangent of all elements in v',\n },\n {\n label: 'cos',\n insertText: 'cos',\n detail: 'cos(v instant-vector)',\n documentation: 'calculates the cosine of all elements in v',\n },\n {\n label: 'cosh',\n insertText: 'cosh',\n detail: 'cosh(v instant-vector)',\n documentation: 'calculates the hyperbolic cosine of all elements in v',\n },\n {\n label: 'sin',\n insertText: 'sin',\n detail: 'sin(v instant-vector)',\n documentation: 'calculates the sine of all elements in v',\n },\n {\n label: 'sinh',\n insertText: 'sinh',\n detail: 'sinh(v instant-vector)',\n documentation: 'calculates the hyperbolic sine of all elements in v',\n },\n {\n label: 'tan',\n insertText: 'tan',\n detail: 'tan(v instant-vector)',\n documentation: 'calculates the tangent of all elements in v',\n },\n {\n label: 'tanh',\n insertText: 'tanh',\n detail: 'tanh(v instant-vector)',\n documentation: 'calculates the hyperbolic tangent of all elements in v',\n },\n];\n\nconst AGGREGATION_OPERATORS: CompletionItem[] = [\n {\n label: 'sum',\n insertText: 'sum',\n documentation: 'Calculate sum over dimensions',\n },\n {\n label: 'min',\n insertText: 'min',\n documentation: 'Select minimum over dimensions',\n },\n {\n label: 'max',\n insertText: 'max',\n documentation: 'Select maximum over dimensions',\n },\n {\n label: 'avg',\n insertText: 'avg',\n documentation: 'Calculate the average over dimensions',\n },\n {\n label: 'group',\n insertText: 'group',\n documentation: 'All values in the resulting vector are 1',\n },\n {\n label: 'stddev',\n insertText: 'stddev',\n documentation: 'Calculate population standard deviation over dimensions',\n },\n {\n label: 'stdvar',\n insertText: 'stdvar',\n documentation: 'Calculate population standard variance over dimensions',\n },\n {\n label: 'count',\n insertText: 'count',\n documentation: 'Count number of elements in the vector',\n },\n {\n label: 'count_values',\n insertText: 'count_values',\n documentation: 'Count number of elements with the same value',\n },\n {\n label: 'bottomk',\n insertText: 'bottomk',\n documentation: 'Smallest k elements by sample value',\n },\n {\n label: 'topk',\n insertText: 'topk',\n documentation: 'Largest k elements by sample value',\n },\n {\n label: 'quantile',\n insertText: 'quantile',\n documentation: 'Calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions',\n },\n];\n\nexport const FUNCTIONS = [\n ...AGGREGATION_OPERATORS,\n ...TRIGONOMETRIC_FUNCTIONS,\n {\n insertText: 'abs',\n label: 'abs',\n detail: 'abs(v instant-vector)',\n documentation: 'Returns the input vector with all sample values converted to their absolute value.',\n },\n {\n insertText: 'absent',\n label: 'absent',\n detail: 'absent(v instant-vector)',\n documentation:\n 'Returns an empty vector if the vector passed to it has any elements and a 1-element vector with the value 1 if the vector passed to it has no elements. This is useful for alerting on when no time series exist for a given metric name and label combination.',\n },\n {\n insertText: 'absent_over_time',\n label: 'absent_over_time',\n detail: 'absent(v range-vector)',\n documentation:\n 'Returns an empty vector if the range vector passed to it has any elements and a 1-element vector with the value 1 if the range vector passed to it has no elements.',\n },\n {\n insertText: 'ceil',\n label: 'ceil',\n detail: 'ceil(v instant-vector)',\n documentation: 'Rounds the sample values of all elements in `v` up to the nearest integer.',\n },\n {\n insertText: 'changes',\n label: 'changes',\n detail: 'changes(v range-vector)',\n documentation: 'For each input time series, `changes(v range-vector)` returns the number of times its value has changed within the provided time range as an instant vector.',\n },\n {\n insertText: 'clamp',\n label: 'clamp',\n detail: 'clamp(v instant-vector, min scalar, max scalar)',\n documentation: 'Clamps the sample values of all elements in `v` to have a lower limit of `min` and an upper limit of `max`.',\n },\n {\n insertText: 'clamp_max',\n label: 'clamp_max',\n detail: 'clamp_max(v instant-vector, max scalar)',\n documentation: 'Clamps the sample values of all elements in `v` to have an upper limit of `max`.',\n },\n {\n insertText: 'clamp_min',\n label: 'clamp_min',\n detail: 'clamp_min(v instant-vector, min scalar)',\n documentation: 'Clamps the sample values of all elements in `v` to have a lower limit of `min`.',\n },\n {\n insertText: 'count_scalar',\n label: 'count_scalar',\n detail: 'count_scalar(v instant-vector)',\n documentation:\n 'Returns the number of elements in a time series vector as a scalar. This is in contrast to the `count()` aggregation operator, which always returns a vector (an empty one if the input vector is empty) and allows grouping by labels via a `by` clause.',\n },\n {\n insertText: 'deg',\n label: 'deg',\n detail: 'deg(v instant-vector)',\n documentation: 'Converts radians to degrees for all elements in v',\n },\n {\n insertText: 'day_of_month',\n label: 'day_of_month',\n detail: 'day_of_month(v=vector(time()) instant-vector)',\n documentation: 'Returns the day of the month for each of the given times in UTC. Returned values are from 1 to 31.',\n },\n {\n insertText: 'day_of_week',\n label: 'day_of_week',\n detail: 'day_of_week(v=vector(time()) instant-vector)',\n documentation: 'Returns the day of the week for each of the given times in UTC. Returned values are from 0 to 6, where 0 means Sunday etc.',\n },\n {\n insertText: 'day_of_year',\n label: 'day_of_year',\n detail: 'day_of_year(v=vector(time()) instant-vector)',\n documentation: 'Returns the day of the year for each of the given times in UTC. Returned values are from 1 to 365 for non-leap years, and 1 to 366 in leap years.',\n },\n {\n insertText: 'days_in_month',\n label: 'days_in_month',\n detail: 'days_in_month(v=vector(time()) instant-vector)',\n documentation: 'Returns number of days in the month for each of the given times in UTC. Returned values are from 28 to 31.',\n },\n {\n insertText: 'delta',\n label: 'delta',\n detail: 'delta(v range-vector)',\n documentation:\n 'Calculates the difference between the first and last value of each time series element in a range vector `v`, returning an instant vector with the given deltas and equivalent labels. The delta is extrapolated to cover the full time range as specified in the range vector selector, so that it is possible to get a non-integer result even if the sample values are all integers.',\n },\n {\n insertText: 'deriv',\n label: 'deriv',\n detail: 'deriv(v range-vector)',\n documentation: 'Calculates the per-second derivative of the time series in a range vector `v`, using simple linear regression.',\n },\n {\n insertText: 'drop_common_labels',\n label: 'drop_common_labels',\n detail: 'drop_common_labels(instant-vector)',\n documentation: 'Drops all labels that have the same name and value across all series in the input vector.',\n },\n {\n insertText: 'exp',\n label: 'exp',\n detail: 'exp(v instant-vector)',\n documentation: 'Calculates the exponential function for all elements in `v`.\\nSpecial cases are:\\n* `Exp(+Inf) = +Inf` \\n* `Exp(NaN) = NaN`',\n },\n {\n insertText: 'floor',\n label: 'floor',\n detail: 'floor(v instant-vector)',\n documentation: 'Rounds the sample values of all elements in `v` down to the nearest integer.',\n },\n {\n insertText: 'histogram_quantile',\n label: 'histogram_quantile',\n detail: 'histogram_quantile(φ float, b instant-vector)',\n documentation:\n 'Calculates the φ-quantile (0 ≤ φ ≤ 1) from the buckets `b` of a histogram. The samples in `b` are the counts of observations in each bucket. Each sample must have a label `le` where the label value denotes the inclusive upper bound of the bucket. (Samples without such a label are silently ignored.) The histogram metric type automatically provides time series with the `_bucket` suffix and the appropriate labels.',\n },\n {\n insertText: 'holt_winters',\n label: 'holt_winters',\n detail: 'holt_winters(v range-vector, sf scalar, tf scalar)',\n documentation:\n 'Produces a smoothed value for time series based on the range in `v`. The lower the smoothing factor `sf`, the more importance is given to old data. The higher the trend factor `tf`, the more trends in the data is considered. Both `sf` and `tf` must be between 0 and 1.',\n },\n {\n insertText: 'hour',\n label: 'hour',\n detail: 'hour(v=vector(time()) instant-vector)',\n documentation: 'Returns the hour of the day for each of the given times in UTC. Returned values are from 0 to 23.',\n },\n {\n insertText: 'idelta',\n label: 'idelta',\n detail: 'idelta(v range-vector)',\n documentation: 'Calculates the difference between the last two samples in the range vector `v`, returning an instant vector with the given deltas and equivalent labels.',\n },\n {\n insertText: 'increase',\n label: 'increase',\n detail: 'increase(v range-vector)',\n documentation:\n 'Calculates the increase in the time series in the range vector. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for. The increase is extrapolated to cover the full time range as specified in the range vector selector, so that it is possible to get a non-integer result even if a counter increases only by integer increments.',\n },\n {\n insertText: 'irate',\n label: 'irate',\n detail: 'irate(v range-vector)',\n documentation:\n 'Calculates the per-second instant rate of increase of the time series in the range vector. This is based on the last two data points. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for.',\n },\n {\n insertText: 'label_join',\n label: 'label_join',\n detail: 'label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)',\n documentation:\n 'For each timeseries in `v`, joins all the values of all the `src_labels` using `separator` and returns the timeseries with the label `dst_label` containing the joined value. There can be any number of `src_labels` in this function.',\n },\n {\n insertText: 'label_replace',\n label: 'label_replace',\n detail: 'label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)',\n documentation:\n \"For each timeseries in `v`, `label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)` matches the regular expression `regex` against the label `src_label`. If it matches, then the timeseries is returned with the label `dst_label` replaced by the expansion of `replacement`. `$1` is replaced with the first matching subgroup, `$2` with the second etc. If the regular expression doesn't match then the timeseries is returned unchanged.\",\n },\n {\n insertText: 'ln',\n label: 'ln',\n detail: 'ln(v instant-vector)',\n documentation:\n 'Calculates the natural logarithm for all elements in `v`.\\nSpecial cases are:\\n * `ln(+Inf) = +Inf`\\n * `ln(0) = -Inf`\\n * `ln(x < 0) = NaN`\\n * `ln(NaN) = NaN`',\n },\n {\n insertText: 'log2',\n label: 'log2',\n detail: 'log2(v instant-vector)',\n documentation: 'Calculates the binary logarithm for all elements in `v`. The special cases are equivalent to those in `ln`.',\n },\n {\n insertText: 'log10',\n label: 'log10',\n detail: 'log10(v instant-vector)',\n documentation: 'Calculates the decimal logarithm for all elements in `v`. The special cases are equivalent to those in `ln`.',\n },\n {\n insertText: 'minute',\n label: 'minute',\n detail: 'minute(v=vector(time()) instant-vector)',\n documentation: 'Returns the minute of the hour for each of the given times in UTC. Returned values are from 0 to 59.',\n },\n {\n insertText: 'month',\n label: 'month',\n detail: 'month(v=vector(time()) instant-vector)',\n documentation: 'Returns the month of the year for each of the given times in UTC. Returned values are from 1 to 12, where 1 means January etc.',\n },\n {\n insertText: 'pi',\n label: 'pi',\n detail: 'pi()',\n documentation: 'Returns pi',\n },\n {\n insertText: 'predict_linear',\n label: 'predict_linear',\n detail: 'predict_linear(v range-vector, t scalar)',\n documentation: 'Predicts the value of time series `t` seconds from now, based on the range vector `v`, using simple linear regression.',\n },\n {\n insertText: 'rad',\n label: 'rad',\n detail: 'rad(v instant-vector)',\n documentation: 'Converts degrees to radians for all elements in v',\n },\n {\n insertText: 'rate',\n label: 'rate',\n detail: 'rate(v range-vector)',\n documentation:\n \"Calculates the per-second average rate of increase of the time series in the range vector. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for. Also, the calculation extrapolates to the ends of the time range, allowing for missed scrapes or imperfect alignment of scrape cycles with the range's time period.\",\n },\n {\n insertText: 'resets',\n label: 'resets',\n detail: 'resets(v range-vector)',\n documentation:\n 'For each input time series, `resets(v range-vector)` returns the number of counter resets within the provided time range as an instant vector. Any decrease in the value between two consecutive samples is interpreted as a counter reset.',\n },\n {\n insertText: 'round',\n label: 'round',\n detail: 'round(v instant-vector, to_nearest=1 scalar)',\n documentation:\n 'Rounds the sample values of all elements in `v` to the nearest integer. Ties are resolved by rounding up. The optional `to_nearest` argument allows specifying the nearest multiple to which the sample values should be rounded. This multiple may also be a fraction.',\n },\n {\n insertText: 'scalar',\n label: 'scalar',\n detail: 'scalar(v instant-vector)',\n documentation:\n 'Given a single-element input vector, `scalar(v instant-vector)` returns the sample value of that single element as a scalar. If the input vector does not have exactly one element, `scalar` will return `NaN`.',\n },\n {\n insertText: 'sgn',\n label: 'sgn',\n detail: 'sgn(v instant-vector)',\n documentation: 'Returns a vector with all sample values converted to their sign, defined as this: 1 if v is positive, -1 if v is negative and 0 if v is equal to zero.',\n },\n {\n insertText: 'sort',\n label: 'sort',\n detail: 'sort(v instant-vector)',\n documentation: 'Returns vector elements sorted by their sample values, in ascending order.',\n },\n {\n insertText: 'sort_desc',\n label: 'sort_desc',\n detail: 'sort_desc(v instant-vector)',\n documentation: 'Returns vector elements sorted by their sample values, in descending order.',\n },\n {\n insertText: 'sqrt',\n label: 'sqrt',\n detail: 'sqrt(v instant-vector)',\n documentation: 'Calculates the square root of all elements in `v`.',\n },\n {\n insertText: 'time',\n label: 'time',\n detail: 'time()',\n documentation:\n 'Returns the number of seconds since January 1, 1970 UTC. Note that this does not actually return the current time, but the time at which the expression is to be evaluated.',\n },\n {\n insertText: 'timestamp',\n label: 'timestamp',\n detail: 'timestamp(v instant-vector)',\n documentation: 'Returns the timestamp of each of the samples of the given vector as the number of seconds since January 1, 1970 UTC.',\n },\n {\n insertText: 'vector',\n label: 'vector',\n detail: 'vector(s scalar)',\n documentation: 'Returns the scalar `s` as a vector with no labels.',\n },\n {\n insertText: 'year',\n label: 'year',\n detail: 'year(v=vector(time()) instant-vector)',\n documentation: 'Returns the year for each of the given times in UTC.',\n },\n {\n insertText: 'avg_over_time',\n label: 'avg_over_time',\n detail: 'avg_over_time(range-vector)',\n documentation: 'The average value of all points in the specified interval.',\n },\n {\n insertText: 'min_over_time',\n label: 'min_over_time',\n detail: 'min_over_time(range-vector)',\n documentation: 'The minimum value of all points in the specified interval.',\n },\n {\n insertText: 'max_over_time',\n label: 'max_over_time',\n detail: 'max_over_time(range-vector)',\n documentation: 'The maximum value of all points in the specified interval.',\n },\n {\n insertText: 'sum_over_time',\n label: 'sum_over_time',\n detail: 'sum_over_time(range-vector)',\n documentation: 'The sum of all values in the specified interval.',\n },\n {\n insertText: 'count_over_time',\n label: 'count_over_time',\n detail: 'count_over_time(range-vector)',\n documentation: 'The count of all values in the specified interval.',\n },\n {\n insertText: 'quantile_over_time',\n label: 'quantile_over_time',\n detail: 'quantile_over_time(scalar, range-vector)',\n documentation: 'The φ-quantile (0 ≤ φ ≤ 1) of the values in the specified interval.',\n },\n {\n insertText: 'stddev_over_time',\n label: 'stddev_over_time',\n detail: 'stddev_over_time(range-vector)',\n documentation: 'The population standard deviation of the values in the specified interval.',\n },\n {\n insertText: 'stdvar_over_time',\n label: 'stdvar_over_time',\n detail: 'stdvar_over_time(range-vector)',\n documentation: 'The population standard variance of the values in the specified interval.',\n },\n {\n insertText: 'last_over_time',\n label: 'last_over_time',\n detail: 'last_over_time(range-vector)',\n documentation: 'The most recent point value in specified interval.',\n },\n {\n insertText: 'present_over_time',\n label: 'present_over_time',\n detail: 'present_over_time(range-vector)',\n documentation: 'The value 1 for any series in the specified interval.',\n },\n {\n insertText: 'histogram_avg',\n label: 'histogram_avg',\n detail: 'histogram_avg(v instant-vector)',\n documentation:\n 'Returns the arithmetic average of observed values stored in a native histogram. Samples that are not native histograms are ignored and do not show up in the returned vector.',\n },\n {\n insertText: 'histogram_count',\n label: 'histogram_count',\n detail: 'histogram_count(v instant-vector)',\n documentation: 'Returns the count of observations stored in a native histogram.',\n },\n {\n insertText: 'histogram_sum',\n label: 'histogram_sum',\n detail: 'histogram_sum(v instant-vector)',\n documentation: 'Returns the sum of observations stored in a native histogram.',\n },\n {\n insertText: 'histogram_fraction',\n label: 'histogram_fraction',\n detail: 'histogram_fraction(lower scalar, upper scalar, v instant-vector)',\n documentation: 'Returns the estimated fraction of observations between the provided lower and upper values.',\n },\n {\n insertText: 'histogram_stddev',\n label: 'histogram_stddev',\n detail: 'histogram_stddev(v instant-vector)',\n documentation: 'Returns the estimated standard deviation of observations in a native histogram, based on the geometric mean of the buckets where the observations lie.',\n },\n {\n insertText: 'histogram_stdvar',\n label: 'histogram_stdvar',\n detail: 'histogram_stdvar(v instant-vector)',\n documentation: 'Returns the estimated standard variance of observations in a native histogram.',\n },\n];\n","import { Label } from './types';\n\nexport class NeverCaseError extends Error {\n constructor(_value: never) {\n super('should never happen');\n }\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function makeSelector(metricName: string, labels?: Label[], labelName?: string): string {\n if (!labels || labels.length === 0) {\n return metricName;\n }\n\n const allLabels = [...labels].filter((label) => label.name !== labelName && label.value !== '');\n\n const allLabelTexts = allLabels.map((label) => {\n return `${label.name}${label.op}\"${escapeLabelValueInExactSelector(label.value)}\"`;\n });\n\n return `${metricName}{${allLabelTexts.join(',')}}`;\n}\n","import { makeSelector } from '../util';\nimport type { Metric, PromMetricsMetadata, DataProviderParams } from '../types';\n\ntype CustomRequest = (input: RequestInfo, init?: RequestInit) => Promise<Response>;\n\ninterface APIResponse<T> {\n status: 'success' | 'error';\n data?: T;\n error?: string;\n warnings?: string[];\n}\n\nconst DEFAULT_SERIES_LIMIT = '40000';\nconst badRequest = 400;\nconst unprocessableEntity = 422;\nconst serviceUnavailable = 503;\nconst CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT = 'codeModeSuggestionsIncomplete';\n\nexport class DataProvider {\n readonly metricNamesSuggestionLimit: number;\n private inputInRange: string;\n private suggestionsIncomplete: boolean;\n private readonly lookbackInterval = 60 * 60 * 1000 * 12; // 12 hours\n private variablesNames: string[] = [];\n private readonly url: string;\n private readonly errorHandler?: (error: any) => void;\n private readonly httpMethod: 'POST' | 'GET' = 'GET';\n private readonly apiPrefix: string = '/api/v1';\n private enableRequests: boolean = true;\n private readonly customRequest: CustomRequest = (input: RequestInfo, init?: RequestInit): Promise<Response> => fetch(input, init);\n metrics: string[];\n labelKeys: string[];\n metricsMetadata?: PromMetricsMetadata;\n durationVariablesCompletion: boolean;\n\n constructor(params: DataProviderParams) {\n this.inputInRange = '';\n this.metricNamesSuggestionLimit = 1000;\n this.suggestionsIncomplete = false;\n\n this.url = params.url ? params.url : '';\n this.errorHandler = params.httpErrorHandler;\n if (params.lookbackInterval) {\n this.lookbackInterval = params.lookbackInterval;\n }\n if (params.variablesNames) {\n this.variablesNames = [...params.variablesNames];\n }\n this.durationVariablesCompletion = params.durationVariablesCompletion ?? true;\n if (params.request) {\n this.customRequest = params.request;\n }\n if (params.httpMethod) {\n this.httpMethod = params.httpMethod;\n }\n if (params.apiPrefix) {\n this.apiPrefix = params.apiPrefix;\n }\n\n // control whether DataProvider should actually send network requests\n if (typeof params.enableRequests !== 'undefined') {\n this.enableRequests = !!params.enableRequests;\n }\n\n this.metrics = [];\n this.labelKeys = [];\n }\n\n getVariablesNames(): string[] {\n return this.variablesNames;\n }\n\n setVariablesNames(variablesNames: string[]) {\n this.variablesNames = [...variablesNames];\n }\n\n private buildRequest(endpoint: string, params: URLSearchParams) {\n let uri = endpoint;\n let body: URLSearchParams | null = params;\n if (this.httpMethod === 'GET') {\n uri = `${uri}?${params}`;\n body = null;\n }\n return { uri, body };\n }\n\n private request<T>(resource: string, init?: RequestInit): Promise<T> {\n return this.customRequest(this.url + resource, init)\n .then((res) => {\n if (!res.ok && ![badRequest, unprocessableEntity, serviceUnavailable].includes(res.status)) {\n throw new Error(res.statusText);\n }\n return res;\n })\n .then((res) => res.json())\n .then((apiRes: APIResponse<T>) => {\n if (apiRes.status === 'error') {\n const error = new Error(apiRes.error !== undefined ? apiRes.error : 'missing \"error\" field in response JSON');\n if (this.errorHandler) {\n this.errorHandler(error);\n }\n throw error;\n }\n if (apiRes.data === undefined) {\n const error = new Error(apiRes.error !== undefined ? apiRes.error : 'missing \"data\" field in response JSON');\n if (this.errorHandler) {\n this.errorHandler(error);\n }\n throw error;\n }\n return apiRes.data;\n })\n .catch((error) => {\n if (this.errorHandler) {\n this.errorHandler(error);\n }\n throw error;\n });\n }\n\n fetchSeries = async (selector: string, withLimit?: string): Promise<Record<string, string | undefined>[]> => {\n if (!this.enableRequests) {\n return [] as Record<string, string | undefined>[];\n }\n const end = new Date();\n const start = new Date(end.getTime() - this.lookbackInterval);\n const url = `${this.apiPrefix}/series`;\n let urlParams: any = {\n start: start.toISOString() as string,\n end: end.toISOString() as string,\n };\n if (selector) {\n urlParams['match[]'] = selector;\n }\n\n if (withLimit !== 'none') {\n urlParams = { ...urlParams, limit: withLimit ?? DEFAULT_SERIES_LIMIT };\n }\n const request = this.buildRequest(url, new URLSearchParams(urlParams));\n\n return await this.request<Record<string, string>[]>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n }).catch(() => {\n return [] as Record<string, string>[];\n });\n };\n\n fetchLabels = async (selector: string): Promise<string[]> => {\n if (!this.enableRequests) {\n return [] as string[];\n }\n const end = new Date();\n const start = new Date(end.getTime() - this.lookbackInterval);\n const url = `${this.apiPrefix}/labels`;\n const urlParams: any = {\n start: start.toISOString(),\n end: end.toISOString(),\n };\n if (selector) {\n urlParams['match[]'] = selector;\n }\n const request = this.buildRequest(url, new URLSearchParams(urlParams));\n\n return await this.request<string[]>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n })\n .then((res) => {\n this.labelKeys = res;\n return res;\n })\n .catch(() => {\n return [] as string[];\n });\n };\n\n fetchLabelValues = async (labelName: string, selector: string): Promise<string[]> => {\n if (!this.enableRequests) {\n return [] as string[];\n }\n const end = new Date();\n const start = new Date(end.getTime() - this.lookbackInterval);\n const url = `${this.apiPrefix}/label/${labelName}/values`;\n const urlParams: any = {\n start: start.toISOString(),\n end: end.toISOString(),\n };\n if (selector) {\n urlParams['match[]'] = selector;\n }\n\n const request = this.buildRequest(url, new URLSearchParams(urlParams));\n\n return await this.request<string[]>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n }).catch(() => {\n return [] as string[];\n });\n };\n\n getAllMetricNames(): string[] {\n return this.metrics;\n }\n\n start = async () => {\n this.metrics = (await this.fetchLabelValues('__name__', makeSelector('', [], '__name__'))) || [];\n\n return Promise.all([\n this.loadMetricsMetadata(),\n // this.fetchLabels()\n ]);\n };\n\n async loadMetricsMetadata(): Promise<PromMetricsMetadata> {\n if (!this.enableRequests) {\n this.metricsMetadata = {} as PromMetricsMetadata;\n return this.metricsMetadata;\n }\n const request = this.buildRequest(`${this.apiPrefix}/metadata`, new URLSearchParams({}));\n this.metricsMetadata = await this.request<PromMetricsMetadata>(request.uri, {\n method: this.httpMethod,\n body: request.body,\n }).catch(() => {\n return {} as PromMetricsMetadata;\n });\n\n return this.metricsMetadata || ({} as PromMetricsMetadata);\n }\n\n metricNamesToMetrics(metricNames: string[]): Metric[] {\n const result: Metric[] = metricNames.map((m) => {\n const metaItem = this.metricsMetadata?.[m];\n return {\n name: m,\n help: metaItem?.help ?? '',\n type: metaItem?.type ?? '',\n };\n });\n\n return result;\n }\n\n private setInputInRange(textInput: string): void {\n this.inputInRange = textInput;\n }\n\n private enableAutocompleteSuggestionsUpdate(): void {\n this.suggestionsIncomplete = true;\n dispatchEvent(\n new CustomEvent(CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, {\n detail: {\n limit: this.metricNamesSuggestionLimit,\n },\n }),\n );\n }\n\n get monacoSettings() {\n return {\n /**\n * Enable autocomplete suggestions update on every input change.\n *\n * @remarks\n * If fuzzy search is used in `getCompletions` to trim down results to improve performance,\n * we need to instruct Monaco to update the completions on every input change, so that the\n * completions reflect the current input.\n */\n enableAutocompleteSuggestionsUpdate: this.enableAutocompleteSuggestionsUpdate.bind(this),\n inputInRange: this.inputInRange,\n setInputInRange: this.setInputInRange.bind(this),\n suggestionsIncomplete: this.suggestionsIncomplete,\n };\n }\n}\n","import type { SyntaxNode, Tree } from '@lezer/common';\nimport {\n AggregateExpr,\n AggregateModifier,\n BinaryExpr,\n EqlRegex,\n EqlSingle,\n FunctionCallBody,\n GroupingLabels,\n Identifier,\n LabelMatchers,\n LabelName,\n MatchOp,\n MatrixSelector,\n Neq,\n NeqRegex,\n NumberDurationLiteralInDurationContext,\n parser,\n PromQL,\n StringLiteral,\n UnquotedLabelMatcher,\n VectorSelector,\n} from '@fc-components/lezer-metricsql';\n\nimport { NeverCaseError } from '../util';\nimport { LabelOperator, Label } from '../types';\n\ntype Direction = 'parent' | 'firstChild' | 'lastChild' | 'nextSibling';\n\ntype NodeTypeId =\n | 0 // this is used as error-id\n | typeof AggregateExpr\n | typeof AggregateModifier\n | typeof FunctionCallBody\n | typeof GroupingLabels\n | typeof Identifier\n | typeof UnquotedLabelMatcher\n | typeof LabelMatchers\n | typeof LabelName\n | typeof PromQL\n | typeof StringLiteral\n | typeof VectorSelector\n | typeof MatrixSelector\n | typeof MatchOp\n | typeof EqlSingle\n | typeof Neq\n | typeof EqlRegex\n | typeof NeqRegex;\n\ntype Path = Array<[Direction, NodeTypeId]>;\n\nfunction move(node: SyntaxNode, direction: Direction): SyntaxNode | null {\n switch (direction) {\n case 'parent':\n return node.parent;\n case 'firstChild':\n return node.firstChild;\n case 'lastChild':\n return node.lastChild;\n case 'nextSibling':\n return node.nextSibling;\n default:\n throw new NeverCaseError(direction);\n }\n}\n\nfunction walk(node: SyntaxNode, path: Path): SyntaxNode | null {\n let current: SyntaxNode | null = node;\n for (const [direction, expectedType] of path) {\n current = move(current, direction);\n if (current === null) {\n // we could not move in the direction, we stop\n return null;\n }\n if (current.type.id !== expectedType) {\n // the reached node has wrong type, we stop\n return null;\n }\n }\n return current;\n}\n\nfunction getNodeText(node: SyntaxNode, text: string): string {\n return text.slice(node.from, node.to);\n}\n\nfunction parsePromQLStringLiteral(text: string): string {\n // if it is a string-literal, it is inside quotes of some kind\n const inside = text.slice(1, text.length - 1);\n\n // FIXME: support https://prometheus.io/docs/prometheus/latest/querying/basics/#string-literals\n // FIXME: maybe check other promql code, if all is supported or not\n\n // for now we do only some very simple un-escaping\n\n // we start with double-quotes\n if (text.startsWith('\"') && text.endsWith('\"')) {\n // NOTE: this is not 100% perfect, we only unescape the double-quote,\n // there might be other characters too\n return inside.replace(/\\\\\"/, '\"');\n }\n\n // then single-quote\n if (text.startsWith(\"'\") && text.endsWith(\"'\")) {\n // NOTE: this is not 100% perfect, we only unescape the single-quote,\n // there might be other characters too\n return inside.replace(/\\\\'/, \"'\");\n }\n\n // then backticks\n if (text.startsWith('`') && text.endsWith('`')) {\n return inside;\n }\n\n throw new Error('FIXME: invalid string literal');\n}\n\nexport type Situation =\n | {\n type: 'IN_FUNCTION';\n }\n | {\n type: 'AT_ROOT';\n }\n | {\n type: 'EMPTY';\n }\n | {\n type: 'IN_DURATION';\n }\n | {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME';\n metricName?: string;\n otherLabels: Label[];\n hasOperator: boolean;\n }\n | {\n type: 'IN_GROUPING';\n metricName: string;\n otherLabels: Label[];\n }\n | {\n type: 'IN_LABEL_SELECTOR_WITH_LABEL_NAME';\n metricName?: string;\n labelName: string;\n betweenQuotes: boolean;\n otherLabels: Label[];\n };\n\ntype Resolver = {\n path: NodeTypeId[];\n fun: (node: SyntaxNode, text: string, pos: number) => Situation | null;\n};\n\nfunction isPathMatch(resolverPath: NodeTypeId[], cursorPath: number[]): boolean {\n return resolverPath.every((item, index) => item === cursorPath[index]);\n}\n\nconst ERROR_NODE_NAME: NodeTypeId = 0; // this is used as error-id\n\nconst RESOLVERS: Resolver[] = [\n {\n path: [LabelName, UnquotedLabelMatcher],\n fun: resolveLabelName,\n },\n {\n path: [UnquotedLabelMatcher, LabelMatchers],\n fun: resolveLabelName,\n },\n {\n path: [LabelMatchers, VectorSelector],\n fun: resolveLabelKeysWithEquals,\n },\n {\n path: [LabelMatchers, VectorSelector, PromQL],\n fun: resolveLabelKeysWithEquals,\n },\n {\n path: [PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [VectorSelector, PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [Identifier, VectorSelector],\n fun: resolveTopLevel,\n },\n {\n path: [Identifier, VectorSelector, PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [FunctionCallBody],\n fun: resolveInFunction,\n },\n {\n path: [StringLiteral, UnquotedLabelMatcher],\n fun: resolveLabelMatcher,\n },\n {\n path: [ERROR_NODE_NAME, BinaryExpr, PromQL],\n fun: resolveTopLevel,\n },\n {\n path: [ERROR_NODE_NAME, UnquotedLabelMatcher],\n fun: resolveErrorInLabelMatcher,\n },\n {\n path: [ERROR_NODE_NAME, NumberDurationLiteralInDurationContext, MatrixSelector],\n fun: resolveDurations,\n },\n {\n path: [GroupingLabels],\n fun: resolveLabelsForGrouping,\n },\n];\n\nconst LABEL_OP_MAP = new Map<number, LabelOperator>([\n [EqlSingle, '='],\n [EqlRegex, '=~'],\n [Neq, '!='],\n [NeqRegex, '!~'],\n]);\n\nfunction getLabelOp(opNode: SyntaxNode): LabelOperator | null {\n const opChild = opNode.firstChild;\n if (opChild === null) {\n return null;\n }\n\n return LABEL_OP_MAP.get(opChild.type.id) ?? null;\n}\n\nfunction getLabel(labelMatcherNode: SyntaxNode, text: string): Label | null {\n if (labelMatcherNode.type.id !== UnquotedLabelMatcher) {\n return null;\n }\n\n const nameNode = walk(labelMatcherNode, [['firstChild', LabelName]]);\n\n if (nameNode === null) {\n return null;\n }\n\n const opNode = walk(nameNode, [['nextSibling', MatchOp]]);\n if (opNode === null) {\n return null;\n }\n\n const op = getLabelOp(opNode);\n if (op === null) {\n return null;\n }\n\n const valueNode = walk(labelMatcherNode, [['lastChild', StringLiteral]]);\n\n if (valueNode === null) {\n return null;\n }\n\n const name = getNodeText(nameNode, text);\n const value = parsePromQLStringLiteral(getNodeText(valueNode, text));\n\n return { name, value, op };\n}\n\nfunction getLabels(labelMatchersNode: SyntaxNode, text: string): Label[] {\n if (labelMatchersNode.type.id !== LabelMatchers) {\n return [];\n }\n\n const labelNodes = labelMatchersNode.getChildren(UnquotedLabelMatcher);\n return labelNodes.map((ln) => getLabel(ln, text)).filter(notEmpty);\n}\n\nfunction getNodeChildren(node: SyntaxNode): SyntaxNode[] {\n let child: SyntaxNode | null = node.firstChild;\n const children: SyntaxNode[] = [];\n while (child !== null) {\n children.push(child);\n child = child.nextSibling;\n }\n return children;\n}\n\nfunction getNodeInSubtree(node: SyntaxNode, typeId: NodeTypeId): SyntaxNode | null {\n // first we try the current node\n if (node.type.id === typeId) {\n return node;\n }\n\n // then we try the children\n const children = getNodeChildren(node);\n for (const child of children) {\n const n = getNodeInSubtree(child, typeId);\n if (n !== null) {\n return n;\n }\n }\n\n return null;\n}\n\nfunction resolveLabelsForGrouping(node: SyntaxNode, text: string, _pos: number): Situation | null {\n const aggrExpNode = walk(node, [\n ['parent', AggregateModifier],\n ['parent', AggregateExpr],\n ]);\n if (aggrExpNode === null) {\n return null;\n }\n const bodyNode = aggrExpNode.getChild(FunctionCallBody);\n if (bodyNode === null) {\n return null;\n }\n\n const metricIdNode = getNodeInSubtree(bodyNode, Identifier);\n if (metricIdNode === null) {\n return null;\n }\n\n const metricName = getNodeText(metricIdNode, text);\n return {\n type: 'IN_GROUPING',\n metricName,\n otherLabels: [],\n };\n}\n\nfunction resolveLabelMatcher(node: SyntaxNode, text: string, _pos: number): Situation | null {\n // we can arrive here in two situation. `node` is either:\n // - a StringNode (like in `{job=\"^\"}`)\n // - or an error node (like in `{job=^}`)\n const inStringNode = !node.type.isError;\n\n const parent = walk(node, [['parent', UnquotedLabelMatcher]]);\n if (parent === null) {\n return null;\n }\n\n const labelNameNode = walk(parent, [['firstChild', LabelName]]);\n if (labelNameNode === null) {\n return null;\n }\n\n const labelName = getNodeText(labelNameNode, text);\n\n const labelMatchersNode = walk(parent, [['parent', LabelMatchers]]);\n if (labelMatchersNode === null) {\n return null;\n }\n\n // now we need to find the other names\n const allLabels = getLabels(labelMatchersNode, text);\n\n // we need to remove \"our\" label from all-labels, if it is in there\n const otherLabels = allLabels.filter((label) => label.name !== labelName);\n\n const metricNameNode = walk(labelMatchersNode, [\n ['parent', VectorSelector],\n ['firstChild', Identifier],\n ]);\n\n if (metricNameNode === null) {\n // we are probably in a situation without a metric name\n return {\n type: 'IN_LABEL_SELECTOR_WITH_LABEL_NAME',\n labelName,\n betweenQuotes: inStringNode,\n otherLabels,\n };\n }\n\n const metricName = getNodeText(metricNameNode, text);\n\n return {\n type: 'IN_LABEL_SELECTOR_WITH_LABEL_NAME',\n metricName,\n labelName,\n betweenQuotes: inStringNode,\n otherLabels,\n };\n}\n\nfunction resolveErrorInLabelMatcher(node: SyntaxNode, text: string, pos: number): Situation | null {\n // 处理错误节点在 UnquotedLabelMatcher 中的情况\n // 需要判断是删除值还是删除名称\n\n const parent = walk(node, [['parent', UnquotedLabelMatcher]]);\n if (parent === null) {\n return null;\n }\n\n const labelNameNode = walk(parent, [['firstChild', LabelName]]);\n\n // 情况1: 有完整的标签名 -> 提示 label value\n if (labelNameNode !== null) {\n // 检查是否有 MatchOp(=, =~, !=, !~)\n const hasMatchOp = walk(labelNameNode, [['nextSibling', MatchOp]]) !== null;\n if (hasMatchOp) {\n // 这是值场景,使用 resolveLabelMatcher 的逻辑\n return resolveLabelMatcher(node, text, pos);\n }\n }\n\n // 情况2: 没有完整的标签名或没有 MatchOp -> 提示 label name\n // 使用 resolveLabelName 的逻辑\n return resolveLabelName(parent, text, pos);\n}\n\nfunction resolveTopLevel(): Situation {\n return {\n type: 'AT_ROOT',\n };\n}\n\nfunction resolveInFunction(): Situation {\n return {\n type: 'IN_FUNCTION',\n };\n}\n\nfunction resolveDurations(): Situation {\n return {\n type: 'IN_DURATION',\n };\n}\n\nfunction resolveLabelName(node: SyntaxNode, text: string, pos: number): Situation | null {\n let labelMatcherNode: SyntaxNode | null = node;\n\n // 如果节点是错误节点,尝试找到其父节点 UnquotedLabelMatcher\n if (node.type.isError) {\n const parent = node.parent;\n if (parent !== null && parent.type.id === UnquotedLabelMatcher) {\n labelMatcherNode = parent;\n } else {\n return null;\n }\n } else if (node.type.id === LabelName) {\n labelMatcherNode = walk(node, [['parent', UnquotedLabelMatcher]]);\n }\n\n if (labelMatcherNode === null || labelMatcherNode.type.id !== UnquotedLabelMatcher) {\n return null;\n }\n\n const labelNameNode = walk(labelMatcherNode, [['firstChild', LabelName]]);\n if (labelNameNode === null) {\n return null;\n }\n\n if (pos > labelNameNode.to) {\n return null;\n }\n\n const labelMatchersNode = walk(labelMatcherNode, [['parent', LabelMatchers]]);\n if (labelMatchersNode === null) {\n return null;\n }\n\n const currentLabelName = getNodeText(labelNameNode, text);\n const allLabels = getLabels(labelMatchersNode, text);\n const otherLabels = allLabels.filter((label) => label.name !== currentLabelName);\n const hasOperator = walk(labelNameNode, [['nextSibling', MatchOp]]) !== null;\n\n const metricNameNode = walk(labelMatchersNode, [\n ['parent', VectorSelector],\n ['firstChild', Identifier],\n ]);\n\n if (metricNameNode === null) {\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n otherLabels,\n hasOperator,\n };\n }\n\n const metricName = getNodeText(metricNameNode, text);\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n metricName,\n otherLabels,\n hasOperator,\n };\n}\n\nfunction resolveLabelKeysWithEquals(node: SyntaxNode, text: string, pos: number): Situation | null {\n // next false positive:\n // `something{a=\"1\"^}`\n const child = walk(node, [['firstChild', UnquotedLabelMatcher]]);\n if (child !== null) {\n // means the label-matching part contains at least one label already.\n //\n // in this case, we will need to have a `,` character at the end,\n // to be able to suggest adding the next label.\n // the area between the end-of-the-child-node and the cursor-pos\n // must contain a `,` in this case.\n const textToCheck = text.slice(child.to, pos);\n\n if (!textToCheck.includes(',')) {\n return null;\n }\n }\n\n const metricNameNode = walk(node, [\n ['parent', VectorSelector],\n ['firstChild', Identifier],\n ]);\n\n const otherLabels = getLabels(node, text);\n\n if (metricNameNode === null) {\n // we are probably in a situation without a metric name.\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n otherLabels,\n hasOperator: false,\n };\n }\n\n const metricName = getNodeText(metricNameNode, text);\n\n return {\n type: 'IN_LABEL_SELECTOR_NO_LABEL_NAME',\n metricName,\n otherLabels,\n hasOperator: false,\n };\n}\n\n// we find the first error-node in the tree that is at the cursor-position.\n// NOTE: this might be too slow, might need to optimize it\n// (ideas: we do not need to go into every subtree, based on from/to)\n// also, only go to places that are in the sub-tree of the node found\n// by default by lezer. problem is, `next()` will go upward too,\n// and we do not want to go higher than our node\nfunction getErrorNode(tree: Tree, pos: number): SyntaxNode | null {\n const cur = tree.cursorAt(pos);\n while (true) {\n if (cur.from === pos && cur.to === pos) {\n const { node } = cur;\n if (node.type.isError) {\n return node;\n }\n }\n\n if (!cur.next()) {\n break;\n }\n }\n return null;\n}\n\nexport function getSituation(text: string, pos: number): Situation | null {\n // there is a special-case when we are at the start of writing text,\n // so we handle that case first\n\n if (text === '') {\n return {\n type: 'EMPTY',\n };\n }\n\n /**\n PromQL\n Expr\n VectorSelector\n LabelMatchers\n */\n const tree = parser.parse(text);\n\n // if the tree contains error, it is very probable that\n // our node is one of those error-nodes.\n // also, if there are errors, the node lezer finds us,\n // might not be the best node.\n // so first we check if there is an error-node at the cursor-position\n const maybeErrorNode = getErrorNode(tree, pos);\n\n const cur = maybeErrorNode != null ? maybeErrorNode.cursor() : tree.cursorAt(pos);\n const currentNode = cur.node;\n\n const ids = [cur.type.id];\n // const names = [cur.type.name];\n while (cur.parent()) {\n ids.push(cur.type.id);\n // names.push(cur.type.name);\n }\n\n for (let resolver of RESOLVERS) {\n // i do not use a foreach because i want to stop as soon\n // as i find something\n if (isPathMatch(resolver.path, ids)) {\n return resolver.fun(currentNode, text, pos);\n }\n }\n\n return null;\n}\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined;\n}\n","// import UFuzzy from '@leeoniya/ufuzzy';\n\nimport { FUNCTIONS } from '../promql';\nimport { makeSelector, NeverCaseError } from '../util';\nimport type { DataProvider } from './DataProvider';\nimport type { Situation } from './situation';\nimport type { Label } from '../types';\n\nexport type CompletionType = 'HISTORY' | 'FUNCTION' | 'METRIC_NAME' | 'DURATION' | 'LABEL_NAME' | 'LABEL_VALUE';\n\ntype Completion = {\n type: CompletionType;\n label: string;\n insertText: string;\n detail?: string;\n documentation?: string;\n triggerOnInsert?: boolean;\n};\n\n// const metricNamesSearchClient = new UFuzzy({ intraMode: 1 });\n\n// we order items like: history, functions, metrics\nfunction getAllMetricNamesCompletions(dataProvider: DataProvider): Completion[] {\n let metricNames = dataProvider.getAllMetricNames();\n\n // if (metricNames.length > dataProvider.metricNamesSuggestionLimit) {\n // const { monacoSettings } = dataProvider;\n // monacoSettings.enableAutocompleteSuggestionsUpdate();\n\n // if (monacoSettings.inputInRange) {\n // metricNames =\n // metricNamesSearchClient\n // .filter(metricNames, monacoSettings.inputInRange)\n // ?.slice(0, dataProvider.metricNamesSuggestionLimit)\n // .map((idx) => metricNames[idx]) ?? [];\n // } else {\n // metricNames = metricNames.slice(0, dataProvider.metricNamesSuggestionLimit);\n // }\n // }\n\n return dataProvider.metricNamesToMetrics(metricNames).map((metric) => ({\n type: 'METRIC_NAME',\n label: metric.name,\n insertText: metric.name,\n detail: `${metric.name} : ${metric.type}`,\n documentation: metric.help,\n }));\n}\n\nconst FUNCTION_COMPLETIONS: Completion[] = FUNCTIONS.map((f) => ({\n type: 'FUNCTION',\n label: f.label,\n insertText: f.insertText ?? '', // i don't know what to do when this is nullish. it should not be.\n detail: f.detail,\n documentation: f.documentation,\n}));\n\nasync function getAllFunctionsAndMetricNamesCompletions(dataProvider: DataProvider): Promise<Completion[]> {\n const metricNames = getAllMetricNamesCompletions(dataProvider);\n\n return [...FUNCTION_COMPLETIONS, ...metricNames];\n}\n\nconst DURATION_COMPLETIONS: Completion[] = ['1m', '5m', '10m', '30m', '1h', '1d'].map((text) => ({\n type: 'DURATION',\n label: text,\n insertText: text,\n}));\n\nconst DURATION_VARIABLES_COMPLETIONS: Completion[] = ['$__interval', '$__range', '$__rate_interval'].map((text) => ({\n type: 'DURATION',\n label: text,\n insertText: text,\n}));\n\nfunction getAllHistoryCompletions(_dataProvider: DataProvider): Completion[] {\n return [];\n // function getAllHistoryCompletions(queryHistory: PromHistoryItem[]): Completion[] {\n // NOTE: the typescript types are wrong. historyItem.query.expr can be undefined\n // const allHistory = dataProvider.getHistory();\n // FIXME: find a better history-limit\n // return allHistory.slice(0, 10).map((expr) => ({\n // type: 'HISTORY',\n // label: expr,\n // insertText: expr,\n // }));\n}\n\nasync function getLabelNames(metric: string | undefined, otherLabels: Label[], dataProvider: DataProvider): Promise<string[]> {\n if (metric === undefined || metric === '') {\n const selector = makeSelector('', otherLabels);\n return await dataProvider.fetchLabels(selector);\n } else {\n const selector = makeSelector(metric, otherLabels);\n const series = await dataProvider.fetchSeries(selector);\n const labelNames = new Set<string>();\n for (const labelSet of series) {\n for (const [key] of Object.entries(labelSet)) {\n if (key === '__name__') {\n continue;\n }\n labelNames.add(key);\n }\n }\n return Array.from(labelNames);\n }\n}\n\nasync function getLabelNamesForCompletions(\n metric: string | undefined,\n suffix: string,\n triggerOnInsert: boolean,\n otherLabels: Label[],\n dataProvider: DataProvider,\n): Promise<Completion[]> {\n const labelNames = await getLabelNames(metric, otherLabels, dataProvider);\n return labelNames.map((text) => ({\n type: 'LABEL_NAME',\n label: text,\n insertText: `${text}${suffix}`,\n triggerOnInsert,\n }));\n}\n\nasync function getLabelNamesForSelectorCompletions(metric: string | undefined, hasOperator: boolean, otherLabels: Label[], dataProvider: DataProvider): Promise<Completion[]> {\n return getLabelNamesForCompletions(metric, hasOperator ? '' : '=', true, otherLabels, dataProvider);\n}\n\nasync function getLabelNamesForByCompletions(metric: string | undefined, otherLabels: Label[], dataProvider: DataProvider): Promise<Completion[]> {\n return getLabelNamesForCompletions(metric, '', false, otherLabels, dataProvider);\n}\n\nasync function getLabelValues(metric: string | undefined, labelName: string, otherLabels: Label[], dataProvider: DataProvider): Promise<string[]> {\n if (metric === undefined || metric === '') {\n const selector = makeSelector('', otherLabels);\n return await dataProvider.fetchLabelValues(labelName, selector);\n } else {\n const selector = makeSelector(metric, otherLabels, labelName);\n const series = await dataProvider.fetchSeries(selector);\n const labelValues = new Set<string>();\n for (const labelSet of series) {\n for (const [key, value] of Object.entries(labelSet)) {\n if (key === '__name__') {\n continue;\n }\n if (key === labelName && value) {\n labelValues.add(value);\n }\n }\n }\n const variablesNames = dataProvider.getVariablesNames();\n return variablesNames.concat(Array.from(labelValues));\n }\n}\n\nasync function getLabelValuesForMetricCompletions(\n metric: string | undefined,\n labelName: string,\n betweenQuotes: boolean,\n otherLabels: Label[],\n dataProvider: DataProvider,\n): Promise<Completion[]> {\n const values = await getLabelValues(metric, labelName, otherLabels, dataProvider);\n return values.map((text) => ({\n type: 'LABEL_VALUE',\n label: text,\n insertText: betweenQuotes ? text : `\"${text}\"`, // FIXME: escaping strange characters?\n }));\n}\n\nexport function getCompletions(situation: Situation, dataProvider: DataProvider): Promise<Completion[]> {\n switch (situation.type) {\n case 'IN_DURATION':\n if (dataProvider.durationVariablesCompletion) {\n return Promise.resolve(DURATION_VARIABLES_COMPLETIONS.concat(DURATION_COMPLETIONS));\n }\n return Promise.resolve(DURATION_COMPLETIONS);\n case 'IN_FUNCTION':\n return getAllFunctionsAndMetricNamesCompletions(dataProvider);\n case 'AT_ROOT': {\n return getAllFunctionsAndMetricNamesCompletions(dataProvider);\n }\n case 'EMPTY': {\n const metricNames = getAllMetricNamesCompletions(dataProvider);\n const historyCompletions = getAllHistoryCompletions(dataProvider);\n return Promise.resolve([...historyCompletions, ...FUNCTION_COMPLETIONS, ...metricNames]);\n }\n case 'IN_LABEL_SELECTOR_NO_LABEL_NAME':\n return getLabelNamesForSelectorCompletions(situation.metricName, situation.hasOperator, situation.otherLabels, dataProvider);\n case 'IN_GROUPING':\n return getLabelNamesForByCompletions(situation.metricName, situation.otherLabels, dataProvider);\n case 'IN_LABEL_SELECTOR_WITH_LABEL_NAME':\n return getLabelValuesForMetricCompletions(situation.metricName, situation.labelName, situation.betweenQuotes, situation.otherLabels, dataProvider);\n default:\n throw new NeverCaseError(situation);\n }\n}\n","import type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\n\nimport { NeverCaseError } from '../util';\nimport { DataProvider } from './DataProvider';\nimport { getSituation } from './situation';\nimport { getCompletions } from './completions';\n\nexport type { monacoTypes };\nexport type Monaco = typeof monacoTypes;\nexport type CompletionType = 'HISTORY' | 'FUNCTION' | 'METRIC_NAME' | 'DURATION' | 'LABEL_NAME' | 'LABEL_VALUE';\n\nfunction getMonacoCompletionItemKind(type: CompletionType, monaco: Monaco): monacoTypes.languages.CompletionItemKind {\n switch (type) {\n case 'DURATION':\n return monaco.languages.CompletionItemKind.Unit;\n case 'FUNCTION':\n return monaco.languages.CompletionItemKind.Variable;\n case 'HISTORY':\n return monaco.languages.CompletionItemKind.Snippet;\n case 'LABEL_NAME':\n return monaco.languages.CompletionItemKind.Enum;\n case 'LABEL_VALUE':\n return monaco.languages.CompletionItemKind.EnumMember;\n case 'METRIC_NAME':\n return monaco.languages.CompletionItemKind.Constructor;\n default:\n throw new NeverCaseError(type);\n }\n}\n\nexport function getCompletionProvider(monaco: Monaco, dataProvider: DataProvider): monacoTypes.languages.CompletionItemProvider {\n const provideCompletionItems = (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n ): monacoTypes.languages.ProviderResult<monacoTypes.languages.CompletionList> => {\n const word = model.getWordAtPosition(position);\n const range =\n word != null\n ? monaco.Range.lift({\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n })\n : monaco.Range.fromPositions(position);\n // documentation says `position` will be \"adjusted\" in `getOffsetAt`\n // i don't know what that means, to be sure i clone it\n\n const positionClone = {\n column: position.column,\n lineNumber: position.lineNumber,\n };\n dataProvider.monacoSettings.setInputInRange(model.getValueInRange(range));\n\n // Check to see if the browser supports window.getSelection()\n if (window.getSelection) {\n const selectedText = window.getSelection()?.toString();\n // If the user has selected text, adjust the cursor position to be at the start of the selection, instead of the end\n if (selectedText && selectedText.length > 0) {\n positionClone.column = positionClone.column - selectedText.length;\n }\n }\n\n const offset = model.getOffsetAt(positionClone);\n const situation = getSituation(model.getValue(), offset);\n const completionsPromise = situation != null ? getCompletions(situation, dataProvider) : Promise.resolve([]);\n\n return completionsPromise.then((items) => {\n // monaco by-default alphabetically orders the items.\n // to stop it, we use a number-as-string sortkey,\n // so that monaco keeps the order we use\n const maxIndexDigits = items.length.toString().length;\n const suggestions: monacoTypes.languages.CompletionItem[] = items.map((item, index) => ({\n kind: getMonacoCompletionItemKind(item.type, monaco),\n label: item.label,\n insertText: item.insertText,\n detail: item.detail,\n documentation: item.documentation,\n sortText: index.toString().padStart(maxIndexDigits, '0'), // to force the order we have\n range,\n command: item.triggerOnInsert\n ? {\n id: 'editor.action.triggerSuggest',\n title: '',\n }\n : undefined,\n }));\n return { suggestions, incomplete: dataProvider.monacoSettings.suggestionsIncomplete };\n });\n };\n\n return {\n triggerCharacters: ['{', ',', '[', '(', '=', '~', ' ', '\"'],\n provideCompletionItems,\n };\n}\n","import { SyntaxNode } from '@lezer/common';\nimport { LRParser } from '@lezer/lr';\n\nexport const ErrorId = 0;\n\ninterface ParserErrorBoundary {\n startLineNumber: number;\n startColumn: number;\n endLineNumber: number;\n endColumn: number;\n error: string;\n}\n\ninterface ParseError {\n text: string;\n node: SyntaxNode;\n}\n\nexport function validateQuery(query: string, interpolatedQuery: string, queryLines: string[], parser: LRParser): ParserErrorBoundary[] | false {\n if (!query) {\n return false;\n }\n\n const interpolatedErrors: ParseError[] = parseQuery(interpolatedQuery, parser);\n if (!interpolatedErrors.length) {\n return false;\n }\n\n let parseErrors: ParseError[] = interpolatedErrors;\n if (query !== interpolatedQuery) {\n const queryErrors: ParseError[] = parseQuery(query, parser);\n parseErrors = interpolatedErrors.flatMap((interpolatedError) => queryErrors.filter((queryError) => interpolatedError.text === queryError.text) || interpolatedError);\n }\n\n return parseErrors.map((parseError) => findErrorBoundary(query, queryLines, parseError)).filter(isErrorBoundary);\n}\n\nfunction parseQuery(query: string, parser: LRParser) {\n const parseErrors: ParseError[] = [];\n const tree = parser.parse(query);\n tree.iterate({\n enter: (nodeRef): false | void => {\n if (nodeRef.type.id === ErrorId) {\n const node = nodeRef.node;\n parseErrors.push({\n node: node,\n text: query.substring(node.from, node.to),\n });\n }\n },\n });\n return parseErrors;\n}\n\nfunction findErrorBoundary(query: string, queryLines: string[], parseError: ParseError): ParserErrorBoundary | null {\n if (queryLines.length === 1) {\n const isEmptyString = parseError.node.from === parseError.node.to;\n const errorNode = isEmptyString && parseError.node.parent ? parseError.node.parent : parseError.node;\n const error = isEmptyString ? query.substring(errorNode.from, errorNode.to) : parseError.text;\n return {\n startLineNumber: 1,\n startColumn: errorNode.from + 1,\n endLineNumber: 1,\n endColumn: errorNode.to + 1,\n error,\n };\n }\n\n let startPos = 0,\n endPos = 0;\n for (let line = 0; line < queryLines.length; line++) {\n endPos = startPos + queryLines[line].length;\n\n if (parseError.node.from > endPos) {\n startPos += queryLines[line].length + 1;\n continue;\n }\n\n return {\n startLineNumber: line + 1,\n startColumn: parseError.node.from - startPos + 1,\n endLineNumber: line + 1,\n endColumn: parseError.node.to - startPos + 1,\n error: parseError.text,\n };\n }\n\n return null;\n}\n\nfunction isErrorBoundary(boundary: ParserErrorBoundary | null): boundary is ParserErrorBoundary {\n return boundary !== null;\n}\n","import React, { useEffect, useRef } from 'react';\nimport MonacoEditor from 'react-monaco-editor';\nimport * as monaco from 'monaco-editor';\nimport { promLanguageDefinition } from 'monaco-promql';\nimport type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { parser } from '@fc-components/lezer-metricsql';\nimport { v4 as uuidv4 } from 'uuid';\nimport { css } from '@emotion/css';\n\nimport { language, languageConfiguration } from './promql';\nimport { DataProvider } from './completion/DataProvider';\nimport { getCompletionProvider } from './completion/getCompletionProvider';\nimport type { DataProviderParams } from './types';\nimport { validateQuery } from './validation';\n\ninterface PromQLEditorProps {\n className?: string;\n size?: 'small' | 'middle' | 'large';\n theme?: 'light' | 'dark';\n value?: string;\n placeholder?: string;\n enableAutocomplete?: boolean;\n durationVariablesCompletion?: boolean;\n // When false, DataProvider will not send network requests. Default: true\n enableRequests?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n interpolateString?: (query: string) => string;\n onChange?: (value: string) => void;\n onEnter?: (value: string) => void;\n onBlur?: (value: string) => void;\n editorDidMount?: (editor: monacoTypes.editor.IStandaloneCodeEditor) => void;\n debugEscKey?: boolean;\n}\n\nconst PROMQL_LANG_ID = promLanguageDefinition.id;\nconst SIZE_MAP: Record<\n string,\n {\n className: string;\n top: number;\n bottom: number;\n }\n> = {\n small: {\n className: 'ant-input-sm',\n top: 1,\n bottom: 1,\n },\n middle: {\n className: 'ant-input-md',\n top: 1,\n bottom: 1,\n },\n large: {\n className: 'ant-input-lg',\n top: 3,\n bottom: 2,\n },\n};\nconst themeMap: Record<string, string> = {\n light: 'n9e-light',\n dark: 'n9e-dark',\n};\n\nconst containerDisabledClassName = css`\n .monaco-editor {\n user-select: none;\n pointer-events: none;\n }\n`;\n\nconst containerReadOnlyClassName = css`\n .monaco-editor .cursors-layer > .cursor {\n opacity: 0 !important; /* 完全透明 */\n }\n`;\n\nconst getStyles = (placeholder?: string) => {\n return {\n placeholder: css({\n '::after': {\n content: `'${placeholder}'`,\n opacity: 0.6,\n },\n }),\n };\n};\n\nexport default function PromQLEditor(props: PromQLEditorProps & DataProviderParams) {\n const id = uuidv4();\n const {\n className,\n size = 'middle',\n theme = 'light',\n value,\n placeholder,\n interpolateString,\n enableAutocomplete = true,\n enableRequests = true,\n readOnly = false,\n disabled = false,\n onChange,\n onEnter,\n onBlur,\n editorDidMount,\n debugEscKey = false,\n } = props;\n const autocompleteDisposeFun = useRef<(() => void) | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const dataProviderRef = useRef<DataProvider | null>(null);\n const editorRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const previousContentRef = useRef<string>('');\n const lastDeletionTriggerTimeRef = useRef<number>(0);\n const styles = getStyles(placeholder);\n const handleEditorDidMount = (editor: monacoTypes.editor.IStandaloneCodeEditor) => {\n editorRef.current = editor;\n\n monaco.editor.defineTheme('n9e-light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n monaco.editor.defineTheme('n9e-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n const isEditorFocused = editor.createContextKey<boolean>('isEditorFocused' + id, false);\n // we setup on-blur\n editor.onDidBlurEditorWidget(() => {\n isEditorFocused.set(false);\n onBlur?.(editor.getValue());\n // reset the selection to the current position\n const position = editor.getPosition();\n if (position) {\n const newSelection = new monaco.Selection(position.lineNumber, position.column, position.lineNumber, position.column);\n editor.setSelection(newSelection);\n }\n });\n\n editor.onDidFocusEditorText(() => {\n isEditorFocused.set(true);\n });\n\n // set the height of the editor container\n const updateElementHeight = () => {\n const containerDiv = containerRef.current;\n if (containerDiv !== null) {\n const pixelHeight = editor.getContentHeight();\n containerDiv.style.height = `${pixelHeight}px`;\n containerDiv.style.width = '100%';\n const pixelWidth = containerDiv.clientWidth;\n editor.layout({ width: pixelWidth, height: pixelHeight });\n }\n };\n\n editor.onDidContentSizeChange(updateElementHeight);\n updateElementHeight();\n\n // Fixes Monaco capturing the search key binding and displaying a useless search box within the Editor.\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n command: null,\n });\n\n // 设置 Shift + Enter 为在光标位置换行\n editor.addCommand(\n monaco.KeyMod.Shift | monaco.KeyCode.Enter,\n () => {\n // 在光标位置插入换行符\n const position = editor.getPosition();\n if (position) {\n editor.executeEdits('shift-enter', [\n {\n range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: '\\n',\n },\n ]);\n // 将光标移动到新行\n editor.setPosition({\n lineNumber: position.lineNumber + 1,\n column: 1,\n });\n }\n },\n 'isEditorFocused' + id,\n );\n\n // 完全阻止 Enter 键的默认行为(包括换行)\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyCode.Enter,\n command: '-',\n when: '!suggestWidgetVisible',\n });\n\n // handle: enter - 只有在没有建议窗口时才执行自定义行为\n editor.addCommand(\n monaco.KeyCode.Enter,\n () => {\n onEnter?.(editor.getValue());\n },\n '!suggestWidgetVisible && isEditorFocused' + id,\n );\n\n editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n if (debugEscKey) {\n const suggestWidgetVisible = (editor as any)?._contextKeyService?.getContextKeyValue?.('suggestWidgetVisible');\n // eslint-disable-next-line no-console\n console.log('[PromQLEditor][ESC]', {\n suggestWidgetVisible,\n valueLength: editor.getValue().length,\n });\n }\n editor.trigger('keyboard', 'hideSuggestWidget', {});\n },\n 'suggestWidgetVisible && isEditorFocused' + id,\n );\n\n // Initialize previous content tracking\n previousContentRef.current = editor.getValue();\n lastDeletionTriggerTimeRef.current = 0;\n const DELETION_TRIGGER_DEBOUNCE_MS = 1000;\n\n editor.onDidChangeModelContent(() => {\n const model = editor.getModel();\n if (model) {\n const query = model.getValue();\n const errors = validateQuery(query, interpolateString ? interpolateString(query) : query, model.getLinesContent(), parser) || [];\n const markers = errors.map(({ error, ...boundary }) => ({\n message: `${error ? `Error parsing \"${error}\"` : 'Parse error'}. The query appears to be incorrect and could fail to be executed.`,\n severity: monaco.MarkerSeverity.Error,\n ...boundary,\n }));\n\n monaco.editor.setModelMarkers(model, 'owner', markers);\n\n // Detect deletion and trigger completion\n const previousContent = previousContentRef.current;\n const isDeletion = query.length < previousContent.length;\n\n if (isDeletion && enableAutocomplete) {\n const now = Date.now();\n if (now - lastDeletionTriggerTimeRef.current >= DELETION_TRIGGER_DEBOUNCE_MS) {\n lastDeletionTriggerTimeRef.current = now;\n // Trigger completion after deletion\n setTimeout(() => {\n editor.trigger('keyboard', 'editor.action.triggerSuggest', {});\n }, 0);\n }\n }\n\n previousContentRef.current = query;\n }\n });\n\n editorDidMount?.(editor);\n };\n\n useEffect(() => {\n // 注册 PromQL 语言\n const { aliases, extensions, mimetypes } = promLanguageDefinition;\n monaco.languages.register({\n id: PROMQL_LANG_ID,\n aliases,\n extensions,\n mimetypes,\n });\n\n // 设置语法高亮\n monaco.languages.setMonarchTokensProvider(PROMQL_LANG_ID, language as any);\n\n // 设置语言配置\n monaco.languages.setLanguageConfiguration(PROMQL_LANG_ID, languageConfiguration as any);\n\n return () => {\n autocompleteDisposeFun.current?.();\n dataProviderRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // clean up previous autocomplete provider\n if (autocompleteDisposeFun.current) {\n autocompleteDisposeFun.current();\n autocompleteDisposeFun.current = null;\n }\n dataProviderRef.current = null;\n\n // If autocomplete is enabled, set up a new autocomplete provider\n if (enableAutocomplete) {\n const dataProvider = new DataProvider({\n url: props.url,\n lookbackInterval: props.lookbackInterval,\n variablesNames: props.variablesNames,\n durationVariablesCompletion: props.durationVariablesCompletion,\n request: props.request,\n httpMethod: props.httpMethod,\n apiPrefix: props.apiPrefix,\n httpErrorHandler: props.httpErrorHandler,\n enableRequests: enableRequests,\n });\n dataProviderRef.current = dataProvider;\n dataProvider.start();\n\n const completionProvider = getCompletionProvider(monaco, dataProvider);\n\n const filteringCompletionProvider: monacoTypes.languages.CompletionItemProvider = {\n ...completionProvider,\n provideCompletionItems: (model, position, context, token) => {\n if (editor.getModel()?.id !== model.id) {\n return { suggestions: [] };\n }\n return completionProvider.provideCompletionItems(model, position, context, token);\n },\n };\n\n const { dispose } = monaco.languages.registerCompletionItemProvider(PROMQL_LANG_ID, filteringCompletionProvider);\n autocompleteDisposeFun.current = dispose;\n }\n\n // clean up previous placeholder decorations\n const model = editor.getModel();\n if (model) {\n model.deltaDecorations(\n model.getAllDecorations().map((d) => d.id),\n [],\n );\n }\n\n if (placeholder) {\n const placeholderDecorators = [\n {\n range: new monaco.Range(1, 1, 1, 1),\n options: {\n className: styles.placeholder,\n isWholeLine: true,\n },\n },\n ];\n\n let decorators: string[] = [];\n\n const checkDecorators: () => void = () => {\n const model = editor.getModel();\n\n if (!model) {\n return;\n }\n\n const newDecorators = model.getValueLength() === 0 ? placeholderDecorators : [];\n decorators = model.deltaDecorations(decorators, newDecorators);\n };\n\n checkDecorators();\n editor.onDidChangeModelContent(checkDecorators);\n }\n }, [\n enableAutocomplete,\n props.url,\n props.lookbackInterval,\n JSON.stringify(props.variablesNames),\n props.durationVariablesCompletion,\n props.httpMethod,\n props.apiPrefix,\n placeholder,\n enableRequests,\n ]);\n\n return (\n <div\n className={\n 'ant-input' +\n (size ? ` ${SIZE_MAP[size].className}` : '') +\n (disabled ? ` ant-input-disabled ${containerDisabledClassName}` : '') +\n (readOnly ? ` ${containerReadOnlyClassName}` : '') +\n (className ? ` ${className}` : '')\n }\n >\n <div ref={containerRef}>\n <MonacoEditor\n width='100%'\n height='100%'\n language='promql'\n theme={themeMap[theme]}\n value={value}\n onChange={onChange}\n editorDidMount={handleEditorDidMount}\n options={{\n readOnly,\n codeLens: false,\n contextmenu: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontSize: 12,\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n minimap: { enabled: false },\n overviewRulerBorder: false,\n overviewRulerLanes: 0,\n padding: {\n top: SIZE_MAP[size].top,\n bottom: SIZE_MAP[size].bottom,\n },\n renderLineHighlight: 'none',\n scrollbar: {\n vertical: 'hidden',\n verticalScrollbarSize: 8,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n suggest: {\n showWords: false,\n // 防止补全层自动关闭的关键配置\n filterGraceful: false, // 禁用优雅过滤,避免在输入时关闭补全\n snippetsPreventQuickSuggestions: false, // 允许在代码片段后继续显示补全\n shareSuggestSelections: false, // 不共享选择状态,避免意外关闭\n },\n suggestFontSize: 12,\n wordWrap: 'on',\n automaticLayout: true,\n occurrencesHighlight: 'off', // Disable word highlighting\n }}\n />\n </div>\n </div>\n );\n}\n","export const languageConfiguration = {\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n comments: {\n lineComment: '#',\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n folding: {\n offSide: true,\n },\n};\n\n// YAML keywords\nconst keywords = ['true', 'false', 'null', 'True', 'False', 'Null', 'TRUE', 'FALSE', 'NULL', 'yes', 'no', 'Yes', 'No', 'YES', 'NO', 'on', 'off', 'On', 'Off', 'ON', 'OFF'];\n\n// YAML operators and special characters (for future use)\n// const operators = [':', '-', '|', '>', '&', '*', '!', '%', '@'];\n\nexport const language = {\n tokenPostfix: '.yaml',\n brackets: [\n { token: 'delimiter.bracket', open: '{', close: '}' },\n { token: 'delimiter.square', open: '[', close: ']' },\n ],\n keywords: keywords,\n numberInteger: /(?:0|[+-]?[0-9]+)/,\n numberFloat: /(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,\n numberOctal: /0o[0-7]+/,\n numberHex: /0x[0-9a-fA-F]+/,\n numberInfinity: /[+-]?\\.(?:inf|Inf|INF)/,\n numberNaN: /\\.(?:nan|Nan|NAN)/,\n numberDate: /\\d{4}-\\d{2}-\\d{2}(?:[Tt ]\\d{1,2}:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \\t]*(?:Z|[-+]\\d{1,2}(?::\\d{2})?))?)?/,\n escapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n tokenizer: {\n root: [\n { include: '@whitespace' },\n { include: '@comment' },\n\n // Document markers\n [/^---/, 'meta.document'],\n [/^\\.{3}/, 'meta.document'],\n\n // Keys (property names)\n [/^(\\s*)([^:\\s]+)(\\s*)(:)/, ['white', 'key', 'white', 'delimiter']],\n [/(\\s*)([^:\\s]+)(\\s*)(:)/, ['white', 'key', 'white', 'delimiter']],\n\n // Flow collections\n [/\\{/, '@brackets', '@flowMap'],\n [/\\[/, '@brackets', '@flowSequence'],\n\n // Block scalars\n [/[|>][-+]?(\\d+)?/, 'string.block', '@blockScalar'],\n\n // Numbers\n [/@numberInfinity/, 'number.infinity'],\n [/@numberNaN/, 'number.nan'],\n [/@numberDate/, 'number.date'],\n [/@numberHex/, 'number.hex'],\n [/@numberOctal/, 'number.octal'],\n [/@numberFloat/, 'number.float'],\n [/@numberInteger/, 'number'],\n\n // Strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n [/\"/, 'string', '@doubleQuotedString'],\n [/'/, 'string', '@singleQuotedString'],\n\n // Anchors and aliases\n [/&\\w+/, 'tag.anchor'],\n [/\\*\\w+/, 'tag.alias'],\n\n // Tags\n [/![\\w\\-\\/]+/, 'tag'],\n\n // Keywords\n [\n /[^\\s\\[\\{\\,]+/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'string.unquoted',\n },\n },\n ],\n\n // List items\n [/^(\\s*)(-\\s)/, ['white', 'delimiter']],\n [/(\\s*)(-\\s)/, ['white', 'delimiter']],\n ],\n\n whitespace: [[/[ \\t\\r\\n]+/, 'white']],\n\n comment: [[/#.*$/, 'comment']],\n\n doubleQuotedString: [\n [/[^\\\\\"]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, 'string', '@pop'],\n ],\n\n singleQuotedString: [\n [/[^\\\\']+/, 'string'],\n [/''/, 'string.escape'],\n [/'/, 'string', '@pop'],\n ],\n\n blockScalar: [\n [/^(\\s*).+$/, 'string.block'],\n [/^(?!\\s)/, '', '@pop'],\n ],\n\n flowMap: [\n { include: '@whitespace' },\n { include: '@comment' },\n [/\\}/, '@brackets', '@pop'],\n [/,/, 'delimiter'],\n [/:/, 'delimiter'],\n [/\"/, 'string', '@doubleQuotedString'],\n [/'/, 'string', '@singleQuotedString'],\n [/[^\\s\\,\\}\\:]+/, 'string.unquoted'],\n ],\n\n flowSequence: [\n { include: '@whitespace' },\n { include: '@comment' },\n [/\\]/, '@brackets', '@pop'],\n [/,/, 'delimiter'],\n [/\"/, 'string', '@doubleQuotedString'],\n [/'/, 'string', '@singleQuotedString'],\n [/[^\\s\\,\\]]+/, 'string.unquoted'],\n ],\n },\n};\n","import type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { YamlCompletionItem, YamlCompletionType, YamlEditorSchema } from '../types';\n\nexport type Monaco = typeof monacoTypes;\n\nfunction getMonacoCompletionItemKind(type: YamlCompletionType, monaco: Monaco): monacoTypes.languages.CompletionItemKind {\n switch (type) {\n case 'KEYWORD':\n return monaco.languages.CompletionItemKind.Keyword;\n case 'VALUE':\n return monaco.languages.CompletionItemKind.Value;\n case 'KEY':\n return monaco.languages.CompletionItemKind.Property;\n case 'BOOLEAN':\n return monaco.languages.CompletionItemKind.Constant;\n case 'NUMBER':\n return monaco.languages.CompletionItemKind.Value;\n case 'STRING':\n return monaco.languages.CompletionItemKind.Text;\n default:\n return monaco.languages.CompletionItemKind.Text;\n }\n}\n\nexport function getYamlCompletionProvider(monaco: Monaco, schemas: YamlEditorSchema[] = []): monacoTypes.languages.CompletionItemProvider {\n // 更准确的位置分析\n const analyzePosition = (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position) => {\n const line = model.getLineContent(position.lineNumber);\n const column = position.column;\n const beforeCursor = line.substring(0, column - 1);\n const trimmedLine = line.trim();\n\n // 检查是否在值位置\n const colonIndex = beforeCursor.indexOf(':');\n const isAfterColon = colonIndex !== -1;\n\n // 如果在冒号后面,检查是否是值位置\n let isInValuePosition = false;\n let currentKey = null;\n\n if (isAfterColon) {\n let keyPart = beforeCursor.substring(0, colonIndex).trim();\n // 如果键名以 - 开头(数组项),去掉 - 和后面的空格\n if (keyPart.startsWith('- ')) {\n keyPart = keyPart.substring(2).trim();\n } else if (keyPart === '-') {\n // 如果只有一个 -,说明键名在下一个词\n keyPart = '';\n }\n currentKey = keyPart;\n // 检查冒号后面是否有空格或者光标紧跟在冒号后面\n const afterColon = beforeCursor.substring(colonIndex + 1);\n isInValuePosition = afterColon.length === 0 || /^\\s+$/.test(afterColon);\n }\n\n // 检查是否已经有完整的值\n const hasCompleteValue = trimmedLine.includes(':') && !trimmedLine.endsWith(':') && trimmedLine.split(':')[1].trim().length > 0;\n\n return {\n isInKeyPosition: !isAfterColon || trimmedLine.endsWith(':'),\n isInValuePosition: isInValuePosition && !hasCompleteValue,\n isAtEndOfCompletedValue: hasCompleteValue,\n currentKey,\n line: trimmedLine,\n beforeCursor,\n afterCursor: line.substring(column - 1),\n };\n }; // 从 schemas 中提取某个键的枚举值\n const getEnumValuesFromSchemas = (keyName: string, path: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n\n for (const schemaItem of schemas) {\n const enumValues = extractEnumValues(schemaItem.schema, keyName, path);\n completions.push(...enumValues);\n }\n\n return completions;\n };\n\n // 递归提取 schema 中的枚举值\n const extractEnumValues = (schema: any, targetKey: string, currentPath: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n\n if (!schema || !schema.properties) {\n return completions;\n }\n\n // 如果路径为空,直接在当前层级查找\n if (currentPath.length === 0) {\n const prop = schema.properties[targetKey];\n if (prop && prop.enum) {\n return createEnumCompletions(prop);\n }\n return completions;\n }\n\n // 按路径导航到目标位置\n let currentSchema = schema;\n for (const pathSegment of currentPath) {\n if (currentSchema.properties && currentSchema.properties[pathSegment]) {\n currentSchema = currentSchema.properties[pathSegment];\n // 如果是数组类型,使用 items 的 schema\n if (currentSchema.type === 'array' && currentSchema.items) {\n currentSchema = currentSchema.items;\n }\n } else {\n // 路径不存在,返回空\n return completions;\n }\n }\n\n // 在目标位置查找枚举值\n if (currentSchema.properties && currentSchema.properties[targetKey]) {\n const prop = currentSchema.properties[targetKey];\n if (prop.enum) {\n return createEnumCompletions(prop);\n }\n }\n\n return completions;\n };\n\n // 创建枚举值补全项,支持 enumDescriptions 描述\n const createEnumCompletions = (prop: any): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n\n if (!prop.enum) {\n return completions;\n }\n\n prop.enum.forEach((enumValue: string, index: number) => {\n let description = prop.description || `Enum value: ${enumValue}`;\n\n // 如果有 enumDescriptions 数组,使用对应索引的描述\n if (prop.enumDescriptions && prop.enumDescriptions[index]) {\n description = prop.enumDescriptions[index];\n }\n\n completions.push({\n label: enumValue,\n insertText: enumValue,\n detail: description,\n documentation: description,\n type: 'VALUE',\n });\n });\n\n return completions;\n };\n\n // 从 schemas 中提取可用的键名\n const getKeyCompletionsFromSchemas = (path: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n const addedKeys = new Set<string>(); // 避免重复\n\n for (const schemaItem of schemas) {\n const keyCompletions = extractKeyCompletions(schemaItem.schema, path);\n for (const completion of keyCompletions) {\n if (!addedKeys.has(completion.label)) {\n addedKeys.add(completion.label);\n completions.push(completion);\n }\n }\n }\n\n return completions;\n };\n\n // 递归提取 schema 中的键名\n const extractKeyCompletions = (schema: any, targetPath: string[] = []): YamlCompletionItem[] => {\n const completions: YamlCompletionItem[] = [];\n let currentSchema = schema;\n\n // 导航到目标路径\n for (const pathSegment of targetPath) {\n if (currentSchema.properties && currentSchema.properties[pathSegment]) {\n currentSchema = currentSchema.properties[pathSegment];\n if (currentSchema.type === 'array' && currentSchema.items) {\n currentSchema = currentSchema.items;\n }\n } else {\n return completions; // 路径不存在\n }\n }\n\n // 获取当前层级的属性\n if (currentSchema.properties) {\n for (const [key, property] of Object.entries(currentSchema.properties)) {\n const prop = property as any;\n let insertText = `${key}: `;\n let shouldTriggerOnInsert = false;\n\n // 根据属性类型调整插入文本和是否触发补全\n if (prop.type === 'object') {\n insertText = `${key}:\\n `;\n shouldTriggerOnInsert = true; // 对象类型需要触发键补全\n } else if (prop.type === 'array') {\n insertText = `${key}:\\n - `;\n shouldTriggerOnInsert = true; // 数组类型需要触发补全\n } else if (prop.enum && prop.enum.length > 0) {\n // 有枚举值的字段需要触发值补全\n shouldTriggerOnInsert = true;\n } else if (prop.type === 'boolean') {\n // 布尔类型需要触发 true/false 补全\n shouldTriggerOnInsert = true;\n } else if (prop.type === 'number') {\n // 数字类型需要触发数字补全\n shouldTriggerOnInsert = true;\n }\n // 对于普通字符串字段,不触发补全\n\n completions.push({\n label: key,\n insertText,\n detail: prop.description || `Property: ${key}`,\n documentation: prop.description,\n type: 'KEY',\n triggerOnInsert: shouldTriggerOnInsert,\n });\n }\n }\n\n return completions;\n };\n\n const getFieldType = (keyName: string, path: string[] = []): string | null => {\n for (const schemaItem of schemas) {\n const fieldType = extractFieldType(schemaItem.schema, keyName, path);\n if (fieldType) {\n return fieldType;\n }\n }\n return null;\n };\n\n const extractFieldType = (schema: any, targetKey: string, currentPath: string[] = []): string | null => {\n if (!schema || !schema.properties) {\n return null;\n }\n\n // 如果路径为空,直接在当前层级查找\n if (currentPath.length === 0) {\n const prop = schema.properties[targetKey];\n return prop ? prop.type : null;\n }\n\n // 按路径导航到目标位置\n let currentSchema = schema;\n for (const pathSegment of currentPath) {\n if (currentSchema.properties && currentSchema.properties[pathSegment]) {\n currentSchema = currentSchema.properties[pathSegment];\n // 如果是数组类型,使用 items 的 schema\n if (currentSchema.type === 'array' && currentSchema.items) {\n currentSchema = currentSchema.items;\n }\n } else {\n // 路径不存在,返回空\n return null;\n }\n }\n\n // 在目标位置查找字段类型\n if (currentSchema.properties && currentSchema.properties[targetKey]) {\n const prop = currentSchema.properties[targetKey];\n return prop.type;\n }\n\n return null;\n };\n\n const getCompletions = (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position): YamlCompletionItem[] => {\n const wordInfo = model.getWordAtPosition(position);\n const word = wordInfo ? wordInfo.word : '';\n\n // 使用新的位置分析\n const positionInfo = analyzePosition(model, position);\n const currentPath = getCurrentPath(model, position);\n\n const completions: YamlCompletionItem[] = [];\n\n // 如果已经有完整的值,不提供任何补全\n if (positionInfo.isAtEndOfCompletedValue) {\n return [];\n }\n\n // 如果在值位置,提供值的补全\n if (positionInfo.isInValuePosition && positionInfo.currentKey) {\n // 查找枚举值补全\n const enumCompletions = getEnumValuesFromSchemas(positionInfo.currentKey, currentPath);\n\n if (enumCompletions.length > 0) {\n // 如果有枚举值,只返回枚举值\n completions.push(...enumCompletions);\n } else {\n // 如果没有枚举值,检查字段类型\n const fieldType = getFieldType(positionInfo.currentKey, currentPath);\n\n if (fieldType === 'boolean') {\n // 只为布尔类型提供 true/false\n completions.push(\n {\n label: 'true',\n insertText: 'true',\n detail: 'Boolean true value',\n type: 'BOOLEAN',\n },\n {\n label: 'false',\n insertText: 'false',\n detail: 'Boolean false value',\n type: 'BOOLEAN',\n },\n );\n } else if (fieldType === 'number') {\n // 为数字类型提供基本示例\n completions.push({\n label: '0',\n insertText: '0',\n detail: 'Number value',\n type: 'NUMBER',\n });\n }\n // 对于 string 类型或其他类型,不提供任何补全\n }\n }\n // 如果在键位置且不在值位置,提供键的补全\n else if (positionInfo.isInKeyPosition && !positionInfo.isInValuePosition) {\n // 从 schemas 中获取键补全\n const schemaKeyCompletions = getKeyCompletionsFromSchemas(currentPath);\n completions.push(...schemaKeyCompletions);\n }\n\n // 过滤匹配的项目\n const filtered = completions.filter((item) => !word || item.label.toLowerCase().includes(word.toLowerCase()));\n\n return filtered;\n };\n\n const getCurrentPath = (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position): string[] => {\n const path: string[] = [];\n const lines = model.getLinesContent();\n const currentLineNumber = position.lineNumber - 1; // Monaco uses 1-based line numbers\n\n if (currentLineNumber >= lines.length) {\n return path;\n }\n\n const currentLine = lines[currentLineNumber];\n const currentIndent = getIndentLevel(currentLine);\n\n // 从当前行开始向上查找父级键\n let targetIndent = currentIndent;\n\n for (let i = currentLineNumber; i >= 0; i--) {\n const line = lines[i];\n const lineIndent = getIndentLevel(line);\n const trimmed = line.trim();\n\n // 跳过空行和注释\n if (!trimmed || trimmed.startsWith('#')) {\n continue;\n }\n\n // 如果缩进小于目标缩进\n if (lineIndent < targetIndent) {\n // 检查是否是数组项(以 - 开头)\n if (trimmed.startsWith('-')) {\n // 数组项不添加到路径中,只更新缩进继续查找\n targetIndent = lineIndent;\n continue;\n }\n\n // 如果包含冒号,这是一个父级键\n if (trimmed.includes(':')) {\n const key = trimmed.split(':')[0].trim();\n if (key) {\n path.unshift(key);\n targetIndent = lineIndent; // 更新目标缩进,继续向上查找\n }\n }\n }\n }\n\n return path;\n };\n\n const getIndentLevel = (line: string): number => {\n return line.length - line.trimLeft().length;\n };\n\n const provideCompletionItems = (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n ): monacoTypes.languages.ProviderResult<monacoTypes.languages.CompletionList> => {\n const word = model.getWordAtPosition(position);\n const range =\n word != null\n ? monaco.Range.lift({\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n })\n : monaco.Range.fromPositions(position);\n\n const items = getCompletions(model, position);\n\n const suggestions: monacoTypes.languages.CompletionItem[] = items.map((item, index) => ({\n kind: getMonacoCompletionItemKind(item.type, monaco),\n label: item.label,\n insertText: item.insertText,\n detail: item.detail,\n documentation: item.documentation,\n sortText: index.toString().padStart(3, '0'),\n range,\n command: item.triggerOnInsert\n ? {\n id: 'editor.action.triggerSuggest',\n title: '',\n }\n : undefined,\n }));\n\n return { suggestions };\n };\n\n return {\n triggerCharacters: [':', ' ', '-', '\\n', '\\t'],\n provideCompletionItems,\n };\n}\n","import { YamlValidationError, YamlEditorSchema } from './types';\n\nexport function validateYaml(content: string, schemas: YamlEditorSchema[] = []): YamlValidationError[] {\n const errors: YamlValidationError[] = [];\n\n if (!content.trim()) {\n return errors;\n }\n\n try {\n // 基础 YAML 语法验证\n const lines = content.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNumber = i + 1;\n\n // 检查缩进一致性\n if (line.trim() && !isValidIndentation(line)) {\n errors.push({\n message: 'Invalid indentation. YAML requires consistent indentation.',\n startLineNumber: lineNumber,\n endLineNumber: lineNumber,\n startColumn: 1,\n endColumn: line.length + 1,\n severity: 'error',\n });\n }\n\n // 检查冒号后是否有空格\n const colonMatch = line.match(/^(\\s*)([^:\\s]+)(:)(\\S)/);\n if (colonMatch) {\n const startColumn = colonMatch[1].length + colonMatch[2].length + 2;\n errors.push({\n message: 'Missing space after colon. Use \": \" instead of \":\"',\n startLineNumber: lineNumber,\n endLineNumber: lineNumber,\n startColumn: startColumn,\n endColumn: startColumn + 1,\n severity: 'error',\n });\n }\n\n // 检查列表项格式\n const listMatch = line.match(/^(\\s*)-(\\S)/);\n if (listMatch) {\n const startColumn = listMatch[1].length + 2;\n errors.push({\n message: 'Missing space after dash. Use \"- \" instead of \"-\"',\n startLineNumber: lineNumber,\n endLineNumber: lineNumber,\n startColumn: startColumn,\n endColumn: startColumn + 1,\n severity: 'error',\n });\n }\n }\n\n // Schema 验证\n if (schemas.length > 0) {\n const schemaErrors = validateAgainstSchemas(content, schemas);\n errors.push(...schemaErrors);\n }\n } catch (error) {\n errors.push({\n message: `YAML parsing error: ${error}`,\n startLineNumber: 1,\n endLineNumber: 1,\n startColumn: 1,\n endColumn: 1,\n severity: 'error',\n });\n }\n\n return errors;\n}\n\nfunction isValidIndentation(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return true;\n\n const leadingSpaces = line.length - line.trimLeft().length;\n // YAML 通常使用 2 或 4 个空格缩进\n return leadingSpaces % 2 === 0;\n}\n\nfunction validateAgainstSchemas(_content: string, _schemas: YamlEditorSchema[]): YamlValidationError[] {\n const errors: YamlValidationError[] = [];\n\n // TODO: 实现更复杂的 schema 验证逻辑\n // 目前提供基础的结构验证\n // 可以在这里添加对 content 和 schemas 的具体验证\n\n return errors;\n}\n\nexport function parseYamlValue(value: string): any {\n const trimmed = value.trim();\n\n // Boolean values\n if (['true', 'True', 'TRUE', 'yes', 'Yes', 'YES', 'on', 'On', 'ON'].includes(trimmed)) {\n return true;\n }\n if (['false', 'False', 'FALSE', 'no', 'No', 'NO', 'off', 'Off', 'OFF'].includes(trimmed)) {\n return false;\n }\n\n // Null values\n if (['null', 'Null', 'NULL', '~'].includes(trimmed)) {\n return null;\n }\n\n // Number values\n if (/^-?\\d+$/.test(trimmed)) {\n return parseInt(trimmed, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(trimmed)) {\n return parseFloat(trimmed);\n }\n\n // String values (remove quotes if present)\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) || (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n\n return trimmed;\n}\n","import React, { useEffect, useRef } from 'react';\nimport MonacoEditor from 'react-monaco-editor';\nimport * as monaco from 'monaco-editor';\nimport type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { v4 as uuidv4 } from 'uuid';\nimport { css } from '@emotion/css';\n\nimport { language, languageConfiguration } from './yaml';\nimport { getYamlCompletionProvider } from './completion/getCompletionProvider';\nimport { validateYaml } from './validation';\nimport type { YamlEditorSchema } from './types';\n\ninterface YamlEditorProps {\n size?: 'small' | 'middle' | 'large';\n theme?: 'light' | 'dark';\n value?: string;\n placeholder?: string;\n enableAutocomplete?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n schemas?: YamlEditorSchema[];\n onChange?: (value: string) => void;\n onEnter?: (value: string) => void;\n onBlur?: (value: string) => void;\n editorDidMount?: (editor: monacoTypes.editor.IStandaloneCodeEditor) => void;\n}\n\nconst YAML_LANG_ID = 'yaml';\nconst SIZE_MAP: Record<\n string,\n {\n className: string;\n top: number;\n bottom: number;\n }\n> = {\n small: {\n className: 'ant-input-sm',\n top: 1,\n bottom: 1,\n },\n middle: {\n className: 'ant-input-md',\n top: 1,\n bottom: 1,\n },\n large: {\n className: 'ant-input-lg',\n top: 3,\n bottom: 2,\n },\n};\n\nconst themeMap: Record<string, string> = {\n light: 'yaml-light',\n dark: 'yaml-dark',\n};\n\nconst containerDisabledClassName = css`\n .monaco-editor {\n user-select: none;\n pointer-events: none;\n }\n`;\n\nconst containerReadOnlyClassName = css`\n .monaco-editor .cursors-layer > .cursor {\n opacity: 0 !important;\n }\n`;\n\nconst getStyles = (placeholder?: string) => {\n return {\n placeholder: css({\n '::after': {\n content: `'${placeholder}'`,\n opacity: 0.6,\n },\n }),\n };\n};\n\nexport default function YamlEditor(props: YamlEditorProps) {\n const id = uuidv4();\n const {\n size = 'middle',\n theme = 'light',\n value,\n placeholder,\n enableAutocomplete = true,\n readOnly = false,\n disabled = false,\n schemas = [],\n onChange,\n onEnter,\n onBlur,\n editorDidMount,\n } = props;\n\n const autocompleteDisposeFun = useRef<(() => void) | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const styles = getStyles(placeholder);\n\n const handleEditorDidMount = (editor: monacoTypes.editor.IStandaloneCodeEditor) => {\n editorRef.current = editor;\n\n // 定义主题\n monaco.editor.defineTheme('yaml-light', {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'key', foreground: '0000FF' },\n { token: 'string', foreground: '008000' },\n { token: 'number', foreground: '098658' },\n { token: 'comment', foreground: '008000', fontStyle: 'italic' },\n { token: 'delimiter', foreground: '000000' },\n { token: 'tag', foreground: '800080' },\n { token: 'keyword', foreground: '0000FF', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editor.lineHighlightBorder': '#00000000',\n },\n });\n\n monaco.editor.defineTheme('yaml-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'key', foreground: '9CDCFE' },\n { token: 'string', foreground: 'CE9178' },\n { token: 'number', foreground: 'B5CEA8' },\n { token: 'comment', foreground: '6A9955', fontStyle: 'italic' },\n { token: 'delimiter', foreground: 'D4D4D4' },\n { token: 'tag', foreground: 'C586C0' },\n { token: 'keyword', foreground: '569CD6', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editor.lineHighlightBorder': '#00000000',\n },\n });\n\n const isEditorFocused = editor.createContextKey<boolean>('isEditorFocused' + id, false);\n\n // 设置焦点状态\n editor.onDidBlurEditorWidget(() => {\n isEditorFocused.set(false);\n onBlur?.(editor.getValue());\n const position = editor.getPosition();\n if (position) {\n const newSelection = new monaco.Selection(position.lineNumber, position.column, position.lineNumber, position.column);\n editor.setSelection(newSelection);\n }\n });\n\n editor.onDidFocusEditorText(() => {\n isEditorFocused.set(true);\n });\n\n // 设置编辑器高度自适应\n const updateElementHeight = () => {\n const containerDiv = containerRef.current;\n if (containerDiv !== null) {\n const pixelHeight = Math.max(editor.getContentHeight(), 20);\n containerDiv.style.height = `${pixelHeight}px`;\n containerDiv.style.width = '100%';\n const pixelWidth = containerDiv.clientWidth;\n editor.layout({ width: pixelWidth, height: pixelHeight });\n }\n };\n\n editor.onDidContentSizeChange(updateElementHeight);\n updateElementHeight();\n\n // 禁用默认的搜索快捷键\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n command: null,\n });\n\n // Shift + Enter 换行\n editor.addCommand(\n monaco.KeyMod.Shift | monaco.KeyCode.Enter,\n () => {\n const position = editor.getPosition();\n if (position) {\n editor.executeEdits('shift-enter', [\n {\n range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: '\\n',\n },\n ]);\n editor.setPosition({\n lineNumber: position.lineNumber + 1,\n column: 1,\n });\n }\n },\n 'isEditorFocused' + id,\n );\n\n // Enter 键处理 - 移除阻止默认行为的规则,允许正常换行\n // 只有当提供了 onEnter 回调且没有建议窗口时才触发回调\n if (onEnter) {\n editor.addCommand(\n monaco.KeyCode.Enter,\n () => {\n onEnter(editor.getValue());\n },\n '!suggestWidgetVisible && isEditorFocused' + id,\n );\n }\n\n // 内容变化时进行验证\n editor.onDidChangeModelContent(() => {\n const model = editor.getModel();\n if (model) {\n const content = model.getValue();\n const errors = validateYaml(content, schemas);\n const markers = errors.map((error) => ({\n message: error.message,\n severity: error.severity === 'error' ? monaco.MarkerSeverity.Error : error.severity === 'warning' ? monaco.MarkerSeverity.Warning : monaco.MarkerSeverity.Info,\n startLineNumber: error.startLineNumber,\n endLineNumber: error.endLineNumber,\n startColumn: error.startColumn,\n endColumn: error.endColumn,\n }));\n\n monaco.editor.setModelMarkers(model, 'yaml', markers);\n }\n });\n\n editorDidMount?.(editor);\n };\n\n useEffect(() => {\n // 注册 YAML 语言\n monaco.languages.register({\n id: YAML_LANG_ID,\n aliases: ['YAML', 'yaml'],\n extensions: ['.yaml', '.yml'],\n mimetypes: ['application/x-yaml', 'text/x-yaml'],\n });\n\n // 设置语法高亮\n monaco.languages.setMonarchTokensProvider(YAML_LANG_ID, language as any);\n\n // 设置语言配置\n monaco.languages.setLanguageConfiguration(YAML_LANG_ID, languageConfiguration as any);\n\n return () => {\n autocompleteDisposeFun.current?.();\n };\n }, []);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // 清理之前的自动补全提供器\n if (autocompleteDisposeFun.current) {\n autocompleteDisposeFun.current();\n autocompleteDisposeFun.current = null;\n }\n\n // 如果启用自动补全,设置新的补全提供器\n if (enableAutocomplete) {\n const completionProvider = getYamlCompletionProvider(monaco, schemas);\n\n const filteringCompletionProvider: monacoTypes.languages.CompletionItemProvider = {\n ...completionProvider,\n provideCompletionItems: (model, position, context, token) => {\n if (editor.getModel()?.id !== model.id) {\n return { suggestions: [] };\n }\n return completionProvider.provideCompletionItems(model, position, context, token);\n },\n };\n\n const { dispose } = monaco.languages.registerCompletionItemProvider(YAML_LANG_ID, filteringCompletionProvider);\n autocompleteDisposeFun.current = dispose;\n }\n\n // 处理占位符\n const model = editor.getModel();\n if (model) {\n model.deltaDecorations(\n model.getAllDecorations().map((d) => d.id),\n [],\n );\n }\n\n if (placeholder) {\n const placeholderDecorators = [\n {\n range: new monaco.Range(1, 1, 1, 1),\n options: {\n className: styles.placeholder,\n isWholeLine: true,\n },\n },\n ];\n\n let decorators: string[] = [];\n\n const checkDecorators = () => {\n const model = editor.getModel();\n if (!model) return;\n\n const newDecorators = model.getValueLength() === 0 ? placeholderDecorators : [];\n decorators = model.deltaDecorations(decorators, newDecorators);\n };\n\n checkDecorators();\n editor.onDidChangeModelContent(checkDecorators);\n }\n }, [enableAutocomplete, JSON.stringify(schemas), placeholder]);\n\n return (\n <div\n className={\n 'ant-input' +\n (size ? ` ${SIZE_MAP[size].className}` : '') +\n (disabled ? ` ant-input-disabled ${containerDisabledClassName}` : '') +\n (readOnly ? ` ${containerReadOnlyClassName}` : '')\n }\n >\n <div ref={containerRef}>\n <MonacoEditor\n width='100%'\n height='100%'\n language={YAML_LANG_ID}\n theme={themeMap[theme]}\n value={value}\n onChange={onChange}\n editorDidMount={handleEditorDidMount}\n options={{\n readOnly,\n codeLens: false,\n contextmenu: false,\n fixedOverflowWidgets: true,\n folding: true,\n fontSize: 12,\n lineDecorationsWidth: 0,\n lineNumbers: 'on',\n minimap: { enabled: false },\n overviewRulerBorder: false,\n overviewRulerLanes: 0,\n padding: {\n top: SIZE_MAP[size].top,\n bottom: SIZE_MAP[size].bottom,\n },\n renderLineHighlight: 'none',\n renderLineHighlightOnlyWhenFocus: false,\n hideCursorInOverviewRuler: true,\n scrollbar: {\n vertical: 'auto',\n verticalScrollbarSize: 8,\n horizontal: 'auto',\n horizontalScrollbarSize: 8,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n suggest: {\n showWords: true,\n filterGraceful: true,\n snippetsPreventQuickSuggestions: false,\n shareSuggestSelections: false,\n },\n quickSuggestions: {\n other: true,\n comments: false,\n strings: true,\n },\n quickSuggestionsDelay: 0,\n suggestFontSize: 12,\n wordWrap: 'on',\n automaticLayout: true,\n occurrencesHighlight: 'off',\n }}\n />\n </div>\n </div>\n );\n}\n","export const languageConfiguration = {\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n comments: {\n lineComment: '--',\n blockComment: ['/*', '*/'] as [string, string],\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ] as any,\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n { open: '`', close: '`' },\n ] as any,\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n { open: '`', close: '`' },\n ] as any,\n folding: {\n offSide: false,\n },\n};\n\n// SQL keywords\nconst keywords = [\n 'SELECT',\n 'FROM',\n 'WHERE',\n 'AND',\n 'OR',\n 'NOT',\n 'JOIN',\n 'INNER',\n 'LEFT',\n 'RIGHT',\n 'FULL',\n 'OUTER',\n 'ON',\n 'ORDER',\n 'BY',\n 'GROUP',\n 'HAVING',\n 'LIMIT',\n 'OFFSET',\n 'INSERT',\n 'INTO',\n 'VALUES',\n 'UPDATE',\n 'SET',\n 'DELETE',\n 'CREATE',\n 'TABLE',\n 'ALTER',\n 'DROP',\n 'PRIMARY',\n 'KEY',\n 'FOREIGN',\n 'CONSTRAINT',\n 'UNIQUE',\n 'INDEX',\n 'VIEW',\n 'DATABASE',\n 'SCHEMA',\n 'AS',\n 'DISTINCT',\n 'CASE',\n 'WHEN',\n 'THEN',\n 'ELSE',\n 'END',\n 'CAST',\n 'BETWEEN',\n 'IN',\n 'LIKE',\n 'IS',\n 'NULL',\n 'TRUE',\n 'FALSE',\n 'WITH',\n 'UNION',\n 'EXCEPT',\n 'INTERSECT',\n];\n\nexport const language = {\n defaultToken: '',\n tokenPostfix: '.sql',\n ignoreCase: true,\n\n brackets: [\n { open: '(', close: ')', token: 'delimiter.parenthesis' },\n { open: '{', close: '}', token: 'delimiter.curly' },\n { open: '[', close: ']', token: 'delimiter.square' },\n ],\n\n keywords,\n\n operators: ['=', '>', '<', '!', '%', '&', '|', '^', '~', '?', ':', '+', '-', '*', '/'],\n\n builtinFunctions: [\n 'COUNT',\n 'SUM',\n 'AVG',\n 'MIN',\n 'MAX',\n 'UPPER',\n 'LOWER',\n 'LENGTH',\n 'SUBSTRING',\n 'TRIM',\n 'ROUND',\n 'ABS',\n 'COALESCE',\n 'NULLIF',\n 'IFNULL',\n 'CONCAT',\n 'DATE',\n 'NOW',\n 'YEAR',\n 'MONTH',\n 'DAY',\n 'HOUR',\n 'MINUTE',\n 'SECOND',\n ],\n\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n digits: /\\d+(_+\\d+)*/,\n\n octaldigits: /[0-7]+(_+[0-7]+)*/,\n\n hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n\n regexpctl: /[(){}\\[\\]\\|;,.?*+^$\\\\]/,\n\n regexpattern: /(\\{[0-9]+\\})|(\\{[0-9]*,[0-9]*\\})|(\\?(?:\\?)?|[*+]|\\^|\\$|\\|\\\\)/,\n\n tokenizer: {\n root: [\n { include: '@comments' },\n { include: '@whitespace' },\n { include: '@pseudo-columns' },\n [/[;,.]/, 'delimiter'],\n [/[{}()\\[\\]]/, '@brackets'],\n { include: '@builtinVariables' },\n { include: '@numbers' },\n { include: '@strings' },\n [/[a-zA-Z_#][a-zA-Z0-9_$#@]*(?=\\s*\\()/, { cases: { '@builtinFunctions': 'keyword.function', '@default': 'identifier.function' } }],\n [\n /[a-zA-Z_#][a-zA-Z0-9_$#@]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'identifier',\n },\n },\n ],\n [/[<>=!%&+\\-*/|~^]/, 'operator'],\n ],\n\n whitespace: [[/\\s+/, 'white']],\n\n comments: [\n [/--+.*/, 'comment'],\n [/\\/\\*/, { token: 'comment.quote', next: '@comment' }],\n ],\n\n comment: [\n [/[^*/]+/, 'comment'],\n [/\\*\\//, { token: 'comment.quote', next: '@pop' }],\n [/./, 'comment'],\n ],\n\n 'pseudo-columns': [\n [\n /[$][A-Za-z_][A-Za-z0-9_]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'variable',\n },\n },\n ],\n [\n /@[A-Za-z_][A-Za-z0-9_]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'variable',\n },\n },\n ],\n ],\n\n builtinVariables: [\n [\n /@@?[a-zA-Z_][a-zA-Z0-9_]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'variable',\n },\n },\n ],\n ],\n\n numbers: [\n [/0[xX][0-9a-fA-F]*[0-9a-fA-F]/, 'number.hex'],\n [/0[0-7]+(?!\\d)/, 'number.octal'],\n [/(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?/, 'number'],\n ],\n\n strings: [\n [/'/, { token: 'string', next: '@string' }],\n [/\"/, { token: 'string.double', next: '@string_double' }],\n [/`/, { token: 'string.backtick', next: '@string_backtick' }],\n ],\n\n string: [\n [/[^'\\\\]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/'/, { token: 'string', next: '@pop' }],\n ],\n\n string_double: [\n [/[^\"\\\\]+/, 'string.double'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, { token: 'string.double', next: '@pop' }],\n ],\n\n string_backtick: [\n [/[^`\\\\]+/, 'string.backtick'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/`/, { token: 'string.backtick', next: '@pop' }],\n ],\n },\n};\n","import * as monaco from 'monaco-editor';\n\nconst SQL_KEYWORDS = [\n 'SELECT',\n 'FROM',\n 'WHERE',\n 'AND',\n 'OR',\n 'NOT',\n 'JOIN',\n 'INNER',\n 'LEFT',\n 'RIGHT',\n 'FULL',\n 'OUTER',\n 'ON',\n 'ORDER',\n 'BY',\n 'GROUP',\n 'HAVING',\n 'LIMIT',\n 'OFFSET',\n 'INSERT',\n 'INTO',\n 'VALUES',\n 'UPDATE',\n 'SET',\n 'DELETE',\n 'CREATE',\n 'TABLE',\n 'ALTER',\n 'DROP',\n 'PRIMARY',\n 'KEY',\n 'FOREIGN',\n 'CONSTRAINT',\n 'UNIQUE',\n 'INDEX',\n 'VIEW',\n 'DATABASE',\n 'SCHEMA',\n 'AS',\n 'DISTINCT',\n 'CASE',\n 'WHEN',\n 'THEN',\n 'ELSE',\n 'END',\n 'CAST',\n 'BETWEEN',\n 'IN',\n 'LIKE',\n 'IS',\n 'NULL',\n 'TRUE',\n 'FALSE',\n 'WITH',\n 'UNION',\n 'EXCEPT',\n 'INTERSECT',\n 'ASC',\n 'DESC',\n 'ALL',\n 'ANY',\n 'EXISTS',\n 'CROSS',\n];\n\nconst SQL_FUNCTIONS = [\n { name: 'COUNT', signature: 'COUNT(expression)', description: 'Returns the number of rows' },\n { name: 'SUM', signature: 'SUM(expression)', description: 'Returns the sum of values' },\n { name: 'AVG', signature: 'AVG(expression)', description: 'Returns the average value' },\n { name: 'MIN', signature: 'MIN(expression)', description: 'Returns the minimum value' },\n { name: 'MAX', signature: 'MAX(expression)', description: 'Returns the maximum value' },\n { name: 'UPPER', signature: 'UPPER(string)', description: 'Converts string to uppercase' },\n { name: 'LOWER', signature: 'LOWER(string)', description: 'Converts string to lowercase' },\n { name: 'LENGTH', signature: 'LENGTH(string)', description: 'Returns the length of string' },\n { name: 'SUBSTRING', signature: 'SUBSTRING(string, start, length)', description: 'Extracts substring' },\n { name: 'TRIM', signature: 'TRIM(string)', description: 'Removes leading and trailing spaces' },\n { name: 'ROUND', signature: 'ROUND(number, decimals)', description: 'Rounds a number' },\n { name: 'ABS', signature: 'ABS(number)', description: 'Returns absolute value' },\n { name: 'COALESCE', signature: 'COALESCE(value1, value2, ...)', description: 'Returns first non-null value' },\n { name: 'NULLIF', signature: 'NULLIF(value1, value2)', description: 'Returns null if two values are equal' },\n { name: 'IFNULL', signature: 'IFNULL(value, default)', description: 'Returns alternative if null' },\n { name: 'CONCAT', signature: 'CONCAT(string1, string2, ...)', description: 'Concatenates strings' },\n { name: 'DATE', signature: 'DATE(date)', description: 'Extracts date part' },\n { name: 'NOW', signature: 'NOW()', description: 'Returns current date and time' },\n];\n\nexport const getSqlCompletionProvider = () => {\n return {\n provideCompletionItems(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n _context: monaco.languages.CompletionContext,\n _token: monaco.CancellationToken,\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const word = model.getWordUntilPosition(position);\n const range = new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\n\n const suggestions: monaco.languages.CompletionItem[] = [\n ...SQL_KEYWORDS.map((keyword) => ({\n label: keyword,\n kind: monaco.languages.CompletionItemKind.Keyword,\n insertText: keyword,\n range: range,\n sortText: '1' + keyword,\n })),\n ...SQL_FUNCTIONS.map((func) => ({\n label: func.name,\n kind: monaco.languages.CompletionItemKind.Function,\n insertText: func.name,\n detail: func.signature,\n documentation: func.description,\n range: range,\n sortText: '2' + func.name,\n })),\n ];\n\n return {\n suggestions: suggestions,\n };\n },\n };\n};\n","import React, { useEffect, useRef } from 'react';\nimport MonacoEditor from 'react-monaco-editor';\nimport * as monaco from 'monaco-editor';\nimport type * as monacoTypes from 'monaco-editor/esm/vs/editor/editor.api';\nimport { v4 as uuidv4 } from 'uuid';\nimport { css } from '@emotion/css';\nimport { language, languageConfiguration } from './sql';\nimport { getSqlCompletionProvider } from './completion/getCompletionProvider';\n\ninterface SqlEditorProps {\n className?: string;\n maxHeight?: number | string;\n fontSize?: number;\n size?: 'small' | 'middle' | 'large';\n theme?: 'light' | 'dark';\n value?: string;\n placeholder?: string;\n enableAutocomplete?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n onChange?: (value: string) => void;\n onEnter?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (value: string) => void;\n editorDidMount?: (editor: monacoTypes.editor.IStandaloneCodeEditor) => void;\n}\n\nconst SQL_LANG_ID = 'sql';\nconst SIZE_MAP: Record<\n string,\n {\n className: string;\n top: number;\n bottom: number;\n minHeight: number;\n }\n> = {\n small: {\n className: 'ant-input-sm',\n top: 1,\n bottom: 1,\n minHeight: 24,\n },\n middle: {\n className: 'ant-input-md',\n top: 1,\n bottom: 1,\n minHeight: 32,\n },\n large: {\n className: 'ant-input-lg',\n top: 3,\n bottom: 2,\n minHeight: 40,\n },\n};\n\nconst themeMap: Record<string, string> = {\n light: 'sql-light',\n dark: 'sql-dark',\n};\n\nconst containerDisabledClassName = css`\n .monaco-editor {\n user-select: none;\n pointer-events: none;\n }\n`;\n\nconst containerReadOnlyClassName = css`\n .monaco-editor .cursors-layer > .cursor {\n opacity: 0 !important;\n }\n`;\n\nexport default function SqlEditor(props: SqlEditorProps) {\n const id = uuidv4();\n const {\n className,\n maxHeight,\n fontSize,\n size = 'middle',\n theme = 'light',\n value = '',\n placeholder,\n enableAutocomplete = true,\n readOnly = false,\n disabled = false,\n onChange,\n onEnter,\n onBlur,\n onFocus,\n editorDidMount,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const modelRef = useRef<monaco.editor.ITextModel | null>(null);\n const disposablesRef = useRef<monaco.IDisposable[]>([]);\n\n useEffect(() => {\n // Register language\n if (!monaco.languages.getLanguages().some((lang) => lang.id === SQL_LANG_ID)) {\n monaco.languages.register({ id: SQL_LANG_ID });\n monaco.languages.setMonarchTokensProvider(SQL_LANG_ID, language as any);\n monaco.languages.setLanguageConfiguration(SQL_LANG_ID, languageConfiguration);\n }\n\n // Register completion provider\n if (enableAutocomplete) {\n const disposable = monaco.languages.registerCompletionItemProvider(SQL_LANG_ID, getSqlCompletionProvider());\n disposablesRef.current.push(disposable);\n }\n\n return () => {\n disposablesRef.current.forEach((disposable) => disposable.dispose());\n disposablesRef.current = [];\n };\n }, [enableAutocomplete]);\n\n const handleEditorMount = (editor: monacoTypes.editor.IStandaloneCodeEditor) => {\n editorRef.current = editor;\n modelRef.current = editor.getModel();\n\n monaco.editor.defineTheme('sql-light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n monaco.editor.defineTheme('sql-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n focusBorder: '#00000000',\n },\n });\n\n const isEditorFocused = editor.createContextKey<boolean>('isEditorFocused' + id, false);\n // we setup on-blur\n editor.onDidBlurEditorWidget(() => {\n isEditorFocused.set(false);\n onBlur?.(editor.getValue());\n // reset the selection to the current position\n const position = editor.getPosition();\n if (position) {\n const newSelection = new monaco.Selection(position.lineNumber, position.column, position.lineNumber, position.column);\n editor.setSelection(newSelection);\n }\n });\n\n editor.onDidFocusEditorText(() => {\n isEditorFocused.set(true);\n onFocus?.(editor.getValue());\n });\n\n // set the height of the editor container\n const updateElementHeight = () => {\n const containerDiv = containerRef.current;\n if (containerDiv !== null) {\n const pixelHeight = editor.getContentHeight();\n containerDiv.style.minHeight = `${pixelHeight}px`;\n containerDiv.style.width = '100%';\n const pixelWidth = containerDiv.clientWidth;\n editor.layout({ width: pixelWidth, height: pixelHeight });\n }\n };\n\n editor.onDidContentSizeChange(updateElementHeight);\n updateElementHeight();\n\n // Fixes Monaco capturing the search key binding and displaying a useless search box within the Editor.\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n command: null,\n });\n\n // 设置 Shift + Enter 为在光标位置换行\n editor.addCommand(\n monaco.KeyMod.Shift | monaco.KeyCode.Enter,\n () => {\n // 在光标位置插入换行符\n const position = editor.getPosition();\n if (position) {\n editor.executeEdits('shift-enter', [\n {\n range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: '\\n',\n },\n ]);\n // 将光标移动到新行\n editor.setPosition({\n lineNumber: position.lineNumber + 1,\n column: 1,\n });\n }\n },\n 'isEditorFocused' + id,\n );\n\n // 完全阻止 Enter 键的默认行为(包括换行)\n monaco.editor.addKeybindingRule({\n keybinding: monaco.KeyCode.Enter,\n command: '-',\n when: '!suggestWidgetVisible',\n });\n\n // handle: enter - 只有在没有建议窗口时才执行自定义行为\n editor.addCommand(\n monaco.KeyCode.Enter,\n () => {\n onEnter?.(editor.getValue());\n },\n '!suggestWidgetVisible && isEditorFocused' + id,\n );\n\n editorDidMount?.(editor);\n };\n\n const themeValue = themeMap[theme];\n\n return (\n <div\n className={\n 'ant-input' +\n (size ? ` ${SIZE_MAP[size].className}` : '') +\n (disabled ? ` ant-input-disabled ${containerDisabledClassName}` : '') +\n (readOnly ? ` ${containerReadOnlyClassName}` : '') +\n (className ? ` ${className}` : '')\n }\n style={{\n display: 'block',\n resize: 'vertical',\n overflow: 'auto',\n minHeight: SIZE_MAP[size].minHeight,\n maxHeight,\n }}\n >\n <div\n ref={containerRef}\n style={{\n height: '100%',\n }}\n >\n <MonacoEditor\n width='100%'\n height='100%'\n language={SQL_LANG_ID}\n theme={themeValue}\n value={value}\n onChange={onChange}\n editorDidMount={handleEditorMount}\n options={{\n minimap: { enabled: false },\n autoClosingBrackets: 'always',\n autoClosingQuotes: 'always',\n autoIndent: 'full',\n formatOnPaste: true,\n formatOnType: true,\n readOnly: readOnly || disabled,\n scrollBeyondLastLine: false,\n smoothScrolling: true,\n fontSize,\n tabSize: 2,\n wordWrap: 'on',\n automaticLayout: true,\n fixedOverflowWidgets: true,\n glyphMargin: false,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n folding: false,\n lineDecorationsWidth: 0,\n overviewRulerBorder: false,\n overviewRulerLanes: 0,\n placeholder: placeholder,\n renderLineHighlight: 'none',\n occurrencesHighlight: 'off',\n scrollbar: { vertical: 'hidden', horizontal: 'hidden', alwaysConsumeMouseWheel: false },\n }}\n />\n </div>\n </div>\n );\n}\n"],"names":["languageConfiguration","wordPattern","comments","lineComment","brackets","autoClosingPairs","open","close","surroundingPairs","folding","aggregations","functions","aggregationsOverTime","_i","aggregations_1","length","agg","push","vectorMatching","vectorMatchingRegex","reduce","prev","curr","operators","offsetModifier","keywords","concat","language","ignoreCase","defaultToken","tokenPostfix","symbols","escapes","digits","octaldigits","binarydigits","hexdigits","integersuffix","floatsuffix","tokenizer","root","cases","include","string_double","string_single","string_backtick","clauses","whitespace","TRIGONOMETRIC_FUNCTIONS","label","insertText","detail","documentation","AGGREGATION_OPERATORS","FUNCTIONS","NeverCaseError","_Error","_value","call","_inheritsLoose","_wrapNativeSuper","Error","escapeLabelValueInExactSelector","labelValue","replace","makeSelector","metricName","labels","labelName","allLabels","filter","name","value","allLabelTexts","map","op","join","DEFAULT_SERIES_LIMIT","badRequest","unprocessableEntity","serviceUnavailable","CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT","DataProvider","params","input","init","fetch","_ref","_asyncToGenerator","_regenerator","m","_callee","selector","withLimit","end","start","url","urlParams","request","w","_context","n","_this","enableRequests","a","Date","getTime","lookbackInterval","apiPrefix","toISOString","_extends","limit","buildRequest","URLSearchParams","uri","method","httpMethod","body","v","_x","_x2","apply","arguments","_ref2","_callee2","_context2","then","res","labelKeys","_x3","_ref3","_callee3","_context3","_x4","_x5","_callee4","_t","_context4","fetchLabelValues","metrics","Promise","all","loadMetricsMetadata","inputInRange","metricNamesSuggestionLimit","suggestionsIncomplete","errorHandler","httpErrorHandler","variablesNames","durationVariablesCompletion","_params$durationVaria","customRequest","_proto","prototype","getVariablesNames","setVariablesNames","endpoint","resource","ok","includes","status","statusText","json","apiRes","error","undefined","_this2","data","getAllMetricNames","_loadMetricsMetadata","_callee5","_context5","metricsMetadata","metricNamesToMetrics","metricNames","result","metaItem","_this3$metricsMetadat","_this3","help","_metaItem$help","type","_metaItem$type","setInputInRange","textInput","enableAutocompleteSuggestionsUpdate","dispatchEvent","CustomEvent","_createClass","key","get","bind","move","node","direction","parent","firstChild","lastChild","nextSibling","walk","path","current","_iterator","_createForOfIteratorHelperLoose","_step","done","_step$value","expectedType","id","getNodeText","text","slice","from","to","parsePromQLStringLiteral","inside","startsWith","endsWith","isPathMatch","resolverPath","cursorPath","every","item","index","ERROR_NODE_NAME","RESOLVERS","LabelName","UnquotedLabelMatcher","fun","resolveLabelName","LabelMatchers","VectorSelector","resolveLabelKeysWithEquals","PromQL","resolveTopLevel","Identifier","FunctionCallBody","resolveInFunction","StringLiteral","resolveLabelMatcher","BinaryExpr","resolveErrorInLabelMatcher","NumberDurationLiteralInDurationContext","MatrixSelector","resolveDurations","GroupingLabels","resolveLabelsForGrouping","LABEL_OP_MAP","Map","EqlSingle","EqlRegex","Neq","NeqRegex","getLabelOp","opNode","opChild","_LABEL_OP_MAP$get","getLabel","labelMatcherNode","nameNode","MatchOp","valueNode","getLabels","labelMatchersNode","labelNodes","getChildren","ln","notEmpty","getNodeChildren","child","children","getNodeInSubtree","typeId","_iterator2","_step2","_pos","aggrExpNode","AggregateModifier","AggregateExpr","bodyNode","getChild","metricIdNode","otherLabels","inStringNode","isError","labelNameNode","metricNameNode","betweenQuotes","pos","hasMatchOp","currentLabelName","hasOperator","textToCheck","getErrorNode","tree","cur","cursorAt","next","getSituation","parser","parse","maybeErrorNode","cursor","currentNode","ids","_iterator3","_step3","resolver","getAllMetricNamesCompletions","dataProvider","metric","FUNCTION_COMPLETIONS","f","_f$insertText","getAllFunctionsAndMetricNamesCompletions","_getAllFunctionsAndMetricNamesCompletions","DURATION_COMPLETIONS","DURATION_VARIABLES_COMPLETIONS","getAllHistoryCompletions","_dataProvider","getLabelNames","_getLabelNames","_selector","series","labelNames","labelSet","_Object$entries","_Object$entries$_i","fetchLabels","fetchSeries","Set","Object","entries","add","Array","getLabelNamesForCompletions","_x6","_x7","_x8","_x9","_getLabelNamesForCompletions","suffix","triggerOnInsert","getLabelNamesForSelectorCompletions","_x0","_x1","_x10","_x11","_getLabelNamesForSelectorCompletions","getLabelNamesForByCompletions","_x12","_x13","_x14","_getLabelNamesForByCompletions","getLabelValues","_x15","_x16","_x17","_x18","_getLabelValues","_callee6","_selector2","labelValues","_i2","_Object$entries2","_Object$entries2$_i","_context6","getLabelValuesForMetricCompletions","_x19","_x20","_x21","_x22","_x23","_getLabelValuesForMetricCompletions","_callee7","values","_context7","getCompletions","situation","resolve","historyCompletions","getMonacoCompletionItemKind","monaco","languages","CompletionItemKind","Unit","Variable","Snippet","Enum","EnumMember","Constructor","getCompletionProvider","provideCompletionItems","model","position","word","getWordAtPosition","range","Range","lift","startLineNumber","lineNumber","endLineNumber","startColumn","endColumn","fromPositions","positionClone","column","monacoSettings","getValueInRange","window","getSelection","_window$getSelection","selectedText","toString","offset","getOffsetAt","getValue","completionsPromise","items","maxIndexDigits","suggestions","kind","sortText","padStart","command","title","incomplete","triggerCharacters","ErrorId","validateQuery","query","interpolatedQuery","queryLines","interpolatedErrors","parseQuery","parseErrors","queryErrors","flatMap","interpolatedError","queryError","parseError","findErrorBoundary","isErrorBoundary","iterate","enter","nodeRef","substring","isEmptyString","errorNode","startPos","endPos","line","boundary","PROMQL_LANG_ID","promLanguageDefinition","SIZE_MAP","small","className","top","bottom","middle","large","themeMap","light","dark","containerDisabledClassName","css","_templateObject","_taggedTemplateLiteralLoose","containerReadOnlyClassName","_templateObject2","getStyles","placeholder","content","opacity","PromQLEditor","props","uuidv4","_props$size","size","_props$theme","theme","interpolateString","_props$enableAutocomp","enableAutocomplete","_props$enableRequests","_props$readOnly","readOnly","_props$disabled","disabled","onChange","onEnter","onBlur","editorDidMount","_props$debugEscKey","debugEscKey","autocompleteDisposeFun","useRef","containerRef","dataProviderRef","editorRef","previousContentRef","lastDeletionTriggerTimeRef","styles","handleEditorDidMount","editor","defineTheme","base","inherit","rules","colors","focusBorder","isEditorFocused","createContextKey","onDidBlurEditorWidget","set","getPosition","newSelection","setSelection","onDidFocusEditorText","updateElementHeight","containerDiv","pixelHeight","getContentHeight","style","height","width","pixelWidth","clientWidth","layout","onDidContentSizeChange","addKeybindingRule","keybinding","CtrlCmd","KeyF","addCommand","Shift","Enter","executeEdits","setPosition","when","Escape","_editor$_contextKeySe","suggestWidgetVisible","_contextKeyService","getContextKeyValue","console","log","valueLength","trigger","DELETION_TRIGGER_DEBOUNCE_MS","onDidChangeModelContent","getModel","errors","getLinesContent","markers","_objectWithoutPropertiesLoose","_excluded","message","severity","setModelMarkers","previousContent","isDeletion","now","setTimeout","useEffect","aliases","extensions","mimetypes","register","setMonarchTokensProvider","setLanguageConfiguration","completionProvider","filteringCompletionProvider","context","token","_editor$getModel","_monaco$languages$reg","registerCompletionItemProvider","dispose","deltaDecorations","getAllDecorations","d","placeholderDecorators","options","isWholeLine","decorators","checkDecorators","newDecorators","getValueLength","JSON","stringify","React","ref","MonacoEditor","codeLens","contextmenu","fixedOverflowWidgets","fontSize","lineDecorationsWidth","lineNumbers","minimap","enabled","overviewRulerBorder","overviewRulerLanes","padding","renderLineHighlight","scrollbar","vertical","verticalScrollbarSize","horizontal","horizontalScrollbarSize","alwaysConsumeMouseWheel","scrollBeyondLastLine","suggest","showWords","filterGraceful","snippetsPreventQuickSuggestions","shareSuggestSelections","suggestFontSize","wordWrap","automaticLayout","occurrencesHighlight","offSide","numberInteger","numberFloat","numberOctal","numberHex","numberInfinity","numberNaN","numberDate","comment","doubleQuotedString","singleQuotedString","blockScalar","flowMap","flowSequence","Keyword","Value","Property","Constant","Text","getYamlCompletionProvider","schemas","analyzePosition","getLineContent","beforeCursor","trimmedLine","trim","colonIndex","indexOf","isAfterColon","isInValuePosition","currentKey","keyPart","afterColon","test","hasCompleteValue","split","isInKeyPosition","isAtEndOfCompletedValue","afterCursor","getEnumValuesFromSchemas","keyName","completions","schemaItem","enumValues","extractEnumValues","schema","targetKey","currentPath","properties","prop","createEnumCompletions","currentSchema","pathSegment","forEach","enumValue","description","enumDescriptions","getKeyCompletionsFromSchemas","addedKeys","keyCompletions","extractKeyCompletions","_iterator4","_step4","completion","has","targetPath","_iterator5","_step5","property","shouldTriggerOnInsert","getFieldType","_iterator6","_step6","fieldType","extractFieldType","_iterator7","_step7","wordInfo","positionInfo","getCurrentPath","enumCompletions","schemaKeyCompletions","filtered","toLowerCase","lines","currentLineNumber","currentLine","currentIndent","getIndentLevel","targetIndent","i","lineIndent","trimmed","unshift","trimLeft","validateYaml","isValidIndentation","colonMatch","match","listMatch","schemaErrors","validateAgainstSchemas","leadingSpaces","_content","_schemas","YAML_LANG_ID","YamlEditor","_props$schemas","foreground","fontStyle","Math","max","Warning","Info","renderLineHighlightOnlyWhenFocus","hideCursorInOverviewRuler","quickSuggestions","other","strings","quickSuggestionsDelay","blockComment","builtinFunctions","regexpctl","regexpattern","builtinVariables","numbers","string","SQL_KEYWORDS","SQL_FUNCTIONS","signature","getSqlCompletionProvider","_token","getWordUntilPosition","keyword","func","Function","SQL_LANG_ID","minHeight","SqlEditor","maxHeight","_props$value","onFocus","modelRef","disposablesRef","getLanguages","some","lang","disposable","handleEditorMount","themeValue","display","resize","overflow","autoClosingBrackets","autoClosingQuotes","autoIndent","formatOnPaste","formatOnType","smoothScrolling","tabSize","glyphMargin","lineNumbersMinChars"],"mappings":"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"}