Skip to content

Commit

Permalink
fix: can overwrite variable of the ssr module export
Browse files Browse the repository at this point in the history
  • Loading branch information
Justinidlerz committed Feb 25, 2021
1 parent 1b082f1 commit d739741
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 11 deletions.
20 changes: 10 additions & 10 deletions packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,24 +43,24 @@ test('export function decl', async () => {
expect((await ssrTransform(`export function foo() {}`, null)).code)
.toMatchInlineSnapshot(`
"function foo() {}
Object.defineProperty(__vite_ssr_exports__, \\"foo\\", { enumerable: true, get(){ return foo }})"
Object.defineProperty(__vite_ssr_exports__, \\"foo\\", { enumerable: true, writable: true, get(){ return foo }})"
`)
})

test('export class decl', async () => {
expect((await ssrTransform(`export class foo {}`, null)).code)
.toMatchInlineSnapshot(`
"class foo {}
Object.defineProperty(__vite_ssr_exports__, \\"foo\\", { enumerable: true, get(){ return foo }})"
Object.defineProperty(__vite_ssr_exports__, \\"foo\\", { enumerable: true, writable: true, get(){ return foo }})"
`)
})

test('export var decl', async () => {
expect((await ssrTransform(`export const a = 1, b = 2`, null)).code)
.toMatchInlineSnapshot(`
"const a = 1, b = 2
Object.defineProperty(__vite_ssr_exports__, \\"a\\", { enumerable: true, get(){ return a }})
Object.defineProperty(__vite_ssr_exports__, \\"b\\", { enumerable: true, get(){ return b }})"
Object.defineProperty(__vite_ssr_exports__, \\"a\\", { enumerable: true, writable: true, get(){ return a }})
Object.defineProperty(__vite_ssr_exports__, \\"b\\", { enumerable: true, writable: true, get(){ return b }})"
`)
})

Expand All @@ -69,8 +69,8 @@ test('export named', async () => {
(await ssrTransform(`const a = 1, b = 2; export { a, b as c }`, null)).code
).toMatchInlineSnapshot(`
"const a = 1, b = 2;
Object.defineProperty(__vite_ssr_exports__, \\"a\\", { enumerable: true, get(){ return a }})
Object.defineProperty(__vite_ssr_exports__, \\"c\\", { enumerable: true, get(){ return b }})"
Object.defineProperty(__vite_ssr_exports__, \\"a\\", { enumerable: true, writable: true, get(){ return a }})
Object.defineProperty(__vite_ssr_exports__, \\"c\\", { enumerable: true, writable: true, get(){ return b }})"
`)
})

Expand All @@ -80,8 +80,8 @@ test('export named from', async () => {
).toMatchInlineSnapshot(`
"const __vite_ssr_import_0__ = __vite_ssr_import__(\\"vue\\")
Object.defineProperty(__vite_ssr_exports__, \\"ref\\", { enumerable: true, get(){ return __vite_ssr_import_0__.ref }})
Object.defineProperty(__vite_ssr_exports__, \\"c\\", { enumerable: true, get(){ return __vite_ssr_import_0__.computed }})"
Object.defineProperty(__vite_ssr_exports__, \\"ref\\", { enumerable: true, writable: true, get(){ return __vite_ssr_import_0__.ref }})
Object.defineProperty(__vite_ssr_exports__, \\"c\\", { enumerable: true, writable: true, get(){ return __vite_ssr_import_0__.computed }})"
`)
})

Expand All @@ -96,7 +96,7 @@ test('named exports of imported binding', async () => {
).toMatchInlineSnapshot(`
"const __vite_ssr_import_0__ = __vite_ssr_import__(\\"vue\\")
Object.defineProperty(__vite_ssr_exports__, \\"createApp\\", { enumerable: true, get(){ return __vite_ssr_import_0__.createApp }})"
Object.defineProperty(__vite_ssr_exports__, \\"createApp\\", { enumerable: true, writable: true, get(){ return __vite_ssr_import_0__.createApp }})"
`)
})

Expand Down Expand Up @@ -126,6 +126,6 @@ test('dynamic import', async () => {
(await ssrTransform(`export const i = () => import('./foo')`, null)).code
).toMatchInlineSnapshot(`
"const i = () => __vite_ssr_dynamic_import__('./foo')
Object.defineProperty(__vite_ssr_exports__, \\"i\\", { enumerable: true, get(){ return i }})"
Object.defineProperty(__vite_ssr_exports__, \\"i\\", { enumerable: true, writable: true, get(){ return i }})"
`)
})
1 change: 1 addition & 0 deletions packages/vite/src/node/ssr/ssrModuleLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ async function instantiateModule(
if (key !== 'default') {
Object.defineProperty(ssrModule, key, {
enumerable: true,
writable: true,
get() {
return sourceModule[key]
}
Expand Down
2 changes: 1 addition & 1 deletion packages/vite/src/node/ssr/ssrTransform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export async function ssrTransform(
function defineExport(name: string, local = name) {
s.append(
`\nObject.defineProperty(${ssrModuleExportsKey}, "${name}", ` +
`{ enumerable: true, get(){ return ${local} }})`
`{ enumerable: true, writable: true, get(){ return ${local} }})`
)
}

Expand Down

0 comments on commit d739741

Please sign in to comment.