/
githubmirror
/
ydb-embedded-ui
Обзор
Документация
Войти
/
githubmirror
/
ydb-embedded-ui
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/containers/Tenant/Query/Issues/helpers.ts
98 строк
3 KB
Hellen
feat(QueryEditor): current query under cursor (#4162)
04 авг 2026, 13:45
Не верифицирован
04 авг 2026, 13:45
d3f2c00
Код
Авторство
О чём код?
import type {QuerySourcePosition} from '../../../../store/reducers/query/types'; import type {ErrorResponse, IssueMessage} from '../../../../types/api/query'; import {isNumeric} from '../../../../utils/utils'; export const QUERY_SETTINGS_PRAGMAS_SOURCE = 'query-settings-pragmas'; export function hasRootIssues(issues?: IssueMessage[]): issues is IssueMessage[] { return Array.isArray(issues) && issues.length > 0; } export function normalizeRoots(data: ErrorResponse | string): IssueMessage[] { if (typeof data === 'string') { return []; } if (data?.error?.message) { return [ { message: data.error.message, severity: data.error.severity, position: data.error.position, end_position: data.error.end_position, issue_code: data.error.issue_code, issues: Array.isArray(data.issues) ? data.issues : [], }, ]; } return Array.isArray(data.issues) ? data.issues : []; } export function getIssuePosition(issue: IssueMessage): string { const {position} = issue; if (typeof position !== 'object' || position === null || !isNumeric(position.row)) { return ''; } const {row, column} = position; return isNumeric(column) ? `${row}:${column}` : `line ${row}`; } export function getMostSevere(issues?: IssueMessage[] | null) { return issues?.reduce((result, issue) => { const severity = issue.severity ?? 10; return Math.min(result, severity); }, 10); } function offsetPosition(position: IssueMessage['position'], sourcePosition: QuerySourcePosition) { if (!position || !isNumeric(position.row)) { return position; } const row = Number(position.row); const preparedQueryPrefixLineCount = sourcePosition.preparedQueryPrefixLineCount ?? 0; if (row <= preparedQueryPrefixLineCount) { return {...position, file: QUERY_SETTINGS_PRAGMAS_SOURCE}; } const fragmentRow = row - preparedQueryPrefixLineCount; return { ...position, row: fragmentRow + sourcePosition.lineNumber - 1, column: fragmentRow === 1 && isNumeric(position.column) ? Number(position.column) + sourcePosition.column - 1 : position.column, }; } function offsetIssuePositions( issue: IssueMessage, sourcePosition: QuerySourcePosition, ): IssueMessage { return { ...issue, position: offsetPosition(issue.position, sourcePosition), end_position: offsetPosition(issue.end_position, sourcePosition), issues: Array.isArray(issue.issues) ? issue.issues.map((nestedIssue) => offsetIssuePositions(nestedIssue, sourcePosition)) : issue.issues, }; } export function offsetErrorResponsePositions( error: ErrorResponse, sourcePosition: QuerySourcePosition, ): ErrorResponse { return { ...error, error: error.error ? offsetIssuePositions(error.error, sourcePosition) : undefined, issues: error.issues === null ? null : error.issues?.map((issue) => offsetIssuePositions(issue, sourcePosition)), }; }