@eggjs/dal-runtime
Version:
tegg dal decorator
232 lines • 15.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SqlUtil = void 0;
function isWhiteChar(ch) {
return ch === ' ' || ch === '\n' || ch === '\r' || ch === '\t';
}
const COMMENT_CHARS = '-#/';
const MUL_CHAR_LEADING_COMMENT_FIRST_CHAR = {
MAY_BE_FIRST_COMMENT: '-',
MAY_BE_FIRST_BLOCK_COMMENT: '/',
};
const MUL_CHAR_LEADING_COMMENT_VERIFIER = {
MAY_BE_FIRST_COMMENT: '-',
MAY_BE_FIRST_BLOCK_COMMENT: '*',
};
const MUL_CHAR_LEADING_COMMENT_NEXT_STATE = {
MAY_BE_FIRST_COMMENT: 'IN_COMMENT_WAIT_HINT',
MAY_BE_FIRST_BLOCK_COMMENT: 'IN_BLOCK_COMMENT_WAIT_HINT',
};
class SqlUtil {
static minify(sql) {
let ret = '';
let state = 'START';
let tempNextState;
for (let i = 0; i < sql.length; i++) {
const ch = sql[i];
switch (state) {
case 'MAY_BE_FIRST_COMMENT':
case 'MAY_BE_FIRST_BLOCK_COMMENT':
switch (ch) {
case '"':
tempNextState = 'DOUBLE_QUOTE';
break;
case '\'':
tempNextState = 'SINGLE_QUOTE';
break;
case MUL_CHAR_LEADING_COMMENT_VERIFIER[state]:
tempNextState = MUL_CHAR_LEADING_COMMENT_NEXT_STATE[state];
break;
default:
tempNextState = 'CONTENT';
break;
}
if (ch !== MUL_CHAR_LEADING_COMMENT_VERIFIER[state]) {
ret += `${MUL_CHAR_LEADING_COMMENT_FIRST_CHAR[state]}${ch}`;
}
state = tempNextState;
break;
case 'IN_COMMENT_WAIT_HINT':
if (ch !== '+') {
state = 'IN_COMMENT';
}
else {
state = 'IN_COMMENT_HINT';
ret += '--+';
}
break;
case 'IN_BLOCK_COMMENT_WAIT_HINT':
if (ch !== '+') {
state = 'IN_BLOCK_COMMENT';
}
else {
state = 'IN_BLOCK_COMMENT_HINT';
ret += '/*+';
}
break;
case 'MAY_BE_LAST_BLOCK_COMMENT':
if (ch === '/') {
if (ret && !isWhiteChar(ret[ret.length - 1]))
ret += ' ';
state = 'IN_SPACE';
}
else {
state = 'IN_BLOCK_COMMENT';
}
break;
case 'MAY_BE_LAST_BLOCK_COMMENT_HINT':
ret += ch;
if (ch === '/') {
state = 'IN_SPACE';
if (isWhiteChar(sql[i + 1]))
ret += sql[i + 1];
}
else {
state = 'IN_BLOCK_COMMENT_HINT';
}
break;
case 'IN_COMMENT':
if (ch === '\n' || ch === '\r') {
if (ret && !isWhiteChar(ret[ret.length - 1]))
ret += ' ';
state = 'IN_SPACE';
}
break;
case 'IN_COMMENT_HINT':
ret += ch;
if (ch === '\n' || ch === '\r') {
state = 'IN_SPACE';
}
break;
case 'IN_BLOCK_COMMENT':
if (ch === '*') {
state = 'MAY_BE_LAST_BLOCK_COMMENT';
}
break;
case 'IN_BLOCK_COMMENT_HINT':
ret += ch;
if (ch === '*') {
state = 'MAY_BE_LAST_BLOCK_COMMENT_HINT';
}
break;
case 'START':
if (isWhiteChar(ch))
continue;
switch (ch) {
case '"':
state = 'DOUBLE_QUOTE';
break;
case '\'':
state = 'SINGLE_QUOTE';
break;
case '-':
state = 'MAY_BE_FIRST_COMMENT';
break;
case '#':
state = 'IN_COMMENT';
break;
case '/':
if (sql[i + 1] === '+') {
state = 'IN_BLOCK_COMMENT_HINT';
ret += '/*+';
i++;
}
else {
state = 'IN_BLOCK_COMMENT';
}
break;
default:
state = 'CONTENT';
break;
}
if (!COMMENT_CHARS.includes(ch))
ret += ch;
break;
case 'DOUBLE_QUOTE':
case 'SINGLE_QUOTE':
switch (ch) {
case '\\':
state = `BACKSLASH_AFTER_${state}`;
break;
case '\'':
if (state === 'SINGLE_QUOTE') {
state = 'QUOTE_DONE';
}
break;
case '"':
if (state === 'DOUBLE_QUOTE') {
state = 'QUOTE_DONE';
}
break;
default: break;
}
ret += ch;
break;
case 'BACKSLASH_AFTER_SINGLE_QUOTE':
case 'BACKSLASH_AFTER_DOUBLE_QUOTE':
ret += ch;
state = state.substr(16);
break;
case 'QUOTE_DONE':
case 'CONTENT':
switch (ch) {
case '\'':
state = 'SINGLE_QUOTE';
break;
case '"':
state = 'DOUBLE_QUOTE';
break;
case '-':
state = 'MAY_BE_FIRST_COMMENT';
break;
case '#':
state = 'IN_COMMENT';
break;
case '/':
state = 'MAY_BE_FIRST_BLOCK_COMMENT';
break;
default:
if (isWhiteChar(ch)) {
state = 'IN_SPACE';
ret += ' ';
continue;
}
state = 'CONTENT';
}
if (!COMMENT_CHARS.includes(ch))
ret += ch;
break;
case 'IN_SPACE':
switch (ch) {
case '\'':
state = 'SINGLE_QUOTE';
break;
case '"':
state = 'DOUBLE_QUOTE';
break;
case '-':
state = 'MAY_BE_FIRST_COMMENT';
break;
case '#':
state = 'IN_COMMENT';
break;
case '/':
state = 'MAY_BE_FIRST_BLOCK_COMMENT';
break;
default:
if (isWhiteChar(ch))
continue;
state = 'CONTENT';
}
if (!COMMENT_CHARS.includes(ch))
ret += ch;
break;
default:
throw new Error('Unexpected state machine while minifying SQL.');
}
}
return ret.trim();
}
}
exports.SqlUtil = SqlUtil;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TcWxVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQVMsV0FBVyxDQUFDLEVBQUU7SUFDckIsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDNUIsTUFBTSxtQ0FBbUMsR0FBRztJQUMxQyxvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLDBCQUEwQixFQUFFLEdBQUc7Q0FDaEMsQ0FBQztBQUNGLE1BQU0saUNBQWlDLEdBQUc7SUFDeEMsb0JBQW9CLEVBQUUsR0FBRztJQUN6QiwwQkFBMEIsRUFBRSxHQUFHO0NBQ2hDLENBQUM7QUFDRixNQUFNLG1DQUFtQyxHQUFHO0lBQzFDLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QywwQkFBMEIsRUFBRSw0QkFBNEI7Q0FDekQsQ0FBQztBQUVGLE1BQWEsT0FBTztJQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLElBQUksYUFBYSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLFFBQVEsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsS0FBSyxzQkFBc0IsQ0FBQztnQkFDNUIsS0FBSyw0QkFBNEI7b0JBQy9CLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQ1gsS0FBSyxHQUFHOzRCQUFFLGFBQWEsR0FBRyxjQUFjLENBQUM7NEJBQUMsTUFBTTt3QkFDaEQsS0FBSyxJQUFJOzRCQUFFLGFBQWEsR0FBRyxjQUFjLENBQUM7NEJBQUMsTUFBTTt3QkFDakQsS0FBSyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUM7NEJBQzNDLGFBQWEsR0FBRyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDM0QsTUFBTTt3QkFDUjs0QkFBUyxhQUFhLEdBQUcsU0FBUyxDQUFDOzRCQUFDLE1BQU07b0JBQzVDLENBQUM7b0JBQ0QsSUFBSSxFQUFFLEtBQUssaUNBQWlDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEQsR0FBRyxJQUFJLEdBQUcsbUNBQW1DLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzlELENBQUM7b0JBQ0QsS0FBSyxHQUFHLGFBQWEsQ0FBQztvQkFDdEIsTUFBTTtnQkFFUixLQUFLLHNCQUFzQjtvQkFDekIsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ2YsS0FBSyxHQUFHLFlBQVksQ0FBQztvQkFDdkIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLEtBQUssR0FBRyxpQkFBaUIsQ0FBQzt3QkFDMUIsR0FBRyxJQUFJLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUNELE1BQU07Z0JBRVIsS0FBSyw0QkFBNEI7b0JBQy9CLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNmLEtBQUssR0FBRyxrQkFBa0IsQ0FBQztvQkFDN0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLEtBQUssR0FBRyx1QkFBdUIsQ0FBQzt3QkFDaEMsR0FBRyxJQUFJLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUNELE1BQU07Z0JBRVIsS0FBSywyQkFBMkI7b0JBQzlCLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNmLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7d0JBQ3pELEtBQUssR0FBRyxVQUFVLENBQUM7b0JBQ3JCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixLQUFLLEdBQUcsa0JBQWtCLENBQUM7b0JBQzdCLENBQUM7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLGdDQUFnQztvQkFDbkMsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDVixJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDZixLQUFLLEdBQUcsVUFBVSxDQUFDO3dCQUNuQixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sS0FBSyxHQUFHLHVCQUF1QixDQUFDO29CQUNsQyxDQUFDO29CQUNELE1BQU07Z0JBRVIsS0FBSyxZQUFZO29CQUNmLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQy9CLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7d0JBQ3pELEtBQUssR0FBRyxVQUFVLENBQUM7b0JBQ3JCLENBQUM7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLGlCQUFpQjtvQkFDcEIsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDVixJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUMvQixLQUFLLEdBQUcsVUFBVSxDQUFDO29CQUNyQixDQUFDO29CQUNELE1BQU07Z0JBRVIsS0FBSyxrQkFBa0I7b0JBQ3JCLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNmLEtBQUssR0FBRywyQkFBMkIsQ0FBQztvQkFDdEMsQ0FBQztvQkFDRCxNQUFNO2dCQUVSLEtBQUssdUJBQXVCO29CQUMxQixHQUFHLElBQUksRUFBRSxDQUFDO29CQUNWLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNmLEtBQUssR0FBRyxnQ0FBZ0MsQ0FBQztvQkFDM0MsQ0FBQztvQkFDRCxNQUFNO2dCQUVSLEtBQUssT0FBTztvQkFDVixJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQUUsU0FBUztvQkFDOUIsUUFBUSxFQUFFLEVBQUUsQ0FBQzt3QkFDWCxLQUFLLEdBQUc7NEJBQUUsS0FBSyxHQUFHLGNBQWMsQ0FBQzs0QkFBQyxNQUFNO3dCQUN4QyxLQUFLLElBQUk7NEJBQUUsS0FBSyxHQUFHLGNBQWMsQ0FBQzs0QkFBQyxNQUFNO3dCQUN6QyxLQUFLLEdBQUc7NEJBQUUsS0FBSyxHQUFHLHNCQUFzQixDQUFDOzRCQUFDLE1BQU07d0JBQ2hELEtBQUssR0FBRzs0QkFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUFDLE1BQU07d0JBQ3RDLEtBQUssR0FBRzs0QkFDTixJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0NBQ3ZCLEtBQUssR0FBRyx1QkFBdUIsQ0FBQztnQ0FDaEMsR0FBRyxJQUFJLEtBQUssQ0FBQztnQ0FDYixDQUFDLEVBQUUsQ0FBQzs0QkFDTixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sS0FBSyxHQUFHLGtCQUFrQixDQUFDOzRCQUM3QixDQUFDOzRCQUNELE1BQU07d0JBQ1I7NEJBQVMsS0FBSyxHQUFHLFNBQVMsQ0FBQzs0QkFBQyxNQUFNO29CQUNwQyxDQUFDO29CQUNELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFBRSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUMzQyxNQUFNO2dCQUVSLEtBQUssY0FBYyxDQUFDO2dCQUNwQixLQUFLLGNBQWM7b0JBQ2pCLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQ1gsS0FBSyxJQUFJOzRCQUFFLEtBQUssR0FBRyxtQkFBbUIsS0FBSyxFQUFFLENBQUM7NEJBQUMsTUFBTTt3QkFDckQsS0FBSyxJQUFJOzRCQUNQLElBQUksS0FBSyxLQUFLLGNBQWMsRUFBRSxDQUFDO2dDQUM3QixLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUN2QixDQUFDOzRCQUNELE1BQU07d0JBQ1IsS0FBSyxHQUFHOzRCQUNOLElBQUksS0FBSyxLQUFLLGNBQWMsRUFBRSxDQUFDO2dDQUM3QixLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUN2QixDQUFDOzRCQUNELE1BQU07d0JBQ1IsT0FBTyxDQUFDLENBQUMsTUFBTTtvQkFDakIsQ0FBQztvQkFDRCxHQUFHLElBQUksRUFBRSxDQUFDO29CQUNWLE1BQU07Z0JBRVIsS0FBSyw4QkFBOEIsQ0FBQztnQkFDcEMsS0FBSyw4QkFBOEI7b0JBQ2pDLEdBQUcsSUFBSSxFQUFFLENBQUM7b0JBQ1YsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBRVIsS0FBSyxZQUFZLENBQUM7Z0JBQ2xCLEtBQUssU0FBUztvQkFDWixRQUFRLEVBQUUsRUFBRSxDQUFDO3dCQUNYLEtBQUssSUFBSTs0QkFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDOzRCQUFDLE1BQU07d0JBQ3pDLEtBQUssR0FBRzs0QkFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDOzRCQUFDLE1BQU07d0JBQ3hDLEtBQUssR0FBRzs0QkFBRSxLQUFLLEdBQUcsc0JBQXNCLENBQUM7NEJBQUMsTUFBTTt3QkFDaEQsS0FBSyxHQUFHOzRCQUFFLEtBQUssR0FBRyxZQUFZLENBQUM7NEJBQUMsTUFBTTt3QkFDdEMsS0FBSyxHQUFHOzRCQUFFLEtBQUssR0FBRyw0QkFBNEIsQ0FBQzs0QkFBQyxNQUFNO3dCQUN0RDs0QkFDRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dDQUNwQixLQUFLLEdBQUcsVUFBVSxDQUFDO2dDQUNuQixHQUFHLElBQUksR0FBRyxDQUFDO2dDQUNYLFNBQVM7NEJBQ1gsQ0FBQzs0QkFDRCxLQUFLLEdBQUcsU0FBUyxDQUFDO29CQUN0QixDQUFDO29CQUNELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFBRSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUMzQyxNQUFNO2dCQUVSLEtBQUssVUFBVTtvQkFDYixRQUFRLEVBQUUsRUFBRSxDQUFDO3dCQUNYLEtBQUssSUFBSTs0QkFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDOzRCQUFDLE1BQU07d0JBQ3pDLEtBQUssR0FBRzs0QkFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDOzRCQUFDLE1BQU07d0JBQ3hDLEtBQUssR0FBRzs0QkFBRSxLQUFLLEdBQUcsc0JBQXNCLENBQUM7NEJBQUMsTUFBTTt3QkFDaEQsS0FBSyxHQUFHOzRCQUFFLEtBQUssR0FBRyxZQUFZLENBQUM7NEJBQUMsTUFBTTt3QkFDdEMsS0FBSyxHQUFHOzRCQUFFLEtBQUssR0FBRyw0QkFBNEIsQ0FBQzs0QkFBQyxNQUFNO3dCQUN0RDs0QkFDRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0NBQUUsU0FBUzs0QkFDOUIsS0FBSyxHQUFHLFNBQVMsQ0FBQztvQkFDdEIsQ0FBQztvQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDM0MsTUFBTTtnQkFFUjtvQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUEvS0QsMEJBK0tDIn0=