rawsql-ts 0.11.33-beta → 0.11.35-beta
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.
- package/dist/esm/index.js +19 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +51 -43
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.d.ts +21 -0
- package/dist/esm/src/index.js +19 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/ValueComponent.d.ts +2 -2
- package/dist/esm/src/models/ValueComponent.js +2 -2
- package/dist/esm/src/models/ValueComponent.js.map +1 -1
- package/dist/esm/src/parsers/FunctionExpressionParser.d.ts +8 -1
- package/dist/esm/src/parsers/FunctionExpressionParser.js +75 -7
- package/dist/esm/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/LiteralParser.js +5 -5
- package/dist/esm/src/parsers/LiteralParser.js.map +1 -1
- package/dist/esm/src/parsers/ParenExpressionParser.js +5 -0
- package/dist/esm/src/parsers/ParenExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectQueryParser.js +26 -3
- package/dist/esm/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +31 -12
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/parsers/ValueParser.js +6 -2
- package/dist/esm/src/parsers/ValueParser.js.map +1 -1
- package/dist/esm/src/tokenReaders/CommandTokenReader.js +5 -0
- package/dist/esm/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js +7 -15
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/CTEBuilder.js +2 -2
- package/dist/esm/src/transformers/CTEBuilder.js.map +1 -1
- package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js +2 -2
- package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
- package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js +2 -2
- package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js +2 -2
- package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
- package/dist/esm/src/utils/CursorContextAnalyzer.d.ts +70 -0
- package/dist/esm/src/utils/CursorContextAnalyzer.js +322 -0
- package/dist/esm/src/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/esm/src/utils/IntelliSenseApi.d.ts +114 -0
- package/dist/esm/src/utils/IntelliSenseApi.js +284 -0
- package/dist/esm/src/utils/IntelliSenseApi.js.map +1 -0
- package/dist/esm/src/utils/KeywordCache.d.ts +65 -0
- package/dist/esm/src/utils/KeywordCache.js +202 -0
- package/dist/esm/src/utils/KeywordCache.js.map +1 -0
- package/dist/esm/src/utils/MultiQuerySplitter.d.ts +131 -0
- package/dist/esm/src/utils/MultiQuerySplitter.js +287 -0
- package/dist/esm/src/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/esm/src/utils/PositionAwareParser.d.ts +85 -0
- package/dist/esm/src/utils/PositionAwareParser.js +336 -0
- package/dist/esm/src/utils/PositionAwareParser.js.map +1 -0
- package/dist/esm/src/utils/ScopeResolver.d.ts +127 -0
- package/dist/esm/src/utils/ScopeResolver.js +268 -0
- package/dist/esm/src/utils/ScopeResolver.js.map +1 -0
- package/dist/esm/src/utils/TextPositionUtils.d.ts +62 -0
- package/dist/esm/src/utils/TextPositionUtils.js +124 -0
- package/dist/esm/src/utils/TextPositionUtils.js.map +1 -0
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +51 -43
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +21 -0
- package/dist/src/index.js +20 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/ValueComponent.d.ts +2 -2
- package/dist/src/models/ValueComponent.js +2 -2
- package/dist/src/models/ValueComponent.js.map +1 -1
- package/dist/src/parsers/FunctionExpressionParser.d.ts +8 -1
- package/dist/src/parsers/FunctionExpressionParser.js +75 -7
- package/dist/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/src/parsers/LiteralParser.js +5 -5
- package/dist/src/parsers/LiteralParser.js.map +1 -1
- package/dist/src/parsers/ParenExpressionParser.js +5 -0
- package/dist/src/parsers/ParenExpressionParser.js.map +1 -1
- package/dist/src/parsers/SelectQueryParser.js +26 -3
- package/dist/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.js +31 -12
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/ValueParser.js +6 -2
- package/dist/src/parsers/ValueParser.js.map +1 -1
- package/dist/src/tokenReaders/CommandTokenReader.js +5 -0
- package/dist/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/src/tokenReaders/LiteralTokenReader.js +7 -15
- package/dist/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/src/transformers/CTEBuilder.js +2 -2
- package/dist/src/transformers/CTEBuilder.js.map +1 -1
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.js +2 -2
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
- package/dist/src/transformers/PostgresJsonQueryBuilder.js +2 -2
- package/dist/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.js +2 -2
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
- package/dist/src/utils/CursorContextAnalyzer.d.ts +70 -0
- package/dist/src/utils/CursorContextAnalyzer.js +338 -0
- package/dist/src/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/src/utils/IntelliSenseApi.d.ts +114 -0
- package/dist/src/utils/IntelliSenseApi.js +292 -0
- package/dist/src/utils/IntelliSenseApi.js.map +1 -0
- package/dist/src/utils/KeywordCache.d.ts +65 -0
- package/dist/src/utils/KeywordCache.js +206 -0
- package/dist/src/utils/KeywordCache.js.map +1 -0
- package/dist/src/utils/MultiQuerySplitter.d.ts +131 -0
- package/dist/src/utils/MultiQuerySplitter.js +292 -0
- package/dist/src/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/src/utils/PositionAwareParser.d.ts +85 -0
- package/dist/src/utils/PositionAwareParser.js +363 -0
- package/dist/src/utils/PositionAwareParser.js.map +1 -0
- package/dist/src/utils/ScopeResolver.d.ts +127 -0
- package/dist/src/utils/ScopeResolver.js +272 -0
- package/dist/src/utils/ScopeResolver.js.map +1 -0
- package/dist/src/utils/TextPositionUtils.d.ts +62 -0
- package/dist/src/utils/TextPositionUtils.js +128 -0
- package/dist/src/utils/TextPositionUtils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -0,0 +1,272 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ScopeResolver = void 0;
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
5
|
+
const Clause_1 = require("../models/Clause");
|
6
|
+
const CTECollector_1 = require("../transformers/CTECollector");
|
7
|
+
const TextPositionUtils_1 = require("./TextPositionUtils");
|
8
|
+
/**
|
9
|
+
* Resolves scope information at cursor positions for SQL IntelliSense
|
10
|
+
*
|
11
|
+
* Provides comprehensive scope analysis including table availability, CTE resolution,
|
12
|
+
* and column visibility for intelligent code completion suggestions.
|
13
|
+
*
|
14
|
+
* @example
|
15
|
+
* ```typescript
|
16
|
+
* const sql = `
|
17
|
+
* WITH users AS (SELECT id, name FROM accounts)
|
18
|
+
* SELECT u.name FROM users u
|
19
|
+
* LEFT JOIN orders o ON u.id = o.user_id
|
20
|
+
* WHERE u.|
|
21
|
+
* `;
|
22
|
+
* const scope = ScopeResolver.resolveAt(sql, { line: 4, column: 12 });
|
23
|
+
*
|
24
|
+
* console.log(scope.availableTables); // [{ name: 'users', alias: 'u' }, { name: 'orders', alias: 'o' }]
|
25
|
+
* console.log(scope.availableCTEs); // [{ name: 'users', columns: ['id', 'name'] }]
|
26
|
+
* ```
|
27
|
+
*/
|
28
|
+
class ScopeResolver {
|
29
|
+
/**
|
30
|
+
* Resolve scope information at the specified cursor position
|
31
|
+
*
|
32
|
+
* @param sql - SQL text to analyze
|
33
|
+
* @param cursorPosition - Character position of cursor (0-based)
|
34
|
+
* @returns Complete scope information
|
35
|
+
*/
|
36
|
+
static resolve(sql, cursorPosition) {
|
37
|
+
// Simplified for suggestion-only focus - return basic scope information
|
38
|
+
// Complex SQL parsing removed to avoid issues with incomplete SQL syntax
|
39
|
+
return this.createEmptyScope();
|
40
|
+
}
|
41
|
+
/**
|
42
|
+
* Resolve scope information at line/column position
|
43
|
+
*
|
44
|
+
* @param sql - SQL text to analyze
|
45
|
+
* @param position - Line and column position (1-based)
|
46
|
+
* @returns Complete scope information
|
47
|
+
*/
|
48
|
+
static resolveAt(sql, position) {
|
49
|
+
const charOffset = TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(sql, position);
|
50
|
+
if (charOffset === -1) {
|
51
|
+
return this.createEmptyScope();
|
52
|
+
}
|
53
|
+
return this.resolve(sql, charOffset);
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Get available columns for a specific table or alias
|
57
|
+
*
|
58
|
+
* @param sql - SQL text containing the query
|
59
|
+
* @param cursorPosition - Cursor position for scope resolution
|
60
|
+
* @param tableOrAlias - Table name or alias to get columns for
|
61
|
+
* @returns Array of available columns for the specified table
|
62
|
+
*/
|
63
|
+
static getColumnsForTable(sql, cursorPosition, tableOrAlias) {
|
64
|
+
const scope = this.resolve(sql, cursorPosition);
|
65
|
+
// Find matching table
|
66
|
+
const table = scope.availableTables.find(t => t.name === tableOrAlias || t.alias === tableOrAlias);
|
67
|
+
if (!table) {
|
68
|
+
return [];
|
69
|
+
}
|
70
|
+
// Return columns for this table
|
71
|
+
return scope.visibleColumns.filter(col => col.tableName === table.name ||
|
72
|
+
(table.alias && col.tableAlias === table.alias));
|
73
|
+
}
|
74
|
+
static analyzeScopeFromQuery(query) {
|
75
|
+
const scope = {
|
76
|
+
availableTables: [],
|
77
|
+
availableCTEs: [],
|
78
|
+
subqueryLevel: 0,
|
79
|
+
visibleColumns: [],
|
80
|
+
currentQuery: query,
|
81
|
+
parentQueries: []
|
82
|
+
};
|
83
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery) {
|
84
|
+
// Collect CTEs
|
85
|
+
scope.availableCTEs = this.collectCTEs(query);
|
86
|
+
// Collect tables from FROM and JOINs
|
87
|
+
scope.availableTables = this.collectTablesFromQuery(query);
|
88
|
+
// Collect visible columns
|
89
|
+
scope.visibleColumns = this.collectVisibleColumns(scope.availableTables, scope.availableCTEs);
|
90
|
+
}
|
91
|
+
else if (query instanceof SelectQuery_1.BinarySelectQuery) {
|
92
|
+
// For UNION queries, analyze both sides
|
93
|
+
const leftScope = this.analyzeScopeFromQuery(query.left);
|
94
|
+
const rightScope = this.analyzeScopeFromQuery(query.right);
|
95
|
+
// Merge scopes (tables from both sides available)
|
96
|
+
scope.availableTables = [...leftScope.availableTables, ...rightScope.availableTables];
|
97
|
+
scope.availableCTEs = [...leftScope.availableCTEs, ...rightScope.availableCTEs];
|
98
|
+
scope.visibleColumns = [...leftScope.visibleColumns, ...rightScope.visibleColumns];
|
99
|
+
}
|
100
|
+
return scope;
|
101
|
+
}
|
102
|
+
static collectCTEs(query) {
|
103
|
+
const ctes = [];
|
104
|
+
if (query.withClause) {
|
105
|
+
const cteCollector = new CTECollector_1.CTECollector();
|
106
|
+
const collectedCTEs = cteCollector.collect(query);
|
107
|
+
for (const cte of collectedCTEs) {
|
108
|
+
ctes.push({
|
109
|
+
name: cte.getSourceAliasName(),
|
110
|
+
query: cte.query,
|
111
|
+
columns: this.extractCTEColumns(cte.query),
|
112
|
+
materialized: cte.materialized || false
|
113
|
+
});
|
114
|
+
}
|
115
|
+
}
|
116
|
+
return ctes;
|
117
|
+
}
|
118
|
+
static collectTablesFromQuery(query) {
|
119
|
+
const tables = [];
|
120
|
+
// Collect from FROM clause
|
121
|
+
if (query.fromClause) {
|
122
|
+
const fromTables = this.extractTablesFromFromClause(query.fromClause);
|
123
|
+
tables.push(...fromTables);
|
124
|
+
}
|
125
|
+
return tables;
|
126
|
+
}
|
127
|
+
static extractTablesFromFromClause(fromClause) {
|
128
|
+
var _a, _b, _c, _d;
|
129
|
+
const tables = [];
|
130
|
+
// Extract main source table
|
131
|
+
if (fromClause.source.datasource instanceof Clause_1.TableSource) {
|
132
|
+
const table = {
|
133
|
+
name: this.extractTableName(fromClause.source.datasource.qualifiedName),
|
134
|
+
alias: (_a = fromClause.source.aliasExpression) === null || _a === void 0 ? void 0 : _a.table.name,
|
135
|
+
schema: this.extractSchemaName(fromClause.source.datasource.qualifiedName),
|
136
|
+
fullName: this.getQualifiedNameString(fromClause.source.datasource.qualifiedName),
|
137
|
+
sourceType: 'table'
|
138
|
+
};
|
139
|
+
tables.push(table);
|
140
|
+
}
|
141
|
+
else if (fromClause.source.datasource instanceof Clause_1.SubQuerySource) {
|
142
|
+
const table = {
|
143
|
+
name: ((_b = fromClause.source.aliasExpression) === null || _b === void 0 ? void 0 : _b.table.name) || 'subquery',
|
144
|
+
alias: (_c = fromClause.source.aliasExpression) === null || _c === void 0 ? void 0 : _c.table.name,
|
145
|
+
fullName: ((_d = fromClause.source.aliasExpression) === null || _d === void 0 ? void 0 : _d.table.name) || 'subquery',
|
146
|
+
sourceType: 'subquery',
|
147
|
+
originalQuery: fromClause.source.datasource.query
|
148
|
+
};
|
149
|
+
tables.push(table);
|
150
|
+
}
|
151
|
+
// Collect from JOINs
|
152
|
+
if (fromClause.joins) {
|
153
|
+
for (const join of fromClause.joins) {
|
154
|
+
const joinTables = this.extractTablesFromJoin(join);
|
155
|
+
tables.push(...joinTables);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
return tables;
|
159
|
+
}
|
160
|
+
static extractTablesFromJoin(join) {
|
161
|
+
var _a, _b, _c, _d;
|
162
|
+
const tables = [];
|
163
|
+
if (join.source.datasource instanceof Clause_1.TableSource) {
|
164
|
+
const table = {
|
165
|
+
name: this.extractTableName(join.source.datasource.qualifiedName),
|
166
|
+
alias: (_a = join.source.aliasExpression) === null || _a === void 0 ? void 0 : _a.table.name,
|
167
|
+
schema: this.extractSchemaName(join.source.datasource.qualifiedName),
|
168
|
+
fullName: this.getQualifiedNameString(join.source.datasource.qualifiedName),
|
169
|
+
sourceType: 'table'
|
170
|
+
};
|
171
|
+
tables.push(table);
|
172
|
+
}
|
173
|
+
else if (join.source.datasource instanceof Clause_1.SubQuerySource) {
|
174
|
+
const table = {
|
175
|
+
name: ((_b = join.source.aliasExpression) === null || _b === void 0 ? void 0 : _b.table.name) || 'subquery',
|
176
|
+
alias: (_c = join.source.aliasExpression) === null || _c === void 0 ? void 0 : _c.table.name,
|
177
|
+
fullName: ((_d = join.source.aliasExpression) === null || _d === void 0 ? void 0 : _d.table.name) || 'subquery',
|
178
|
+
sourceType: 'subquery',
|
179
|
+
originalQuery: join.source.datasource.query
|
180
|
+
};
|
181
|
+
tables.push(table);
|
182
|
+
}
|
183
|
+
return tables;
|
184
|
+
}
|
185
|
+
static getQualifiedNameString(qualifiedName) {
|
186
|
+
// Use the existing method from QualifiedName to get the string representation
|
187
|
+
return qualifiedName.toString();
|
188
|
+
}
|
189
|
+
static extractTableName(qualifiedName) {
|
190
|
+
const fullName = this.getQualifiedNameString(qualifiedName);
|
191
|
+
const parts = fullName.split('.');
|
192
|
+
return parts[parts.length - 1]; // Last part is table name
|
193
|
+
}
|
194
|
+
static extractSchemaName(qualifiedName) {
|
195
|
+
const fullName = this.getQualifiedNameString(qualifiedName);
|
196
|
+
const parts = fullName.split('.');
|
197
|
+
return parts.length > 1 ? parts[parts.length - 2] : undefined;
|
198
|
+
}
|
199
|
+
static extractCTEColumns(query) {
|
200
|
+
// Try to extract column names from CTE SELECT clause
|
201
|
+
try {
|
202
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery && query.selectClause) {
|
203
|
+
const columns = [];
|
204
|
+
for (const item of query.selectClause.items) {
|
205
|
+
// Use alias if available, otherwise try to extract from expression
|
206
|
+
if (item.identifier) {
|
207
|
+
columns.push(item.identifier.name);
|
208
|
+
}
|
209
|
+
else {
|
210
|
+
// Try to extract column name from expression
|
211
|
+
const columnName = this.extractColumnNameFromExpression(item.value);
|
212
|
+
if (columnName) {
|
213
|
+
columns.push(columnName);
|
214
|
+
}
|
215
|
+
}
|
216
|
+
}
|
217
|
+
return columns;
|
218
|
+
}
|
219
|
+
}
|
220
|
+
catch (error) {
|
221
|
+
// If extraction fails, return undefined
|
222
|
+
}
|
223
|
+
return undefined;
|
224
|
+
}
|
225
|
+
static extractColumnNameFromExpression(expression) {
|
226
|
+
// Simple extraction - can be enhanced based on ValueComponent types
|
227
|
+
if (expression && typeof expression === 'object' && 'value' in expression) {
|
228
|
+
return expression.value;
|
229
|
+
}
|
230
|
+
return undefined;
|
231
|
+
}
|
232
|
+
static collectVisibleColumns(tables, ctes) {
|
233
|
+
const columns = [];
|
234
|
+
// Add columns from CTEs
|
235
|
+
for (const cte of ctes) {
|
236
|
+
if (cte.columns) {
|
237
|
+
for (const columnName of cte.columns) {
|
238
|
+
columns.push({
|
239
|
+
name: columnName,
|
240
|
+
tableName: cte.name,
|
241
|
+
fullReference: `${cte.name}.${columnName}`
|
242
|
+
});
|
243
|
+
}
|
244
|
+
}
|
245
|
+
}
|
246
|
+
// For regular tables, we would need schema information to determine columns
|
247
|
+
// This is a placeholder - in practice, this would integrate with database metadata
|
248
|
+
for (const table of tables) {
|
249
|
+
if (table.sourceType === 'table') {
|
250
|
+
// Placeholder - would query database schema
|
251
|
+
columns.push({
|
252
|
+
name: '*',
|
253
|
+
tableName: table.name,
|
254
|
+
tableAlias: table.alias,
|
255
|
+
fullReference: `${table.alias || table.name}.*`
|
256
|
+
});
|
257
|
+
}
|
258
|
+
}
|
259
|
+
return columns;
|
260
|
+
}
|
261
|
+
static createEmptyScope() {
|
262
|
+
return {
|
263
|
+
availableTables: [],
|
264
|
+
availableCTEs: [],
|
265
|
+
subqueryLevel: 0,
|
266
|
+
visibleColumns: [],
|
267
|
+
parentQueries: []
|
268
|
+
};
|
269
|
+
}
|
270
|
+
}
|
271
|
+
exports.ScopeResolver = ScopeResolver;
|
272
|
+
//# sourceMappingURL=ScopeResolver.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ScopeResolver.js","sourceRoot":"","sources":["../../../src/utils/ScopeResolver.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { LineColumn } from './LexemeCursor';
|
2
|
+
/**
|
3
|
+
* Utility functions for text position conversion and manipulation
|
4
|
+
*
|
5
|
+
* Provides centralized functionality for converting between different
|
6
|
+
* position representations commonly used in text processing and SQL parsing.
|
7
|
+
*/
|
8
|
+
export declare class TextPositionUtils {
|
9
|
+
/**
|
10
|
+
* Convert line/column position to character offset
|
11
|
+
*
|
12
|
+
* @param text - Source text
|
13
|
+
* @param position - Line/column position (1-based)
|
14
|
+
* @returns Character offset (0-based) or -1 if invalid
|
15
|
+
*
|
16
|
+
* @example
|
17
|
+
* ```typescript
|
18
|
+
* const text = "SELECT id\nFROM users";
|
19
|
+
* const charOffset = TextPositionUtils.lineColumnToCharOffset(text, { line: 2, column: 1 });
|
20
|
+
* console.log(charOffset); // 10 (position of 'F' in 'FROM')
|
21
|
+
* ```
|
22
|
+
*/
|
23
|
+
static lineColumnToCharOffset(text: string, position: LineColumn): number;
|
24
|
+
/**
|
25
|
+
* Convert character offset to line/column position
|
26
|
+
*
|
27
|
+
* @param text - Source text
|
28
|
+
* @param charOffset - Character offset (0-based)
|
29
|
+
* @returns Line/column position (1-based) or null if invalid
|
30
|
+
*
|
31
|
+
* @example
|
32
|
+
* ```typescript
|
33
|
+
* const text = "SELECT id\nFROM users";
|
34
|
+
* const position = TextPositionUtils.charOffsetToLineColumn(text, 10);
|
35
|
+
* console.log(position); // { line: 2, column: 1 }
|
36
|
+
* ```
|
37
|
+
*/
|
38
|
+
static charOffsetToLineColumn(text: string, charOffset: number): LineColumn | null;
|
39
|
+
/**
|
40
|
+
* Check if a position is within text bounds
|
41
|
+
*
|
42
|
+
* @param text - Source text
|
43
|
+
* @param position - Line/column position (1-based)
|
44
|
+
* @returns True if position is valid
|
45
|
+
*/
|
46
|
+
static isValidPosition(text: string, position: LineColumn): boolean;
|
47
|
+
/**
|
48
|
+
* Get the line at the specified line number
|
49
|
+
*
|
50
|
+
* @param text - Source text
|
51
|
+
* @param lineNumber - Line number (1-based)
|
52
|
+
* @returns Line content or null if invalid
|
53
|
+
*/
|
54
|
+
static getLine(text: string, lineNumber: number): string | null;
|
55
|
+
/**
|
56
|
+
* Get the total number of lines in text
|
57
|
+
*
|
58
|
+
* @param text - Source text
|
59
|
+
* @returns Number of lines
|
60
|
+
*/
|
61
|
+
static getLineCount(text: string): number;
|
62
|
+
}
|
@@ -0,0 +1,128 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.TextPositionUtils = void 0;
|
4
|
+
/**
|
5
|
+
* Utility functions for text position conversion and manipulation
|
6
|
+
*
|
7
|
+
* Provides centralized functionality for converting between different
|
8
|
+
* position representations commonly used in text processing and SQL parsing.
|
9
|
+
*/
|
10
|
+
class TextPositionUtils {
|
11
|
+
/**
|
12
|
+
* Convert line/column position to character offset
|
13
|
+
*
|
14
|
+
* @param text - Source text
|
15
|
+
* @param position - Line/column position (1-based)
|
16
|
+
* @returns Character offset (0-based) or -1 if invalid
|
17
|
+
*
|
18
|
+
* @example
|
19
|
+
* ```typescript
|
20
|
+
* const text = "SELECT id\nFROM users";
|
21
|
+
* const charOffset = TextPositionUtils.lineColumnToCharOffset(text, { line: 2, column: 1 });
|
22
|
+
* console.log(charOffset); // 10 (position of 'F' in 'FROM')
|
23
|
+
* ```
|
24
|
+
*/
|
25
|
+
static lineColumnToCharOffset(text, position) {
|
26
|
+
if (position.line < 1 || position.column < 1) {
|
27
|
+
return -1;
|
28
|
+
}
|
29
|
+
const lines = text.split('\n');
|
30
|
+
if (position.line > lines.length) {
|
31
|
+
return -1;
|
32
|
+
}
|
33
|
+
const targetLine = lines[position.line - 1];
|
34
|
+
if (position.column > targetLine.length + 1) {
|
35
|
+
return -1;
|
36
|
+
}
|
37
|
+
let offset = 0;
|
38
|
+
for (let i = 0; i < position.line - 1; i++) {
|
39
|
+
offset += lines[i].length + 1; // +1 for newline
|
40
|
+
}
|
41
|
+
offset += position.column - 1;
|
42
|
+
return offset;
|
43
|
+
}
|
44
|
+
/**
|
45
|
+
* Convert character offset to line/column position
|
46
|
+
*
|
47
|
+
* @param text - Source text
|
48
|
+
* @param charOffset - Character offset (0-based)
|
49
|
+
* @returns Line/column position (1-based) or null if invalid
|
50
|
+
*
|
51
|
+
* @example
|
52
|
+
* ```typescript
|
53
|
+
* const text = "SELECT id\nFROM users";
|
54
|
+
* const position = TextPositionUtils.charOffsetToLineColumn(text, 10);
|
55
|
+
* console.log(position); // { line: 2, column: 1 }
|
56
|
+
* ```
|
57
|
+
*/
|
58
|
+
static charOffsetToLineColumn(text, charOffset) {
|
59
|
+
if (charOffset < 0 || charOffset > text.length) {
|
60
|
+
return null;
|
61
|
+
}
|
62
|
+
const lines = text.split('\n');
|
63
|
+
let currentOffset = 0;
|
64
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
65
|
+
const lineLength = lines[lineIndex].length;
|
66
|
+
if (charOffset < currentOffset + lineLength) {
|
67
|
+
return {
|
68
|
+
line: lineIndex + 1,
|
69
|
+
column: charOffset - currentOffset + 1
|
70
|
+
};
|
71
|
+
}
|
72
|
+
if (charOffset === currentOffset + lineLength && lineIndex < lines.length - 1) {
|
73
|
+
return {
|
74
|
+
line: lineIndex + 2,
|
75
|
+
column: 1
|
76
|
+
};
|
77
|
+
}
|
78
|
+
currentOffset += lineLength + 1; // +1 for newline
|
79
|
+
}
|
80
|
+
// Handle position at very end
|
81
|
+
if (charOffset === text.length) {
|
82
|
+
const lastLine = lines[lines.length - 1];
|
83
|
+
return {
|
84
|
+
line: lines.length,
|
85
|
+
column: lastLine.length + 1
|
86
|
+
};
|
87
|
+
}
|
88
|
+
return null;
|
89
|
+
}
|
90
|
+
/**
|
91
|
+
* Check if a position is within text bounds
|
92
|
+
*
|
93
|
+
* @param text - Source text
|
94
|
+
* @param position - Line/column position (1-based)
|
95
|
+
* @returns True if position is valid
|
96
|
+
*/
|
97
|
+
static isValidPosition(text, position) {
|
98
|
+
return this.lineColumnToCharOffset(text, position) !== -1;
|
99
|
+
}
|
100
|
+
/**
|
101
|
+
* Get the line at the specified line number
|
102
|
+
*
|
103
|
+
* @param text - Source text
|
104
|
+
* @param lineNumber - Line number (1-based)
|
105
|
+
* @returns Line content or null if invalid
|
106
|
+
*/
|
107
|
+
static getLine(text, lineNumber) {
|
108
|
+
if (lineNumber < 1) {
|
109
|
+
return null;
|
110
|
+
}
|
111
|
+
const lines = text.split('\n');
|
112
|
+
if (lineNumber > lines.length) {
|
113
|
+
return null;
|
114
|
+
}
|
115
|
+
return lines[lineNumber - 1];
|
116
|
+
}
|
117
|
+
/**
|
118
|
+
* Get the total number of lines in text
|
119
|
+
*
|
120
|
+
* @param text - Source text
|
121
|
+
* @returns Number of lines
|
122
|
+
*/
|
123
|
+
static getLineCount(text) {
|
124
|
+
return text.split('\n').length;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
exports.TextPositionUtils = TextPositionUtils;
|
128
|
+
//# sourceMappingURL=TextPositionUtils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TextPositionUtils.js","sourceRoot":"","sources":["../../../src/utils/TextPositionUtils.ts"],"names":[],"mappings":"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"}
|