diff --git a/src/__tests__/__snapshots__/interpreter.test.js.snap b/src/__tests__/__snapshots__/interpreter.test.js.snap index 64ae381b..8a8b6ad5 100644 --- a/src/__tests__/__snapshots__/interpreter.test.js.snap +++ b/src/__tests__/__snapshots__/interpreter.test.js.snap @@ -41,6 +41,8 @@ exports[`interpreter correct target code !(3 * 2 -1 > -1.34 * 3) and true 1`] = exports[`interpreter correct target code "1" == 1 1`] = `"(function(_) { return (function(input) { return \\"1\\"===1})})"`; +exports[`interpreter correct target code "Hello\\" World\\'\\nx" 1`] = `"(function(_) { return (function(input) { return \\"Hello\\\\\\" World\\\\'\\\\nx\\"})})"`; + exports[`interpreter correct target code $ { Person: user { name { @@ -987,6 +989,16 @@ Object { } `; +exports[`interpreter correct target tree "Hello\\" World\\'\\nx" 1`] = ` +Object { + "status": true, + "value": Object { + "name": "primitive", + "value": "\\"Hello\\\\\\" World\\\\'\\\\nx\\"", + }, +} +`; + exports[`interpreter correct target tree $ { Person: user { name { diff --git a/src/__tests__/interpreter.test.js b/src/__tests__/interpreter.test.js index f5cd9f49..48f4e0ef 100644 --- a/src/__tests__/interpreter.test.js +++ b/src/__tests__/interpreter.test.js @@ -87,6 +87,11 @@ const tests = [ sourceCode: `null: true`, output: [null, true] }, + { + sourceCode: `"Hello\\" World\\'\\nx"`, + output: `Hello" World' +x` + }, { sourceCode: `{ "foo": [-42, $], diff --git a/src/parsers/primitive.js b/src/parsers/primitive.js index 2e77b85e..e118a832 100644 --- a/src/parsers/primitive.js +++ b/src/parsers/primitive.js @@ -6,8 +6,8 @@ import P from 'parsimmon' import type { NodeType } from '../types' const keywords = ['null', 'true', 'false'] -const DoubleQuoteStringRegexp = /("(((?=\\)\\(["\\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\0-\x1F\x7F]+)*")/ -const SingleQuoteStringRegexp = /('(((?=\\)\\(['\\\/bfnrt]|u[0-9a-fA-F]{4}))|[^'\\\0-\x1F\x7F]+)*')/ +const DoubleQuoteStringRegexp = /("(((?=\\)\\(["'\\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\0-\x1F\x7F]+)*")/ +const SingleQuoteStringRegexp = /('(((?=\\)\\(['"\\\/bfnrt]|u[0-9a-fA-F]{4}))|[^'\\\0-\x1F\x7F]+)*')/ export const StringParserRegExp = new RegExp(`(${DoubleQuoteStringRegexp.source}|${SingleQuoteStringRegexp.source})`) const NumberParserRegExp = /(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/