Skip to content

Commit ac61c62

Browse files
authored
refactor(rsc): move common code for transformCjsToEsm (#909)
1 parent 1216caf commit ac61c62

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

packages/plugin-rsc/src/plugins/cjs.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,6 @@ export function cjsModuleRunnerPlugin(): Plugin[] {
5454
const ast = await parseAstAsync(code)
5555
const result = transformCjsToEsm(code, ast)
5656
const output = result.output
57-
// TODO: can we use cjs-module-lexer to properly define named exports?
58-
// for re-exports, we need to eagerly transform dependencies though.
59-
// https://github.com/nodejs/node/blob/f3adc11e37b8bfaaa026ea85c1cf22e3a0e29ae9/lib/internal/modules/esm/translators.js#L382-L409
60-
output.append(`
61-
;__vite_ssr_exportAll__(module.exports);
62-
export default module.exports;
63-
export const __cjs_module_runner_transform = true;
64-
`)
6557
return {
6658
code: output.toString(),
6759
map: output.generateMap({ hires: 'boundary' }),

packages/plugin-rsc/src/transforms/cjs.test.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ exports.ok = true;
2424
expect(await testTransform(input)).toMatchInlineSnapshot(`
2525
"let exports = {}; const module = { exports };
2626
exports.ok = true;
27+
28+
;__vite_ssr_exportAll__(module.exports);
29+
export default module.exports;
30+
export const __cjs_module_runner_transform = true;
2731
"
2832
`)
2933
})
@@ -44,6 +48,10 @@ if (true) {
4448
} else {
4549
module.exports = (__cjs_interop__(await import('./cjs/use-sync-external-store.development.js')));
4650
}
51+
52+
;__vite_ssr_exportAll__(module.exports);
53+
export default module.exports;
54+
export const __cjs_module_runner_transform = true;
4755
"
4856
`)
4957
})
@@ -66,6 +74,10 @@ if (true) {
6674
var ReactDOM = __cjs_to_esm_hoist_1;
6775
exports.useSyncExternalStoreWithSelector = function () {}
6876
})()
77+
78+
;__vite_ssr_exportAll__(module.exports);
79+
export default module.exports;
80+
export const __cjs_module_runner_transform = true;
6981
"
7082
`)
7183
})
@@ -97,6 +109,10 @@ function test() {
97109
const y2 = __cjs_to_esm_hoist_1().test;
98110
consoe.log(__cjs_to_esm_hoist_2)
99111
}
112+
113+
;__vite_ssr_exportAll__(module.exports);
114+
export default module.exports;
115+
export const __cjs_module_runner_transform = true;
100116
"
101117
`)
102118
})
@@ -114,6 +130,10 @@ function test() {
114130
const require = () => {};
115131
require("test");
116132
}
133+
134+
;__vite_ssr_exportAll__(module.exports);
135+
export default module.exports;
136+
export const __cjs_module_runner_transform = true;
117137
"
118138
`)
119139
})
@@ -130,11 +150,6 @@ function test() {
130150
if (id.endsWith('.cjs')) {
131151
const ast = await parseAstAsync(code)
132152
const { output } = transformCjsToEsm(code, ast)
133-
output.append(`
134-
;__vite_ssr_exportAll__(module.exports);
135-
export default module.exports;
136-
export const __cjs_module_runner_transform = true;
137-
`)
138153
return {
139154
code: output.toString(),
140155
map: output.generateMap({ hires: 'boundary' }),

packages/plugin-rsc/src/transforms/cjs.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ export function transformCjsToEsm(
7575
parentNodes.pop()!
7676
},
7777
})
78+
// TODO: prepend after shebang
7879
for (const hoisted of hoistedCodes.reverse()) {
7980
output.prepend(hoisted)
8081
}
@@ -83,5 +84,15 @@ export function transformCjsToEsm(
8384
}
8485
// https://nodejs.org/docs/v22.19.0/api/modules.html#exports-shortcut
8586
output.prepend(`let exports = {}; const module = { exports };\n`)
87+
88+
// TODO: can we use cjs-module-lexer to properly define named exports?
89+
// for re-exports, we need to eagerly transform dependencies though.
90+
// https://github.com/nodejs/node/blob/f3adc11e37b8bfaaa026ea85c1cf22e3a0e29ae9/lib/internal/modules/esm/translators.js#L382-L409
91+
output.append(`
92+
;__vite_ssr_exportAll__(module.exports);
93+
export default module.exports;
94+
export const __cjs_module_runner_transform = true;
95+
`)
96+
8697
return { output }
8798
}

0 commit comments

Comments
 (0)