UNPKG

rawsql-ts

Version:

[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.

92 lines 4.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OnelineFormattingHelper = void 0; const SqlPrintToken_1 = require("../models/SqlPrintToken"); class OnelineFormattingHelper { constructor(options) { this.options = options; } shouldFormatContainer(token, shouldIndentNested) { switch (token.containerType) { case SqlPrintToken_1.SqlPrintTokenContainerType.ParenExpression: return this.options.parenthesesOneLine && !shouldIndentNested; case SqlPrintToken_1.SqlPrintTokenContainerType.BetweenExpression: return this.options.betweenOneLine; case SqlPrintToken_1.SqlPrintTokenContainerType.Values: return this.options.valuesOneLine; case SqlPrintToken_1.SqlPrintTokenContainerType.JoinOnClause: return this.options.joinOneLine; case SqlPrintToken_1.SqlPrintTokenContainerType.CaseExpression: return this.options.caseOneLine; case SqlPrintToken_1.SqlPrintTokenContainerType.InlineQuery: return this.options.subqueryOneLine; default: return false; } } isInsertClauseOneline(parentContainerType) { if (!this.options.insertColumnsOneLine) { return false; } return parentContainerType === SqlPrintToken_1.SqlPrintTokenContainerType.InsertClause || parentContainerType === SqlPrintToken_1.SqlPrintTokenContainerType.MergeInsertAction; } shouldInsertJoinNewline(insideWithClause) { return !(insideWithClause && this.options.withClauseStyle === 'full-oneline'); } resolveCommaBreak(parentContainerType, commaBreak, cteCommaBreak, valuesCommaBreak) { if (parentContainerType === SqlPrintToken_1.SqlPrintTokenContainerType.WithClause) { return cteCommaBreak; } if (parentContainerType === SqlPrintToken_1.SqlPrintTokenContainerType.Values) { return valuesCommaBreak; } if (this.isInsertClauseOneline(parentContainerType)) { return 'none'; } return commaBreak; } shouldSkipInsertClauseSpace(parentContainerType, nextToken, currentLineText) { const isInsertContainer = parentContainerType === SqlPrintToken_1.SqlPrintTokenContainerType.InsertClause || parentContainerType === SqlPrintToken_1.SqlPrintTokenContainerType.MergeInsertAction; if (!isInsertContainer) { return false; } if (nextToken && nextToken.type === SqlPrintToken_1.SqlPrintTokenType.parenthesis && nextToken.text === '(') { return true; } if (!this.options.insertColumnsOneLine) { return false; } const lastChar = currentLineText.slice(-1); return lastChar === '(' || lastChar === ' ' || lastChar === ''; } shouldSkipCommentBlockSpace(parentContainerType, insideWithClause) { return parentContainerType === SqlPrintToken_1.SqlPrintTokenContainerType.CommentBlock && insideWithClause && this.options.withClauseStyle === 'full-oneline'; } formatInsertClauseToken(text, parentContainerType, currentLineText, ensureTrailingSpace) { var _a, _b; if (!this.isInsertClauseOneline(parentContainerType)) { return { handled: false }; } if (text === '') { return { handled: true }; } const leadingWhitespace = (_b = (_a = text.match(/^\s+/)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : ''; const trimmed = leadingWhitespace ? text.slice(leadingWhitespace.length) : text; if (trimmed === '') { return { handled: true }; } if (leadingWhitespace) { const lastChar = currentLineText.slice(-1); if (lastChar !== '(' && lastChar !== ' ' && lastChar !== '') { ensureTrailingSpace(); } } return { handled: true, text: trimmed }; } } exports.OnelineFormattingHelper = OnelineFormattingHelper; //# sourceMappingURL=OnelineFormattingHelper.js.map