diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index 9ba935af10..3f803c8e11 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -143,10 +143,14 @@ export function StringLiteral(node: Object, parent: Object) { } // ensure the output is ASCII-safe - let val = jsesc(node.value, { + const opts = { quotes: t.isJSX(parent) ? "double" : this.format.quotes, wrap: true - }); + }; + if (this.format.jsonCompatibleStrings) { + opts.json = true; + } + let val = jsesc(node.value, opts); return this.token(val); } diff --git a/packages/babel-generator/src/index.js b/packages/babel-generator/src/index.js index b4442b27e2..c730c6689a 100644 --- a/packages/babel-generator/src/index.js +++ b/packages/babel-generator/src/index.js @@ -59,6 +59,7 @@ function normalizeOptions(code, opts, tokens): Format { minified: opts.minified, concise: opts.concise, quotes: opts.quotes || findCommonStringDelimiter(code, tokens), + jsonCompatibleStrings: opts.jsonCompatibleStrings, indent: { adjustMultilineComment: true, style: style, diff --git a/packages/babel-generator/test/fixtures/escapes/jsonEscape/actual.js b/packages/babel-generator/test/fixtures/escapes/jsonEscape/actual.js new file mode 100644 index 0000000000..2305ada28e --- /dev/null +++ b/packages/babel-generator/test/fixtures/escapes/jsonEscape/actual.js @@ -0,0 +1 @@ +"©"; diff --git a/packages/babel-generator/test/fixtures/escapes/jsonEscape/expected.js b/packages/babel-generator/test/fixtures/escapes/jsonEscape/expected.js new file mode 100644 index 0000000000..fd903a4b2d --- /dev/null +++ b/packages/babel-generator/test/fixtures/escapes/jsonEscape/expected.js @@ -0,0 +1 @@ +"\u00A9"; diff --git a/packages/babel-generator/test/fixtures/escapes/options.json b/packages/babel-generator/test/fixtures/escapes/options.json new file mode 100644 index 0000000000..96bc693445 --- /dev/null +++ b/packages/babel-generator/test/fixtures/escapes/options.json @@ -0,0 +1,4 @@ +{ + "minified": true, + "jsonCompatibleStrings": true +}