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
JavaScript
"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