monaco-yql-languages 2.1.0 → 2.2.0

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,4 +1,4 @@
1
- import { generateColumnsSuggestion, generateEntitiesSuggestion } from '../generateSuggestions';
1
+ import { generateColumnsSuggestion, generateCompressionSettingsSuggestion, generateEncodingSettingsSuggestion, generateEntitiesSuggestion, } from '../generateSuggestions';
2
2
  jest.mock('../../../fillers/monaco-editor-core', () => ({
3
3
  languages: {
4
4
  CompletionItemKind: {
@@ -305,3 +305,33 @@ describe('generateEntitiesSuggestion', () => {
305
305
  ]);
306
306
  });
307
307
  });
308
+ describe('generateCompressionSettingsSuggestion', () => {
309
+ it('should generate compression settings suggestions', async () => {
310
+ const suggestions = await generateCompressionSettingsSuggestion(mockRange, ['gzip']);
311
+ expect(suggestions).toEqual([
312
+ {
313
+ label: 'gzip',
314
+ insertText: 'gzip',
315
+ kind: undefined,
316
+ detail: 'Setting',
317
+ range: mockRange,
318
+ sortText: 'a',
319
+ },
320
+ ]);
321
+ });
322
+ });
323
+ describe('generateEncodingSettingsSuggestion', () => {
324
+ it('should generate encoding settings suggestions', async () => {
325
+ const suggestions = await generateEncodingSettingsSuggestion(mockRange, ['utf-8']);
326
+ expect(suggestions).toEqual([
327
+ {
328
+ label: 'utf-8',
329
+ insertText: 'utf-8',
330
+ kind: undefined,
331
+ detail: 'Setting',
332
+ range: mockRange,
333
+ sortText: 'a',
334
+ },
335
+ ]);
336
+ });
337
+ });
@@ -27,6 +27,8 @@ export declare function generateTableFunctionsSuggestion(rangeToInsertSuggestion
27
27
  export declare function generateUdfSuggestion(rangeToInsertSuggestion: monaco.IRange, udfs?: string[]): Promise<monaco.languages.CompletionItem[]>;
28
28
  export declare function generatePragmasSuggestion(rangeToInsertSuggestion: monaco.IRange, pragmas?: string[]): Promise<monaco.languages.CompletionItem[]>;
29
29
  export declare function generateEntitySettingsSuggestion(rangeToInsertSuggestion: monaco.IRange, entitySettings?: string[]): Promise<monaco.languages.CompletionItem[]>;
30
+ export declare function generateCompressionSettingsSuggestion(rangeToInsertSuggestion: monaco.IRange, compressionSettings?: string[]): Promise<monaco.languages.CompletionItem[]>;
31
+ export declare function generateEncodingSettingsSuggestion(rangeToInsertSuggestion: monaco.IRange, encodingSettings?: string[]): Promise<monaco.languages.CompletionItem[]>;
30
32
  export declare function generateColumnAliasesSuggestion(rangeToInsertSuggestion: monaco.IRange, suggestColumnAliases?: ColumnAliasSuggestion[]): {
31
33
  label: string;
32
34
  insertText: string;
@@ -125,13 +125,22 @@ export async function generatePragmasSuggestion(rangeToInsertSuggestion, pragmas
125
125
  }));
126
126
  }
127
127
  export async function generateEntitySettingsSuggestion(rangeToInsertSuggestion, entitySettings = []) {
128
- return entitySettings.map((el) => ({
128
+ return generateSettingsSuggestion(rangeToInsertSuggestion, entitySettings, 'suggestEntitySettings');
129
+ }
130
+ export async function generateCompressionSettingsSuggestion(rangeToInsertSuggestion, compressionSettings = []) {
131
+ return generateSettingsSuggestion(rangeToInsertSuggestion, compressionSettings, 'suggestCompressionSettings');
132
+ }
133
+ export async function generateEncodingSettingsSuggestion(rangeToInsertSuggestion, encodingSettings = []) {
134
+ return generateSettingsSuggestion(rangeToInsertSuggestion, encodingSettings, 'suggestEncodingSettings');
135
+ }
136
+ function generateSettingsSuggestion(rangeToInsertSuggestion, settings = [], suggestionType) {
137
+ return settings.map((el) => ({
129
138
  label: el,
130
139
  insertText: el,
131
140
  kind: monaco.languages.CompletionItemKind.Property,
132
141
  detail: 'Setting',
133
142
  range: rangeToInsertSuggestion,
134
- sortText: suggestionIndexToWeight(getSuggestionIndex('suggestEntitySettings')),
143
+ sortText: suggestionIndexToWeight(getSuggestionIndex(suggestionType)),
135
144
  }));
136
145
  }
137
146
  export function generateColumnAliasesSuggestion(rangeToInsertSuggestion, suggestColumnAliases = []) {
@@ -9,13 +9,15 @@ const SuggestionsWeight = {
9
9
  suggestTableIndexes: 7,
10
10
  suggestTableHints: 8,
11
11
  suggestEntitySettings: 9,
12
- suggestKeywords: 10,
13
- suggestAggregateFunctions: 11,
14
- suggestTableFunctions: 12,
15
- suggestWindowFunctions: 13,
16
- suggestFunctions: 14,
17
- suggestSimpleTypes: 15,
18
- suggestUdfs: 16,
12
+ suggestCompressionSettings: 10,
13
+ suggestEncodingSettings: 11,
14
+ suggestKeywords: 12,
15
+ suggestAggregateFunctions: 13,
16
+ suggestTableFunctions: 14,
17
+ suggestWindowFunctions: 15,
18
+ suggestFunctions: 16,
19
+ suggestSimpleTypes: 17,
20
+ suggestUdfs: 18,
19
21
  };
20
22
  export function getSuggestionIndex(suggestionType) {
21
23
  return SuggestionsWeight[suggestionType];
@@ -11,11 +11,13 @@ export type YQLAutocompleteConfig = {
11
11
  getAggregateFunctions?: YQLAutocomplete['getAggregateFunctions'];
12
12
  getSimpleFunctions?: YQLAutocomplete['getSimpleFunctions'];
13
13
  getEntitySettings?: YQLAutocomplete['getEntitySettings'];
14
+ getCompressionSettings?: YQLAutocomplete['getCompressionSettings'];
15
+ getEncodingSettings?: YQLAutocomplete['getEncodingSettings'];
14
16
  fetchEntities?: YQLAutocomplete['fetchEntities'];
15
17
  fetchEntityColumns?: YQLAutocomplete['fetchEntityColumns'];
16
18
  };
17
19
  export declare class YQLAutocomplete {
18
- constructor({ getQueryParser, getUdfs, getSimpleTypes, getPragmas, getWindowFunctions, getTableFunctions, getAggregateFunctions, getSimpleFunctions, getEntitySettings, fetchEntities, fetchEntityColumns, }: YQLAutocompleteConfig);
20
+ constructor({ getQueryParser, getUdfs, getSimpleTypes, getPragmas, getWindowFunctions, getTableFunctions, getAggregateFunctions, getSimpleFunctions, getEntitySettings, getCompressionSettings, getEncodingSettings, fetchEntities, fetchEntityColumns, }: YQLAutocompleteConfig);
19
21
  getSuggestions(input: string, offset: number): Promise<Monaco.languages.CompletionItem[]>;
20
22
  parseInput(input: string, offset: number): Promise<import("@gravity-ui/websql-autocomplete/yql").YqlAutocompleteResult>;
21
23
  getQueryParser(): Promise<typeof import("@gravity-ui/websql-autocomplete/yql").parseYqlQuery>;
@@ -32,6 +34,16 @@ export declare class YQLAutocomplete {
32
34
  * @returns A promise that resolves to an array of entity settings.
33
35
  */
34
36
  getEntitySettings(_entityType: YQLEntity): Promise<string[]>;
37
+ /**
38
+ * Fetches compression settings.
39
+ * @returns A promise that resolves to an array of compression settings.
40
+ */
41
+ getCompressionSettings(_prefix?: string): Promise<string[]>;
42
+ /**
43
+ * Fetches encoding settings.
44
+ * @returns A promise that resolves to an array of encoding settings.
45
+ */
46
+ getEncodingSettings(_prefix?: string): Promise<string[]>;
35
47
  /**
36
48
  * Fetches entities based on the provided prefix and needed entity types.
37
49
  * @param prefix - The prefix to filter entities.
@@ -1,4 +1,4 @@
1
- import { generateAggregateFunctionsSuggestion, generateColumnAliasesSuggestion, generateColumnsSuggestion, generateEntitiesSuggestion, generateEntitySettingsSuggestion, generateKeywordsSuggestion, generatePragmasSuggestion, generateSimpleFunctionsSuggestion, generateSimpleTypesSuggestion, generateTableFunctionsSuggestion, generateUdfSuggestion, generateVariableSuggestion, generateWindowFunctionsSuggestion, } from './generateSuggestions';
1
+ import { generateAggregateFunctionsSuggestion, generateColumnAliasesSuggestion, generateColumnsSuggestion, generateCompressionSettingsSuggestion, generateEncodingSettingsSuggestion, generateEntitiesSuggestion, generateEntitySettingsSuggestion, generateKeywordsSuggestion, generatePragmasSuggestion, generateSimpleFunctionsSuggestion, generateSimpleTypesSuggestion, generateTableFunctionsSuggestion, generateUdfSuggestion, generateVariableSuggestion, generateWindowFunctionsSuggestion, } from './generateSuggestions';
2
2
  import { getEntitiesToFetchColumns } from './utils';
3
3
  function getCursorPosition(input, offset) {
4
4
  const lines = input.slice(0, offset).split('\n');
@@ -29,7 +29,7 @@ function getRangeToInsertSuggestion(input, offset) {
29
29
  };
30
30
  }
31
31
  export class YQLAutocomplete {
32
- constructor({ getQueryParser, getUdfs, getSimpleTypes, getPragmas, getWindowFunctions, getTableFunctions, getAggregateFunctions, getSimpleFunctions, getEntitySettings, fetchEntities, fetchEntityColumns, }) {
32
+ constructor({ getQueryParser, getUdfs, getSimpleTypes, getPragmas, getWindowFunctions, getTableFunctions, getAggregateFunctions, getSimpleFunctions, getEntitySettings, getCompressionSettings, getEncodingSettings, fetchEntities, fetchEntityColumns, }) {
33
33
  if (getQueryParser) {
34
34
  this.getQueryParser = getQueryParser;
35
35
  }
@@ -57,6 +57,12 @@ export class YQLAutocomplete {
57
57
  if (getEntitySettings) {
58
58
  this.getEntitySettings = getEntitySettings;
59
59
  }
60
+ if (getCompressionSettings) {
61
+ this.getCompressionSettings = getCompressionSettings;
62
+ }
63
+ if (getEncodingSettings) {
64
+ this.getEncodingSettings = getEncodingSettings;
65
+ }
60
66
  if (fetchEntities) {
61
67
  this.fetchEntities = fetchEntities;
62
68
  }
@@ -75,6 +81,8 @@ export class YQLAutocomplete {
75
81
  let simpleTypesSuggestions = [];
76
82
  let pragmasSuggestions = [];
77
83
  let entitySettingsSuggestions = [];
84
+ let compressionSettingsSuggestions = [];
85
+ let encodingSettingsSuggestions = [];
78
86
  let variableSuggestions = [];
79
87
  let columnsSuggestions = [];
80
88
  const rangeToInsertSuggestion = getRangeToInsertSuggestion(input, offset);
@@ -118,6 +126,14 @@ export class YQLAutocomplete {
118
126
  const entitySettings = await this.getEntitySettings(parseResult.suggestEntitySettings);
119
127
  entitySettingsSuggestions = await generateEntitySettingsSuggestion(rangeToInsertSuggestion, entitySettings);
120
128
  }
129
+ if (parseResult.suggestCompressionSettings) {
130
+ const compressionSettings = await this.getCompressionSettings(cursorPrefix);
131
+ compressionSettingsSuggestions = await generateCompressionSettingsSuggestion(rangeToInsertSuggestion, compressionSettings);
132
+ }
133
+ if (parseResult.suggestEncodingSettings) {
134
+ const encodingSettings = await this.getEncodingSettings(cursorPrefix);
135
+ encodingSettingsSuggestions = await generateEncodingSettingsSuggestion(rangeToInsertSuggestion, encodingSettings);
136
+ }
121
137
  const keywordsSuggestions = generateKeywordsSuggestion(rangeToInsertSuggestion, parseResult.suggestKeywords);
122
138
  const columnAliasSuggestion = await generateColumnAliasesSuggestion(rangeToInsertSuggestion, parseResult.suggestColumnAliases);
123
139
  if (parseResult.suggestColumns) {
@@ -138,6 +154,8 @@ export class YQLAutocomplete {
138
154
  ...keywordsSuggestions,
139
155
  ...aggregateFunctionsSuggestions,
140
156
  ...entitySettingsSuggestions,
157
+ ...compressionSettingsSuggestions,
158
+ ...encodingSettingsSuggestions,
141
159
  ...variableSuggestions,
142
160
  ];
143
161
  return suggestions;
@@ -184,6 +202,20 @@ export class YQLAutocomplete {
184
202
  async getEntitySettings(_entityType) {
185
203
  return [];
186
204
  }
205
+ /**
206
+ * Fetches compression settings.
207
+ * @returns A promise that resolves to an array of compression settings.
208
+ */
209
+ async getCompressionSettings(_prefix) {
210
+ return [];
211
+ }
212
+ /**
213
+ * Fetches encoding settings.
214
+ * @returns A promise that resolves to an array of encoding settings.
215
+ */
216
+ async getEncodingSettings(_prefix) {
217
+ return [];
218
+ }
187
219
  /**
188
220
  * Fetches entities based on the provided prefix and needed entity types.
189
221
  * @param prefix - The prefix to filter entities.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monaco-yql-languages",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "YQL languages for the Monaco Editor, based on monaco-languages.",
5
5
  "author": "YDB",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "@gravity-ui/prettier-config": "^1.1.0",
33
33
  "@gravity-ui/stylelint-config": "^4.0.1",
34
34
  "@gravity-ui/tsconfig": "^1.0.0",
35
- "@gravity-ui/websql-autocomplete": "^13.13.0",
35
+ "@gravity-ui/websql-autocomplete": "^13.15.0",
36
36
  "@jest/types": "^29.6.3",
37
37
  "@types/jest": "^29.5.14",
38
38
  "eslint": "^8.57.1",
@@ -46,7 +46,7 @@
46
46
  "typescript": "^5.7.3"
47
47
  },
48
48
  "peerDependencies": {
49
- "@gravity-ui/websql-autocomplete": "^13.7.0",
49
+ "@gravity-ui/websql-autocomplete": "^13.15.0",
50
50
  "monaco-editor": ">=0.27.0"
51
51
  },
52
52
  "nano-staged": {