prettier-sql
Version:
Format whitespace in a SQL query to make it more readable
127 lines (112 loc) • 3.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isReserved = exports.isCommand = exports.isToken = exports.testToken = exports.ZWS = exports.TokenType = void 0;
/** Token type enum for all possible Token categories */
var TokenType;
/** Struct to store the most basic cohesive unit of language grammar */
exports.TokenType = TokenType;
(function (TokenType) {
TokenType["WORD"] = "WORD";
TokenType["STRING"] = "STRING";
TokenType["RESERVED_KEYWORD"] = "RESERVED_KEYWORD";
TokenType["RESERVED_LOGICAL_OPERATOR"] = "RESERVED_LOGICAL_OPERATOR";
TokenType["RESERVED_DEPENDENT_CLAUSE"] = "RESERVED_DEPENDENT_CLAUSE";
TokenType["RESERVED_BINARY_COMMAND"] = "RESERVED_BINARY_COMMAND";
TokenType["RESERVED_COMMAND"] = "RESERVED_COMMAND";
TokenType["OPERATOR"] = "OPERATOR";
TokenType["BLOCK_START"] = "BLOCK_START";
TokenType["BLOCK_END"] = "BLOCK_END";
TokenType["LINE_COMMENT"] = "LINE_COMMENT";
TokenType["BLOCK_COMMENT"] = "BLOCK_COMMENT";
TokenType["NUMBER"] = "NUMBER";
TokenType["PLACEHOLDER"] = "PLACEHOLDER";
})(TokenType || (exports.TokenType = TokenType = {}));
/** Special Unicode character to serve as a placeholder for TenSpace formats as \w whitespace is unavailable */
var ZWS = ''; // uses zero-width space (​ / U+200B)
exports.ZWS = ZWS;
var ZWS_REGEX = "\u200B";
var spaces = "[".concat(ZWS_REGEX, "\\s]");
/** Checks if two tokens are equivalent */
var testToken = function testToken(compareToken) {
return function (token) {
return (token === null || token === void 0 ? void 0 : token.type) === compareToken.type && new RegExp("^".concat(spaces, "*").concat(compareToken.value).concat(spaces, "*$"), 'iu').test(token === null || token === void 0 ? void 0 : token.value);
};
};
/** Util object that allows for easy checking of Reserved Keywords */
exports.testToken = testToken;
var isToken = {
AS: testToken({
value: 'AS',
type: TokenType.RESERVED_KEYWORD
}),
AND: testToken({
value: 'AND',
type: TokenType.RESERVED_LOGICAL_OPERATOR
}),
BETWEEN: testToken({
value: 'BETWEEN',
type: TokenType.RESERVED_KEYWORD
}),
CASE: testToken({
value: 'CASE',
type: TokenType.BLOCK_START
}),
CAST: testToken({
value: 'CAST',
type: TokenType.RESERVED_KEYWORD
}),
BY: testToken({
value: 'BY',
type: TokenType.RESERVED_KEYWORD
}),
END: testToken({
value: 'END',
type: TokenType.BLOCK_END
}),
FROM: testToken({
value: 'FROM',
type: TokenType.RESERVED_COMMAND
}),
LATERAL: testToken({
value: 'LATERAL',
type: TokenType.RESERVED_DEPENDENT_CLAUSE
}),
LIMIT: testToken({
value: 'LIMIT',
type: TokenType.RESERVED_COMMAND
}),
SELECT: testToken({
value: 'SELECT',
type: TokenType.RESERVED_COMMAND
}),
SET: testToken({
value: 'SET',
type: TokenType.RESERVED_COMMAND
}),
TABLE: testToken({
value: 'TABLE',
type: TokenType.RESERVED_KEYWORD
}),
WINDOW: testToken({
value: 'WINDOW',
type: TokenType.RESERVED_COMMAND
}),
WITH: testToken({
value: 'WITH',
type: TokenType.RESERVED_COMMAND
})
};
/** Checks if token is a Reserved Command or Reserved Binary Command */
exports.isToken = isToken;
var isCommand = function isCommand(token) {
return token && (token.type === TokenType.RESERVED_COMMAND || token.type === TokenType.RESERVED_BINARY_COMMAND);
};
/** Checks if token is any Reserved Keyword or Command */
exports.isCommand = isCommand;
var isReserved = function isReserved(token) {
return token && (token.type === TokenType.RESERVED_KEYWORD || token.type === TokenType.RESERVED_LOGICAL_OPERATOR || token.type === TokenType.RESERVED_DEPENDENT_CLAUSE || token.type === TokenType.RESERVED_COMMAND || token.type === TokenType.RESERVED_BINARY_COMMAND);
};
exports.isReserved = isReserved;
//# sourceMappingURL=token.js.map