From cf3a38fb40a5e551eb3a60ea9f20958d9d353678 Mon Sep 17 00:00:00 2001 From: Juriy Zaytsev Date: Tue, 15 Nov 2016 12:03:41 -0800 Subject: [PATCH] Add jsonCompatibleStrings option to generator (#4827) --- packages/babel-generator/src/generators/types.js | 8 ++++++-- packages/babel-generator/src/index.js | 1 + .../test/fixtures/escapes/jsonEscape/actual.js | 1 + .../test/fixtures/escapes/jsonEscape/expected.js | 1 + .../babel-generator/test/fixtures/escapes/options.json | 4 ++++ 5 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/escapes/jsonEscape/actual.js create mode 100644 packages/babel-generator/test/fixtures/escapes/jsonEscape/expected.js create mode 100644 packages/babel-generator/test/fixtures/escapes/options.json 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 +}