@cloudcare/codemirror-dql 0.0.2

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.
Files changed (88) hide show
  1. package/LICENSE +21 -0
  2. package/build.sh +7 -0
  3. package/dist/cjs/client/dql.d.ts +23 -0
  4. package/dist/cjs/client/dql.js +156 -0
  5. package/dist/cjs/client/dql.js.map +1 -0
  6. package/dist/cjs/client/index.d.ts +1 -0
  7. package/dist/cjs/client/index.js +6 -0
  8. package/dist/cjs/client/index.js.map +1 -0
  9. package/dist/cjs/complete/dql.terms.d.ts +20 -0
  10. package/dist/cjs/complete/dql.terms.js +209 -0
  11. package/dist/cjs/complete/dql.terms.js.map +1 -0
  12. package/dist/cjs/complete/hybrid.d.ts +50 -0
  13. package/dist/cjs/complete/hybrid.js +832 -0
  14. package/dist/cjs/complete/hybrid.js.map +1 -0
  15. package/dist/cjs/complete/index.d.ts +7 -0
  16. package/dist/cjs/complete/index.js +33 -0
  17. package/dist/cjs/complete/index.js.map +1 -0
  18. package/dist/cjs/dql.d.ts +16 -0
  19. package/dist/cjs/dql.js +66 -0
  20. package/dist/cjs/dql.js.map +1 -0
  21. package/dist/cjs/index.d.ts +2 -0
  22. package/dist/cjs/index.js +13 -0
  23. package/dist/cjs/index.js.map +1 -0
  24. package/dist/cjs/parser/index.d.ts +2 -0
  25. package/dist/cjs/parser/index.js +12 -0
  26. package/dist/cjs/parser/index.js.map +1 -0
  27. package/dist/cjs/parser/matcher.d.ts +7 -0
  28. package/dist/cjs/parser/matcher.js +104 -0
  29. package/dist/cjs/parser/matcher.js.map +1 -0
  30. package/dist/cjs/parser/path-finder.d.ts +5 -0
  31. package/dist/cjs/parser/path-finder.js +92 -0
  32. package/dist/cjs/parser/path-finder.js.map +1 -0
  33. package/dist/cjs/theme.d.ts +6 -0
  34. package/dist/cjs/theme.js +252 -0
  35. package/dist/cjs/theme.js.map +1 -0
  36. package/dist/cjs/types/function.d.ts +11 -0
  37. package/dist/cjs/types/function.js +16 -0
  38. package/dist/cjs/types/function.js.map +1 -0
  39. package/dist/cjs/types/index.d.ts +1 -0
  40. package/dist/cjs/types/index.js +6 -0
  41. package/dist/cjs/types/index.js.map +1 -0
  42. package/dist/cjs/types/matcher.d.ts +7 -0
  43. package/dist/cjs/types/matcher.js +24 -0
  44. package/dist/cjs/types/matcher.js.map +1 -0
  45. package/dist/esm/client/dql.d.ts +23 -0
  46. package/dist/esm/client/dql.js +150 -0
  47. package/dist/esm/client/dql.js.map +1 -0
  48. package/dist/esm/client/index.d.ts +1 -0
  49. package/dist/esm/client/index.js +2 -0
  50. package/dist/esm/client/index.js.map +1 -0
  51. package/dist/esm/complete/dql.terms.d.ts +20 -0
  52. package/dist/esm/complete/dql.terms.js +206 -0
  53. package/dist/esm/complete/dql.terms.js.map +1 -0
  54. package/dist/esm/complete/hybrid.d.ts +50 -0
  55. package/dist/esm/complete/hybrid.js +772 -0
  56. package/dist/esm/complete/hybrid.js.map +1 -0
  57. package/dist/esm/complete/index.d.ts +7 -0
  58. package/dist/esm/complete/index.js +29 -0
  59. package/dist/esm/complete/index.js.map +1 -0
  60. package/dist/esm/dql.d.ts +16 -0
  61. package/dist/esm/dql.js +59 -0
  62. package/dist/esm/dql.js.map +1 -0
  63. package/dist/esm/index.d.ts +2 -0
  64. package/dist/esm/index.js +3 -0
  65. package/dist/esm/index.js.map +1 -0
  66. package/dist/esm/parser/index.d.ts +2 -0
  67. package/dist/esm/parser/index.js +3 -0
  68. package/dist/esm/parser/index.js.map +1 -0
  69. package/dist/esm/parser/matcher.d.ts +7 -0
  70. package/dist/esm/parser/matcher.js +74 -0
  71. package/dist/esm/parser/matcher.js.map +1 -0
  72. package/dist/esm/parser/path-finder.d.ts +5 -0
  73. package/dist/esm/parser/path-finder.js +74 -0
  74. package/dist/esm/parser/path-finder.js.map +1 -0
  75. package/dist/esm/theme.d.ts +6 -0
  76. package/dist/esm/theme.js +249 -0
  77. package/dist/esm/theme.js.map +1 -0
  78. package/dist/esm/types/function.d.ts +11 -0
  79. package/dist/esm/types/function.js +13 -0
  80. package/dist/esm/types/function.js.map +1 -0
  81. package/dist/esm/types/index.d.ts +1 -0
  82. package/dist/esm/types/index.js +2 -0
  83. package/dist/esm/types/index.js.map +1 -0
  84. package/dist/esm/types/matcher.d.ts +7 -0
  85. package/dist/esm/types/matcher.js +19 -0
  86. package/dist/esm/types/matcher.js.map +1 -0
  87. package/eslint.config.mjs +40 -0
  88. package/package.json +60 -0
@@ -0,0 +1,832 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ var __values = (this && this.__values) || function(o) {
28
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
29
+ if (m) return m.call(o);
30
+ if (o && typeof o.length === "number") return {
31
+ next: function () {
32
+ if (o && i >= o.length) o = void 0;
33
+ return { value: o && o[i++], done: !o };
34
+ }
35
+ };
36
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.HybridComplete = exports.ContextKind = void 0;
40
+ exports.computeStartCompletePosition = computeStartCompletePosition;
41
+ exports.analyzeCompletion = analyzeCompletion;
42
+ var language_1 = require("@codemirror/language");
43
+ var parser_1 = require("../parser");
44
+ var lezer_dql_1 = require("@cloudcare/lezer-dql");
45
+ var dql_terms_1 = require("./dql.terms");
46
+ var autocompleteNodes = {
47
+ matchOp: dql_terms_1.matchOpTerms,
48
+ connectOp: dql_terms_1.connectOpTerms,
49
+ binOp: dql_terms_1.binOpTerms,
50
+ duration: dql_terms_1.durationTerms,
51
+ functionIdentifier: dql_terms_1.functionIdentifierTerms,
52
+ number: [],
53
+ };
54
+ // ContextKind is the different possible value determinate by the autocompletion
55
+ var ContextKind;
56
+ (function (ContextKind) {
57
+ // dynamic autocompletion (required a distant server)
58
+ ContextKind[ContextKind["Namespace"] = 0] = "Namespace";
59
+ ContextKind[ContextKind["Index"] = 1] = "Index";
60
+ ContextKind[ContextKind["DataSource"] = 2] = "DataSource";
61
+ ContextKind[ContextKind["ShowFunction"] = 3] = "ShowFunction";
62
+ ContextKind[ContextKind["FieldName"] = 4] = "FieldName";
63
+ ContextKind[ContextKind["FieldValue"] = 5] = "FieldValue";
64
+ // static autocompletion
65
+ ContextKind[ContextKind["Function"] = 6] = "Function";
66
+ ContextKind[ContextKind["OuterFunction"] = 7] = "OuterFunction";
67
+ ContextKind[ContextKind["BinOp"] = 8] = "BinOp";
68
+ ContextKind[ContextKind["MatchOp"] = 9] = "MatchOp";
69
+ ContextKind[ContextKind["ConnectOp"] = 10] = "ConnectOp";
70
+ ContextKind[ContextKind["Duration"] = 11] = "Duration";
71
+ ContextKind[ContextKind["Offset"] = 12] = "Offset";
72
+ ContextKind[ContextKind["SOffset"] = 13] = "SOffset";
73
+ ContextKind[ContextKind["Limit"] = 14] = "Limit";
74
+ ContextKind[ContextKind["SLimit"] = 15] = "SLimit";
75
+ ContextKind[ContextKind["Orderby"] = 16] = "Orderby";
76
+ ContextKind[ContextKind["SOrderby"] = 17] = "SOrderby";
77
+ ContextKind[ContextKind["By"] = 18] = "By";
78
+ ContextKind[ContextKind["Number"] = 19] = "Number";
79
+ ContextKind[ContextKind["Desc"] = 20] = "Desc";
80
+ ContextKind[ContextKind["Asc"] = 21] = "Asc";
81
+ })(ContextKind || (exports.ContextKind = ContextKind = {}));
82
+ function trimQuotes(str) {
83
+ // 1. 判断字符串首尾是否是同一个配对的引号
84
+ if (!str)
85
+ return str;
86
+ // 支持 " ' `
87
+ var first = str[0];
88
+ var last = str[str.length - 1];
89
+ if (first === last && "\"'`".includes(first)) {
90
+ return str.slice(1, -1);
91
+ }
92
+ return str;
93
+ }
94
+ function computeStartCompleteWithQueted(node, pos) {
95
+ // 有范围标志符号的 比如 {a,b,c}
96
+ var start = node.from + 1;
97
+ if (node.firstChild !== null) {
98
+ start = pos;
99
+ }
100
+ return start;
101
+ }
102
+ function computeStartCompleteWithUnQueted(node, pos) {
103
+ // 没有范围标志符号的 比如 a,b,c
104
+ var start = node.from;
105
+ if (node.firstChild !== null) {
106
+ start = pos;
107
+ }
108
+ return start;
109
+ }
110
+ function computeStartCompletePosition(state, node, pos) {
111
+ var _a, _b, _c, _d, _e, _f, _g;
112
+ var start = node.from;
113
+ if ((node.type.id === lezer_dql_1.Query && !(0, parser_1.containsChild)(node, lezer_dql_1.DataSourceList)) || node.type.id === lezer_dql_1.DColon) {
114
+ // L:: and not container L::humber
115
+ start = pos;
116
+ }
117
+ else if (node.type.id === lezer_dql_1.Number) {
118
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type.id) === lezer_dql_1.TimeExpr) {
119
+ start = pos;
120
+ }
121
+ }
122
+ else if (node.type.id === lezer_dql_1.IndexExpr ||
123
+ node.type.id === lezer_dql_1.InValue ||
124
+ node.type.id === lezer_dql_1.Projection ||
125
+ node.type.id === lezer_dql_1.FilterClause ||
126
+ node.type.id === lezer_dql_1.InFieldValue) {
127
+ // IndexExpr, InValue, Projection, FilterClause, InFieldValue
128
+ // 这些节点的开始位置是从第一个子节点开始的
129
+ start = computeStartCompleteWithQueted(node, pos);
130
+ }
131
+ else if (node.type.id === lezer_dql_1.DataSourceList || node.type.id === lezer_dql_1.FieldListExpr) {
132
+ // DataSourceList
133
+ // 这个节点的开始位置是从第一个子节点开始的
134
+ start = computeStartCompleteWithUnQueted(node, pos);
135
+ }
136
+ else if ((node.type.id === lezer_dql_1.OuterFunctionCallBody || node.type.id === lezer_dql_1.EvalCallBody || node.type.id === lezer_dql_1.FunctionCallBody) &&
137
+ node.firstChild === null) {
138
+ start++;
139
+ }
140
+ else if (node.type.id === lezer_dql_1.StringLiteral &&
141
+ ((0, parser_1.isMatcher)(node) ||
142
+ ((_b = node.parent) === null || _b === void 0 ? void 0 : _b.type.id) === lezer_dql_1.IndexItem ||
143
+ ((_c = node.parent) === null || _c === void 0 ? void 0 : _c.type.id) === lezer_dql_1.DataSourceItem ||
144
+ ((_d = node.parent) === null || _d === void 0 ? void 0 : _d.type.id) === lezer_dql_1.InValue ||
145
+ ((_e = node.parent) === null || _e === void 0 ? void 0 : _e.type.id) === lezer_dql_1.AsExpr ||
146
+ ((_f = node.parent) === null || _f === void 0 ? void 0 : _f.type.id) === lezer_dql_1.FieldName ||
147
+ ((_g = node.parent) === null || _g === void 0 ? void 0 : _g.type.id) === lezer_dql_1.InFieldValue)) {
148
+ start++;
149
+ }
150
+ else if (node.type.id === lezer_dql_1.ByClause ||
151
+ node.type.id === lezer_dql_1.OrderClause ||
152
+ node.type.id === lezer_dql_1.SOrderClause ||
153
+ node.type.id === lezer_dql_1.LimitClause ||
154
+ node.type.id === lezer_dql_1.SLimitClause ||
155
+ node.type.id === lezer_dql_1.OffsetClause ||
156
+ node.type.id === lezer_dql_1.SOffsetClause) {
157
+ start = pos;
158
+ }
159
+ var currentText = state.doc.slice(start, pos).toString();
160
+ console.log('====currentText222', currentText);
161
+ return start;
162
+ }
163
+ function arrayToCompletionResult(data, from, to, includeSnippet, span) {
164
+ if (includeSnippet === void 0) { includeSnippet = false; }
165
+ if (span === void 0) { span = true; }
166
+ var options = data;
167
+ if (includeSnippet) {
168
+ options.push.apply(options, __spreadArray([], __read(dql_terms_1.snippets), false));
169
+ }
170
+ return {
171
+ from: from,
172
+ to: to,
173
+ options: options,
174
+ validFor: span ? /^[a-zA-Z0-9_:]+$/ : undefined,
175
+ };
176
+ }
177
+ function getNodeDocByExpr(tree, state, finder) {
178
+ var currentNode = tree.getChild(finder);
179
+ if (!currentNode) {
180
+ return '';
181
+ }
182
+ return state.sliceDoc(currentNode.from, currentNode.to);
183
+ }
184
+ function getNamespaceByQuery(tree, state) {
185
+ var currentNode = (0, parser_1.walkBackward)(tree, lezer_dql_1.Query);
186
+ if (!currentNode) {
187
+ // Weird case that shouldn't happen, because "VectorSelector" is by definition the parent of the LabelMatchers.
188
+ return '';
189
+ }
190
+ var namespace = '';
191
+ currentNode.cursor().iterate(function (node) {
192
+ // Continue until we find the VectorSelector, then look up the metric name.
193
+ if (node.type.id === lezer_dql_1.Namespace) {
194
+ namespace = getNodeDocByExpr(node.node, state, lezer_dql_1.Identifier);
195
+ if (namespace) {
196
+ return false;
197
+ }
198
+ }
199
+ });
200
+ return namespace;
201
+ }
202
+ function getIndexsByQuery(tree, state) {
203
+ var currentNode = (0, parser_1.walkBackward)(tree, lezer_dql_1.Query);
204
+ if (!currentNode) {
205
+ // Weird case that shouldn't happen, because "VectorSelector" is by definition the parent of the LabelMatchers.
206
+ return [];
207
+ }
208
+ var indexs = [];
209
+ currentNode.cursor().iterate(function (node) {
210
+ // Continue until we find the VectorSelector, then look up the metric name.
211
+ if (node.type.id === lezer_dql_1.IndexExpr) {
212
+ var IndexNodes = (0, parser_1.getChildNodeText)(node.node, lezer_dql_1.Identifier, lezer_dql_1.StringLiteral);
213
+ IndexNodes.forEach(function (indexNode) {
214
+ if (indexNode.type.id === lezer_dql_1.StringLiteral) {
215
+ indexs.push("".concat(state.sliceDoc(indexNode.from, indexNode.to).slice(1, -1)));
216
+ }
217
+ else if (indexNode.type.id === lezer_dql_1.Identifier) {
218
+ indexs.push(state.sliceDoc(indexNode.from, indexNode.to));
219
+ }
220
+ });
221
+ return false;
222
+ }
223
+ });
224
+ return indexs;
225
+ }
226
+ function getSourceListByQuery(tree, state) {
227
+ var currentNode = (0, parser_1.walkBackward)(tree, lezer_dql_1.Query);
228
+ if (!currentNode) {
229
+ // Weird case that shouldn't happen, because "VectorSelector" is by definition the parent of the LabelMatchers.
230
+ return [];
231
+ }
232
+ var sourcelist = [];
233
+ currentNode.cursor().iterate(function (node) {
234
+ // Continue until we find the VectorSelector, then look up the metric name.
235
+ if (node.type.id === lezer_dql_1.DataSourceList) {
236
+ var SourceNodes = (0, parser_1.getChildNodeText)(node.node, lezer_dql_1.Identifier, lezer_dql_1.StringLiteral);
237
+ SourceNodes.forEach(function (sourceNode) {
238
+ if (sourceNode.type.id === lezer_dql_1.StringLiteral) {
239
+ sourcelist.push("".concat(state.sliceDoc(sourceNode.from, sourceNode.to).slice(1, -1)));
240
+ }
241
+ else if (sourceNode.type.id === lezer_dql_1.Identifier) {
242
+ sourcelist.push(state.sliceDoc(sourceNode.from, sourceNode.to));
243
+ }
244
+ });
245
+ return false;
246
+ }
247
+ });
248
+ if (sourcelist.length === 0) {
249
+ sourcelist = ['*'];
250
+ }
251
+ return sourcelist;
252
+ }
253
+ // analyzeCompletion is going to determinate what should be autocompleted.
254
+ // The value of the autocompletion is then calculate by the function buildCompletion.
255
+ // Note: this method is exported for testing purpose only. Do not use it directly.
256
+ function analyzeCompletion(state, node, pos) {
257
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
258
+ var result = [];
259
+ var currentText = state.doc.slice(node.from, pos).toString();
260
+ console.log("currentText: ".concat(currentText), 'nodeName: ', node.type.name, getNamespaceByQuery(node, state), getIndexsByQuery(node, state), getSourceListByQuery(node, state));
261
+ switch (node.type.id) {
262
+ case 0: {
263
+ // 0 is the id of the error node
264
+ }
265
+ case lezer_dql_1.DColon:
266
+ case lezer_dql_1.Query: {
267
+ result.push({ kind: ContextKind.DataSource, Namespace: getNamespaceByQuery(node, state), Index: getIndexsByQuery(node, state) });
268
+ break;
269
+ }
270
+ case lezer_dql_1.DQL: {
271
+ if (node.firstChild !== null && node.firstChild.type.id === 0) {
272
+ // this situation can happen when there is nothing in the text area and the user is explicitly triggering the autocompletion (with ctrl + space)
273
+ result.push({ kind: ContextKind.Namespace }, { kind: ContextKind.Function }, { kind: ContextKind.ShowFunction });
274
+ }
275
+ break;
276
+ }
277
+ case lezer_dql_1.IndexExpr: {
278
+ result.push({ kind: ContextKind.Index, Namespace: getNamespaceByQuery(node, state) });
279
+ break;
280
+ }
281
+ case lezer_dql_1.DataSourceList: {
282
+ result.push({ kind: ContextKind.DataSource, Namespace: getNamespaceByQuery(node, state), Index: getIndexsByQuery(node, state) });
283
+ break;
284
+ }
285
+ case lezer_dql_1.Projection: {
286
+ result.push({
287
+ kind: ContextKind.FieldName,
288
+ Namespace: getNamespaceByQuery(node, state),
289
+ Index: getIndexsByQuery(node, state),
290
+ DataSource: getSourceListByQuery(node, state),
291
+ });
292
+ break;
293
+ }
294
+ case lezer_dql_1.FilterClause: {
295
+ // 缺少 链接符的情况 {host = 'host' }
296
+ // if (node.firstChild) {
297
+ // result.push({
298
+ // kind: ContextKind.ConnectOp,
299
+ // });
300
+ // } else {
301
+ // result.push({
302
+ // kind: ContextKind.FieldName,
303
+ // Namespace: getNamespaceByQuery(node, state),
304
+ // Index: getIndexsByQuery(node, state),
305
+ // DataSource: getSourceListByQuery(node, state),
306
+ // });
307
+ // }
308
+ break;
309
+ }
310
+ case lezer_dql_1.InFieldValue: {
311
+ break;
312
+ }
313
+ case lezer_dql_1.TimeClause: {
314
+ result.push({ kind: ContextKind.Number });
315
+ break;
316
+ }
317
+ case lezer_dql_1.TimeRange: {
318
+ result.push({ kind: ContextKind.Number });
319
+ break;
320
+ }
321
+ case lezer_dql_1.FieldListExpr: {
322
+ result.push({
323
+ kind: ContextKind.FieldName,
324
+ Namespace: getNamespaceByQuery(node, state),
325
+ Index: getIndexsByQuery(node, state),
326
+ DataSource: getSourceListByQuery(node, state),
327
+ });
328
+ break;
329
+ }
330
+ case lezer_dql_1.Identifier: {
331
+ // Identifier is the root node of the DQL language
332
+ // It can be used to complete the namespace, index, datasource, fieldname, fieldvalue
333
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type.id) === lezer_dql_1.Namespace) {
334
+ var queryNode = (0, parser_1.walkBackward)(node, lezer_dql_1.Query);
335
+ if (queryNode === null || queryNode === void 0 ? void 0 : queryNode.getChildren(lezer_dql_1.DColon).length) {
336
+ //
337
+ result.push({
338
+ kind: ContextKind.Namespace,
339
+ });
340
+ }
341
+ else {
342
+ result.push({
343
+ kind: ContextKind.Namespace,
344
+ }, {
345
+ kind: ContextKind.ShowFunction,
346
+ }, {
347
+ kind: ContextKind.OuterFunction,
348
+ });
349
+ }
350
+ }
351
+ else if (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.type.id) === lezer_dql_1.FieldName && ((_d = (_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) === null || _d === void 0 ? void 0 : _d.type.id) === lezer_dql_1.ProjectionField) {
352
+ // L::xxx:(avg(), host)
353
+ result.push({
354
+ kind: ContextKind.FieldName,
355
+ Namespace: getNamespaceByQuery(node, state),
356
+ Index: getIndexsByQuery(node, state),
357
+ DataSource: getSourceListByQuery(node, state),
358
+ }, { kind: ContextKind.Function });
359
+ }
360
+ else if (((_e = node.parent) === null || _e === void 0 ? void 0 : _e.type.id) === lezer_dql_1.ArgItem) {
361
+ //Avg(xxx)
362
+ result.push({
363
+ kind: ContextKind.FieldName,
364
+ Namespace: getNamespaceByQuery(node, state),
365
+ Index: getIndexsByQuery(node, state),
366
+ DataSource: getSourceListByQuery(node, state),
367
+ });
368
+ }
369
+ else if (((_f = node.parent) === null || _f === void 0 ? void 0 : _f.type.id) === lezer_dql_1.IndexItem) {
370
+ result.push({
371
+ kind: ContextKind.Index,
372
+ Namespace: getNamespaceByQuery(node, state),
373
+ });
374
+ }
375
+ else if (((_g = node.parent) === null || _g === void 0 ? void 0 : _g.type.id) === lezer_dql_1.DataSourceItem) {
376
+ result.push({
377
+ kind: ContextKind.DataSource,
378
+ Namespace: getNamespaceByQuery(node, state),
379
+ Index: getIndexsByQuery(node, state),
380
+ });
381
+ }
382
+ else if (((_h = node.parent) === null || _h === void 0 ? void 0 : _h.type.id) === lezer_dql_1.FieldName) {
383
+ result.push({
384
+ kind: ContextKind.FieldName,
385
+ Namespace: getNamespaceByQuery(node, state),
386
+ Index: getIndexsByQuery(node, state),
387
+ DataSource: getSourceListByQuery(node, state),
388
+ });
389
+ }
390
+ else if (((_j = node.parent) === null || _j === void 0 ? void 0 : _j.type.id) === lezer_dql_1.FilterExpr) {
391
+ result.push({
392
+ kind: ContextKind.FieldName,
393
+ Namespace: getNamespaceByQuery(node, state),
394
+ Index: getIndexsByQuery(node, state),
395
+ DataSource: getSourceListByQuery(node, state),
396
+ });
397
+ }
398
+ break;
399
+ }
400
+ case lezer_dql_1.StringLiteral: {
401
+ if (((_k = node.parent) === null || _k === void 0 ? void 0 : _k.type.id) === lezer_dql_1.IndexItem) {
402
+ result.push({
403
+ kind: ContextKind.Index,
404
+ Namespace: getNamespaceByQuery(node, state),
405
+ });
406
+ }
407
+ else if (((_l = node.parent) === null || _l === void 0 ? void 0 : _l.type.id) === lezer_dql_1.DataSourceItem) {
408
+ result.push({
409
+ kind: ContextKind.DataSource,
410
+ Namespace: getNamespaceByQuery(node, state),
411
+ Index: getIndexsByQuery(node, state),
412
+ });
413
+ }
414
+ else if (((_m = node.parent) === null || _m === void 0 ? void 0 : _m.type.id) === lezer_dql_1.InFieldValue) {
415
+ if ((0, parser_1.isMatcher)(node)) {
416
+ result.push({
417
+ kind: ContextKind.FieldValue,
418
+ Namespace: getNamespaceByQuery(node, state),
419
+ Index: getIndexsByQuery(node, state),
420
+ DataSource: getSourceListByQuery(node, state),
421
+ matcher: (0, parser_1.createMatcher)(node, state),
422
+ });
423
+ }
424
+ }
425
+ else if (((_o = node.parent) === null || _o === void 0 ? void 0 : _o.type.id) === lezer_dql_1.FieldName) {
426
+ result.push({
427
+ kind: ContextKind.FieldName,
428
+ Namespace: getNamespaceByQuery(node, state),
429
+ Index: getIndexsByQuery(node, state),
430
+ DataSource: getSourceListByQuery(node, state),
431
+ });
432
+ }
433
+ else if (((_p = node.parent) === null || _p === void 0 ? void 0 : _p.type.id) === lezer_dql_1.FilterExpr) {
434
+ if ((0, parser_1.isMatcher)(node)) {
435
+ result.push({
436
+ kind: ContextKind.FieldValue,
437
+ Namespace: getNamespaceByQuery(node, state),
438
+ Index: getIndexsByQuery(node, state),
439
+ DataSource: getSourceListByQuery(node, state),
440
+ matcher: (0, parser_1.createMatcher)(node, state),
441
+ });
442
+ }
443
+ else {
444
+ result.push({
445
+ kind: ContextKind.FieldName,
446
+ Namespace: getNamespaceByQuery(node, state),
447
+ Index: getIndexsByQuery(node, state),
448
+ DataSource: getSourceListByQuery(node, state),
449
+ });
450
+ }
451
+ }
452
+ break;
453
+ }
454
+ case lezer_dql_1.Number: {
455
+ if (((_q = node.parent) === null || _q === void 0 ? void 0 : _q.type.id) === lezer_dql_1.TimeExpr) {
456
+ result.push({
457
+ kind: ContextKind.Duration,
458
+ });
459
+ }
460
+ else {
461
+ result.push({
462
+ kind: ContextKind.Number,
463
+ });
464
+ }
465
+ break;
466
+ }
467
+ case lezer_dql_1.ShowIdentifier: {
468
+ result.push({
469
+ kind: ContextKind.ShowFunction,
470
+ });
471
+ break;
472
+ }
473
+ case lezer_dql_1.EvalCallBody:
474
+ case lezer_dql_1.FunctionCallBody: {
475
+ break;
476
+ }
477
+ case lezer_dql_1.OuterFunctionCallBody: {
478
+ // result.push({
479
+ // kind: ContextKind.Function,
480
+ // });
481
+ break;
482
+ }
483
+ case lezer_dql_1.InValue: {
484
+ break;
485
+ }
486
+ case lezer_dql_1.EqlSingle:
487
+ case lezer_dql_1.Neq:
488
+ case lezer_dql_1.EqlRegex:
489
+ case lezer_dql_1.NeqRegex:
490
+ case lezer_dql_1.In:
491
+ case lezer_dql_1.NotIn: {
492
+ result.push({ kind: ContextKind.MatchOp });
493
+ break;
494
+ }
495
+ case lezer_dql_1.By:
496
+ break;
497
+ case lezer_dql_1.OrderClause: {
498
+ if (!node.getChildren(lezer_dql_1.By).length) {
499
+ result.push({ kind: ContextKind.By });
500
+ }
501
+ else {
502
+ result.push({
503
+ kind: ContextKind.FieldName,
504
+ Namespace: getNamespaceByQuery(node, state),
505
+ Index: getIndexsByQuery(node, state),
506
+ DataSource: getSourceListByQuery(node, state),
507
+ });
508
+ }
509
+ break;
510
+ }
511
+ case lezer_dql_1.Order: {
512
+ result.push({ kind: ContextKind.Orderby }, { kind: ContextKind.By });
513
+ break;
514
+ }
515
+ case lezer_dql_1.SOrderClause: {
516
+ if (!node.getChildren(lezer_dql_1.By).length) {
517
+ result.push({ kind: ContextKind.By });
518
+ }
519
+ else {
520
+ result.push({
521
+ kind: ContextKind.FieldName,
522
+ Namespace: getNamespaceByQuery(node, state),
523
+ Index: getIndexsByQuery(node, state),
524
+ DataSource: getSourceListByQuery(node, state),
525
+ });
526
+ }
527
+ break;
528
+ }
529
+ case lezer_dql_1.SOrder:
530
+ result.push({ kind: ContextKind.SOrderby }, { kind: ContextKind.By });
531
+ break;
532
+ case lezer_dql_1.Limit:
533
+ result.push({ kind: ContextKind.Limit });
534
+ break;
535
+ case lezer_dql_1.Slimit:
536
+ result.push({ kind: ContextKind.SLimit });
537
+ break;
538
+ case lezer_dql_1.Asc:
539
+ result.push({ kind: ContextKind.Asc });
540
+ break;
541
+ case lezer_dql_1.Desc:
542
+ result.push({ kind: ContextKind.Desc });
543
+ break;
544
+ case lezer_dql_1.And:
545
+ case lezer_dql_1.DAnd:
546
+ case lezer_dql_1.Or:
547
+ case lezer_dql_1.DOr: {
548
+ result.push({ kind: ContextKind.ConnectOp });
549
+ break;
550
+ }
551
+ case lezer_dql_1.Pow:
552
+ case lezer_dql_1.Mul:
553
+ case lezer_dql_1.Div:
554
+ case lezer_dql_1.Mod:
555
+ case lezer_dql_1.Add:
556
+ case lezer_dql_1.Sub:
557
+ case lezer_dql_1.Eql:
558
+ case lezer_dql_1.Gte:
559
+ case lezer_dql_1.Gtr:
560
+ case lezer_dql_1.Lte:
561
+ case lezer_dql_1.Lss:
562
+ result.push({ kind: ContextKind.BinOp });
563
+ break;
564
+ case lezer_dql_1.BinaryExpr:
565
+ // if ()
566
+ // result.push({ kind: ContextKind.BinOp });
567
+ break;
568
+ }
569
+ return result;
570
+ }
571
+ var HybridComplete = /** @class */ (function () {
572
+ function HybridComplete(dqlClient) {
573
+ this.dqlClient = dqlClient;
574
+ }
575
+ HybridComplete.prototype.DQL = function (context) {
576
+ var e_1, _a;
577
+ var _this = this;
578
+ var state = context.state, pos = context.pos;
579
+ var tree = (0, language_1.syntaxTree)(state).resolve(pos, -1);
580
+ // The lines above can help you to print the current lezer tree.
581
+ // It's useful when you are trying to understand why it doesn't autocomplete.
582
+ // console.log(syntaxTree(state).topNode.toString());
583
+ // console.log(`current node: ${tree.type.name}`);
584
+ var contexts = analyzeCompletion(state, tree, pos);
585
+ var asyncResult = Promise.resolve([]);
586
+ var completeSnippet = false;
587
+ var span = true;
588
+ var _loop_1 = function (context_1) {
589
+ switch (context_1.kind) {
590
+ case ContextKind.Namespace: {
591
+ asyncResult = asyncResult.then(function (result) {
592
+ return _this.autocompleteNamespace(result, context_1);
593
+ });
594
+ break;
595
+ }
596
+ case ContextKind.Index: {
597
+ asyncResult = asyncResult.then(function (result) {
598
+ return _this.autocompleteIndex(result, context_1);
599
+ });
600
+ break;
601
+ }
602
+ case ContextKind.DataSource: {
603
+ asyncResult = asyncResult.then(function (result) {
604
+ return _this.autocompleteDataSource(result, context_1);
605
+ });
606
+ break;
607
+ }
608
+ case ContextKind.ShowFunction: {
609
+ asyncResult = asyncResult.then(function (result) {
610
+ return _this.autocompleteShowFuncs(result, context_1);
611
+ });
612
+ break;
613
+ }
614
+ case ContextKind.FieldName: {
615
+ asyncResult = asyncResult.then(function (result) {
616
+ return _this.autocompleteFieldNames(result, context_1);
617
+ });
618
+ break;
619
+ }
620
+ case ContextKind.FieldValue: {
621
+ asyncResult = asyncResult.then(function (result) {
622
+ return _this.autocomplteFieldValues(result, context_1);
623
+ });
624
+ break;
625
+ }
626
+ case ContextKind.OuterFunction: {
627
+ asyncResult = asyncResult.then(function (result) {
628
+ return result.concat(autocompleteNodes.functionIdentifier);
629
+ });
630
+ break;
631
+ }
632
+ case ContextKind.Function: {
633
+ completeSnippet = true;
634
+ asyncResult = asyncResult.then(function (result) {
635
+ return result.concat(autocompleteNodes.functionIdentifier);
636
+ });
637
+ break;
638
+ }
639
+ case ContextKind.ConnectOp: {
640
+ asyncResult = asyncResult.then(function (result) {
641
+ return result.concat(autocompleteNodes.connectOp);
642
+ });
643
+ break;
644
+ }
645
+ case ContextKind.BinOp: {
646
+ asyncResult = asyncResult.then(function (result) {
647
+ return result.concat(autocompleteNodes.binOp);
648
+ });
649
+ break;
650
+ }
651
+ case ContextKind.MatchOp: {
652
+ asyncResult = asyncResult.then(function (result) {
653
+ return result.concat(autocompleteNodes.matchOp);
654
+ });
655
+ break;
656
+ }
657
+ case ContextKind.Duration: {
658
+ span = false;
659
+ asyncResult = asyncResult.then(function (result) {
660
+ return result.concat(autocompleteNodes.duration);
661
+ });
662
+ break;
663
+ }
664
+ case ContextKind.Offset: {
665
+ asyncResult = asyncResult.then(function (result) {
666
+ return result.concat([{ label: 'offset' }]);
667
+ });
668
+ break;
669
+ }
670
+ case ContextKind.SOffset: {
671
+ asyncResult = asyncResult.then(function (result) {
672
+ return result.concat([{ label: 'soffset' }]);
673
+ });
674
+ break;
675
+ }
676
+ case ContextKind.Limit: {
677
+ asyncResult = asyncResult.then(function (result) {
678
+ return result.concat([{ label: 'limit' }]);
679
+ });
680
+ break;
681
+ }
682
+ case ContextKind.SLimit: {
683
+ asyncResult = asyncResult.then(function (result) {
684
+ return result.concat([{ label: 'slimit' }]);
685
+ });
686
+ break;
687
+ }
688
+ case ContextKind.Orderby: {
689
+ asyncResult = asyncResult.then(function (result) {
690
+ return result.concat([{ label: 'order by' }]);
691
+ });
692
+ break;
693
+ }
694
+ case ContextKind.SOrderby: {
695
+ asyncResult = asyncResult.then(function (result) {
696
+ return result.concat([{ label: 'sorder by' }]);
697
+ });
698
+ break;
699
+ }
700
+ case ContextKind.By: {
701
+ asyncResult = asyncResult.then(function (result) {
702
+ return result.concat([{ label: 'by' }]);
703
+ });
704
+ break;
705
+ }
706
+ case ContextKind.Number: {
707
+ break;
708
+ }
709
+ case ContextKind.Asc: {
710
+ asyncResult = asyncResult.then(function (result) {
711
+ return result.concat([{ label: 'asc' }]);
712
+ });
713
+ break;
714
+ }
715
+ case ContextKind.Desc: {
716
+ asyncResult = asyncResult.then(function (result) {
717
+ return result.concat([{ label: 'desc' }]);
718
+ });
719
+ break;
720
+ }
721
+ }
722
+ };
723
+ try {
724
+ for (var contexts_1 = __values(contexts), contexts_1_1 = contexts_1.next(); !contexts_1_1.done; contexts_1_1 = contexts_1.next()) {
725
+ var context_1 = contexts_1_1.value;
726
+ _loop_1(context_1);
727
+ }
728
+ }
729
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
730
+ finally {
731
+ try {
732
+ if (contexts_1_1 && !contexts_1_1.done && (_a = contexts_1.return)) _a.call(contexts_1);
733
+ }
734
+ finally { if (e_1) throw e_1.error; }
735
+ }
736
+ return asyncResult.then(function (result) {
737
+ return arrayToCompletionResult(result, computeStartCompletePosition(state, tree, pos), pos, completeSnippet, span);
738
+ });
739
+ };
740
+ HybridComplete.prototype.autocompleteNamespace = function (result, context) {
741
+ if (!this.dqlClient)
742
+ return result;
743
+ var namespaceCompetion = [];
744
+ return this.dqlClient.namespace().then(function (namespaces) {
745
+ namespaces.forEach(function (namespace) {
746
+ namespaceCompetion.push({
747
+ label: namespace.name,
748
+ info: namespace.help,
749
+ type: 'constant',
750
+ });
751
+ });
752
+ return namespaceCompetion;
753
+ });
754
+ };
755
+ HybridComplete.prototype.autocompleteIndex = function (result, context) {
756
+ if (!this.dqlClient)
757
+ return result;
758
+ var indexCompetion = [];
759
+ return this.dqlClient.indexValues(context.Namespace).then(function (indexs) {
760
+ indexs.forEach(function (index) {
761
+ indexCompetion.push({
762
+ label: index,
763
+ type: 'keyword',
764
+ });
765
+ });
766
+ return indexCompetion;
767
+ });
768
+ };
769
+ HybridComplete.prototype.autocompleteDataSource = function (result, context) {
770
+ if (!this.dqlClient)
771
+ return result;
772
+ var datasourceCompetion = [];
773
+ return this.dqlClient.datasourceValues(context.Namespace, context.Index).then(function (datasources) {
774
+ datasources.forEach(function (datasource) {
775
+ datasourceCompetion.push({
776
+ label: datasource,
777
+ type: 'keyword',
778
+ });
779
+ });
780
+ return datasourceCompetion;
781
+ });
782
+ };
783
+ HybridComplete.prototype.autocompleteShowFuncs = function (result, context) {
784
+ if (!this.dqlClient)
785
+ return result;
786
+ var showFuncCompetion = [];
787
+ return this.dqlClient.showFunctions().then(function (showfuns) {
788
+ showfuns.forEach(function (showfun) {
789
+ showFuncCompetion.push({
790
+ label: showfun.name,
791
+ type: 'function',
792
+ detail: 'function',
793
+ info: showfun.info,
794
+ });
795
+ });
796
+ return showFuncCompetion;
797
+ });
798
+ };
799
+ HybridComplete.prototype.autocompleteFieldNames = function (result, context) {
800
+ if (!this.dqlClient)
801
+ return result;
802
+ var fieldNamesCompetion = [];
803
+ return this.dqlClient.fieldNames(context.Namespace, context.Index, context.DataSource).then(function (fieldNames) {
804
+ fieldNames.forEach(function (fieldName) {
805
+ fieldNamesCompetion.push({
806
+ label: fieldName.name,
807
+ detail: fieldName.type,
808
+ type: 'keyword',
809
+ info: fieldName.info,
810
+ });
811
+ });
812
+ return fieldNamesCompetion;
813
+ });
814
+ };
815
+ HybridComplete.prototype.autocomplteFieldValues = function (result, context) {
816
+ if (!this.dqlClient)
817
+ return result;
818
+ var fieldValuesCompetion = [];
819
+ return this.dqlClient.fieldValues(context.Namespace, context.Index, context.DataSource, context.matcher).then(function (fieldValues) {
820
+ fieldValues.forEach(function (fieldValue) {
821
+ fieldValuesCompetion.push({
822
+ label: fieldValue,
823
+ type: 'text',
824
+ });
825
+ });
826
+ return fieldValuesCompetion;
827
+ });
828
+ };
829
+ return HybridComplete;
830
+ }());
831
+ exports.HybridComplete = HybridComplete;
832
+ //# sourceMappingURL=hybrid.js.map