UNPKG

@eggjs/dal-runtime

Version:
232 lines 15.9 kB
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TcWxVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQVMsV0FBVyxDQUFDLEVBQUU7SUFDckIsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDNUIsTUFBTSxtQ0FBbUMsR0FBRztJQUMxQyxvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLDBCQUEwQixFQUFFLEdBQUc7Q0FDaEMsQ0FBQztBQUNGLE1BQU0saUNBQWlDLEdBQUc7SUFDeEMsb0JBQW9CLEVBQUUsR0FBRztJQUN6QiwwQkFBMEIsRUFBRSxHQUFHO0NBQ2hDLENBQUM7QUFDRixNQUFNLG1DQUFtQyxHQUFHO0lBQzFDLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QywwQkFBMEIsRUFBRSw0QkFBNEI7Q0FDekQsQ0FBQztBQUVGLE1BQWEsT0FBTztJQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLElBQUksYUFBYSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLFFBQVEsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsS0FBSyxzQkFBc0IsQ0FBQztnQkFDNUIsS0FBSyw0QkFBNEI7b0JBQy9CLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQ1gsS0FBSyxHQUFHOzRCQUFFLGFBQWEsR0FBRyxjQUFj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