@webda/ql 4.0.0-beta.7 → 4.0.0-beta.8

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.
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Kind of candidate offered by code completion
3
+ */
4
+ export type CompletionKind = "keyword" | "operator" | "field" | "value" | "parameter" | "punctuation";
5
+ /**
6
+ * Field metadata used to provide field completions and contextual value suggestions
7
+ */
8
+ export interface CompletionField {
9
+ /** Dotted path, e.g. "profile.email" */
10
+ name: string;
11
+ /** JSON schema type, used for value candidates */
12
+ type?: "string" | "number" | "integer" | "boolean" | "array" | "object";
13
+ /** Enum values from the schema */
14
+ enum?: (string | number | boolean)[];
15
+ /** Field description */
16
+ description?: string;
17
+ }
18
+ /**
19
+ * Options configuring WebdaQL code completion
20
+ */
21
+ export interface CompletionOptions {
22
+ /** Known fields; without them no field candidates are returned */
23
+ fields?: CompletionField[];
24
+ /** Only offer filter-query syntax (no SELECT / DELETE / UPDATE): for REST, GraphQL, MCP Query operations */
25
+ filterOnly?: boolean;
26
+ /** Named parameters available (offered as `:name` where a value is expected) */
27
+ parameters?: string[];
28
+ /** Max candidates, default 50 */
29
+ limit?: number;
30
+ }
31
+ /**
32
+ * A single code completion suggestion
33
+ */
34
+ export interface CompletionItem {
35
+ /** Shown text, e.g. "ORDER BY", "priority", "TRUE" */
36
+ label: string;
37
+ /** Text to insert, e.g. "ORDER BY ", "'open'" */
38
+ insertText: string;
39
+ /** Category of the completion */
40
+ kind: CompletionKind;
41
+ /** Detail information (e.g. field type or description) */
42
+ detail?: string;
43
+ /** Range of the query replaced by insertText, [start, end) char offsets */
44
+ range: [number, number];
45
+ }
46
+ /**
47
+ * Result of querying completions at a caret position
48
+ */
49
+ export interface CompletionResult {
50
+ /** List of completion candidates */
51
+ items: CompletionItem[];
52
+ /** Partial word before the caret used for filtering */
53
+ prefix: string;
54
+ }
55
+ /**
56
+ * Minimal JSON Schema 7 subset for schema flattening without external dependencies
57
+ */
58
+ export interface JSONSchema7Like {
59
+ type?: string | string[];
60
+ properties?: Record<string, JSONSchema7Like | boolean>;
61
+ enum?: (string | number | boolean)[];
62
+ description?: string;
63
+ items?: JSONSchema7Like | boolean | (JSONSchema7Like | boolean)[];
64
+ $ref?: string;
65
+ [key: string]: any;
66
+ }
67
+ /**
68
+ * Flatten a JSON schema into completion fields (nested objects as dotted paths, max depth 3)
69
+ *
70
+ * @param schema - JSON Schema 7 like object
71
+ * @param maxDepth - Maximum nesting depth (default 3)
72
+ * @returns Array of completion fields
73
+ */
74
+ export declare function fieldsFromSchema(schema: JSONSchema7Like, maxDepth?: number): CompletionField[];
75
+ /**
76
+ * Get code completion items for a WebdaQL query at the specified caret offset
77
+ *
78
+ * @param query - The WebdaQL query string
79
+ * @param caret - 0-based character offset of the caret
80
+ * @param options - Completion configuration options
81
+ * @returns Completion results with candidates and filtering prefix
82
+ */
83
+ export declare function getCompletions(query: string, caret: number, options?: CompletionOptions): CompletionResult;
84
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC;AAEtG;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACxE,kCAAkC;IAClC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACrC,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,4GAA4G;IAC5G,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,GAAG,OAAO,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAgND;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,SAAI,GAAG,eAAe,EAAE,CAuDzF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAiO1G"}
@@ -0,0 +1,467 @@
1
+ import { Token } from "antlr4ts";
2
+ import { CodeCompletionCore } from "antlr4-c3";
3
+ import { WebdaQLParserParser } from "./WebdaQLParserParser.js";
4
+ import { createTolerantParser } from "./query.js";
5
+ import { escapeValue } from "./webdaql-string.js";
6
+ const PREFERRED_RULES = new Set([
7
+ WebdaQLParserParser.RULE_identifier,
8
+ WebdaQLParserParser.RULE_values,
9
+ WebdaQLParserParser.RULE_booleanLiteral,
10
+ WebdaQLParserParser.RULE_stringLiteral,
11
+ WebdaQLParserParser.RULE_parameter
12
+ ]);
13
+ const IGNORED_TOKENS = new Set([
14
+ WebdaQLParserParser.SPACE,
15
+ WebdaQLParserParser.SINGLE_QUOTE_SYMB,
16
+ WebdaQLParserParser.DOUBLE_QUOTE_SYMB,
17
+ WebdaQLParserParser.IDENTIFIER_WITH_NUMBER,
18
+ WebdaQLParserParser.FUNCTION_IDENTIFIER_WITH_UNDERSCORE,
19
+ WebdaQLParserParser.DQUOTED_STRING_LITERAL,
20
+ WebdaQLParserParser.SQUOTED_STRING_LITERAL,
21
+ WebdaQLParserParser.INTEGER_LITERAL,
22
+ WebdaQLParserParser.NUMBER_LITERAL,
23
+ Token.EOF
24
+ ]);
25
+ const COMPARISON_TOKENS = new Set([
26
+ WebdaQLParserParser.EQUAL,
27
+ WebdaQLParserParser.NOT_EQUAL,
28
+ WebdaQLParserParser.GREATER,
29
+ WebdaQLParserParser.GREATER_OR_EQUAL,
30
+ WebdaQLParserParser.LESS,
31
+ WebdaQLParserParser.LESS_OR_EQUAL,
32
+ WebdaQLParserParser.LIKE,
33
+ WebdaQLParserParser.IN,
34
+ WebdaQLParserParser.CONTAINS
35
+ ]);
36
+ const PUNCTUATION_TOKENS = new Set([
37
+ WebdaQLParserParser.LR_BRACKET,
38
+ WebdaQLParserParser.RR_BRACKET,
39
+ WebdaQLParserParser.COMMA,
40
+ WebdaQLParserParser.LR_SQ_BRACKET,
41
+ WebdaQLParserParser.RR_SQ_BRACKET,
42
+ WebdaQLParserParser.STAR
43
+ ]);
44
+ const FILTER_ONLY_DROPPED = new Set([
45
+ "SELECT",
46
+ "DELETE",
47
+ "UPDATE",
48
+ "SET",
49
+ "WHERE",
50
+ "GROUP BY",
51
+ "AS",
52
+ "DISTINCT",
53
+ "COUNT",
54
+ "SUM",
55
+ "AVG",
56
+ "MIN",
57
+ "MAX"
58
+ ]);
59
+ const KIND_RANK = {
60
+ field: 1,
61
+ value: 2,
62
+ operator: 3,
63
+ keyword: 4,
64
+ parameter: 5,
65
+ punctuation: 6
66
+ };
67
+ /**
68
+ * Classify a grammar token into its CompletionKind
69
+ *
70
+ * @param type - ANTLR token type ID
71
+ * @returns corresponding CompletionKind
72
+ */
73
+ function classifyToken(type) {
74
+ if (COMPARISON_TOKENS.has(type))
75
+ return "operator";
76
+ if (PUNCTUATION_TOKENS.has(type))
77
+ return "punctuation";
78
+ return "keyword";
79
+ }
80
+ /**
81
+ * Check whether a token type is an identifier or keyword suitable for prefix matching
82
+ *
83
+ * @param type - ANTLR token type ID
84
+ * @returns true if token is identifier or keyword
85
+ */
86
+ function isIdentifierOrKeyword(type) {
87
+ if (type === WebdaQLParserParser.IDENTIFIER || type === WebdaQLParserParser.IDENTIFIER_WITH_NUMBER)
88
+ return true;
89
+ if (type === WebdaQLParserParser.SPACE || type === Token.EOF)
90
+ return false;
91
+ return !PUNCTUATION_TOKENS.has(type) && !COMPARISON_TOKENS.has(type);
92
+ }
93
+ /**
94
+ * Check if the caret position is located inside an unclosed or closed string literal
95
+ *
96
+ * @param query - WebdaQL query string
97
+ * @param caret - 0-based character offset of the caret
98
+ * @returns StringLiteralContext describing if and where caret is inside a string
99
+ */
100
+ function getStringLiteralContext(query, caret) {
101
+ let inSingle = false;
102
+ let inDouble = false;
103
+ let quoteStart = -1;
104
+ for (let i = 0; i < query.length; i++) {
105
+ const ch = query[i];
106
+ if (ch === "\\" && (inSingle || inDouble)) {
107
+ i++;
108
+ continue;
109
+ }
110
+ if (ch === "'" && !inDouble) {
111
+ if (inSingle) {
112
+ if (caret > quoteStart && caret <= i) {
113
+ return {
114
+ inside: true,
115
+ start: quoteStart,
116
+ end: i + 1,
117
+ prefix: query.slice(quoteStart + 1, caret),
118
+ range: [quoteStart, i + 1]
119
+ };
120
+ }
121
+ inSingle = false;
122
+ quoteStart = -1;
123
+ }
124
+ else {
125
+ inSingle = true;
126
+ quoteStart = i;
127
+ }
128
+ }
129
+ else if (ch === '"' && !inSingle) {
130
+ if (inDouble) {
131
+ if (caret > quoteStart && caret <= i) {
132
+ return {
133
+ inside: true,
134
+ start: quoteStart,
135
+ end: i + 1,
136
+ prefix: query.slice(quoteStart + 1, caret),
137
+ range: [quoteStart, i + 1]
138
+ };
139
+ }
140
+ inDouble = false;
141
+ quoteStart = -1;
142
+ }
143
+ else {
144
+ inDouble = true;
145
+ quoteStart = i;
146
+ }
147
+ }
148
+ }
149
+ if ((inSingle || inDouble) && caret > quoteStart) {
150
+ return {
151
+ inside: true,
152
+ start: quoteStart,
153
+ end: caret,
154
+ prefix: query.slice(quoteStart + 1, caret),
155
+ range: [quoteStart, caret]
156
+ };
157
+ }
158
+ return { inside: false, start: -1, end: -1, prefix: "", range: [caret, caret] };
159
+ }
160
+ /**
161
+ * Walk back over token stream to find the identifier associated with an operator
162
+ *
163
+ * @param tokens - list of parsed tokens
164
+ * @param beforeIndex - token index to start walking backwards from
165
+ * @returns identifier name if found, undefined otherwise
166
+ */
167
+ function findFieldBeforeOperator(tokens, beforeIndex) {
168
+ let operatorIndex = -1;
169
+ for (let i = beforeIndex - 1; i >= 0; i--) {
170
+ const t = tokens[i];
171
+ if (COMPARISON_TOKENS.has(t.type) || t.type === WebdaQLParserParser.EQUAL) {
172
+ operatorIndex = i;
173
+ break;
174
+ }
175
+ }
176
+ if (operatorIndex <= 0)
177
+ return undefined;
178
+ for (let i = operatorIndex - 1; i >= 0; i--) {
179
+ const t = tokens[i];
180
+ if (t.type === WebdaQLParserParser.IDENTIFIER || t.type === WebdaQLParserParser.IDENTIFIER_WITH_NUMBER) {
181
+ return t.text;
182
+ }
183
+ if (t.type === WebdaQLParserParser.AND ||
184
+ t.type === WebdaQLParserParser.OR ||
185
+ t.type === WebdaQLParserParser.WHERE ||
186
+ t.type === WebdaQLParserParser.SELECT ||
187
+ t.type === WebdaQLParserParser.UPDATE ||
188
+ t.type === WebdaQLParserParser.DELETE) {
189
+ break;
190
+ }
191
+ }
192
+ return undefined;
193
+ }
194
+ /**
195
+ * Flatten a JSON schema into completion fields (nested objects as dotted paths, max depth 3)
196
+ *
197
+ * @param schema - JSON Schema 7 like object
198
+ * @param maxDepth - Maximum nesting depth (default 3)
199
+ * @returns Array of completion fields
200
+ */
201
+ export function fieldsFromSchema(schema, maxDepth = 3) {
202
+ if (!schema || typeof schema !== "object" || !schema.properties) {
203
+ return [];
204
+ }
205
+ /**
206
+ * Recursively collect fields from properties
207
+ *
208
+ * @param properties - JSON schema properties map
209
+ * @param prefix - dotted path prefix for nested fields
210
+ * @param currentDepth - current recursion depth
211
+ * @returns array of flattened completion fields
212
+ */
213
+ function collect(properties, prefix, currentDepth) {
214
+ const result = [];
215
+ for (const [key, prop] of Object.entries(properties)) {
216
+ if (typeof prop === "boolean") {
217
+ if (prop) {
218
+ result.push({ name: prefix ? `${prefix}.${key}` : key });
219
+ }
220
+ continue;
221
+ }
222
+ if (prop.$ref) {
223
+ continue;
224
+ }
225
+ const fieldName = prefix ? `${prefix}.${key}` : key;
226
+ const propType = Array.isArray(prop.type) ? prop.type.find(t => t !== "null") : prop.type;
227
+ if (propType === "object" && prop.properties && currentDepth < maxDepth) {
228
+ result.push(...collect(prop.properties, fieldName, currentDepth + 1));
229
+ }
230
+ else {
231
+ const item = { name: fieldName };
232
+ if (typeof propType === "string") {
233
+ item.type = propType;
234
+ }
235
+ if (Array.isArray(prop.enum)) {
236
+ item.enum = prop.enum;
237
+ }
238
+ if (typeof prop.description === "string") {
239
+ item.description = prop.description;
240
+ }
241
+ result.push(item);
242
+ }
243
+ }
244
+ return result;
245
+ }
246
+ return collect(schema.properties, "", 1);
247
+ }
248
+ /**
249
+ * Get code completion items for a WebdaQL query at the specified caret offset
250
+ *
251
+ * @param query - The WebdaQL query string
252
+ * @param caret - 0-based character offset of the caret
253
+ * @param options - Completion configuration options
254
+ * @returns Completion results with candidates and filtering prefix
255
+ */
256
+ export function getCompletions(query, caret, options) {
257
+ try {
258
+ if (typeof query !== "string") {
259
+ return { items: [], prefix: "" };
260
+ }
261
+ const clampedCaret = Math.max(0, Math.min(query.length, typeof caret === "number" ? caret : 0));
262
+ // Handle caret inside a string literal
263
+ const strCtx = getStringLiteralContext(query, clampedCaret);
264
+ if (strCtx.inside) {
265
+ const { tokens } = createTolerantParser(query.slice(0, strCtx.start));
266
+ tokens.fill();
267
+ const allTokens = tokens.getTokens();
268
+ const fieldName = findFieldBeforeOperator(allTokens, allTokens.length);
269
+ const field = options?.fields?.find(f => f.name === fieldName);
270
+ if (!field || !field.enum) {
271
+ return { items: [], prefix: strCtx.prefix };
272
+ }
273
+ const items = [];
274
+ for (const val of field.enum) {
275
+ const escaped = escapeValue(val);
276
+ items.push({
277
+ label: escaped,
278
+ insertText: escaped,
279
+ kind: "value",
280
+ detail: field.description || field.type,
281
+ range: strCtx.range
282
+ });
283
+ }
284
+ const filtered = items.filter(it => {
285
+ const unquoted = it.label.replace(/^['"]|['"]$/g, "");
286
+ return unquoted.startsWith(strCtx.prefix) || it.label.startsWith(strCtx.prefix);
287
+ });
288
+ return { items: filtered, prefix: strCtx.prefix };
289
+ }
290
+ // Normal parsing
291
+ const { parser, tokens } = createTolerantParser(query);
292
+ tokens.fill();
293
+ const allTokens = tokens.getTokens();
294
+ let prefix = "";
295
+ let range = [clampedCaret, clampedCaret];
296
+ let caretTokenIndex = allTokens.length - 1;
297
+ for (let i = 0; i < allTokens.length; i++) {
298
+ const t = allTokens[i];
299
+ if (t.type === Token.EOF)
300
+ continue;
301
+ if (isIdentifierOrKeyword(t.type)) {
302
+ if (clampedCaret > t.startIndex && clampedCaret <= t.stopIndex + 1) {
303
+ prefix = query.slice(t.startIndex, clampedCaret);
304
+ range = [t.startIndex, t.stopIndex + 1];
305
+ caretTokenIndex = t.tokenIndex;
306
+ break;
307
+ }
308
+ }
309
+ }
310
+ if (prefix === "") {
311
+ for (let i = 0; i < allTokens.length; i++) {
312
+ const t = allTokens[i];
313
+ if (t.stopIndex + 1 >= clampedCaret) {
314
+ caretTokenIndex = t.tokenIndex;
315
+ break;
316
+ }
317
+ }
318
+ }
319
+ const c3 = new CodeCompletionCore(parser);
320
+ c3.preferredRules = PREFERRED_RULES;
321
+ c3.ignoredTokens = IGNORED_TOKENS;
322
+ const res = c3.collectCandidates(caretTokenIndex);
323
+ let items = [];
324
+ // 1. Process candidate rules
325
+ for (const [ruleIndex] of res.rules) {
326
+ if (ruleIndex === WebdaQLParserParser.RULE_identifier) {
327
+ if (options?.fields) {
328
+ for (const f of options.fields) {
329
+ items.push({
330
+ label: f.name,
331
+ insertText: f.name,
332
+ kind: "field",
333
+ detail: f.description || f.type,
334
+ range
335
+ });
336
+ }
337
+ }
338
+ }
339
+ else if (ruleIndex === WebdaQLParserParser.RULE_values ||
340
+ ruleIndex === WebdaQLParserParser.RULE_booleanLiteral ||
341
+ ruleIndex === WebdaQLParserParser.RULE_stringLiteral) {
342
+ const fieldName = findFieldBeforeOperator(allTokens, caretTokenIndex);
343
+ const field = options?.fields?.find(f => f.name === fieldName);
344
+ if (field) {
345
+ if (field.enum) {
346
+ for (const val of field.enum) {
347
+ const escaped = escapeValue(val);
348
+ items.push({
349
+ label: escaped,
350
+ insertText: escaped,
351
+ kind: "value",
352
+ detail: field.description || field.type,
353
+ range
354
+ });
355
+ }
356
+ }
357
+ if (field.type === "boolean") {
358
+ items.push({
359
+ label: "TRUE",
360
+ insertText: "TRUE",
361
+ kind: "value",
362
+ detail: field.description || field.type,
363
+ range
364
+ });
365
+ items.push({
366
+ label: "FALSE",
367
+ insertText: "FALSE",
368
+ kind: "value",
369
+ detail: field.description || field.type,
370
+ range
371
+ });
372
+ }
373
+ }
374
+ }
375
+ else if (ruleIndex === WebdaQLParserParser.RULE_parameter) {
376
+ items.push({ label: "?", insertText: "?", kind: "parameter", range });
377
+ if (options?.parameters) {
378
+ for (const p of options.parameters) {
379
+ const name = p.startsWith(":") ? p : `:${p}`;
380
+ items.push({ label: name, insertText: name, kind: "parameter", range });
381
+ }
382
+ }
383
+ }
384
+ }
385
+ // 2. Process candidate tokens
386
+ for (const [tokenType, followList] of res.tokens) {
387
+ if (tokenType === WebdaQLParserParser.IS) {
388
+ items.push({ label: "IS NULL", insertText: "IS NULL ", kind: "operator", range });
389
+ items.push({ label: "IS NOT NULL", insertText: "IS NOT NULL ", kind: "operator", range });
390
+ continue;
391
+ }
392
+ const rawName = parser.vocabulary.getLiteralName(tokenType) || parser.vocabulary.getSymbolicName(tokenType);
393
+ if (!rawName)
394
+ continue;
395
+ const cleanName = rawName.replace(/^['"]|['"]$/g, "");
396
+ const kind = classifyToken(tokenType);
397
+ if (followList && followList.length > 0) {
398
+ const followKeywordNames = [];
399
+ let allKeywords = true;
400
+ for (const t of followList) {
401
+ if (classifyToken(t) === "keyword") {
402
+ const name = (parser.vocabulary.getLiteralName(t) || parser.vocabulary.getSymbolicName(t) || "").replace(/^['"]|['"]$/g, "");
403
+ if (name)
404
+ followKeywordNames.push(name);
405
+ }
406
+ else {
407
+ allKeywords = false;
408
+ break;
409
+ }
410
+ }
411
+ if (allKeywords && followKeywordNames.length > 0) {
412
+ const combined = [cleanName, ...followKeywordNames].join(" ");
413
+ items.push({ label: combined, insertText: `${combined} `, kind, range });
414
+ }
415
+ }
416
+ const insertText = kind === "punctuation" ? cleanName : `${cleanName} `;
417
+ items.push({ label: cleanName, insertText, kind, range });
418
+ }
419
+ // 3. Filter by prefix
420
+ if (prefix) {
421
+ items = items.filter(it => {
422
+ if (it.kind === "field") {
423
+ return it.label.startsWith(prefix);
424
+ }
425
+ else if (it.kind === "keyword" || it.kind === "operator") {
426
+ return it.label.toLowerCase().startsWith(prefix.toLowerCase());
427
+ }
428
+ else if (it.kind === "value") {
429
+ const unquoted = it.label.replace(/^['"]|['"]$/g, "");
430
+ return unquoted.startsWith(prefix) || it.label.startsWith(prefix);
431
+ }
432
+ else {
433
+ return it.label.startsWith(prefix);
434
+ }
435
+ });
436
+ }
437
+ // 4. Handle filterOnly option
438
+ if (options?.filterOnly) {
439
+ items = items.filter(it => {
440
+ const words = it.label.split(/\s+/);
441
+ return !words.some(w => FILTER_ONLY_DROPPED.has(w));
442
+ });
443
+ }
444
+ // 5. Deduplicate items by label
445
+ const seen = new Set();
446
+ const deduped = [];
447
+ for (const it of items) {
448
+ if (!seen.has(it.label)) {
449
+ seen.add(it.label);
450
+ deduped.push(it);
451
+ }
452
+ }
453
+ // 6. Rank by kind then alphabetically
454
+ deduped.sort((a, b) => {
455
+ const diff = KIND_RANK[a.kind] - KIND_RANK[b.kind];
456
+ if (diff !== 0)
457
+ return diff;
458
+ return a.label.localeCompare(b.label);
459
+ });
460
+ const limit = options?.limit ?? 50;
461
+ return { items: deduped.slice(0, limit), prefix };
462
+ }
463
+ catch (_e) {
464
+ return { items: [], prefix: "" };
465
+ }
466
+ }
467
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare class CompletionTest {
2
+ caretAtStart(): void;
3
+ partialIdentifier(): void;
4
+ afterIdentifier(): void;
5
+ afterComparisonOnEnumField(): void;
6
+ afterComparisonOnBooleanField(): void;
7
+ afterCompleteComparison(): void;
8
+ afterCompleteComparisonWithPrefix(): void;
9
+ afterOrderByField(): void;
10
+ afterSelect(): void;
11
+ afterSelectCountStar(): void;
12
+ afterUpdate(): void;
13
+ afterUpdateSet(): void;
14
+ dottedPathPrefix(): void;
15
+ insideStringLiteral(): void;
16
+ insideUnclosedStringLiteral(): void;
17
+ afterLimit(): void;
18
+ syntaxErrorAndCaretBoundsNoThrow(): void;
19
+ noFieldsOption(): void;
20
+ namedParameters(): void;
21
+ candidateLimit(): void;
22
+ fieldsFromSchema(): void;
23
+ performanceCheck(): void;
24
+ }
25
+ //# sourceMappingURL=completion.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.spec.d.ts","sourceRoot":"","sources":["../src/completion.spec.ts"],"names":[],"mappings":"AA8BA,qBACa,cAAc;IAEzB,YAAY,SAwBX;IAGD,iBAAiB,SAQhB;IAGD,eAAe,SAiBd;IAGD,0BAA0B,SAUzB;IAGD,6BAA6B,SAO5B;IAGD,uBAAuB,SAUtB;IAGD,iCAAiC,SAQhC;IAGD,iBAAiB,SAShB;IAGD,WAAW,SAYV;IAGD,oBAAoB,SAMnB;IAGD,WAAW,SAMV;IAGD,cAAc,SASb;IAGD,gBAAgB,SAQf;IAGD,mBAAmB,SAQlB;IAGD,2BAA2B,SAM1B;IAGD,UAAU,SAQT;IAGD,gCAAgC,SAkB/B;IAGD,cAAc,SASb;IAGD,eAAe,SASd;IAGD,cAAc,SAGb;IAGD,gBAAgB,SA6Df;IAGD,gBAAgB,SAef;CACF"}