UNPKG

@whisklabs/grpc

Version:

gRPC generator and http library for typescript

139 lines 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tokenizer = exports.SYMBOLS = void 0; var Block; (function (Block) { Block[Block["none"] = 0] = "none"; Block[Block["comment"] = 1] = "comment"; Block[Block["commentMulti"] = 2] = "commentMulti"; Block[Block["oneString"] = 3] = "oneString"; Block[Block["twoString"] = 4] = "twoString"; })(Block || (Block = {})); var EMPTY = { ' ': true, '\t': true, '\n': true, }; exports.SYMBOLS = { '=': true, ',': true, ':': true, ';': true, '[': true, ']': true, '(': true, ')': true, '{': true, '}': true, '<': true, '>': true, }; // eslint-disable-next-line complexity function tokenizer(source) { var tokens = []; var lines = []; var columns = []; var tmp = ''; var block = Block.none; var sameLine = true; var curLine = 1; var column = 1; var finalize = function (after, force) { if (after === void 0) { after = false; } if (force === void 0) { force = false; } if (tmp.length > 0 || force) { tokens.push(tmp); lines.push(curLine); columns.push(after ? column : column - tmp.length); tmp = ''; } }; for (var i = 0; i < source.length; i++) { var cur = source[i]; var next = source[i + 1]; switch (true) { case block === Block.none && '//' === cur + next: finalize(); block = Block.comment; tmp += sameLine ? '!//' : '//'; finalize(true); i++; column++; break; case block === Block.comment && '\n' === cur: block = Block.none; finalize(false, true); break; case block === Block.none && '/*' === cur + next: block = Block.commentMulti; finalize(); tmp = '/*'; finalize(true); i++; column++; break; case block === Block.commentMulti && '*/' === cur + next: block = Block.none; finalize(false, true); tmp = '*/'; finalize(true); i++; column++; break; case block === Block.none && cur === "'": finalize(); tmp = cur; block = Block.oneString; break; case block === Block.oneString && cur + next === "\\'": tmp += "'"; i++; break; case block === Block.oneString && cur === "'": tmp += cur; finalize(); block = Block.none; break; case block === Block.none && cur === '"': finalize(); tmp = cur; block = Block.twoString; break; case block === Block.twoString && cur + next === '\\"': tmp += '"'; i++; break; case block === Block.twoString && cur === '"': tmp += cur; finalize(); block = Block.none; break; case block === Block.none && exports.SYMBOLS[cur]: finalize(); tmp = cur; finalize(true); break; case block === Block.none && EMPTY[cur]: finalize(); break; default: tmp += cur; } if (block === Block.none && cur === '\n') { column = 1; } else { column++; } if (cur === '\n') { sameLine = false; curLine++; } else if (!EMPTY[cur]) { sameLine = true; } } return { tokens: tokens, lines: lines, columns: columns }; } exports.tokenizer = tokenizer; //# sourceMappingURL=tokenizer.js.map