From 7d4c6414d251c4737f03588accd813711463674d Mon Sep 17 00:00:00 2001 From: rxliuli Date: Tue, 16 May 2023 13:55:53 +0800 Subject: [PATCH 1/3] fix(vite-node): don't remove sourcemap string in code (#2918) --- examples/basic/test/sourcemap.test.ts | 7 +++++++ packages/vite-node/src/source-map.ts | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 examples/basic/test/sourcemap.test.ts diff --git a/examples/basic/test/sourcemap.test.ts b/examples/basic/test/sourcemap.test.ts new file mode 100644 index 000000000000..3b7623d8d9a9 --- /dev/null +++ b/examples/basic/test/sourcemap.test.ts @@ -0,0 +1,7 @@ +import { expect, it } from 'vitest' + +it('should have sourcemaps', () => { + expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,').toBeTruthy() + expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,').toBeTruthy() + expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,').toBeTruthy() +}) diff --git a/packages/vite-node/src/source-map.ts b/packages/vite-node/src/source-map.ts index 4adccd27a2d5..92b70e6d77a4 100644 --- a/packages/vite-node/src/source-map.ts +++ b/packages/vite-node/src/source-map.ts @@ -41,7 +41,8 @@ export function withInlineSourcemap(result: TransformResult, options: { }) // to reduce the payload size, we only inline vite node source map, because it's also the only one we use - const OTHER_SOURCE_MAP_REGEXP = new RegExp(`//# ${SOURCEMAPPING_URL}=data:application/json[^,]+base64,(.+)`, 'g') + // const OTHER_SOURCE_MAP_REGEXP = new RegExp(`//# ${SOURCEMAPPING_URL}=data:application/json[^,]+base64,(.+)`, 'g') + const OTHER_SOURCE_MAP_REGEXP = /(? Date: Wed, 17 May 2023 22:48:18 +0800 Subject: [PATCH 2/3] test: add sourcemap unit test --- packages/vite-node/src/source-map.ts | 2 +- test/vite-node/test/sourcemap.test.ts | 77 +++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 test/vite-node/test/sourcemap.test.ts diff --git a/packages/vite-node/src/source-map.ts b/packages/vite-node/src/source-map.ts index 92b70e6d77a4..150c277fdd07 100644 --- a/packages/vite-node/src/source-map.ts +++ b/packages/vite-node/src/source-map.ts @@ -42,7 +42,7 @@ export function withInlineSourcemap(result: TransformResult, options: { // to reduce the payload size, we only inline vite node source map, because it's also the only one we use // const OTHER_SOURCE_MAP_REGEXP = new RegExp(`//# ${SOURCEMAPPING_URL}=data:application/json[^,]+base64,(.+)`, 'g') - const OTHER_SOURCE_MAP_REGEXP = /(? { + const regex = /(? { + const input: TransformResult = { + code: 'function foo(src) {\n return `//# sourceMappingURL=data:application/json;base64,${src}`;\n}\nObject.defineProperty(__vite_ssr_exports__, "foo", { enumerable: true, configurable: true, get(){ return foo }});\n', + map: { + version: 3, + mappings: 'AAAO,SAAS,IAAI,KAAqB;AACvC,SAAO,qDAAqD;AAC9D;iHAAA', + names: [], + sourceRoot: undefined, + sources: [ + '/foo.ts', + ], + sourcesContent: [ + 'export function foo(src: string): string {\n return `//# sourceMappingURL=data:application/json;base64,${src}`\n}\n', + ], + file: '/src/foo.ts', + } as unknown as SourceMap, + deps: [ + ], + dynamicDeps: [ + ], + } + const options = { + root: '/', + filepath: '/foo.ts', + } + + it('Check that the original sourcemap in the string isnot removed', () => { + expect(withInlineSourcemap(input, options).code).contain('return `//# sourceMappingURL=data:application/json;base64,${src}`') + }) + it('Check that the appended sourcemap is removed', () => { + input.code = `function foo(src) { + return \`//# sourceMappingURL=data:application/json;base64,\${src}\`; + } + Object.defineProperty(__vite_ssr_exports__, "foo", { enumerable: true, configurable: true, get(){ return foo }}); + + //# sourceMappingSource=other + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQU8sU0FBUyxJQUFJLEtBQXFCO0FBQ3ZDLFNBQU8scURBQXFEO0FBQzlEO2lIQUFBIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL2Zvby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZm9vKHNyYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCR7c3JjfWBcbn1cbiJdLCJmaWxlIjoiL3NyYy9mb28udtest==` + + expect(withInlineSourcemap(input, options).code).not.toContain('//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQU8sU0FBUyxJQUFJLEtBQXFCO0FBQ3ZDLFNBQU8scURBQXFEO0FBQzlEO2lIQUFBIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL2Zvby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZm9vKHNyYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCR7c3JjfWBcbn1cbiJdLCJmaWxlIjoiL3NyYy9mb28udtest==') + }) + it('Check that the vite-node sourcemap isnot removed', () => { + input.code = `function foo(src) { + return \`//# sourceMappingURL=data:application/json;base64,\${src}\`; + } + Object.defineProperty(__vite_ssr_exports__, "foo", { enumerable: true, configurable: true, get(){ return foo }}); + + //# sourceMappingSource=vite-node + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQU8sU0FBUyxJQUFJLEtBQXFCO0FBQ3ZDLFNBQU8scURBQXFEO0FBQzlEO2lIQUFBIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL2Zvby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZm9vKHNyYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCR7c3JjfWBcbn1cbiJdLCJmaWxlIjoiL3NyYy9mb28udHMifQ==` + + expect(withInlineSourcemap(input, options).code).include('//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQU8sU0FBUyxJQUFJLEtBQXFCO0FBQ3ZDLFNBQU8scURBQXFEO0FBQzlEO2lIQUFBIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL2Zvby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZm9vKHNyYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCR7c3JjfWBcbn1cbiJdLCJmaWxlIjoiL3NyYy9mb28udHMifQ==') + }) +}) From d6ec9aa8d190c9c5864e11b1537ebff123b8abca Mon Sep 17 00:00:00 2001 From: rxliuli Date: Thu, 25 May 2023 10:10:10 +0800 Subject: [PATCH 3/3] fix: update regex for match sourcemap --- examples/basic/test/sourcemap.test.ts | 7 ++++--- packages/vite-node/src/source-map.ts | 3 +-- test/vite-node/test/sourcemap.test.ts | 17 ++++++++++++++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/examples/basic/test/sourcemap.test.ts b/examples/basic/test/sourcemap.test.ts index 3b7623d8d9a9..5642f9155fb0 100644 --- a/examples/basic/test/sourcemap.test.ts +++ b/examples/basic/test/sourcemap.test.ts @@ -1,7 +1,8 @@ +/* eslint-disable @typescript-eslint/quotes */ import { expect, it } from 'vitest' it('should have sourcemaps', () => { - expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,').toBeTruthy() - expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,').toBeTruthy() - expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,').toBeTruthy() + expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9').toBeTruthy() + expect("\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9").toBeTruthy() + expect(`\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9`).toBeTruthy() }) diff --git a/packages/vite-node/src/source-map.ts b/packages/vite-node/src/source-map.ts index 150c277fdd07..e9d67c71bd05 100644 --- a/packages/vite-node/src/source-map.ts +++ b/packages/vite-node/src/source-map.ts @@ -41,8 +41,7 @@ export function withInlineSourcemap(result: TransformResult, options: { }) // to reduce the payload size, we only inline vite node source map, because it's also the only one we use - // const OTHER_SOURCE_MAP_REGEXP = new RegExp(`//# ${SOURCEMAPPING_URL}=data:application/json[^,]+base64,(.+)`, 'g') - const OTHER_SOURCE_MAP_REGEXP = new RegExp(`(? { - const regex = /(? { expect(withInlineSourcemap(input, options).code).include('//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQU8sU0FBUyxJQUFJLEtBQXFCO0FBQ3ZDLFNBQU8scURBQXFEO0FBQzlEO2lIQUFBIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL2Zvby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZm9vKHNyYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCR7c3JjfWBcbn1cbiJdLCJmaWxlIjoiL3NyYy9mb28udHMifQ==') }) + it('Check that the vite-node in real code', () => { + input.code = ` +import { expect, it } from 'vitest' + +it('should have sourcemaps', () => { + expect('\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9==').toBeTruthy() + expect("\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9==").toBeTruthy() + expect(\`\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9==\`).toBeTruthy() +}) + ` + expect(withInlineSourcemap(input, options).code) + .include('\'\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9==\'') + .include('"\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9=="') + .include('`\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9==`') + }) })