sql-formatter
Version:
Format whitespace in a SQL query to make it more readable
159 lines (158 loc) • 4.96 kB
TypeScript
import { TokenType } from '../lexer/token.js';
export declare enum NodeType {
statement = "statement",
clause = "clause",
set_operation = "set_operation",
function_call = "function_call",
parameterized_data_type = "parameterized_data_type",
array_subscript = "array_subscript",
property_access = "property_access",
parenthesis = "parenthesis",
between_predicate = "between_predicate",
case_expression = "case_expression",
case_when = "case_when",
case_else = "case_else",
limit_clause = "limit_clause",
all_columns_asterisk = "all_columns_asterisk",
literal = "literal",
identifier = "identifier",
keyword = "keyword",
data_type = "data_type",
parameter = "parameter",
operator = "operator",
comma = "comma",
line_comment = "line_comment",
block_comment = "block_comment",
disable_comment = "disable_comment"
}
interface BaseNode {
leadingComments?: CommentNode[];
trailingComments?: CommentNode[];
}
export interface StatementNode extends BaseNode {
type: NodeType.statement;
children: AstNode[];
hasSemicolon: boolean;
}
export interface ClauseNode extends BaseNode {
type: NodeType.clause;
nameKw: KeywordNode;
children: AstNode[];
}
export interface SetOperationNode extends BaseNode {
type: NodeType.set_operation;
nameKw: KeywordNode;
children: AstNode[];
}
export interface FunctionCallNode extends BaseNode {
type: NodeType.function_call;
nameKw: KeywordNode;
parenthesis: ParenthesisNode;
}
export interface ParameterizedDataTypeNode extends BaseNode {
type: NodeType.parameterized_data_type;
dataType: DataTypeNode;
parenthesis: ParenthesisNode;
}
export interface ArraySubscriptNode extends BaseNode {
type: NodeType.array_subscript;
array: IdentifierNode | KeywordNode | DataTypeNode;
parenthesis: ParenthesisNode;
}
export interface ParenthesisNode extends BaseNode {
type: NodeType.parenthesis;
children: AstNode[];
openParen: string;
closeParen: string;
}
export interface BetweenPredicateNode extends BaseNode {
type: NodeType.between_predicate;
betweenKw: KeywordNode;
expr1: AstNode[];
andKw: KeywordNode;
expr2: AstNode[];
}
export interface CaseExpressionNode extends BaseNode {
type: NodeType.case_expression;
caseKw: KeywordNode;
endKw: KeywordNode;
expr: AstNode[];
clauses: (CaseWhenNode | CaseElseNode)[];
}
export interface CaseWhenNode extends BaseNode {
type: NodeType.case_when;
whenKw: KeywordNode;
thenKw: KeywordNode;
condition: AstNode[];
result: AstNode[];
}
export interface CaseElseNode extends BaseNode {
type: NodeType.case_else;
elseKw: KeywordNode;
result: AstNode[];
}
export interface LimitClauseNode extends BaseNode {
type: NodeType.limit_clause;
limitKw: KeywordNode;
count: AstNode[];
offset?: AstNode[];
}
export interface AllColumnsAsteriskNode extends BaseNode {
type: NodeType.all_columns_asterisk;
}
export interface LiteralNode extends BaseNode {
type: NodeType.literal;
text: string;
}
export interface PropertyAccessNode extends BaseNode {
type: NodeType.property_access;
object: AstNode;
operator: string;
property: IdentifierNode | ArraySubscriptNode | AllColumnsAsteriskNode;
}
export interface IdentifierNode extends BaseNode {
type: NodeType.identifier;
quoted: boolean;
text: string;
}
export interface DataTypeNode extends BaseNode {
type: NodeType.data_type;
text: string;
raw: string;
}
export interface KeywordNode extends BaseNode {
type: NodeType.keyword;
tokenType: TokenType;
text: string;
raw: string;
}
export interface ParameterNode extends BaseNode {
type: NodeType.parameter;
key?: string;
text: string;
}
export interface OperatorNode extends BaseNode {
type: NodeType.operator;
text: string;
}
export interface CommaNode extends BaseNode {
type: NodeType.comma;
}
export interface LineCommentNode extends BaseNode {
type: NodeType.line_comment;
text: string;
precedingWhitespace: string;
}
export interface BlockCommentNode extends BaseNode {
type: NodeType.block_comment;
text: string;
precedingWhitespace: string;
}
export interface DisableCommentNode extends BaseNode {
type: NodeType.disable_comment;
text: string;
precedingWhitespace: string;
}
export type CommentNode = LineCommentNode | BlockCommentNode | DisableCommentNode;
export type AstNode = ClauseNode | SetOperationNode | FunctionCallNode | ParameterizedDataTypeNode | ArraySubscriptNode | PropertyAccessNode | ParenthesisNode | BetweenPredicateNode | CaseExpressionNode | CaseWhenNode | CaseElseNode | LimitClauseNode | AllColumnsAsteriskNode | LiteralNode | IdentifierNode | DataTypeNode | KeywordNode | ParameterNode | OperatorNode | CommaNode | LineCommentNode | BlockCommentNode | DisableCommentNode;
export {};