mochawesome
Version:
A gorgeous reporter for Mocha.js
65 lines (56 loc) • 1.31 kB
JavaScript
/* eslint-disable consistent-return */
/**
* Strip start of function
*
* @param {string} input
*
* @return {string}
*/
function stripFunctionStart(input) {
const BEGIN = 1;
const LBRACE = 2;
const EQ = 4;
const ARROW = 8;
const ARROW_LBRACE = 16;
const ARROW_PAREN = 32;
const DONE = 64;
const isWhitespace = ch => ch === ' ' || ch === '\t' || ch === '\n';
const nextState = (state, c) => {
switch (state) {
case BEGIN:
switch (c) {
case '{':
return LBRACE;
case '=':
return EQ;
default:
return BEGIN;
}
case LBRACE:
return c === ' ' ? LBRACE : DONE;
case EQ:
return c === '>' ? ARROW : BEGIN;
case ARROW:
if (isWhitespace(c)) return ARROW;
switch (c) {
case '{':
return ARROW_LBRACE;
case '(':
return ARROW_PAREN;
default:
return DONE;
}
case ARROW_LBRACE:
case ARROW_PAREN:
return DONE;
}
};
let state = BEGIN;
let pos = 0;
while (pos < input.length && state !== DONE) {
state = nextState(state, input.charAt(pos));
pos += 1;
}
return state === DONE ? input.slice(pos - 1) : input;
}
module.exports = stripFunctionStart;