Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions packages/plugin-rsc/src/plugins/cjs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,6 @@ export function cjsModuleRunnerPlugin(): Plugin[] {
const ast = await parseAstAsync(code)
const result = transformCjsToEsm(code, ast)
const output = result.output
// TODO: can we use cjs-module-lexer to properly define named exports?
// for re-exports, we need to eagerly transform dependencies though.
// https://github.com/nodejs/node/blob/f3adc11e37b8bfaaa026ea85c1cf22e3a0e29ae9/lib/internal/modules/esm/translators.js#L382-L409
output.append(`
;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
`)
return {
code: output.toString(),
map: output.generateMap({ hires: 'boundary' }),
Expand Down
25 changes: 20 additions & 5 deletions packages/plugin-rsc/src/transforms/cjs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ exports.ok = true;
expect(await testTransform(input)).toMatchInlineSnapshot(`
"let exports = {}; const module = { exports };
exports.ok = true;

;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
"
`)
})
Expand All @@ -44,6 +48,10 @@ if (true) {
} else {
module.exports = (__cjs_interop__(await import('./cjs/use-sync-external-store.development.js')));
}

;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
"
`)
})
Expand All @@ -66,6 +74,10 @@ if (true) {
var ReactDOM = __cjs_to_esm_hoist_1;
exports.useSyncExternalStoreWithSelector = function () {}
})()

;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
"
`)
})
Expand Down Expand Up @@ -97,6 +109,10 @@ function test() {
const y2 = __cjs_to_esm_hoist_1().test;
consoe.log(__cjs_to_esm_hoist_2)
}

;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
"
`)
})
Expand All @@ -114,6 +130,10 @@ function test() {
const require = () => {};
require("test");
}

;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
"
`)
})
Expand All @@ -130,11 +150,6 @@ function test() {
if (id.endsWith('.cjs')) {
const ast = await parseAstAsync(code)
const { output } = transformCjsToEsm(code, ast)
output.append(`
;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
`)
return {
code: output.toString(),
map: output.generateMap({ hires: 'boundary' }),
Expand Down
11 changes: 11 additions & 0 deletions packages/plugin-rsc/src/transforms/cjs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ export function transformCjsToEsm(
parentNodes.pop()!
},
})
// TODO: prepend after shebang
for (const hoisted of hoistedCodes.reverse()) {
output.prepend(hoisted)
}
Expand All @@ -83,5 +84,15 @@ export function transformCjsToEsm(
}
// https://nodejs.org/docs/v22.19.0/api/modules.html#exports-shortcut
output.prepend(`let exports = {}; const module = { exports };\n`)

// TODO: can we use cjs-module-lexer to properly define named exports?
// for re-exports, we need to eagerly transform dependencies though.
// https://github.com/nodejs/node/blob/f3adc11e37b8bfaaa026ea85c1cf22e3a0e29ae9/lib/internal/modules/esm/translators.js#L382-L409
output.append(`
;__vite_ssr_exportAll__(module.exports);
export default module.exports;
export const __cjs_module_runner_transform = true;
`)

return { output }
}
Loading