From c655e7de5056415575a8af949e3a6cd592b147ba Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Fri, 17 Jan 2020 18:27:59 +0530 Subject: [PATCH 1/9] Added jsescOptions to Numeric Literals --- packages/babel-generator/src/generators/types.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index fbad28e03b30..307ad22fd0fc 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -120,7 +120,11 @@ export function NullLiteral() { export function NumericLiteral(node: Object) { const raw = this.getPossibleRaw(node); - const value = node.value + ""; + const opts = this.format.jsescOption; + if (this.format.jsonCompatibleStrings) { + opts.json = true; + } + const value = jsesc(node.value, opts); if (raw == null) { this.number(value); // normalize } else if (this.format.minified) { From 9649bedbe85541f414ce3d104b8882af962edb1e Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Sun, 19 Jan 2020 02:25:51 +0530 Subject: [PATCH 2/9] Added tests and hexadecimal opts to NumericLiterals --- packages/babel-generator/src/generators/types.js | 5 ++--- .../test/fixtures/escapes/jsonEscape/output.js | 2 +- .../test/fixtures/escapes/numeric-literals/input.js | 1 + .../test/fixtures/escapes/numeric-literals/output.js | 1 + packages/babel-generator/test/fixtures/escapes/options.json | 4 +++- .../test/fixtures/minified/literals/output.js | 2 +- 6 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js create mode 100644 packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index 307ad22fd0fc..4ccd15c5a505 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -121,9 +121,8 @@ export function NullLiteral() { export function NumericLiteral(node: Object) { const raw = this.getPossibleRaw(node); const opts = this.format.jsescOption; - if (this.format.jsonCompatibleStrings) { - opts.json = true; - } + opts.numbers = "hexadecimal"; + opts.lowercaseHex = true; const value = jsesc(node.value, opts); if (raw == null) { this.number(value); // normalize diff --git a/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js b/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js index 4da42cb39725..0bec6d22aa75 100644 --- a/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js +++ b/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js @@ -1,2 +1,2 @@ 0;// Not a directive -"\u00A9"; \ No newline at end of file +"\u00a9"; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js b/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js new file mode 100644 index 000000000000..aeddba661b4d --- /dev/null +++ b/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js @@ -0,0 +1 @@ +let x = 42.0; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js b/packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js new file mode 100644 index 000000000000..e1072d83e4a3 --- /dev/null +++ b/packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js @@ -0,0 +1 @@ +let x=0x2a; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/escapes/options.json b/packages/babel-generator/test/fixtures/escapes/options.json index 96bc693445f1..13dd184595f7 100644 --- a/packages/babel-generator/test/fixtures/escapes/options.json +++ b/packages/babel-generator/test/fixtures/escapes/options.json @@ -1,4 +1,6 @@ { "minified": true, - "jsonCompatibleStrings": true + "jsonCompatibleStrings": true, + "numbers": "hexadecimal", + "lowercaseHex": true } diff --git a/packages/babel-generator/test/fixtures/minified/literals/output.js b/packages/babel-generator/test/fixtures/minified/literals/output.js index a44147f006b5..46a09bffb094 100644 --- a/packages/babel-generator/test/fixtures/minified/literals/output.js +++ b/packages/babel-generator/test/fixtures/minified/literals/output.js @@ -1 +1 @@ -5;5;50;5e4;"foobar";" ";"\n\r";"\uD83D\uDE02";`😂`;/foobar/g;null;true;false;5;2;56;31; \ No newline at end of file +5;0x5;5e1;5e4;"foobar";" ";"\n\r";"\ud83d\ude02";`😂`;/foobar/g;null;true;false;5.;0x2;0x38;0x1f; \ No newline at end of file From 8a47737e9e4a714a59e7c166b069b8ad81c5bd17 Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Mon, 20 Jan 2020 02:06:04 +0530 Subject: [PATCH 3/9] Fixed the bug of every numeric literal being coverted to hex --- packages/babel-generator/src/generators/types.js | 8 ++++++-- packages/babel-generator/src/index.js | 2 ++ .../test/fixtures/escapes/jsonEscape/options.json | 4 ++++ .../test/fixtures/escapes/jsonEscape/output.js | 2 +- .../test/fixtures/escapes/numeric-literals/input.js | 2 +- .../fixtures/escapes/{ => numeric-literals}/options.json | 0 .../test/fixtures/minified/literals/output.js | 2 +- 7 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json rename packages/babel-generator/test/fixtures/escapes/{ => numeric-literals}/options.json (100%) diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index 4ccd15c5a505..8151ebf70a21 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -121,8 +121,12 @@ export function NullLiteral() { export function NumericLiteral(node: Object) { const raw = this.getPossibleRaw(node); const opts = this.format.jsescOption; - opts.numbers = "hexadecimal"; - opts.lowercaseHex = true; + if (this.format.numbers) { + opts.numbers = "hexadecimal"; + if (this.format.lowercaseHex) { + opts.lowercaseHex = true; + } + } const value = jsesc(node.value, opts); if (raw == null) { this.number(value); // normalize diff --git a/packages/babel-generator/src/index.js b/packages/babel-generator/src/index.js index 9d288fb0f3cf..5fb8184c7498 100644 --- a/packages/babel-generator/src/index.js +++ b/packages/babel-generator/src/index.js @@ -47,6 +47,8 @@ function normalizeOptions(code, opts): Format { minified: opts.minified, concise: opts.concise, jsonCompatibleStrings: opts.jsonCompatibleStrings, + numbers: opts.numbers, + lowercaseHex: opts.lowercaseHex, indent: { adjustMultilineComment: true, style: " ", diff --git a/packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json b/packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json new file mode 100644 index 000000000000..7ff5565d1e9b --- /dev/null +++ b/packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json @@ -0,0 +1,4 @@ +{ + "minified": true, + "jsonCompatibleStrings": true +} \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js b/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js index 0bec6d22aa75..4da42cb39725 100644 --- a/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js +++ b/packages/babel-generator/test/fixtures/escapes/jsonEscape/output.js @@ -1,2 +1,2 @@ 0;// Not a directive -"\u00a9"; \ No newline at end of file +"\u00A9"; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js b/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js index aeddba661b4d..16c36425ef0d 100644 --- a/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js +++ b/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js @@ -1 +1 @@ -let x = 42.0; \ No newline at end of file +let x = 42.0 \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/escapes/options.json b/packages/babel-generator/test/fixtures/escapes/numeric-literals/options.json similarity index 100% rename from packages/babel-generator/test/fixtures/escapes/options.json rename to packages/babel-generator/test/fixtures/escapes/numeric-literals/options.json diff --git a/packages/babel-generator/test/fixtures/minified/literals/output.js b/packages/babel-generator/test/fixtures/minified/literals/output.js index 46a09bffb094..a44147f006b5 100644 --- a/packages/babel-generator/test/fixtures/minified/literals/output.js +++ b/packages/babel-generator/test/fixtures/minified/literals/output.js @@ -1 +1 @@ -5;0x5;5e1;5e4;"foobar";" ";"\n\r";"\ud83d\ude02";`😂`;/foobar/g;null;true;false;5.;0x2;0x38;0x1f; \ No newline at end of file +5;5;50;5e4;"foobar";" ";"\n\r";"\uD83D\uDE02";`😂`;/foobar/g;null;true;false;5;2;56;31; \ No newline at end of file From f87501e91ce9a6e7b6451ca1481478ae6ab5fc32 Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Mon, 20 Jan 2020 23:13:46 +0530 Subject: [PATCH 4/9] Added conditions when jsesc should be applied --- .../babel-generator/src/generators/types.js | 31 +++++++++++++------ .../escapes/numeric-literals/input.js | 2 +- .../escapes/numeric-literals/options.json | 8 ++--- .../escapes/numeric-literals/output.js | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index 8151ebf70a21..bfc0f0a4bf11 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -121,19 +121,30 @@ export function NullLiteral() { export function NumericLiteral(node: Object) { const raw = this.getPossibleRaw(node); const opts = this.format.jsescOption; - if (this.format.numbers) { - opts.numbers = "hexadecimal"; - if (this.format.lowercaseHex) { - opts.lowercaseHex = true; - } - } - const value = jsesc(node.value, opts); + const value = node.value + ""; if (raw == null) { - this.number(value); // normalize + //normalize + if (this.format.jsescOption.numbers) { + this.number(jsesc(parseInt(value), opts)); + } else { + this.number(value); + } } else if (this.format.minified) { - this.number(raw.length < value.length ? raw : value); + if (this.format.jsescOption.numbers) { + this.number( + raw.length < value.length + ? jsesc(parseInt(raw), opts) + : jsesc(parseInt(value), opts), + ); + } else { + this.number(raw.length < value.length ? raw : value); + } } else { - this.number(raw); + if (this.format.jsescOption.numbers) { + this.number(jsesc(parseInt(raw), opts)); + } else { + this.number(raw); + } } } diff --git a/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js b/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js index 16c36425ef0d..91c93b0951e1 100644 --- a/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js +++ b/packages/babel-generator/test/fixtures/escapes/numeric-literals/input.js @@ -1 +1 @@ -let x = 42.0 \ No newline at end of file +let x = 42 \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/escapes/numeric-literals/options.json b/packages/babel-generator/test/fixtures/escapes/numeric-literals/options.json index 13dd184595f7..0e857996e427 100644 --- a/packages/babel-generator/test/fixtures/escapes/numeric-literals/options.json +++ b/packages/babel-generator/test/fixtures/escapes/numeric-literals/options.json @@ -1,6 +1,6 @@ { - "minified": true, - "jsonCompatibleStrings": true, - "numbers": "hexadecimal", - "lowercaseHex": true + "jsescOption": { + "numbers": "hexadecimal", + "lowercaseHex": true + } } diff --git a/packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js b/packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js index e1072d83e4a3..7ba9bc21a7c6 100644 --- a/packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js +++ b/packages/babel-generator/test/fixtures/escapes/numeric-literals/output.js @@ -1 +1 @@ -let x=0x2a; \ No newline at end of file +let x = 0x2a; \ No newline at end of file From dc878166af7b164d427739cd8117d29ed9709eca Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Mon, 20 Jan 2020 23:16:05 +0530 Subject: [PATCH 5/9] Removed numbers and lowercaseHex from format object --- packages/babel-generator/src/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/babel-generator/src/index.js b/packages/babel-generator/src/index.js index 5fb8184c7498..9d288fb0f3cf 100644 --- a/packages/babel-generator/src/index.js +++ b/packages/babel-generator/src/index.js @@ -47,8 +47,6 @@ function normalizeOptions(code, opts): Format { minified: opts.minified, concise: opts.concise, jsonCompatibleStrings: opts.jsonCompatibleStrings, - numbers: opts.numbers, - lowercaseHex: opts.lowercaseHex, indent: { adjustMultilineComment: true, style: " ", From bdf978f9ee88f24de28e4b39e8a9cfcfbcb68236 Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Mon, 20 Jan 2020 23:19:23 +0530 Subject: [PATCH 6/9] Added newline to test of jsonEscape (to exclude the change) --- .../test/fixtures/escapes/jsonEscape/options.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json b/packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json index 7ff5565d1e9b..96bc693445f1 100644 --- a/packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json +++ b/packages/babel-generator/test/fixtures/escapes/jsonEscape/options.json @@ -1,4 +1,4 @@ { "minified": true, "jsonCompatibleStrings": true -} \ No newline at end of file +} From e89ac3888aa5b48c5987ab75ebcd01b62e684707 Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Tue, 21 Jan 2020 12:15:25 +0530 Subject: [PATCH 7/9] Modified conditions to apply jsesc --- .../babel-generator/src/generators/types.js | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index bfc0f0a4bf11..b310e2780762 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -122,29 +122,14 @@ export function NumericLiteral(node: Object) { const raw = this.getPossibleRaw(node); const opts = this.format.jsescOption; const value = node.value + ""; - if (raw == null) { - //normalize - if (this.format.jsescOption.numbers) { - this.number(jsesc(parseInt(value), opts)); - } else { - this.number(value); - } + if (this.format.jsescOption.numbers) { + this.number(jsesc(parseInt(value), opts)); + } else if (raw == null) { + this.number(value); // normalize } else if (this.format.minified) { - if (this.format.jsescOption.numbers) { - this.number( - raw.length < value.length - ? jsesc(parseInt(raw), opts) - : jsesc(parseInt(value), opts), - ); - } else { - this.number(raw.length < value.length ? raw : value); - } + this.number(raw.length < value.length ? raw : value); } else { - if (this.format.jsescOption.numbers) { - this.number(jsesc(parseInt(raw), opts)); - } else { - this.number(raw); - } + this.number(raw); } } From 7b3eea78e0d6da1e17f1b37fa04c7303c5479df6 Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Tue, 21 Jan 2020 18:01:14 +0530 Subject: [PATCH 8/9] Made the required changes. --- packages/babel-generator/src/generators/types.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index b310e2780762..1364a37219d0 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -122,8 +122,8 @@ export function NumericLiteral(node: Object) { const raw = this.getPossibleRaw(node); const opts = this.format.jsescOption; const value = node.value + ""; - if (this.format.jsescOption.numbers) { - this.number(jsesc(parseInt(value), opts)); + if (opts.numbers) { + this.number(jsesc(value, opts)); } else if (raw == null) { this.number(value); // normalize } else if (this.format.minified) { From 753393390b5193dc8c82ab8b4d3744556e0b2441 Mon Sep 17 00:00:00 2001 From: sidntrivedi012 Date: Wed, 22 Jan 2020 02:14:34 +0530 Subject: [PATCH 9/9] Using node.value instead of value --- packages/babel-generator/src/generators/types.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index 1364a37219d0..985daa477b34 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -123,7 +123,7 @@ export function NumericLiteral(node: Object) { const opts = this.format.jsescOption; const value = node.value + ""; if (opts.numbers) { - this.number(jsesc(value, opts)); + this.number(jsesc(node.value, opts)); } else if (raw == null) { this.number(value); // normalize } else if (this.format.minified) {