diff --git a/lib/parse.js b/lib/parse.js index 145ea26..2285b52 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -39,6 +39,22 @@ const parse = (input, options = {}) => { throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); } + let braceStack = []; + for (const char of input) { + if (char === '{') { + braceStack.push('{'); + } else if (char === '}') { + if (braceStack.length === 0) { + throw new SyntaxError("Mismatched closing brace found"); + } + braceStack.pop(); + } + } + + if (braceStack.length > 0) { + throw new SyntaxError("Mismatched open brace found"); + } + let ast = { type: 'root', input, nodes: [] }; let stack = [ast]; let block = ast;