Mirror: The magical sticky regex-based parser generator 🧙
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add support for matcher thunks

+7 -7
+7 -7
src/core.js
··· 15 15 let match; 16 16 17 17 if (typeof pattern === 'function') { 18 - return pattern(state); 18 + while (typeof pattern === 'function') pattern = pattern(state); 19 + return pattern; 19 20 } else if (typeof pattern === 'string') { 20 21 const end = state.index + pattern.length; 21 22 const sub = state.input.slice(state.index, end); ··· 49 50 export const match = (name, transform) => (quasis, ...expressions) => { 50 51 const ast = parseDSL( 51 52 quasis, 52 - expressions.map((expression, i) => `_exec(state, _e${i})`) 53 + expressions.map((expression, i) => `_e(state, _${i})`) 53 54 ); 55 + 54 56 const makeMatcher = new Function( 55 - '_exec', 56 - '_name', 57 - '_transform', 58 - ...expressions.map((_expression, i) => `_e${i}`), 59 - 'return ' + astRoot(ast, '_name', transform ? '_transform' : null) 57 + '_e,_n,_t,' + expressions.map((_expression, i) => `_${i}`).join(','), 58 + 'return ' + astRoot(ast, '_n', transform ? '_t' : null) 60 59 ); 60 + 61 61 return makeMatcher(_exec, name, transform, ...expressions.map(_pattern)); 62 62 };