UNPKG

@qualifyze/airtable-formulator

Version:
1,144 lines (1,143 loc) 34.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const globals_1 = require("@jest/globals"); const airtable_formula_reference_json_1 = require("../../airtable-formula-reference.json"); const tokenize_1 = require("../tokenize"); (0, globals_1.describe)("tokenize()", () => { (0, globals_1.it)("Should tokenize a simple formula", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("1 + 2")).toMatchInlineSnapshot(` Object { "end": 5, "members": Array [ Object { "end": 1, "start": 0, "type": "number", "value": "1", }, Object { "end": 2, "start": 1, "type": "space", "value": " ", }, Object { "end": 3, "start": 2, "type": "operator", "value": "+", }, Object { "end": 4, "start": 3, "type": "space", "value": " ", }, Object { "end": 5, "start": 4, "type": "number", "value": "2", }, ], "start": 0, "type": "group", "value": "1 + 2", } `); }); globals_1.it.each(Object.keys(airtable_formula_reference_json_1.operators))(`should tokenize operator %s`, (op) => { (0, globals_1.expect)((0, tokenize_1.tokenize)(`1 ${op} 2`)).toMatchObject({ members: [ { type: "number", value: "1" }, { type: "space", value: " " }, { type: "operator", value: op }, { type: "space", value: " " }, { type: "number", value: "2" }, ], }); }); (0, globals_1.it)("Should tokenize a formula with decimal numbers", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("1.5 + 2.5")).toMatchInlineSnapshot(` Object { "end": 9, "members": Array [ Object { "end": 3, "start": 0, "type": "number", "value": "1.5", }, Object { "end": 4, "start": 3, "type": "space", "value": " ", }, Object { "end": 5, "start": 4, "type": "operator", "value": "+", }, Object { "end": 6, "start": 5, "type": "space", "value": " ", }, Object { "end": 9, "start": 6, "type": "number", "value": "2.5", }, ], "start": 0, "type": "group", "value": "1.5 + 2.5", } `); }); (0, globals_1.it)("Should tokenize a minus operator over a negative number", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("-1-2")).toMatchInlineSnapshot(` Object { "end": 4, "members": Array [ Object { "end": 1, "start": 0, "type": "operator", "value": "-", }, Object { "end": 2, "start": 1, "type": "number", "value": "1", }, Object { "end": 3, "start": 2, "type": "operator", "value": "-", }, Object { "end": 4, "start": 3, "type": "number", "value": "2", }, ], "start": 0, "type": "group", "value": "-1-2", } `); }); (0, globals_1.it)("Should tokenize a formula with a string", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("1 + 'Hello world'")).toMatchInlineSnapshot(` Object { "end": 17, "members": Array [ Object { "end": 1, "start": 0, "type": "number", "value": "1", }, Object { "end": 2, "start": 1, "type": "space", "value": " ", }, Object { "end": 3, "start": 2, "type": "operator", "value": "+", }, Object { "end": 4, "start": 3, "type": "space", "value": " ", }, Object { "closer": Object { "end": 17, "start": 16, "type": "quoteMark", "value": "'", }, "end": 16, "members": Array [], "opener": Object { "end": 5, "start": 4, "type": "quoteMark", "value": "'", }, "start": 5, "type": "string", "value": "Hello world", }, ], "start": 0, "type": "group", "value": "1 + 'Hello world'", } `); }); (0, globals_1.it)("Should tokenize a formula with a field reference", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("1 + myField")).toMatchInlineSnapshot(` Object { "end": 11, "members": Array [ Object { "end": 1, "start": 0, "type": "number", "value": "1", }, Object { "end": 2, "start": 1, "type": "space", "value": " ", }, Object { "end": 3, "start": 2, "type": "operator", "value": "+", }, Object { "end": 4, "start": 3, "type": "space", "value": " ", }, Object { "end": 11, "start": 4, "type": "reference", "value": "myField", }, ], "start": 0, "type": "group", "value": "1 + myField", } `); }); (0, globals_1.it)("Should tokenize a formula with a function call", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("1 + SUM(2, 3)")).toMatchInlineSnapshot(` Object { "end": 13, "members": Array [ Object { "end": 1, "start": 0, "type": "number", "value": "1", }, Object { "end": 2, "start": 1, "type": "space", "value": " ", }, Object { "end": 3, "start": 2, "type": "operator", "value": "+", }, Object { "end": 4, "start": 3, "type": "space", "value": " ", }, Object { "end": 7, "start": 4, "type": "reference", "value": "SUM", }, Object { "closer": Object { "end": 13, "start": 12, "type": "closeParenthesis", "value": ")", }, "end": 12, "members": Array [ Object { "end": 9, "start": 8, "type": "number", "value": "2", }, Object { "end": 10, "start": 9, "type": "argumentSeparator", "value": ",", }, Object { "end": 11, "start": 10, "type": "space", "value": " ", }, Object { "end": 12, "start": 11, "type": "number", "value": "3", }, ], "opener": Object { "end": 8, "start": 7, "type": "openParenthesis", "value": "(", }, "start": 8, "type": "group", "value": "2, 3", }, ], "start": 0, "type": "group", "value": "1 + SUM(2, 3)", } `); }); (0, globals_1.it)("Should tokenize braced references", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("MIN({Regular Price}, {Sale Price})")) .toMatchInlineSnapshot(` Object { "end": 34, "members": Array [ Object { "end": 3, "start": 0, "type": "reference", "value": "MIN", }, Object { "closer": Object { "end": 34, "start": 33, "type": "closeParenthesis", "value": ")", }, "end": 33, "members": Array [ Object { "closer": Object { "end": 19, "start": 18, "type": "closeBrace", "value": "}", }, "end": 18, "members": Array [], "opener": Object { "end": 5, "start": 4, "type": "openBrace", "value": "{", }, "start": 5, "type": "reference", "value": "Regular Price", }, Object { "end": 20, "start": 19, "type": "argumentSeparator", "value": ",", }, Object { "end": 21, "start": 20, "type": "space", "value": " ", }, Object { "closer": Object { "end": 33, "start": 32, "type": "closeBrace", "value": "}", }, "end": 32, "members": Array [], "opener": Object { "end": 22, "start": 21, "type": "openBrace", "value": "{", }, "start": 22, "type": "reference", "value": "Sale Price", }, ], "opener": Object { "end": 4, "start": 3, "type": "openParenthesis", "value": "(", }, "start": 4, "type": "group", "value": ", ", }, ], "start": 0, "type": "group", "value": "MIN({Regular Price}, {Sale Price})", } `); }); (0, globals_1.it)("Should tokenize a formula with a function call with a field reference", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("1 + SUM(myField, 3)")).toMatchInlineSnapshot(` Object { "end": 19, "members": Array [ Object { "end": 1, "start": 0, "type": "number", "value": "1", }, Object { "end": 2, "start": 1, "type": "space", "value": " ", }, Object { "end": 3, "start": 2, "type": "operator", "value": "+", }, Object { "end": 4, "start": 3, "type": "space", "value": " ", }, Object { "end": 7, "start": 4, "type": "reference", "value": "SUM", }, Object { "closer": Object { "end": 19, "start": 18, "type": "closeParenthesis", "value": ")", }, "end": 18, "members": Array [ Object { "end": 15, "start": 8, "type": "reference", "value": "myField", }, Object { "end": 16, "start": 15, "type": "argumentSeparator", "value": ",", }, Object { "end": 17, "start": 16, "type": "space", "value": " ", }, Object { "end": 18, "start": 17, "type": "number", "value": "3", }, ], "opener": Object { "end": 8, "start": 7, "type": "openParenthesis", "value": "(", }, "start": 8, "type": "group", "value": "myField, 3", }, ], "start": 0, "type": "group", "value": "1 + SUM(myField, 3)", } `); }); (0, globals_1.it)("Should tokenize a formula with parenthesis", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)("(1 + 2) * 3")).toMatchInlineSnapshot(` Object { "end": 11, "members": Array [ Object { "closer": Object { "end": 7, "start": 6, "type": "closeParenthesis", "value": ")", }, "end": 6, "members": Array [ Object { "end": 2, "start": 1, "type": "number", "value": "1", }, Object { "end": 3, "start": 2, "type": "space", "value": " ", }, Object { "end": 4, "start": 3, "type": "operator", "value": "+", }, Object { "end": 5, "start": 4, "type": "space", "value": " ", }, Object { "end": 6, "start": 5, "type": "number", "value": "2", }, ], "opener": Object { "end": 1, "start": 0, "type": "openParenthesis", "value": "(", }, "start": 1, "type": "group", "value": "1 + 2", }, Object { "end": 8, "start": 7, "type": "space", "value": " ", }, Object { "end": 9, "start": 8, "type": "operator", "value": "*", }, Object { "end": 10, "start": 9, "type": "space", "value": " ", }, Object { "end": 11, "start": 10, "type": "number", "value": "3", }, ], "start": 0, "type": "group", "value": "(1 + 2) * 3", } `); }); (0, globals_1.it)("Should tokenize a formula with a new lines", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)(`IF( {Sales Tax} * {Price} > 100, "This is over 100", "This is less than 100" )`)).toMatchInlineSnapshot(` Object { "end": 100, "members": Array [ Object { "end": 2, "start": 0, "type": "reference", "value": "IF", }, Object { "closer": Object { "end": 100, "start": 99, "type": "closeParenthesis", "value": ")", }, "end": 99, "members": Array [ Object { "end": 10, "start": 3, "type": "space", "value": " ", }, Object { "closer": Object { "end": 21, "start": 20, "type": "closeBrace", "value": "}", }, "end": 20, "members": Array [], "opener": Object { "end": 11, "start": 10, "type": "openBrace", "value": "{", }, "start": 11, "type": "reference", "value": "Sales Tax", }, Object { "end": 22, "start": 21, "type": "space", "value": " ", }, Object { "end": 23, "start": 22, "type": "operator", "value": "*", }, Object { "end": 24, "start": 23, "type": "space", "value": " ", }, Object { "closer": Object { "end": 31, "start": 30, "type": "closeBrace", "value": "}", }, "end": 30, "members": Array [], "opener": Object { "end": 25, "start": 24, "type": "openBrace", "value": "{", }, "start": 25, "type": "reference", "value": "Price", }, Object { "end": 32, "start": 31, "type": "space", "value": " ", }, Object { "end": 33, "start": 32, "type": "operator", "value": ">", }, Object { "end": 34, "start": 33, "type": "space", "value": " ", }, Object { "end": 37, "start": 34, "type": "number", "value": "100", }, Object { "end": 38, "start": 37, "type": "argumentSeparator", "value": ",", }, Object { "end": 45, "start": 38, "type": "space", "value": " ", }, Object { "closer": Object { "end": 63, "start": 62, "type": "quoteMark", "value": "\\"", }, "end": 62, "members": Array [], "opener": Object { "end": 46, "start": 45, "type": "quoteMark", "value": "\\"", }, "start": 46, "type": "string", "value": "This is over 100", }, Object { "end": 64, "start": 63, "type": "argumentSeparator", "value": ",", }, Object { "end": 71, "start": 64, "type": "space", "value": " ", }, Object { "closer": Object { "end": 94, "start": 93, "type": "quoteMark", "value": "\\"", }, "end": 93, "members": Array [], "opener": Object { "end": 72, "start": 71, "type": "quoteMark", "value": "\\"", }, "start": 72, "type": "string", "value": "This is less than 100", }, Object { "end": 99, "start": 94, "type": "space", "value": " ", }, ], "opener": Object { "end": 3, "start": 2, "type": "openParenthesis", "value": "(", }, "start": 3, "type": "group", "value": " * > 100, , ", }, ], "start": 0, "type": "group", "value": "IF( {Sales Tax} * {Price} > 100, \\"This is over 100\\", \\"This is less than 100\\" )", } `); }); (0, globals_1.it)("Should tokenize a string with escaped quotes", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)(`"This is a \\"string\\""`)).toMatchInlineSnapshot(` Object { "end": 22, "members": Array [ Object { "closer": Object { "end": 22, "start": 21, "type": "quoteMark", "value": "\\"", }, "end": 21, "members": Array [], "opener": Object { "end": 1, "start": 0, "type": "quoteMark", "value": "\\"", }, "start": 1, "type": "string", "value": "This is a \\\\\\"string\\\\\\"", }, ], "start": 0, "type": "group", "value": "\\"This is a \\\\\\"string\\\\\\"\\"", } `); }); (0, globals_1.it)("Should tokenize mixed quotes", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)(`"'"`)).toMatchInlineSnapshot(` Object { "end": 3, "members": Array [ Object { "closer": Object { "end": 3, "start": 2, "type": "quoteMark", "value": "\\"", }, "end": 2, "members": Array [], "opener": Object { "end": 1, "start": 0, "type": "quoteMark", "value": "\\"", }, "start": 1, "type": "string", "value": "'", }, ], "start": 0, "type": "group", "value": "\\"'\\"", } `); (0, globals_1.expect)((0, tokenize_1.tokenize)(`'"'`)).toMatchInlineSnapshot(` Object { "end": 3, "members": Array [ Object { "closer": Object { "end": 3, "start": 2, "type": "quoteMark", "value": "'", }, "end": 2, "members": Array [], "opener": Object { "end": 1, "start": 0, "type": "quoteMark", "value": "'", }, "start": 1, "type": "string", "value": "\\"", }, ], "start": 0, "type": "group", "value": "'\\"'", } `); }); (0, globals_1.it)("Should not tokenize special characters in strings", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)(`"(){}''"`)).toMatchInlineSnapshot(` Object { "end": 8, "members": Array [ Object { "closer": Object { "end": 8, "start": 7, "type": "quoteMark", "value": "\\"", }, "end": 7, "members": Array [], "opener": Object { "end": 1, "start": 0, "type": "quoteMark", "value": "\\"", }, "start": 1, "type": "string", "value": "(){}''", }, ], "start": 0, "type": "group", "value": "\\"(){}''\\"", } `); (0, globals_1.expect)((0, tokenize_1.tokenize)(`foo("(){}''")`)).toMatchInlineSnapshot(` Object { "end": 13, "members": Array [ Object { "end": 3, "start": 0, "type": "reference", "value": "foo", }, Object { "closer": Object { "end": 13, "start": 12, "type": "closeParenthesis", "value": ")", }, "end": 12, "members": Array [ Object { "closer": Object { "end": 12, "start": 11, "type": "quoteMark", "value": "\\"", }, "end": 11, "members": Array [], "opener": Object { "end": 5, "start": 4, "type": "quoteMark", "value": "\\"", }, "start": 5, "type": "string", "value": "(){}''", }, ], "opener": Object { "end": 4, "start": 3, "type": "openParenthesis", "value": "(", }, "start": 4, "type": "group", "value": "", }, ], "start": 0, "type": "group", "value": "foo(\\"(){}''\\")", } `); }); (0, globals_1.it)("Should tokenize a string with escaped backlash", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)(`"\\\\"`)).toMatchInlineSnapshot(` Object { "end": 4, "members": Array [ Object { "closer": Object { "end": 4, "start": 3, "type": "quoteMark", "value": "\\"", }, "end": 3, "members": Array [], "opener": Object { "end": 1, "start": 0, "type": "quoteMark", "value": "\\"", }, "start": 1, "type": "string", "value": "\\\\\\\\", }, ], "start": 0, "type": "group", "value": "\\"\\\\\\\\\\"", } `); }); (0, globals_1.it)("Should tokenize triple operators", () => { (0, globals_1.expect)((0, tokenize_1.tokenize)(`Name & " - " & Age`)).toMatchInlineSnapshot(` Object { "end": 18, "members": Array [ Object { "end": 4, "start": 0, "type": "reference", "value": "Name", }, Object { "end": 5, "start": 4, "type": "space", "value": " ", }, Object { "end": 6, "start": 5, "type": "operator", "value": "&", }, Object { "end": 7, "start": 6, "type": "space", "value": " ", }, Object { "closer": Object { "end": 12, "start": 11, "type": "quoteMark", "value": "\\"", }, "end": 11, "members": Array [], "opener": Object { "end": 8, "start": 7, "type": "quoteMark", "value": "\\"", }, "start": 8, "type": "string", "value": " - ", }, Object { "end": 13, "start": 12, "type": "space", "value": " ", }, Object { "end": 14, "start": 13, "type": "operator", "value": "&", }, Object { "end": 15, "start": 14, "type": "space", "value": " ", }, Object { "end": 18, "start": 15, "type": "reference", "value": "Age", }, ], "start": 0, "type": "group", "value": "Name & \\" - \\" & Age", } `); }); (0, globals_1.it)("Should throw on unbalanced quotes", () => { (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`"This is a "string"`)).toThrowErrorMatchingInlineSnapshot(`"SyntaxError: Unclosed token doubleQuotedString, with \\" at position 18, but no closing token at position 19"`); }); (0, globals_1.it)("Should throw on unbalanced field reference", () => { (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`{this is a field`)).toThrowErrorMatchingInlineSnapshot(`"SyntaxError: Unclosed token bracedReference, with { at position 0, but no closing token at position 16"`); }); (0, globals_1.it)("Should throw on unbalanced parentheses", () => { (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`IF(1, 2, 3`)).toThrowErrorMatchingInlineSnapshot(`"SyntaxError: Unclosed token group, with ( at position 2, but no closing token at position 10"`); (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`IF1, 2, 3)`)).toThrowErrorMatchingInlineSnapshot(`"Syntax Error: Unexpected closing token ) at 9"`); }); (0, globals_1.it)("Should throw on invalid tokens", () => { // Invalid [] (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`[`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 0 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"[\\"" `); (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`]`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 0 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"]\\"" `); (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`a[1`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 1 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"[1\\"" `); (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`IF[1, 2, 3]`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 2 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"[1, 2, 3]\\"" `); // Invalid `` (0, globals_1.expect)(() => (0, tokenize_1.tokenize)("`")).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 0 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"\`\\"" `); (0, globals_1.expect)(() => (0, tokenize_1.tokenize)("`Hello World`")).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 0 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"\`Hello World\`\\"" `); // Invalid operator % (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`%`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 0 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"%\\"" `); (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`a%b`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 1 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"%b\\"" `); // Invalid operator $ (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`$`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 0 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"$\\"" `); (0, globals_1.expect)(() => (0, tokenize_1.tokenize)(`a$b`)).toThrowErrorMatchingInlineSnapshot(` "Syntax error at position 1 for group: Expected: openDoubleQuote (/\\"/), openSingleQuote (/'/), openParenthesis (/\\\\(/), openBrace (/\\\\{/), closeParenthesis (/\\\\)/), number (/\\\\d+(?:\\\\.\\\\d+)?/), argumentSeparator (/,/), operator (/>=|<=|!=|\\\\+|\\\\*|&|>|<|=|-|\\\\//), reference (/\\\\b[a-z]\\\\w*/i), space (/\\\\s+/), group (/[]/) Got: \\"$b\\"" `); }); }); //# sourceMappingURL=tokenize.test.js.map