UNPKG

serverless-offline-msk

Version:

A serverless offline plugin that enables AWS MSK events

231 lines (211 loc) 5.18 kB
'use strict'; var from = require('es5-ext/array/from') , primitiveSet = require('es5-ext/object/primitive-set') , value = require('es5-ext/object/valid-value') , callable = require('es5-ext/object/valid-callable') , d = require('d') , eolSet = require('./lib/ws-eol') , wsSet = require('./lib/ws') , hasOwnProperty = Object.prototype.hasOwnProperty , preRegExpSet = primitiveSet.apply(null, from(';{=([,<>+-*/%&|^!~?:}')) , nonNameSet = primitiveSet.apply(null, from(';{=([,<>+-*/%&|^!~?:})].')) , move, startCollect, endCollect, collectNest , $ws, $common, $string, $comment, $multiComment, $regExp , i, char, line, columnIndex, afterWs, previousChar , nest, nestedTokens, results , userCode, userTriggerChar, isUserTriggerOperatorChar, userCallback , quote , collectIndex, data, nestRelease; move = function (j) { if (!char) return; if (i >= j) return; while (i !== j) { if (!char) return; if (hasOwnProperty.call(wsSet, char)) { if (hasOwnProperty.call(eolSet, char)) { columnIndex = i; ++line; } } else { previousChar = char; } char = userCode[++i]; } }; startCollect = function (oldNestRelease) { if (collectIndex != null) nestedTokens.push([data, collectIndex, oldNestRelease]); data = { point: i + 1, line: line, column: i + 1 - columnIndex }; collectIndex = i; }; endCollect = function () { var previous; data.raw = userCode.slice(collectIndex, i); results.push(data); if (nestedTokens.length) { previous = nestedTokens.pop(); data = previous[0]; collectIndex = previous[1]; nestRelease = previous[2]; return; } data = null; collectIndex = null; nestRelease = null; }; collectNest = function () { var old = nestRelease; nestRelease = nest; ++nest; move(i + 1); startCollect(old); return $ws; }; $common = function () { if ((char === '\'') || (char === '"')) { quote = char; char = userCode[++i]; return $string; } if ((char === '(') || (char === '{') || (char === '[')) { ++nest; } else if ((char === ')') || (char === '}') || (char === ']')) { if (nestRelease === --nest) endCollect(); } else if (char === '/') { if (hasOwnProperty.call(preRegExpSet, previousChar)) { char = userCode[++i]; return $regExp; } } if ((char !== userTriggerChar) || (!isUserTriggerOperatorChar && previousChar && !afterWs && !hasOwnProperty.call(nonNameSet, previousChar))) { previousChar = char; char = userCode[++i]; return $ws; } return userCallback(i, previousChar, nest); }; $comment = function () { while (true) { if (!char) return; if (hasOwnProperty.call(eolSet, char)) { columnIndex = i + 1; ++line; return; } char = userCode[++i]; } }; $multiComment = function () { while (true) { if (!char) return; if (char === '*') { char = userCode[++i]; if (char === '/') return; continue; } if (hasOwnProperty.call(eolSet, char)) { columnIndex = i + 1; ++line; } char = userCode[++i]; } }; $ws = function () { var next; afterWs = false; while (true) { if (!char) return; if (hasOwnProperty.call(wsSet, char)) { afterWs = true; if (hasOwnProperty.call(eolSet, char)) { columnIndex = i + 1; ++line; } } else if (char === '/') { next = userCode[i + 1]; if (next === '/') { char = userCode[i += 2]; afterWs = true; $comment(); } else if (next === '*') { char = userCode[i += 2]; afterWs = true; $multiComment(); } else { break; } } else { break; } char = userCode[++i]; } return $common; }; $string = function () { while (true) { if (!char) return; if (char === quote) { char = userCode[++i]; previousChar = quote; return $ws; } if (char === '\\') { if (hasOwnProperty.call(eolSet, userCode[++i])) { columnIndex = i + 1; ++line; } } char = userCode[++i]; } }; $regExp = function () { while (true) { if (!char) return; if (char === '/') { previousChar = '/'; char = userCode[++i]; return $ws; } if (char === '\\') ++i; char = userCode[++i]; } }; module.exports = exports = function (code, triggerChar, callback) { var state; userCode = String(value(code)); userTriggerChar = String(value(triggerChar)); if (userTriggerChar.length !== 1) { throw new TypeError(userTriggerChar + " should be one character long string"); } userCallback = callable(callback); isUserTriggerOperatorChar = hasOwnProperty.call(nonNameSet, userTriggerChar); i = 0; char = userCode[i]; line = 1; columnIndex = 0; afterWs = false; previousChar = null; nest = 0; nestedTokens = []; results = []; exports.forceStop = false; state = $ws; while (state) state = state(); return results; }; Object.defineProperties(exports, { $ws: d($ws), $common: d($common), collectNest: d(collectNest), move: d(move), index: d.gs(function () { return i; }), line: d.gs(function () { return line; }), nest: d.gs(function () { return nest; }), columnIndex: d.gs(function () { return columnIndex; }), next: d(function (step) { if (!char) return; move(i + (step || 1)); return $ws(); }), resume: d(function () { return $common; }) });