From 5bd0e691c051e71314db3e0a163a61751fcbd993 Mon Sep 17 00:00:00 2001 From: yoho Date: Sat, 23 Apr 2022 12:26:12 +0800 Subject: [PATCH 1/9] fix: feat regexp match clean --- .../src/node/__tests__/cleanString.spec.ts | 21 +++++++++++++++++++ packages/vite/src/node/cleanString.ts | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/__tests__/cleanString.spec.ts b/packages/vite/src/node/__tests__/cleanString.spec.ts index b77f4c0fb5fbad..25496646d0fb7d 100644 --- a/packages/vite/src/node/__tests__/cleanString.spec.ts +++ b/packages/vite/src/node/__tests__/cleanString.spec.ts @@ -51,6 +51,27 @@ test('escape character', () => { expect(clean).not.toMatch('1') }) +test('regexp', () => { + const clean = emptyString(` + /'1\\'1'/ + /"1\\"1"/ + /"1\\"1\\"1"/ + /"1\\'1'\\"1"/ + /"1'1'"/ + /"1'\\'1\\''\\"1\\"\\""/ + /'1"\\"1\\""\\"1\\"\\"'/ + /'""1""'/ + /'"""1"""'/ + /'""""1""""'/ + /"''1''"/ + /"'''1'''"/ + /"''''1''''"/ + `) + expect(clean).not.toMatch('1') + expect(clean).not.toMatch('"') + expect(clean).not.toMatch("'") +}) + test('strings comment nested', () => { expect( emptyString(` diff --git a/packages/vite/src/node/cleanString.ts b/packages/vite/src/node/cleanString.ts index 2b7cba41aef66b..0fc0cdf82df1ae 100644 --- a/packages/vite/src/node/cleanString.ts +++ b/packages/vite/src/node/cleanString.ts @@ -3,7 +3,7 @@ import type { RollupError } from 'rollup' // /`([^`\$\{\}]|\$\{(`|\g<1>)*\})*`/g can match nested string template // but js not support match expression(\g<0>). so clean string template(`...`) in other ways. const cleanerRE = - /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'|\/\*(.|[\r\n])*?\*\/|\/\/.*/g + /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'|\/\*(.|[\r\n])*?\*\/|\/\/.*|\/.*\//g const blankReplacer = (s: string) => ' '.repeat(s.length) const stringBlankReplacer = (s: string) => From fca59f4fea64c5ec0d203b7669cc2a830666294e Mon Sep 17 00:00:00 2001 From: yoho Date: Sat, 23 Apr 2022 12:26:56 +0800 Subject: [PATCH 2/9] feat: test --- .../vite/src/node/__tests__/cleanString.spec.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/vite/src/node/__tests__/cleanString.spec.ts b/packages/vite/src/node/__tests__/cleanString.spec.ts index 25496646d0fb7d..ba65345c67213f 100644 --- a/packages/vite/src/node/__tests__/cleanString.spec.ts +++ b/packages/vite/src/node/__tests__/cleanString.spec.ts @@ -54,18 +54,31 @@ test('escape character', () => { test('regexp', () => { const clean = emptyString(` /'1\\'1'/ + '1\\'1' /"1\\"1"/ + "1\\"1" /"1\\"1\\"1"/ + "1\\"1\\"1" /"1\\'1'\\"1"/ + "1\\'1'\\"1" /"1'1'"/ + "1'1'" /"1'\\'1\\''\\"1\\"\\""/ + "1'\\'1\\''\\"1\\"\\"" /'1"\\"1\\""\\"1\\"\\"'/ + '1"\\"1\\""\\"1\\"\\"' /'""1""'/ + '""1""' /'"""1"""'/ + '"""1"""' /'""""1""""'/ + '""""1""""' /"''1''"/ + "''1''" /"'''1'''"/ + "'''1'''" /"''''1''''"/ + "''''1''''" `) expect(clean).not.toMatch('1') expect(clean).not.toMatch('"') From 33db88658f509d688d89847728b6d29b1f287b0c Mon Sep 17 00:00:00 2001 From: yoho Date: Sat, 23 Apr 2022 12:27:30 +0800 Subject: [PATCH 3/9] fix: test --- packages/vite/src/node/__tests__/cleanString.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/vite/src/node/__tests__/cleanString.spec.ts b/packages/vite/src/node/__tests__/cleanString.spec.ts index ba65345c67213f..154ad6703884f6 100644 --- a/packages/vite/src/node/__tests__/cleanString.spec.ts +++ b/packages/vite/src/node/__tests__/cleanString.spec.ts @@ -81,8 +81,6 @@ test('regexp', () => { "''''1''''" `) expect(clean).not.toMatch('1') - expect(clean).not.toMatch('"') - expect(clean).not.toMatch("'") }) test('strings comment nested', () => { From 2ec1ff1ef5a76074bfbe0abb207f4bce9aa8bc8a Mon Sep 17 00:00:00 2001 From: yoho Date: Sat, 23 Apr 2022 15:04:10 +0800 Subject: [PATCH 4/9] fix: comments that are on the same line as a regexp: --- packages/vite/src/node/__tests__/cleanString.spec.ts | 2 ++ packages/vite/src/node/cleanString.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/__tests__/cleanString.spec.ts b/packages/vite/src/node/__tests__/cleanString.spec.ts index 154ad6703884f6..ecef71a9695373 100644 --- a/packages/vite/src/node/__tests__/cleanString.spec.ts +++ b/packages/vite/src/node/__tests__/cleanString.spec.ts @@ -79,6 +79,8 @@ test('regexp', () => { "'''1'''" /"''''1''''"/ "''''1''''" + /'1'/ // '1' + /'1'/ /* '1' */ `) expect(clean).not.toMatch('1') }) diff --git a/packages/vite/src/node/cleanString.ts b/packages/vite/src/node/cleanString.ts index 0fc0cdf82df1ae..4a4f179fb26476 100644 --- a/packages/vite/src/node/cleanString.ts +++ b/packages/vite/src/node/cleanString.ts @@ -3,7 +3,7 @@ import type { RollupError } from 'rollup' // /`([^`\$\{\}]|\$\{(`|\g<1>)*\})*`/g can match nested string template // but js not support match expression(\g<0>). so clean string template(`...`) in other ways. const cleanerRE = - /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'|\/\*(.|[\r\n])*?\*\/|\/\/.*|\/.*\//g + /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'|\/\*(.|[\r\n])*?\*\/|\/\/.*|\/([^\/]|(?<=\/)\/)*\//g const blankReplacer = (s: string) => ' '.repeat(s.length) const stringBlankReplacer = (s: string) => From 5f4ab17e17715e4bb2018c2c39be17e4d8eea53f Mon Sep 17 00:00:00 2001 From: yoho Date: Sat, 23 Apr 2022 15:22:45 +0800 Subject: [PATCH 5/9] fix: escaped --- .../src/node/__tests__/cleanString.spec.ts | 27 ++++--------------- packages/vite/src/node/cleanString.ts | 6 +++-- 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/packages/vite/src/node/__tests__/cleanString.spec.ts b/packages/vite/src/node/__tests__/cleanString.spec.ts index ecef71a9695373..1d90ff31da1ea7 100644 --- a/packages/vite/src/node/__tests__/cleanString.spec.ts +++ b/packages/vite/src/node/__tests__/cleanString.spec.ts @@ -1,3 +1,4 @@ +import { assetAttrsConfig } from './../plugins/html' import { emptyString } from '../../node/cleanString' test('comments', () => { @@ -55,32 +56,14 @@ test('regexp', () => { const clean = emptyString(` /'1\\'1'/ '1\\'1' - /"1\\"1"/ - "1\\"1" - /"1\\"1\\"1"/ - "1\\"1\\"1" - /"1\\'1'\\"1"/ - "1\\'1'\\"1" - /"1'1'"/ - "1'1'" - /"1'\\'1\\''\\"1\\"\\""/ - "1'\\'1\\''\\"1\\"\\"" - /'1"\\"1\\""\\"1\\"\\"'/ - '1"\\"1\\""\\"1\\"\\"' - /'""1""'/ - '""1""' - /'"""1"""'/ - '"""1"""' - /'""""1""""'/ - '""""1""""' - /"''1''"/ - "''1''" - /"'''1'''"/ - "'''1'''" /"''''1''''"/ "''''1''''" /'1'/ // '1' /'1'/ /* '1' */ + /'1'/ // '1' + /'1'/ /* '1' */ + /'\\/1'/ // '1' + /'\\/1'/ /* '1' */ `) expect(clean).not.toMatch('1') }) diff --git a/packages/vite/src/node/cleanString.ts b/packages/vite/src/node/cleanString.ts index 4a4f179fb26476..2e273f8dab57a5 100644 --- a/packages/vite/src/node/cleanString.ts +++ b/packages/vite/src/node/cleanString.ts @@ -2,8 +2,10 @@ import type { RollupError } from 'rollup' // bank on the non-overlapping nature of regex matches and combine all filters into one giant regex // /`([^`\$\{\}]|\$\{(`|\g<1>)*\})*`/g can match nested string template // but js not support match expression(\g<0>). so clean string template(`...`) in other ways. -const cleanerRE = - /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'|\/\*(.|[\r\n])*?\*\/|\/\/.*|\/([^\/]|(?<=\/)\/)*\//g +const stringsRE = /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'/ +const commentsRE = /\/\*(.|[\r\n])*?\*\/|\/\/.*/ +const regexpRE = /\/([^\/\r\n]|(?<=\\)\/)*\// +const cleanerRE = new RegExp(`${stringsRE}|${commentsRE}|${regexpRE}`, 'g') const blankReplacer = (s: string) => ' '.repeat(s.length) const stringBlankReplacer = (s: string) => From d85e6e94b86ec76beff0426d56e730480ec10436 Mon Sep 17 00:00:00 2001 From: yoho Date: Sat, 23 Apr 2022 18:53:16 +0800 Subject: [PATCH 6/9] fix: regexp --- packages/vite/src/node/cleanString.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/cleanString.ts b/packages/vite/src/node/cleanString.ts index 2e273f8dab57a5..d68f08502a8344 100644 --- a/packages/vite/src/node/cleanString.ts +++ b/packages/vite/src/node/cleanString.ts @@ -2,9 +2,9 @@ import type { RollupError } from 'rollup' // bank on the non-overlapping nature of regex matches and combine all filters into one giant regex // /`([^`\$\{\}]|\$\{(`|\g<1>)*\})*`/g can match nested string template // but js not support match expression(\g<0>). so clean string template(`...`) in other ways. -const stringsRE = /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'/ -const commentsRE = /\/\*(.|[\r\n])*?\*\/|\/\/.*/ -const regexpRE = /\/([^\/\r\n]|(?<=\\)\/)*\// +const stringsRE = /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'/.source +const commentsRE = /\/\*(.|[\r\n])*?\*\/|\/\/.*/.source +const regexpRE = /\/([^\/\r\n]|(?<=\\)\/)*\//.source const cleanerRE = new RegExp(`${stringsRE}|${commentsRE}|${regexpRE}`, 'g') const blankReplacer = (s: string) => ' '.repeat(s.length) From b1d2aeadc27424cfdc6fac3d20cdda09f424576f Mon Sep 17 00:00:00 2001 From: yoho Date: Sat, 23 Apr 2022 20:25:38 +0800 Subject: [PATCH 7/9] refactor: make regexp affect in one line --- .../vite/src/node/__tests__/cleanString.spec.ts | 16 +++++----------- packages/vite/src/node/cleanString.ts | 8 ++++---- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/vite/src/node/__tests__/cleanString.spec.ts b/packages/vite/src/node/__tests__/cleanString.spec.ts index 1d90ff31da1ea7..f307c4816b7cd3 100644 --- a/packages/vite/src/node/__tests__/cleanString.spec.ts +++ b/packages/vite/src/node/__tests__/cleanString.spec.ts @@ -52,18 +52,12 @@ test('escape character', () => { expect(clean).not.toMatch('1') }) -test('regexp', () => { +test('regexp affect', () => { const clean = emptyString(` - /'1\\'1'/ - '1\\'1' - /"''''1''''"/ - "''''1''''" - /'1'/ // '1' - /'1'/ /* '1' */ - /'1'/ // '1' - /'1'/ /* '1' */ - /'\\/1'/ // '1' - /'\\/1'/ /* '1' */ + /'/ + '1' + /"/ + "1" `) expect(clean).not.toMatch('1') }) diff --git a/packages/vite/src/node/cleanString.ts b/packages/vite/src/node/cleanString.ts index d68f08502a8344..6df8cb5f928dba 100644 --- a/packages/vite/src/node/cleanString.ts +++ b/packages/vite/src/node/cleanString.ts @@ -2,10 +2,9 @@ import type { RollupError } from 'rollup' // bank on the non-overlapping nature of regex matches and combine all filters into one giant regex // /`([^`\$\{\}]|\$\{(`|\g<1>)*\})*`/g can match nested string template // but js not support match expression(\g<0>). so clean string template(`...`) in other ways. -const stringsRE = /"([^"]|(?<=\\)")*"|'([^']|(?<=\\)')*'/.source +const stringsRE = /"([^"\r\n]|(?<=\\)")*"|'([^'\r\n]|(?<=\\)')*'/.source const commentsRE = /\/\*(.|[\r\n])*?\*\/|\/\/.*/.source -const regexpRE = /\/([^\/\r\n]|(?<=\\)\/)*\//.source -const cleanerRE = new RegExp(`${stringsRE}|${commentsRE}|${regexpRE}`, 'g') +const cleanerRE = new RegExp(`${stringsRE}|${commentsRE}`, 'g') const blankReplacer = (s: string) => ' '.repeat(s.length) const stringBlankReplacer = (s: string) => @@ -26,7 +25,8 @@ export function emptyString(raw: string): string { return res } - +;/\/*/ +1 / 2 + /* 123 */ 5 / 3 const enum LexerState { // template string inTemplateString, From 97bfb31f5b031acaaa0722c4abb0b8d89fc7641b Mon Sep 17 00:00:00 2001 From: yoho <907415276@qq.com> Date: Sun, 24 Apr 2022 16:18:55 +0800 Subject: [PATCH 8/9] chore: clean Co-authored-by: patak --- packages/vite/src/node/cleanString.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/vite/src/node/cleanString.ts b/packages/vite/src/node/cleanString.ts index 6df8cb5f928dba..8b5cf6ed4d659d 100644 --- a/packages/vite/src/node/cleanString.ts +++ b/packages/vite/src/node/cleanString.ts @@ -25,8 +25,6 @@ export function emptyString(raw: string): string { return res } -;/\/*/ -1 / 2 + /* 123 */ 5 / 3 const enum LexerState { // template string inTemplateString, From 3768e03a683e6f19bdcbc98b02b28226b1afab93 Mon Sep 17 00:00:00 2001 From: patak Date: Sun, 24 Apr 2022 10:21:23 +0200 Subject: [PATCH 9/9] chore: spacing --- packages/vite/src/node/cleanString.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/vite/src/node/cleanString.ts b/packages/vite/src/node/cleanString.ts index 8b5cf6ed4d659d..3d623dce79c0d3 100644 --- a/packages/vite/src/node/cleanString.ts +++ b/packages/vite/src/node/cleanString.ts @@ -25,6 +25,7 @@ export function emptyString(raw: string): string { return res } + const enum LexerState { // template string inTemplateString,