diff --git a/packages/plugin-rsc/src/transforms/cjs.test.ts b/packages/plugin-rsc/src/transforms/cjs.test.ts index a8c21b756..6b29db58b 100644 --- a/packages/plugin-rsc/src/transforms/cjs.test.ts +++ b/packages/plugin-rsc/src/transforms/cjs.test.ts @@ -4,141 +4,6 @@ import { describe, expect, it } from 'vitest' import { transformCjsToEsm } from './cjs' describe(transformCjsToEsm, () => { - async function testTransform(input: string) { - const ast = await parseAstAsync(input) - const { output } = transformCjsToEsm(input, ast, { id: '/test.js' }) - if (!output.hasChanged()) { - return - } - return output.toString() - } - - it('basic', async () => { - const input = `\ -exports.ok = true; -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - "let __filename = "/test.js"; let __dirname = "/"; - let exports = {}; const module = { exports }; - exports.ok = true; - - ;__vite_ssr_exportAll__(module.exports); - export default module.exports; - export const __cjs_module_runner_transform = true; - " - `) - }) - - it('top-level re-export', async () => { - const input = `\ -if (true) { - module.exports = require('./cjs/use-sync-external-store.production.js'); -} else { - module.exports = require('./cjs/use-sync-external-store.development.js'); -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - "let __filename = "/test.js"; let __dirname = "/"; - let exports = {}; const module = { exports }; - function __cjs_interop__(m) {return m.__cjs_module_runner_transform || "default" in m && Object.keys(m).every((k) => k === "default" || m[k] === m.default[k]) ? m.default : m;} - if (true) { - module.exports = (__cjs_interop__(await import('./cjs/use-sync-external-store.production.js'))); - } 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; - " - `) - }) - - it('non top-level re-export', async () => { - const input = `\ -"production" !== process.env.NODE_ENV && (function() { - var React = require("react"); - var ReactDOM = require("react-dom"); - exports.useSyncExternalStoreWithSelector = function () {} -})() -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - "let __filename = "/test.js"; let __dirname = "/"; - let exports = {}; const module = { exports }; - function __cjs_interop__(m) {return m.__cjs_module_runner_transform || "default" in m && Object.keys(m).every((k) => k === "default" || m[k] === m.default[k]) ? m.default : m;} - const __cjs_to_esm_hoist_0 = __cjs_interop__(await import("react")); - const __cjs_to_esm_hoist_1 = __cjs_interop__(await import("react-dom")); - "production" !== process.env.NODE_ENV && (function() { - var React = __cjs_to_esm_hoist_0; - 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; - " - `) - }) - - it('edge cases', async () => { - const input = `\ -const x1 = require("te" + "st"); -const x2 = require("test")().test; -console.log(require("test")) - -function test() { - const y1 = require("te" + "st"); - const y2 = require("test")().test; - consoe.log(require("test")) -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - "let __filename = "/test.js"; let __dirname = "/"; - let exports = {}; const module = { exports }; - function __cjs_interop__(m) {return m.__cjs_module_runner_transform || "default" in m && Object.keys(m).every((k) => k === "default" || m[k] === m.default[k]) ? m.default : m;} - const __cjs_to_esm_hoist_0 = __cjs_interop__(await import("te" + "st")); - const __cjs_to_esm_hoist_1 = __cjs_interop__(await import("test")); - const __cjs_to_esm_hoist_2 = __cjs_interop__(await import("test")); - const x1 = (__cjs_interop__(await import("te" + "st"))); - const x2 = (__cjs_interop__(await import("test")))().test; - console.log((__cjs_interop__(await import("test")))) - - function test() { - const y1 = __cjs_to_esm_hoist_0; - 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; - " - `) - }) - - it('local require', async () => { - const input = `\ -{ - const require = () => {}; - require("test"); -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - "let __filename = "/test.js"; let __dirname = "/"; - let exports = {}; const module = { exports }; - { - const require = () => {}; - require("test"); - } - - ;__vite_ssr_exportAll__(module.exports); - export default module.exports; - export const __cjs_module_runner_transform = true; - " - `) - }) - it('e2e', async () => { const server = await createServer({ configFile: false, diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js new file mode 100644 index 000000000..38949818a --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js @@ -0,0 +1 @@ +exports.ok = true diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js.map.snap.md new file mode 100644 index 000000000..d58d692e3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js.map.snap.md @@ -0,0 +1,10 @@ +## cjs-to-esm + +```txt +[unmapped] --> (0:0) "let __filename = \"/test.js\"; let __dirname = \"/\";\n" +[unmapped] --> (1:0) "let exports = {}; const module = { exports };\n" +(0:0) "exports.ok = true\n" --> (2:0) "exports.ok = true\n" +[unmapped] --> (4:0) ";__vite_ssr_exportAll__(module.exports);\n" +[unmapped] --> (5:0) "export default module.exports;\n" +[unmapped] --> (6:0) "export const __cjs_module_runner_transform = true;\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js.snap.md new file mode 100644 index 000000000..44ebccd3f --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/basic.js.snap.md @@ -0,0 +1,23 @@ +## Input + +```js +exports.ok = true +``` + +## cjs-to-esm + +**Status:** transformed + +**References:** (none) + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM4AGxldCBfX2ZpbGVuYW1lID0gIi90ZXN0LmpzIjsgbGV0IF9fZGlybmFtZSA9ICIvIjsKbGV0IGV4cG9ydHMgPSB7fTsgY29uc3QgbW9kdWxlID0geyBleHBvcnRzIH07CmV4cG9ydHMub2sgPSB0cnVlCgo7X192aXRlX3Nzcl9leHBvcnRBbGxfXyhtb2R1bGUuZXhwb3J0cyk7CmV4cG9ydCBkZWZhdWx0IG1vZHVsZS5leHBvcnRzOwpleHBvcnQgY29uc3QgX19janNfbW9kdWxlX3J1bm5lcl90cmFuc2Zvcm0gPSB0cnVlOwoxMzUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLm9rID0gdHJ1ZVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7OyJ9) + +```js +let __filename = "/test.js"; let __dirname = "/"; +let exports = {}; const module = { exports }; +exports.ok = true + +;__vite_ssr_exportAll__(module.exports); +export default module.exports; +export const __cjs_module_runner_transform = true; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js new file mode 100644 index 000000000..44bfa06fa --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js @@ -0,0 +1,9 @@ +const x1 = require('te' + 'st') +const x2 = require('test')().test +console.log(require('test')) + +function test() { + const y1 = require('te' + 'st') + const y2 = require('test')().test + consoe.log(require('test')) +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js.map.snap.md new file mode 100644 index 000000000..fb99dd466 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js.map.snap.md @@ -0,0 +1,28 @@ +## cjs-to-esm + +```txt +[unmapped] --> (0:0) "let __filename = \"/test.js\"; let __dirname = \"/\";\n" +[unmapped] --> (1:0) "let exports = {}; const module = { exports };\n" +[unmapped] --> (2:0) "function __cjs_interop__(m) {return m.__cjs_module_runner_transform || \"default\" in m && Object.keys(m).every((k) => k === \"default\" || m[k] === m.default[k]) ? m.default : m;}\n" +[unmapped] --> (3:0) "const __cjs_to_esm_hoist_0 = __cjs_interop__(await import('te' + 'st'));\n" +[unmapped] --> (4:0) "const __cjs_to_esm_hoist_1 = __cjs_interop__(await import('test'));\n" +[unmapped] --> (5:0) "const __cjs_to_esm_hoist_2 = __cjs_interop__(await import('test'));\n" +(0:0) "const x1 = require" --> (6:0) "const x1 = (__cjs_interop__(await import" +(0:18) "('te' + 'st')\n" --> (6:40) "('te' + 'st')))\n" +(1:0) "const x2 = require" --> (7:0) "const x2 = (__cjs_interop__(await import" +(1:18) "('test')" --> (7:40) "('test')))" +(1:26) "().test\n" --> (7:50) "().test\n" +(2:0) "console.log(require" --> (8:0) "console.log((__cjs_interop__(await import" +(2:19) "('test')" --> (8:41) "('test')))" +(2:27) ")\n" --> (8:51) ")\n" +(4:0) "function test() {\n" --> (10:0) "function test() {\n" +(5:0) " const y1 = require('te' + 'st')\n" --> (11:0) " const y1 = __cjs_to_esm_hoist_0\n" +(6:0) " const y2 = require('test')" --> (12:0) " const y2 = __cjs_to_esm_hoist_1" +(6:28) "().test\n" --> (12:33) "().test\n" +(7:0) " consoe.log(require('test')" --> (13:0) " consoe.log(__cjs_to_esm_hoist_2" +(7:28) ")\n" --> (13:33) ")\n" +(8:0) "}\n" --> (14:0) "}\n" +[unmapped] --> (16:0) ";__vite_ssr_exportAll__(module.exports);\n" +[unmapped] --> (17:0) "export default module.exports;\n" +[unmapped] --> (18:0) "export const __cjs_module_runner_transform = true;\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js.snap.md new file mode 100644 index 000000000..dc00c1d69 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/edge-cases.js.snap.md @@ -0,0 +1,43 @@ +## Input + +```js +const x1 = require('te' + 'st') +const x2 = require('test')().test +console.log(require('test')) + +function test() { + const y1 = require('te' + 'st') + const y2 = require('test')().test + consoe.log(require('test')) +} +``` + +## cjs-to-esm + +**Status:** transformed + +**References:** (none) + +[Source map visualization](https://evanw.github.io/source-map-visualization/#OTA0AGxldCBfX2ZpbGVuYW1lID0gIi90ZXN0LmpzIjsgbGV0IF9fZGlybmFtZSA9ICIvIjsKbGV0IGV4cG9ydHMgPSB7fTsgY29uc3QgbW9kdWxlID0geyBleHBvcnRzIH07CmZ1bmN0aW9uIF9fY2pzX2ludGVyb3BfXyhtKSB7cmV0dXJuIG0uX19janNfbW9kdWxlX3J1bm5lcl90cmFuc2Zvcm0gfHwgImRlZmF1bHQiIGluIG0gJiYgT2JqZWN0LmtleXMobSkuZXZlcnkoKGspID0+IGsgPT09ICJkZWZhdWx0IiB8fCBtW2tdID09PSBtLmRlZmF1bHRba10pID8gbS5kZWZhdWx0IDogbTt9CmNvbnN0IF9fY2pzX3RvX2VzbV9ob2lzdF8wID0gX19janNfaW50ZXJvcF9fKGF3YWl0IGltcG9ydCgndGUnICsgJ3N0JykpOwpjb25zdCBfX2Nqc190b19lc21faG9pc3RfMSA9IF9fY2pzX2ludGVyb3BfXyhhd2FpdCBpbXBvcnQoJ3Rlc3QnKSk7CmNvbnN0IF9fY2pzX3RvX2VzbV9ob2lzdF8yID0gX19janNfaW50ZXJvcF9fKGF3YWl0IGltcG9ydCgndGVzdCcpKTsKY29uc3QgeDEgPSAoX19janNfaW50ZXJvcF9fKGF3YWl0IGltcG9ydCgndGUnICsgJ3N0JykpKQpjb25zdCB4MiA9IChfX2Nqc19pbnRlcm9wX18oYXdhaXQgaW1wb3J0KCd0ZXN0JykpKSgpLnRlc3QKY29uc29sZS5sb2coKF9fY2pzX2ludGVyb3BfXyhhd2FpdCBpbXBvcnQoJ3Rlc3QnKSkpKQoKZnVuY3Rpb24gdGVzdCgpIHsKICBjb25zdCB5MSA9IF9fY2pzX3RvX2VzbV9ob2lzdF8wCiAgY29uc3QgeTIgPSBfX2Nqc190b19lc21faG9pc3RfMSgpLnRlc3QKICBjb25zb2UubG9nKF9fY2pzX3RvX2VzbV9ob2lzdF8yKQp9Cgo7X192aXRlX3Nzcl9leHBvcnRBbGxfXyhtb2R1bGUuZXhwb3J0cyk7CmV4cG9ydCBkZWZhdWx0IG1vZHVsZS5leHBvcnRzOwpleHBvcnQgY29uc3QgX19janNfbW9kdWxlX3J1bm5lcl90cmFuc2Zvcm0gPSB0cnVlOwo3MzcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB4MSA9IHJlcXVpcmUoJ3RlJyArICdzdCcpXG5jb25zdCB4MiA9IHJlcXVpcmUoJ3Rlc3QnKSgpLnRlc3RcbmNvbnNvbGUubG9nKHJlcXVpcmUoJ3Rlc3QnKSlcblxuZnVuY3Rpb24gdGVzdCgpIHtcbiAgY29uc3QgeTEgPSByZXF1aXJlKCd0ZScgKyAnc3QnKVxuICBjb25zdCB5MiA9IHJlcXVpcmUoJ3Rlc3QnKSgpLnRlc3RcbiAgY29uc29lLmxvZyhyZXF1aXJlKCd0ZXN0JykpXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyw2QkFBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUM7O0FBRTNCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBZSxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBZTtBQUM1Qjs7Ozs7In0=) + +```js +let __filename = "/test.js"; let __dirname = "/"; +let exports = {}; const module = { exports }; +function __cjs_interop__(m) {return m.__cjs_module_runner_transform || "default" in m && Object.keys(m).every((k) => k === "default" || m[k] === m.default[k]) ? m.default : m;} +const __cjs_to_esm_hoist_0 = __cjs_interop__(await import('te' + 'st')); +const __cjs_to_esm_hoist_1 = __cjs_interop__(await import('test')); +const __cjs_to_esm_hoist_2 = __cjs_interop__(await import('test')); +const x1 = (__cjs_interop__(await import('te' + 'st'))) +const x2 = (__cjs_interop__(await import('test')))().test +console.log((__cjs_interop__(await import('test')))) + +function test() { + const y1 = __cjs_to_esm_hoist_0 + 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; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js new file mode 100644 index 000000000..adcf46396 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js @@ -0,0 +1,4 @@ +{ + const require = () => {} + require('test') +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js.map.snap.md new file mode 100644 index 000000000..f7a6676ee --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js.map.snap.md @@ -0,0 +1,13 @@ +## cjs-to-esm + +```txt +[unmapped] --> (0:0) "let __filename = \"/test.js\"; let __dirname = \"/\";\n" +[unmapped] --> (1:0) "let exports = {}; const module = { exports };\n" +(0:0) "{\n" --> (2:0) "{\n" +(1:0) " const require = () => {}\n" --> (3:0) " const require = () => {}\n" +(2:0) " require('test')\n" --> (4:0) " require('test')\n" +(3:0) "}\n" --> (5:0) "}\n" +[unmapped] --> (7:0) ";__vite_ssr_exportAll__(module.exports);\n" +[unmapped] --> (8:0) "export default module.exports;\n" +[unmapped] --> (9:0) "export const __cjs_module_runner_transform = true;\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js.snap.md new file mode 100644 index 000000000..2fe12c7d4 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/local-require.js.snap.md @@ -0,0 +1,29 @@ +## Input + +```js +{ + const require = () => {} + require('test') +} +``` + +## cjs-to-esm + +**Status:** transformed + +**References:** (none) + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjY5AGxldCBfX2ZpbGVuYW1lID0gIi90ZXN0LmpzIjsgbGV0IF9fZGlybmFtZSA9ICIvIjsKbGV0IGV4cG9ydHMgPSB7fTsgY29uc3QgbW9kdWxlID0geyBleHBvcnRzIH07CnsKICBjb25zdCByZXF1aXJlID0gKCkgPT4ge30KICByZXF1aXJlKCd0ZXN0JykKfQoKO19fdml0ZV9zc3JfZXhwb3J0QWxsX18obW9kdWxlLmV4cG9ydHMpOwpleHBvcnQgZGVmYXVsdCBtb2R1bGUuZXhwb3J0czsKZXhwb3J0IGNvbnN0IF9fY2pzX21vZHVsZV9ydW5uZXJfdHJhbnNmb3JtID0gdHJ1ZTsKMjY2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsie1xuICBjb25zdCByZXF1aXJlID0gKCkgPT4ge31cbiAgcmVxdWlyZSgndGVzdCcpXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDaEI7Ozs7OyJ9) + +```js +let __filename = "/test.js"; let __dirname = "/"; +let exports = {}; const module = { exports }; +{ + const require = () => {} + require('test') +} + +;__vite_ssr_exportAll__(module.exports); +export default module.exports; +export const __cjs_module_runner_transform = true; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js new file mode 100644 index 000000000..38b79c764 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js @@ -0,0 +1,6 @@ +'production' !== process.env.NODE_ENV && + (function () { + var React = require('react') + var ReactDOM = require('react-dom') + exports.useSyncExternalStoreWithSelector = function () {} + })() diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js.map.snap.md new file mode 100644 index 000000000..c7f328a62 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js.map.snap.md @@ -0,0 +1,18 @@ +## cjs-to-esm + +```txt +[unmapped] --> (0:0) "let __filename = \"/test.js\"; let __dirname = \"/\";\n" +[unmapped] --> (1:0) "let exports = {}; const module = { exports };\n" +[unmapped] --> (2:0) "function __cjs_interop__(m) {return m.__cjs_module_runner_transform || \"default\" in m && Object.keys(m).every((k) => k === \"default\" || m[k] === m.default[k]) ? m.default : m;}\n" +[unmapped] --> (3:0) "const __cjs_to_esm_hoist_0 = __cjs_interop__(await import('react'));\n" +[unmapped] --> (4:0) "const __cjs_to_esm_hoist_1 = __cjs_interop__(await import('react-dom'));\n" +(0:0) "'production' !== process.env.NODE_ENV &&\n" --> (5:0) "'production' !== process.env.NODE_ENV &&\n" +(1:0) " (function () {\n" --> (6:0) " (function () {\n" +(2:0) " var React = require('react')\n" --> (7:0) " var React = __cjs_to_esm_hoist_0\n" +(3:0) " var ReactDOM = require('react-dom')\n" --> (8:0) " var ReactDOM = __cjs_to_esm_hoist_1\n" +(4:0) " exports.useSyncExternalStoreWithSelector = function () {}\n" --> (9:0) " exports.useSyncExternalStoreWithSelector = function () {}\n" +(5:0) " })()\n" --> (10:0) " })()\n" +[unmapped] --> (12:0) ";__vite_ssr_exportAll__(module.exports);\n" +[unmapped] --> (13:0) "export default module.exports;\n" +[unmapped] --> (14:0) "export const __cjs_module_runner_transform = true;\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js.snap.md new file mode 100644 index 000000000..37eeba4b0 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/non-top-level-reexport.js.snap.md @@ -0,0 +1,36 @@ +## Input + +```js +'production' !== process.env.NODE_ENV && + (function () { + var React = require('react') + var ReactDOM = require('react-dom') + exports.useSyncExternalStoreWithSelector = function () {} + })() +``` + +## cjs-to-esm + +**Status:** transformed + +**References:** (none) + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzQzAGxldCBfX2ZpbGVuYW1lID0gIi90ZXN0LmpzIjsgbGV0IF9fZGlybmFtZSA9ICIvIjsKbGV0IGV4cG9ydHMgPSB7fTsgY29uc3QgbW9kdWxlID0geyBleHBvcnRzIH07CmZ1bmN0aW9uIF9fY2pzX2ludGVyb3BfXyhtKSB7cmV0dXJuIG0uX19janNfbW9kdWxlX3J1bm5lcl90cmFuc2Zvcm0gfHwgImRlZmF1bHQiIGluIG0gJiYgT2JqZWN0LmtleXMobSkuZXZlcnkoKGspID0+IGsgPT09ICJkZWZhdWx0IiB8fCBtW2tdID09PSBtLmRlZmF1bHRba10pID8gbS5kZWZhdWx0IDogbTt9CmNvbnN0IF9fY2pzX3RvX2VzbV9ob2lzdF8wID0gX19janNfaW50ZXJvcF9fKGF3YWl0IGltcG9ydCgncmVhY3QnKSk7CmNvbnN0IF9fY2pzX3RvX2VzbV9ob2lzdF8xID0gX19janNfaW50ZXJvcF9fKGF3YWl0IGltcG9ydCgncmVhY3QtZG9tJykpOwoncHJvZHVjdGlvbicgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBSZWFjdCA9IF9fY2pzX3RvX2VzbV9ob2lzdF8wCiAgICB2YXIgUmVhY3RET00gPSBfX2Nqc190b19lc21faG9pc3RfMQogICAgZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHt9CiAgfSkoKQoKO19fdml0ZV9zc3JfZXhwb3J0QWxsX18obW9kdWxlLmV4cG9ydHMpOwpleHBvcnQgZGVmYXVsdCBtb2R1bGUuZXhwb3J0czsKZXhwb3J0IGNvbnN0IF9fY2pzX21vZHVsZV9ydW5uZXJfdHJhbnNmb3JtID0gdHJ1ZTsKNjQ2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3Byb2R1Y3Rpb24nICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0JylcbiAgICB2YXIgUmVhY3RET00gPSByZXF1aXJlKCdyZWFjdC1kb20nKVxuICAgIGV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICB9KSgpXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7In0=) + +```js +let __filename = "/test.js"; let __dirname = "/"; +let exports = {}; const module = { exports }; +function __cjs_interop__(m) {return m.__cjs_module_runner_transform || "default" in m && Object.keys(m).every((k) => k === "default" || m[k] === m.default[k]) ? m.default : m;} +const __cjs_to_esm_hoist_0 = __cjs_interop__(await import('react')); +const __cjs_to_esm_hoist_1 = __cjs_interop__(await import('react-dom')); +'production' !== process.env.NODE_ENV && + (function () { + var React = __cjs_to_esm_hoist_0 + 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; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js new file mode 100644 index 000000000..2a7e8a836 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js @@ -0,0 +1,5 @@ +if (true) { + module.exports = require('./cjs/use-sync-external-store.production.js') +} else { + module.exports = require('./cjs/use-sync-external-store.development.js') +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js.map.snap.md new file mode 100644 index 000000000..6dd0edfce --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js.map.snap.md @@ -0,0 +1,17 @@ +## cjs-to-esm + +```txt +[unmapped] --> (0:0) "let __filename = \"/test.js\"; let __dirname = \"/\";\n" +[unmapped] --> (1:0) "let exports = {}; const module = { exports };\n" +[unmapped] --> (2:0) "function __cjs_interop__(m) {return m.__cjs_module_runner_transform || \"default\" in m && Object.keys(m).every((k) => k === \"default\" || m[k] === m.default[k]) ? m.default : m;}\n" +(0:0) "if (true) {\n" --> (3:0) "if (true) {\n" +(1:0) " module.exports = require" --> (4:0) " module.exports = (__cjs_interop__(await import" +(1:26) "('./cjs/use-sync-external-store.production.js')\n" --> (4:48) "('./cjs/use-sync-external-store.production.js')))\n" +(2:0) "} else {\n" --> (5:0) "} else {\n" +(3:0) " module.exports = require" --> (6:0) " module.exports = (__cjs_interop__(await import" +(3:26) "('./cjs/use-sync-external-store.development.js')\n" --> (6:48) "('./cjs/use-sync-external-store.development.js')))\n" +(4:0) "}\n" --> (7:0) "}\n" +[unmapped] --> (9:0) ";__vite_ssr_exportAll__(module.exports);\n" +[unmapped] --> (10:0) "export default module.exports;\n" +[unmapped] --> (11:0) "export const __cjs_module_runner_transform = true;\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js.snap.md new file mode 100644 index 000000000..5eb1d2bd5 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/cjs/top-level-reexport.js.snap.md @@ -0,0 +1,32 @@ +## Input + +```js +if (true) { + module.exports = require('./cjs/use-sync-external-store.production.js') +} else { + module.exports = require('./cjs/use-sync-external-store.development.js') +} +``` + +## cjs-to-esm + +**Status:** transformed + +**References:** (none) + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjE3AGxldCBfX2ZpbGVuYW1lID0gIi90ZXN0LmpzIjsgbGV0IF9fZGlybmFtZSA9ICIvIjsKbGV0IGV4cG9ydHMgPSB7fTsgY29uc3QgbW9kdWxlID0geyBleHBvcnRzIH07CmZ1bmN0aW9uIF9fY2pzX2ludGVyb3BfXyhtKSB7cmV0dXJuIG0uX19janNfbW9kdWxlX3J1bm5lcl90cmFuc2Zvcm0gfHwgImRlZmF1bHQiIGluIG0gJiYgT2JqZWN0LmtleXMobSkuZXZlcnkoKGspID0+IGsgPT09ICJkZWZhdWx0IiB8fCBtW2tdID09PSBtLmRlZmF1bHRba10pID8gbS5kZWZhdWx0IDogbTt9CmlmICh0cnVlKSB7CiAgbW9kdWxlLmV4cG9ydHMgPSAoX19janNfaW50ZXJvcF9fKGF3YWl0IGltcG9ydCgnLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUucHJvZHVjdGlvbi5qcycpKSkKfSBlbHNlIHsKICBtb2R1bGUuZXhwb3J0cyA9IChfX2Nqc19pbnRlcm9wX18oYXdhaXQgaW1wb3J0KCcuL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS5kZXZlbG9wbWVudC5qcycpKSkKfQoKO19fdml0ZV9zc3JfZXhwb3J0QWxsX18obW9kdWxlLmV4cG9ydHMpOwpleHBvcnQgZGVmYXVsdCBtb2R1bGUuZXhwb3J0czsKZXhwb3J0IGNvbnN0IF9fY2pzX21vZHVsZV9ydW5uZXJfdHJhbnNmb3JtID0gdHJ1ZTsKNjA4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHRydWUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS5wcm9kdWN0aW9uLmpzJylcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUuZGV2ZWxvcG1lbnQuanMnKVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDZCQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDUCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsNkJBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7QUFDekU7Ozs7OyJ9) + +```js +let __filename = "/test.js"; let __dirname = "/"; +let exports = {}; const module = { exports }; +function __cjs_interop__(m) {return m.__cjs_module_runner_transform || "default" in m && Object.keys(m).every((k) => k === "default" || m[k] === m.default[k]) ? m.default : m;} +if (true) { + module.exports = (__cjs_interop__(await import('./cjs/use-sync-external-store.production.js'))) +} 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; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js new file mode 100644 index 000000000..5492667c4 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js @@ -0,0 +1,3 @@ +'use server' + +export default 'value' diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js.map.snap.md new file mode 100644 index 000000000..e21efb4d1 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js.map.snap.md @@ -0,0 +1,5 @@ +## proxy-export + +```txt +(2:0) "export default 'value'\n" --> (2:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js.snap.md new file mode 100644 index 000000000..b86c10d85 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/default-expression.js.snap.md @@ -0,0 +1,22 @@ +## Input + +```js +'use server' + +export default 'value' +``` + +## proxy-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjgACgpleHBvcnQgZGVmYXVsdCAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJkZWZhdWx0Iik7CgoxMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgJ3ZhbHVlJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7OyJ9) + +```js + + +export default /* #__PURE__ */ createServerReference("default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js new file mode 100644 index 000000000..bd2dda0ab --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js @@ -0,0 +1,6 @@ +'use server' + +export const { + x, + y: [z], +} = { x: 0, y: [1] } diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js.map.snap.md new file mode 100644 index 000000000..be3a132bb --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js.map.snap.md @@ -0,0 +1,6 @@ +## proxy-export + +```txt +(2:0) "export const {\n" --> (2:0) "export const x = /* #__PURE__ */ createServerReference(\"x\");\n" +(2:0) "export const {\n" --> (3:0) "export const z = /* #__PURE__ */ createServerReference(\"z\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js.snap.md new file mode 100644 index 000000000..8c9946a89 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/destructured-nested.js.snap.md @@ -0,0 +1,26 @@ +## Input + +```js +'use server' + +export const { + x, + y: [z], +} = { x: 0, y: [1] } +``` + +## proxy-export + +**Status:** transformed + +**References:** x, z + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTI1AAoKZXhwb3J0IGNvbnN0IHggPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJ4Iik7CmV4cG9ydCBjb25zdCB6ID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgieiIpOwoKMTU5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCB7XG4gIHgsXG4gIHk6IFt6XSxcbn0gPSB7IHg6IDAsIHk6IFsxXSB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTtBQUFBOzsifQ==) + +```js + + +export const x = /* #__PURE__ */ createServerReference("x"); +export const z = /* #__PURE__ */ createServerReference("z"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js new file mode 100644 index 000000000..224cba785 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js @@ -0,0 +1,3 @@ +'use server' + +export * from './dep.js' diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js.map.snap.md new file mode 100644 index 000000000..93963724b --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js.map.snap.md @@ -0,0 +1,5 @@ +## proxy-export + +```txt + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js.snap.md new file mode 100644 index 000000000..0cec2867d --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/export-all-ignore.js.snap.md @@ -0,0 +1,21 @@ +## Input + +```js +'use server' + +export * from './dep.js' +``` + +## proxy-export + +**Status:** transformed + +**References:** (none) + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MwAKCgoxMjAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0ICogZnJvbSAnLi9kZXAuanMnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OyJ9) + +```js + + + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js new file mode 100644 index 000000000..e581681cc --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js @@ -0,0 +1,12 @@ +'use client' + +// This represents Waku's output after its DCE retains the dependencies and +// initializers that need to survive proxy generation. +import { atom } from 'jotai/vanilla' + +const local = 1 +export const countAtom = atom(local) + +export const Component = () => { + throw new Error('not available on the server') +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js.map.snap.md new file mode 100644 index 000000000..2a2464f7b --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js.map.snap.md @@ -0,0 +1,22 @@ +## proxy-export + +```txt +(2:0) "// This represents Waku's output after its DCE retains the dependencies and\n" --> (2:0) "// This represents Waku's output after its DCE retains the dependencies and\n" +(3:0) "// initializers that need to survive proxy generation.\n" --> (3:0) "// initializers that need to survive proxy generation.\n" +(7:0) "export const countAtom = atom(local)\n" --> (7:0) "export const countAtom = /* #__PURE__ */ createServerReference(\"countAtom\");\n" +(9:0) "export const Component = () => {\n" --> (10:0) "export const Component = /* #__PURE__ */ createServerReference(\"Component\");\n" +``` + +## proxy-export-keep + +```txt +(0:0) "'use client'\n" --> (0:0) "'use client'\n" +(2:0) "// This represents Waku's output after its DCE retains the dependencies and\n" --> (2:0) "// This represents Waku's output after its DCE retains the dependencies and\n" +(3:0) "// initializers that need to survive proxy generation.\n" --> (3:0) "// initializers that need to survive proxy generation.\n" +(4:0) "import { atom } from 'jotai/vanilla'\n" --> (4:0) "import { atom } from 'jotai/vanilla'\n" +(6:0) "const local = 1\n" --> (6:0) "const local = 1\n" +(7:0) "export const countAtom = atom(local)\n" --> (7:0) "export const countAtom = /* #__PURE__ */ createServerReference(atom(local), \"countAtom\");\n" +(9:0) "export const Component = () => {\n" --> (9:0) "export const Component = /* #__PURE__ */ createServerReference(() => {\n" +(9:0) "export const Component = () => {\n" --> (10:0) " throw new Error('not available on the server')\n" +(9:0) "export const Component = () => {\n" --> (11:0) "}, \"Component\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js.snap.md new file mode 100644 index 000000000..50c3eeca9 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/keep.js.snap.md @@ -0,0 +1,62 @@ +## Input + +```js +'use client' + +// This represents Waku's output after its DCE retains the dependencies and +// initializers that need to survive proxy generation. +import { atom } from 'jotai/vanilla' + +const local = 1 +export const countAtom = atom(local) + +export const Component = () => { + throw new Error('not available on the server') +} +``` + +## proxy-export + +**Status:** transformed + +**References:** countAtom, Component + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjkzAAoKLy8gVGhpcyByZXByZXNlbnRzIFdha3UncyBvdXRwdXQgYWZ0ZXIgaXRzIERDRSByZXRhaW5zIHRoZSBkZXBlbmRlbmNpZXMgYW5kCi8vIGluaXRpYWxpemVycyB0aGF0IG5lZWQgdG8gc3Vydml2ZSBwcm94eSBnZW5lcmF0aW9uLgoKCgpleHBvcnQgY29uc3QgY291bnRBdG9tID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiY291bnRBdG9tIik7CgoKZXhwb3J0IGNvbnN0IENvbXBvbmVudCA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoIkNvbXBvbmVudCIpOwoKNjQzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbi8vIFRoaXMgcmVwcmVzZW50cyBXYWt1J3Mgb3V0cHV0IGFmdGVyIGl0cyBEQ0UgcmV0YWlucyB0aGUgZGVwZW5kZW5jaWVzIGFuZFxuLy8gaW5pdGlhbGl6ZXJzIHRoYXQgbmVlZCB0byBzdXJ2aXZlIHByb3h5IGdlbmVyYXRpb24uXG5pbXBvcnQgeyBhdG9tIH0gZnJvbSAnam90YWkvdmFuaWxsYSdcblxuY29uc3QgbG9jYWwgPSAxXG5leHBvcnQgY29uc3QgY291bnRBdG9tID0gYXRvbShsb2NhbClcblxuZXhwb3J0IGNvbnN0IENvbXBvbmVudCA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCdub3QgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXInKVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztBQUN4RSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVOzs7O0FBSXJEOzs7QUFFQTs7In0=) + +```js + + +// This represents Waku's output after its DCE retains the dependencies and +// initializers that need to survive proxy generation. + + + +export const countAtom = /* #__PURE__ */ createServerReference("countAtom"); + + +export const Component = /* #__PURE__ */ createServerReference("Component"); + +``` + +## proxy-export-keep + +**Status:** transformed + +**References:** countAtom, Component + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDI3ACd1c2UgY2xpZW50JwoKLy8gVGhpcyByZXByZXNlbnRzIFdha3UncyBvdXRwdXQgYWZ0ZXIgaXRzIERDRSByZXRhaW5zIHRoZSBkZXBlbmRlbmNpZXMgYW5kCi8vIGluaXRpYWxpemVycyB0aGF0IG5lZWQgdG8gc3Vydml2ZSBwcm94eSBnZW5lcmF0aW9uLgppbXBvcnQgeyBhdG9tIH0gZnJvbSAnam90YWkvdmFuaWxsYScKCmNvbnN0IGxvY2FsID0gMQpleHBvcnQgY29uc3QgY291bnRBdG9tID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZShhdG9tKGxvY2FsKSwgImNvdW50QXRvbSIpOwoKZXhwb3J0IGNvbnN0IENvbXBvbmVudCA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoKCkgPT4gewogIHRocm93IG5ldyBFcnJvcignbm90IGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyJykKfSwgIkNvbXBvbmVudCIpOwo3ODQAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuLy8gVGhpcyByZXByZXNlbnRzIFdha3UncyBvdXRwdXQgYWZ0ZXIgaXRzIERDRSByZXRhaW5zIHRoZSBkZXBlbmRlbmNpZXMgYW5kXG4vLyBpbml0aWFsaXplcnMgdGhhdCBuZWVkIHRvIHN1cnZpdmUgcHJveHkgZ2VuZXJhdGlvbi5cbmltcG9ydCB7IGF0b20gfSBmcm9tICdqb3RhaS92YW5pbGxhJ1xuXG5jb25zdCBsb2NhbCA9IDFcbmV4cG9ydCBjb25zdCBjb3VudEF0b20gPSBhdG9tKGxvY2FsKVxuXG5leHBvcnQgY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBhdmFpbGFibGUgb24gdGhlIHNlcnZlcicpXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVU7QUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPOztBQUVuQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNkOztBQUVBO0FBQUE7QUFBQTsifQ==) + +```js +'use client' + +// This represents Waku's output after its DCE retains the dependencies and +// initializers that need to survive proxy generation. +import { atom } from 'jotai/vanilla' + +const local = 1 +export const countAtom = /* #__PURE__ */ createServerReference(atom(local), "countAtom"); + +export const Component = /* #__PURE__ */ createServerReference(() => { + throw new Error('not available on the server') +}, "Component"); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js new file mode 100644 index 000000000..37d061de3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js @@ -0,0 +1,3 @@ +'use server' + +export * as namespace from './dep.js' diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js.map.snap.md new file mode 100644 index 000000000..1bcf2727a --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js.map.snap.md @@ -0,0 +1,5 @@ +## proxy-export + +```txt +(2:0) "export * as namespace from './dep.js'\n" --> (2:0) "export const namespace = /* #__PURE__ */ createServerReference(\"namespace\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js.snap.md new file mode 100644 index 000000000..87630b7ba --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-namespace.js.snap.md @@ -0,0 +1,22 @@ +## Input + +```js +'use server' + +export * as namespace from './dep.js' +``` + +## proxy-export + +**Status:** transformed + +**References:** namespace + +[Source map visualization](https://evanw.github.io/source-map-visualization/#ODAACgpleHBvcnQgY29uc3QgbmFtZXNwYWNlID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgibmFtZXNwYWNlIik7CgoxMzgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0ICogYXMgbmFtZXNwYWNlIGZyb20gJy4vZGVwLmpzJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7OyJ9) + +```js + + +export const namespace = /* #__PURE__ */ createServerReference("namespace"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js new file mode 100644 index 000000000..f46200dda --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js @@ -0,0 +1,3 @@ +'use server' + +export { value as renamed } from './dep.js' diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js.map.snap.md new file mode 100644 index 000000000..d29832047 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js.map.snap.md @@ -0,0 +1,5 @@ +## proxy-export + +```txt +(2:0) "export { value as renamed } from './dep.js'\n" --> (2:0) "export const renamed = /* #__PURE__ */ createServerReference(\"renamed\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js.snap.md new file mode 100644 index 000000000..13293c1a1 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/proxy-export/reexport-rename.js.snap.md @@ -0,0 +1,22 @@ +## Input + +```js +'use server' + +export { value as renamed } from './dep.js' +``` + +## proxy-export + +**Status:** transformed + +**References:** renamed + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzYACgpleHBvcnQgY29uc3QgcmVuYW1lZCA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoInJlbmFtZWQiKTsKCjE0NAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyB2YWx1ZSBhcyByZW5hbWVkIH0gZnJvbSAnLi9kZXAuanMnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7In0=) + +```js + + +export const renamed = /* #__PURE__ */ createServerReference("renamed"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md index 4667dfeec..91dc65881 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md @@ -32,3 +32,11 @@ (6:0) "export default class DefaultClass {}\n" --> (14:0) "registerServerReference(DefaultClass, \"default\");\n" (6:0) "export default class DefaultClass {}\n" --> (15:0) "export default DefaultClass;\n" ``` + +## proxy-export + +```txt +(2:0) "export class NamedClass {}\n" --> (2:0) "export const NamedClass = /* #__PURE__ */ createServerReference(\"NamedClass\");\n" +(4:0) "export const ClassExpression = class InnerClass {}\n" --> (5:0) "export const ClassExpression = /* #__PURE__ */ createServerReference(\"ClassExpression\");\n" +(6:0) "export default class DefaultClass {}\n" --> (8:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md index 358c7c1b2..116816ff6 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md @@ -61,3 +61,24 @@ export { ClassExpression }; registerServerReference(DefaultClass, "default"); export default DefaultClass; ``` + +## proxy-export + +**Status:** transformed + +**References:** NamedClass, ClassExpression, default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjQwAAoKZXhwb3J0IGNvbnN0IE5hbWVkQ2xhc3MgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJOYW1lZENsYXNzIik7CgoKZXhwb3J0IGNvbnN0IENsYXNzRXhwcmVzc2lvbiA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoIkNsYXNzRXhwcmVzc2lvbiIpOwoKCmV4cG9ydCBkZWZhdWx0IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoImRlZmF1bHQiKTsKCjIzNQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgY2xhc3MgTmFtZWRDbGFzcyB7fVxuXG5leHBvcnQgY29uc3QgQ2xhc3NFeHByZXNzaW9uID0gY2xhc3MgSW5uZXJDbGFzcyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0Q2xhc3Mge31cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7QUFFQTs7O0FBRUE7OyJ9) + +```js + + +export const NamedClass = /* #__PURE__ */ createServerReference("NamedClass"); + + +export const ClassExpression = /* #__PURE__ */ createServerReference("ClassExpression"); + + +export default /* #__PURE__ */ createServerReference("default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md index 0ecfabcc0..c4db917c1 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md @@ -19,3 +19,9 @@ (2:0) "export default class {}\n" --> (4:0) "registerServerReference($$effect_default, \"default\");\n" (2:0) "export default class {}\n" --> (5:0) "export default $$effect_default;\n" ``` + +## proxy-export + +```txt +(2:0) "export default class {}\n" --> (2:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md index 7b7f84fb7..c3b79462c 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md @@ -39,3 +39,18 @@ const $$effect_default = class {} registerServerReference($$effect_default, "default"); export default $$effect_default; ``` + +## proxy-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjgACgpleHBvcnQgZGVmYXVsdCAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJkZWZhdWx0Iik7CgoxMjQAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3Mge31cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzsifQ==) + +```js + + +export default /* #__PURE__ */ createServerReference("default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.md index 392988413..eb87b5033 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.md @@ -23,3 +23,9 @@ (2:0) "export default async function () {\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" (2:0) "export default async function () {\n" --> (7:0) "export default $$effect_default;\n" ``` + +## proxy-export + +```txt +(2:0) "export default async function () {\n" --> (2:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md index 2c88b1a97..51b05e50d 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md @@ -45,3 +45,18 @@ const $$effect_default = async function () { registerServerReference($$effect_default, "default"); export default $$effect_default; ``` + +## proxy-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjgACgpleHBvcnQgZGVmYXVsdCAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJkZWZhdWx0Iik7CgoxODQAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzsifQ==) + +```js + + +export default /* #__PURE__ */ createServerReference("default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md index 50dc072a3..465615ba5 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md @@ -23,3 +23,9 @@ (2:0) "export /* before */ default /* after */ async function () {\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" (2:0) "export /* before */ default /* after */ async function () {\n" --> (7:0) "export default $$effect_default;\n" ``` + +## proxy-export + +```txt +(2:0) "export /* before */ default /* after */ async function () {\n" --> (2:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md index 32756539d..1824ed9e3 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md @@ -45,3 +45,18 @@ const $$effect_default = async function () { registerServerReference($$effect_default, "default"); export default $$effect_default; ``` + +## proxy-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjgACgpleHBvcnQgZGVmYXVsdCAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJkZWZhdWx0Iik7CgoxOTkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IC8qIGJlZm9yZSAqLyBkZWZhdWx0IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzsifQ==) + +```js + + +export default /* #__PURE__ */ createServerReference("default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.map.snap.md index 2610322cf..8ebee0661 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.map.snap.md @@ -22,3 +22,9 @@ (3:0) "export default action\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" (3:0) "export default action\n" --> (7:0) "export default $$effect_default;\n" ``` + +## proxy-export + +```txt +(3:0) "export default action\n" --> (3:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.snap.md index 23b84a347..243a281c2 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.snap.md @@ -45,3 +45,20 @@ action = async () => 'second' registerServerReference($$effect_default, "default"); export default $$effect_default; ``` + +## proxy-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzAACgoKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiZGVmYXVsdCIpOwoKCjE4OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5sZXQgYWN0aW9uID0gYXN5bmMgKCkgPT4gJ2ZpcnN0J1xuZXhwb3J0IGRlZmF1bHQgYWN0aW9uXG5hY3Rpb24gPSBhc3luYyAoKSA9PiAnc2Vjb25kJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBOzs7In0=) + +```js + + + +export default /* #__PURE__ */ createServerReference("default"); + + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.map.snap.md index a7c2a494c..7a946083c 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.map.snap.md @@ -24,3 +24,9 @@ (6:0) "export default defaultIdentifier\n" --> (8:0) "registerServerReference($$effect_default, \"default\");\n" (6:0) "export default defaultIdentifier\n" --> (9:0) "export default $$effect_default;\n" ``` + +## proxy-export + +```txt +(6:0) "export default defaultIdentifier\n" --> (4:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md index d8039095b..040ce130e 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md @@ -51,3 +51,20 @@ const $$effect_default = defaultIdentifier; registerServerReference($$effect_default, "default"); export default $$effect_default; ``` + +## proxy-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzAACgoKCmV4cG9ydCBkZWZhdWx0IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoImRlZmF1bHQiKTsKCjIxNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFNQTs7In0=) + +```js + + + + +export default /* #__PURE__ */ createServerReference("default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.md index 86fa79fd2..ddce91a5c 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.md @@ -21,3 +21,9 @@ (2:0) "export default async function defaultNamedFunction() {\n" --> (6:0) "registerServerReference(defaultNamedFunction, \"default\");\n" (2:0) "export default async function defaultNamedFunction() {\n" --> (7:0) "export default defaultNamedFunction;\n" ``` + +## proxy-export + +```txt +(2:0) "export default async function defaultNamedFunction() {\n" --> (2:0) "export default /* #__PURE__ */ createServerReference(\"default\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md index b31b20bea..efe910b00 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md @@ -45,3 +45,18 @@ async function defaultNamedFunction() { registerServerReference(defaultNamedFunction, "default"); export default defaultNamedFunction; ``` + +## proxy-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjgACgpleHBvcnQgZGVmYXVsdCAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJkZWZhdWx0Iik7CgoyMDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7In0=) + +```js + + +export default /* #__PURE__ */ createServerReference("default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md index 09bc16669..8dfa5dff0 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md @@ -21,3 +21,10 @@ (2:0) "export const first = async () => 'first action called',\n" --> (6:0) "registerServerReference(second, \"second\");\n" (2:0) "export const first = async () => 'first action called',\n" --> (7:0) "export { first, second };\n" ``` + +## proxy-export + +```txt +(2:0) "export const first = async () => 'first action called',\n" --> (2:0) "export const first = /* #__PURE__ */ createServerReference(\"first\");\n" +(2:0) "export const first = async () => 'first action called',\n" --> (3:0) "export const second = /* #__PURE__ */ createServerReference(\"second\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md index 2a66ed25c..8aa00de6c 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md @@ -43,3 +43,19 @@ registerServerReference(first, "first"); registerServerReference(second, "second"); export { first, second }; ``` + +## proxy-export + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTQzAAoKZXhwb3J0IGNvbnN0IGZpcnN0ID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiZmlyc3QiKTsKZXhwb3J0IGNvbnN0IHNlY29uZCA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoInNlY29uZCIpOwoKMTc5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0FBQUE7OyJ9) + +```js + + +export const first = /* #__PURE__ */ createServerReference("first"); +export const second = /* #__PURE__ */ createServerReference("second"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md index 045aecee0..22958dcc1 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md @@ -19,3 +19,9 @@ (4:0) "export const { action } = { action: source }\n" --> (6:0) "registerServerReference(action, \"action\");\n" (4:0) "export const { action } = { action: source }\n" --> (7:0) "export { action };\n" ``` + +## proxy-export + +```txt +(4:0) "export const { action } = { action: source }\n" --> (4:0) "export const action = /* #__PURE__ */ createServerReference(\"action\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md index 87aabfcc0..80c5c5dbd 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md @@ -44,3 +44,20 @@ const { action } = { action: source } registerServerReference(action, "action"); export { action }; ``` + +## proxy-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzYACgoKCmV4cG9ydCBjb25zdCBhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJhY3Rpb24iKTsKCjIwNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5jb25zdCBzb3VyY2UgPSBhc3luYyAoKSA9PiAnZGVzdHJ1Y3R1cmVkIGV4cG9ydCBjYWxsZWQnXG5cbmV4cG9ydCBjb25zdCB7IGFjdGlvbiB9ID0geyBhY3Rpb246IHNvdXJjZSB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUlBOzsifQ==) + +```js + + + + +export const action = /* #__PURE__ */ createServerReference("action"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.map.snap.md index 1d6db549f..dc4c0dad2 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.map.snap.md @@ -18,3 +18,9 @@ (4:0) "action = async () => 'second'\n" --> (4:0) "action = async () => 'second'\n" [unmapped] --> (6:0) "registerServerReference(action, \"renamed\");" ``` + +## proxy-export + +```txt +(3:0) "export { action as renamed }\n" --> (3:0) "export const renamed = /* #__PURE__ */ createServerReference(\"renamed\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.snap.md index 70ff1e488..8623e1a30 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.snap.md @@ -44,3 +44,20 @@ action = async () => 'second' registerServerReference(action, "renamed"); ``` + +## proxy-export + +**Status:** transformed + +**References:** renamed + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzgACgoKZXhwb3J0IGNvbnN0IHJlbmFtZWQgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJyZW5hbWVkIik7CgoKMTk2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmxldCBhY3Rpb24gPSBhc3luYyAoKSA9PiAnZmlyc3QnXG5leHBvcnQgeyBhY3Rpb24gYXMgcmVuYW1lZCB9XG5hY3Rpb24gPSBhc3luYyAoKSA9PiAnc2Vjb25kJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBOzs7In0=) + +```js + + + +export const renamed = /* #__PURE__ */ createServerReference("renamed"); + + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md index e51895d65..5fe7b4f4e 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md @@ -20,3 +20,9 @@ (6:0) "export { localAlias as aliasedAction }\n" --> (6:0) "export { localAlias as aliasedAction }\n" [unmapped] --> (8:0) "registerServerReference(localAlias, \"aliasedAction\");" ``` + +## proxy-export + +```txt +(6:0) "export { localAlias as aliasedAction }\n" --> (4:0) "export const aliasedAction = /* #__PURE__ */ createServerReference(\"aliasedAction\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md index 9b4c77666..15e15fc49 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md @@ -50,3 +50,20 @@ export { localAlias as aliasedAction } registerServerReference(localAlias, "aliasedAction"); ``` + +## proxy-export + +**Status:** transformed + +**References:** aliasedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#OTAACgoKCmV4cG9ydCBjb25zdCBhbGlhc2VkQWN0aW9uID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiYWxpYXNlZEFjdGlvbiIpOwoKMjA4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGxvY2FsQWxpYXMoKSB7XG4gIHJldHVybiAnbG9jYWwgYWxpYXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFNQTs7In0=) + +```js + + + + +export const aliasedAction = /* #__PURE__ */ createServerReference("aliasedAction"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md index 34b62c715..10bc03441 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md @@ -23,3 +23,10 @@ (0:0) "export async function direct() {}\n" --> (8:0) "export { direct };\n" [unmapped] --> (10:0) "registerServerReference(indirect, \"indirect\");" ``` + +## proxy-export + +```txt +(0:0) "export async function direct() {}\n" --> (0:0) "export const direct = /* #__PURE__ */ createServerReference(\"direct\");\n" +(3:0) "export { indirect }\n" --> (4:0) "export const indirect = /* #__PURE__ */ createServerReference(\"indirect\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md index a095b3ac4..ad0e5cb2e 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md @@ -51,4 +51,23 @@ registerServerReference(direct, "direct"); export { direct }; registerServerReference(indirect, "indirect"); +``` + +## proxy-export + +**Status:** transformed + +**References:** direct, indirect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTUyAGV4cG9ydCBjb25zdCBkaXJlY3QgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJkaXJlY3QiKTsKCgoKZXhwb3J0IGNvbnN0IGluZGlyZWN0ID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiaW5kaXJlY3QiKTsKCgoKMjExAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpcmVjdCgpIHt9XG5cbmNvbnN0IGluZGlyZWN0ID0gYXN5bmMgKCkgPT4ge31cbmV4cG9ydCB7IGluZGlyZWN0IH1cblxuY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0FBR0E7Ozs7In0=) + +```js +export const direct = /* #__PURE__ */ createServerReference("direct"); + + + +export const indirect = /* #__PURE__ */ createServerReference("indirect"); + + + ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.map.snap.md index b449c526f..5c1a53f0e 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.map.snap.md @@ -16,3 +16,9 @@ (3:0) "const action = async () => 'action called'\n" --> (3:0) "const action = async () => 'action called'\n" [unmapped] --> (5:0) "registerServerReference(action, \"action\");" ``` + +## proxy-export + +```txt +(2:0) "export { action }\n" --> (2:0) "export const action = /* #__PURE__ */ createServerReference(\"action\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.snap.md index cb2829f08..845e75247 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.snap.md @@ -41,3 +41,19 @@ const action = async () => 'action called' registerServerReference(action, "action"); ``` + +## proxy-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzUACgpleHBvcnQgY29uc3QgYWN0aW9uID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiYWN0aW9uIik7CgoKMTYzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IGFjdGlvbiB9XG5jb25zdCBhY3Rpb24gPSBhc3luYyAoKSA9PiAnYWN0aW9uIGNhbGxlZCdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7In0=) + +```js + + +export const action = /* #__PURE__ */ createServerReference("action"); + + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md index 101621d42..cb8e4cdc6 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md @@ -23,3 +23,10 @@ [unmapped] --> (8:0) "registerServerReference(value, \"first\");\n" [unmapped] --> (9:0) "registerServerReference(value, \"second\");" ``` + +## proxy-export + +```txt +(6:0) "export { value as first, value as second }\n" --> (4:0) "export const first = /* #__PURE__ */ createServerReference(\"first\");\n" +(6:0) "export { value as first, value as second }\n" --> (5:0) "export const second = /* #__PURE__ */ createServerReference(\"second\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md index 88cc01b87..fb6e27c67 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md @@ -53,3 +53,21 @@ export { value as first, value as second } registerServerReference(value, "first"); registerServerReference(value, "second"); ``` + +## proxy-export + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTQ1AAoKCgpleHBvcnQgY29uc3QgZmlyc3QgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJmaXJzdCIpOwpleHBvcnQgY29uc3Qgc2Vjb25kID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgic2Vjb25kIik7CgoyMTcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7XG4gIHJldHVybiAnbXVsdGlwbGUgYWxpYXNlcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IHZhbHVlIGFzIGZpcnN0LCB2YWx1ZSBhcyBzZWNvbmQgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFNQTtBQUFBOzsifQ==) + +```js + + + + +export const first = /* #__PURE__ */ createServerReference("first"); +export const second = /* #__PURE__ */ createServerReference("second"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.map.snap.md index 72485f5a2..80c41380d 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.map.snap.md @@ -31,3 +31,10 @@ (6:0) "export async function secondAction() {\n" --> (13:0) "registerServerReference(secondAction, \"secondAction\");\n" (6:0) "export async function secondAction() {\n" --> (14:0) "export { secondAction };\n" ``` + +## proxy-export + +```txt +(2:0) "export async function firstAction() {\n" --> (2:0) "export const firstAction = /* #__PURE__ */ createServerReference(\"firstAction\");\n" +(6:0) "export async function secondAction() {\n" --> (5:0) "export const secondAction = /* #__PURE__ */ createServerReference(\"secondAction\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md index 20e24de54..668b00ad2 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md @@ -61,3 +61,21 @@ export { firstAction }; registerServerReference(secondAction, "secondAction"); export { secondAction }; ``` + +## proxy-export + +**Status:** transformed + +**References:** firstAction, secondAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY5AAoKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiZmlyc3RBY3Rpb24iKTsKCgpleHBvcnQgY29uc3Qgc2Vjb25kQWN0aW9uID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgic2Vjb25kQWN0aW9uIik7CgoyNTgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7O0FBSUE7OyJ9) + +```js + + +export const firstAction = /* #__PURE__ */ createServerReference("firstAction"); + + +export const secondAction = /* #__PURE__ */ createServerReference("secondAction"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.map.snap.md index 930094923..2327a1f16 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.map.snap.md @@ -21,3 +21,9 @@ (2:0) "export const action = async function actionImplementation() {\n" --> (6:0) "registerServerReference(action, \"action\");\n" (2:0) "export const action = async function actionImplementation() {\n" --> (7:0) "export { action };\n" ``` + +## proxy-export + +```txt +(2:0) "export const action = async function actionImplementation() {\n" --> (2:0) "export const action = /* #__PURE__ */ createServerReference(\"action\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md index 585c9c147..cad283438 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md @@ -44,3 +44,18 @@ const action = async function actionImplementation() { registerServerReference(action, "action"); export { action }; ``` + +## proxy-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzQACgpleHBvcnQgY29uc3QgYWN0aW9uID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgiYWN0aW9uIik7CgoyMTAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7OyJ9) + +```js + + +export const action = /* #__PURE__ */ createServerReference("action"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.md index 291d2b0c3..ddef85f47 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.md @@ -20,3 +20,9 @@ (2:0) "export async function namedFunction() {\n" --> (6:0) "registerServerReference(namedFunction, \"namedFunction\");\n" (2:0) "export async function namedFunction() {\n" --> (7:0) "export { namedFunction };\n" ``` + +## proxy-export + +```txt +(2:0) "export async function namedFunction() {\n" --> (2:0) "export const namedFunction = /* #__PURE__ */ createServerReference(\"namedFunction\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md index e6fb50e56..3f5f8f923 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md @@ -44,3 +44,18 @@ async function namedFunction() { registerServerReference(namedFunction, "namedFunction"); export { namedFunction }; ``` + +## proxy-export + +**Status:** transformed + +**References:** namedFunction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#ODgACgpleHBvcnQgY29uc3QgbmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoIm5hbWVkRnVuY3Rpb24iKTsKCjE3NwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7In0=) + +```js + + +export const namedFunction = /* #__PURE__ */ createServerReference("namedFunction"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.map.snap.md index 8ac8287a0..8a110fd8e 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.map.snap.md @@ -22,3 +22,9 @@ (4:0) "export async function action() {\n" --> (8:0) "registerServerReference(action, \"action\");\n" (4:0) "export async function action() {\n" --> (9:0) "export { action };\n" ``` + +## proxy-export + +```txt +(4:0) "export async function action() {\n" --> (4:0) "export const action = /* #__PURE__ */ createServerReference(\"action\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md index 1229c1c36..97f30abcf 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md @@ -50,3 +50,20 @@ async function action() { registerServerReference(action, "action"); export { action }; ``` + +## proxy-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzYACgoKCmV4cG9ydCBjb25zdCBhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJhY3Rpb24iKTsKCjE3OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG52b2lkIGFjdGlvblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uKCkge1xuICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUlBOzsifQ==) + +```js + + + + +export const action = /* #__PURE__ */ createServerReference("action"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.map.snap.md index 608b8a776..2fc3aea3d 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.map.snap.md @@ -22,3 +22,9 @@ (2:0) "export function recursive(depth) {\n" --> (7:0) "registerServerReference(recursive, \"recursive\");\n" (2:0) "export function recursive(depth) {\n" --> (8:0) "export { recursive };\n" ``` + +## proxy-export + +```txt +(2:0) "export function recursive(depth) {\n" --> (2:0) "export const recursive = /* #__PURE__ */ createServerReference(\"recursive\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.snap.md index 5248f4be4..37aa601f2 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.snap.md @@ -47,3 +47,18 @@ function recursive(depth) { registerServerReference(recursive, "recursive"); export { recursive }; ``` + +## proxy-export + +**Status:** transformed + +**References:** recursive + +[Source map visualization](https://evanw.github.io/source-map-visualization/#ODAACgpleHBvcnQgY29uc3QgcmVjdXJzaXZlID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSgicmVjdXJzaXZlIik7CgoyMTEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZShkZXB0aCkge1xuICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSlcbiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXJcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzsifQ==) + +```js + + +export const recursive = /* #__PURE__ */ createServerReference("recursive"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.map.snap.md index b6eb39bc0..a82ebcd6c 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.map.snap.md @@ -16,3 +16,9 @@ [unmapped] --> (4:0) "import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source';\n" [unmapped] --> (5:0) "registerServerReference($$effect_import_reexportedAction, \"reexportedAction\");" ``` + +## proxy-export + +```txt +(2:0) "export { reexportedAction } from './reexport-source' with { type: 'json' }\n" --> (2:0) "export const reexportedAction = /* #__PURE__ */ createServerReference(\"reexportedAction\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.snap.md index 7f5196f69..844235063 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.snap.md @@ -40,3 +40,18 @@ export { reexportedAction } from './reexport-source' with { type: 'json' } import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; registerServerReference($$effect_import_reexportedAction, "reexportedAction"); ``` + +## proxy-export + +**Status:** transformed + +**References:** reexportedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#OTQACgpleHBvcnQgY29uc3QgcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoInJlZXhwb3J0ZWRBY3Rpb24iKTsKCjE3NQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnIHdpdGggeyB0eXBlOiAnanNvbicgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7OyJ9) + +```js + + +export const reexportedAction = /* #__PURE__ */ createServerReference("reexportedAction"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.md index 740f4c074..2eb0b48a7 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.md @@ -16,3 +16,9 @@ [unmapped] --> (4:0) "import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source';\n" [unmapped] --> (5:0) "registerServerReference($$effect_import_reexportedAction, \"reexportedAction\");" ``` + +## proxy-export + +```txt +(2:0) "export { reexportedAction } from './reexport-source'\n" --> (2:0) "export const reexportedAction = /* #__PURE__ */ createServerReference(\"reexportedAction\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md index e2b88993d..2641d440a 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md @@ -40,3 +40,18 @@ export { reexportedAction } from './reexport-source' import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; registerServerReference($$effect_import_reexportedAction, "reexportedAction"); ``` + +## proxy-export + +**Status:** transformed + +**References:** reexportedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#OTQACgpleHBvcnQgY29uc3QgcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoInJlZXhwb3J0ZWRBY3Rpb24iKTsKCjE1MwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7In0=) + +```js + + +export const reexportedAction = /* #__PURE__ */ createServerReference("reexportedAction"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.md index d9a0477ce..0eb7c1024 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.md @@ -29,3 +29,10 @@ (4:0) "export const functionExpression = async function () {\n" --> (11:0) "registerServerReference(functionExpression, \"functionExpression\");\n" (4:0) "export const functionExpression = async function () {\n" --> (12:0) "export { functionExpression };\n" ``` + +## proxy-export + +```txt +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (2:0) "export const arrowFunction = /* #__PURE__ */ createServerReference(\"arrowFunction\");\n" +(4:0) "export const functionExpression = async function () {\n" --> (5:0) "export const functionExpression = /* #__PURE__ */ createServerReference(\"functionExpression\");\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md index b806e656f..33ca02ae4 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md @@ -55,3 +55,21 @@ export { arrowFunction }; registerServerReference(functionExpression, "functionExpression"); export { functionExpression }; ``` + +## proxy-export + +**Status:** transformed + +**References:** arrowFunction, functionExpression + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTg1AAoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlU2VydmVyUmVmZXJlbmNlKCJhcnJvd0Z1bmN0aW9uIik7CgoKZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoImZ1bmN0aW9uRXhwcmVzc2lvbiIpOwoKMjcxAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7QUFFQTs7In0=) + +```js + + +export const arrowFunction = /* #__PURE__ */ createServerReference("arrowFunction"); + + +export const functionExpression = /* #__PURE__ */ createServerReference("functionExpression"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/no-transformation.js b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/no-transformation.js new file mode 100644 index 000000000..c4de74738 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/no-transformation.js @@ -0,0 +1,3 @@ +export const log = (mesg) => { + console.log('%s', mesg) +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/no-transformation.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/no-transformation.js.snap.md new file mode 100644 index 000000000..b2fa0b0d5 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/no-transformation.js.snap.md @@ -0,0 +1,19 @@ +## Input + +```js +export const log = (mesg) => { + console.log('%s', mesg) +} +``` + +## client server proxy + +**Status:** skipped + +**References:** (none) + +```js +export const log = (mesg) => { + console.log('%s', mesg) +} +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server-ssr.js b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server-ssr.js new file mode 100644 index 000000000..c40e349e7 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server-ssr.js @@ -0,0 +1,9 @@ +'use server' + +import { getEnv } from 'waku' + +const privateFunction = () => getEnv('SECRET') + +export async function log(mesg) { + console.log('%s', mesg) +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server-ssr.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server-ssr.js.snap.md new file mode 100644 index 000000000..6ecee0734 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server-ssr.js.snap.md @@ -0,0 +1,30 @@ +## Input + +```js +'use server' + +import { getEnv } from 'waku' + +const privateFunction = () => getEnv('SECRET') + +export async function log(mesg) { + console.log('%s', mesg) +} +``` + +## client server proxy + +**Status:** transformed + +**References:** log + +```js + + + + + + +export const log = /* #__PURE__ */ $runtime("#log", "log"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server.js b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server.js new file mode 100644 index 000000000..eccc1c1f5 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server.js @@ -0,0 +1,19 @@ +'use server' + +const privateFunction = () => 'Secret' + +export const log1 = async function (mesg) { + console.log('%s', mesg) +} + +export const log2 = async (mesg) => { + console.log('%s', mesg) +} + +export async function log3(mesg) { + console.log('%s', mesg) +} + +export default async function log4(mesg) { + console.log('%s', mesg) +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server.js.snap.md new file mode 100644 index 000000000..ff0214c1c --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/client-server-proxy/top-level-use-server.js.snap.md @@ -0,0 +1,47 @@ +## Input + +```js +'use server' + +const privateFunction = () => 'Secret' + +export const log1 = async function (mesg) { + console.log('%s', mesg) +} + +export const log2 = async (mesg) => { + console.log('%s', mesg) +} + +export async function log3(mesg) { + console.log('%s', mesg) +} + +export default async function log4(mesg) { + console.log('%s', mesg) +} +``` + +## client server proxy + +**Status:** transformed + +**References:** log1, log2, log3, default + +```js + + + + +export const log1 = /* #__PURE__ */ $runtime("#log1", "log1"); + + +export const log2 = /* #__PURE__ */ $runtime("#log2", "log2"); + + +export const log3 = /* #__PURE__ */ $runtime("#log3", "log3"); + + +export default /* #__PURE__ */ $runtime("#default", "default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-anonymous-arrow-function.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-anonymous-arrow-function.js new file mode 100644 index 000000000..29f650f87 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-anonymous-arrow-function.js @@ -0,0 +1,7 @@ +const now = Date.now() +export default function App() { + return (mesg) => { + 'use server' + console.log('%s', mesg, now) + } +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-anonymous-arrow-function.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-anonymous-arrow-function.js.snap.md new file mode 100644 index 000000000..37fd0c049 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-anonymous-arrow-function.js.snap.md @@ -0,0 +1,30 @@ +## Input + +```js +const now = Date.now() +export default function App() { + return (mesg) => { + 'use server' + console.log('%s', mesg, now) + } +} +``` + +## server action + +**Status:** transformed + +**References:** $$hoist_0_anonymous_server_function + +```js +const now = Date.now() +export default function App() { + return /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function") +} + +;export function $$hoist_0_anonymous_server_function(mesg) { + 'use server' + console.log('%s', mesg, now) + }; +/* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-arrow-function.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-arrow-function.js new file mode 100644 index 000000000..238f2bafa --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-arrow-function.js @@ -0,0 +1,8 @@ +const now = Date.now() +export default function App() { + const log = async (mesg) => { + 'use server' + console.log('%s', mesg, now) + } + return log +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-arrow-function.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-arrow-function.js.snap.md new file mode 100644 index 000000000..4a58eaf28 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-arrow-function.js.snap.md @@ -0,0 +1,32 @@ +## Input + +```js +const now = Date.now() +export default function App() { + const log = async (mesg) => { + 'use server' + console.log('%s', mesg, now) + } + return log +} +``` + +## server action + +**Status:** transformed + +**References:** $$hoist_0_log + +```js +const now = Date.now() +export default function App() { + const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log") + return log +} + +;export async function $$hoist_0_log(mesg) { + 'use server' + console.log('%s', mesg, now) + }; +/* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-declaration.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-declaration.js new file mode 100644 index 000000000..6897a9929 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-declaration.js @@ -0,0 +1,8 @@ +export default function App() { + const a = 'test' + async function log(mesg) { + 'use server' + console.log('%s', mesg, a) + } + return log +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-declaration.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-declaration.js.snap.md new file mode 100644 index 000000000..9adacbb90 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-declaration.js.snap.md @@ -0,0 +1,32 @@ +## Input + +```js +export default function App() { + const a = 'test' + async function log(mesg) { + 'use server' + console.log('%s', mesg, a) + } + return log +} +``` + +## server action + +**Status:** transformed + +**References:** $$hoist_0_log + +```js +export default function App() { + const a = 'test' + const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log").bind(null, a); + return log +} + +;export async function $$hoist_0_log(a, mesg) { + 'use server' + console.log('%s', mesg, a) + }; +/* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-expression.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-expression.js new file mode 100644 index 000000000..cd8615a62 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-expression.js @@ -0,0 +1,8 @@ +export default function App() { + const rand = Math.random() + const log = async function (mesg) { + 'use server' + console.log('%s', mesg, rand) + } + return log +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-expression.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-expression.js.snap.md new file mode 100644 index 000000000..9886ac8f5 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-function-expression.js.snap.md @@ -0,0 +1,32 @@ +## Input + +```js +export default function App() { + const rand = Math.random() + const log = async function (mesg) { + 'use server' + console.log('%s', mesg, rand) + } + return log +} +``` + +## server action + +**Status:** transformed + +**References:** $$hoist_0_log + +```js +export default function App() { + const rand = Math.random() + const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log").bind(null, rand) + return log +} + +;export async function $$hoist_0_log(rand, mesg) { + 'use server' + console.log('%s', mesg, rand) + }; +/* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-various-patterns.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-various-patterns.js new file mode 100644 index 000000000..9afe53238 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-various-patterns.js @@ -0,0 +1,28 @@ +const actions = { + log: async (mesg) => { + 'use server' + console.log('%s', mesg) + }, +} + +async function log2(mesg) { + 'use server' + console.log('%s', mesg) +} + +const log3 = async function (mesg) { + 'use server' + console.log('%s', mesg) +} + +const log4 = async (mesg) => { + 'use server' + console.log('%s', mesg) +} + +const defaultFn = async function (mesg) { + 'use server' + console.log('%s', mesg) +} + +export default defaultFn diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-various-patterns.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-various-patterns.js.snap.md new file mode 100644 index 000000000..1543c613a --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/inline-various-patterns.js.snap.md @@ -0,0 +1,84 @@ +## Input + +```js +const actions = { + log: async (mesg) => { + 'use server' + console.log('%s', mesg) + }, +} + +async function log2(mesg) { + 'use server' + console.log('%s', mesg) +} + +const log3 = async function (mesg) { + 'use server' + console.log('%s', mesg) +} + +const log4 = async (mesg) => { + 'use server' + console.log('%s', mesg) +} + +const defaultFn = async function (mesg) { + 'use server' + console.log('%s', mesg) +} + +export default defaultFn +``` + +## server action + +**Status:** transformed + +**References:** $$hoist_0_anonymous_server_function, $$hoist_1_log2, $$hoist_2_log3, $$hoist_3_log4, $$hoist_4_defaultFn + +```js +const actions = { + log: /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"), +} + +const log2 = /* #__PURE__ */ $runtime($$hoist_1_log2, "", "$$hoist_1_log2"); + +const log3 = /* #__PURE__ */ $runtime($$hoist_2_log3, "", "$$hoist_2_log3") + +const log4 = /* #__PURE__ */ $runtime($$hoist_3_log4, "", "$$hoist_3_log4") + +const defaultFn = /* #__PURE__ */ $runtime($$hoist_4_defaultFn, "", "$$hoist_4_defaultFn") + +export default defaultFn + +;export async function $$hoist_0_anonymous_server_function(mesg) { + 'use server' + console.log('%s', mesg) + }; +/* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + +;export async function $$hoist_1_log2(mesg) { + 'use server' + console.log('%s', mesg) +}; +/* #__PURE__ */ Object.defineProperty($$hoist_1_log2, "name", { value: "log2" }); + +;export async function $$hoist_2_log3(mesg) { + 'use server' + console.log('%s', mesg) +}; +/* #__PURE__ */ Object.defineProperty($$hoist_2_log3, "name", { value: "log3" }); + +;export async function $$hoist_3_log4(mesg) { + 'use server' + console.log('%s', mesg) +}; +/* #__PURE__ */ Object.defineProperty($$hoist_3_log4, "name", { value: "log4" }); + +;export async function $$hoist_4_defaultFn(mesg) { + 'use server' + console.log('%s', mesg) +}; +/* #__PURE__ */ Object.defineProperty($$hoist_4_defaultFn, "name", { value: "defaultFn" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/no-transformation.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/no-transformation.js new file mode 100644 index 000000000..23d4d9c57 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/no-transformation.js @@ -0,0 +1,3 @@ +export default function App() { + return 'Hello World' +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/no-transformation.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/no-transformation.js.snap.md new file mode 100644 index 000000000..c66033027 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/no-transformation.js.snap.md @@ -0,0 +1,19 @@ +## Input + +```js +export default function App() { + return 'Hello World' +} +``` + +## server action + +**Status:** unchanged + +**References:** (none) + +```js +export default function App() { + return 'Hello World' +} +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/server-action-in-object.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/server-action-in-object.js new file mode 100644 index 000000000..2527a00bc --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/server-action-in-object.js @@ -0,0 +1,12 @@ +const AI = { + actions: { + foo: async () => { + 'use server' + return 0 + }, + }, +} + +export function ServerProvider() { + return AI +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/server-action-in-object.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/server-action-in-object.js.snap.md new file mode 100644 index 000000000..9f8c2ec69 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/server-action-in-object.js.snap.md @@ -0,0 +1,40 @@ +## Input + +```js +const AI = { + actions: { + foo: async () => { + 'use server' + return 0 + }, + }, +} + +export function ServerProvider() { + return AI +} +``` + +## server action + +**Status:** transformed + +**References:** $$hoist_0_anonymous_server_function + +```js +const AI = { + actions: { + foo: /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"), + }, +} + +export function ServerProvider() { + return AI +} + +;export async function $$hoist_0_anonymous_server_function() { + 'use server' + return 0 + }; +/* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-and-inline-use-server.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-and-inline-use-server.js new file mode 100644 index 000000000..2b9498dc3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-and-inline-use-server.js @@ -0,0 +1,17 @@ +'use server' + +async function innerAction(action, ...args) { + 'use server' + return await action(...args) +} + +function wrapAction(action) { + return innerAction.bind(null, action) +} + +export async function exportedAction() { + 'use server' + return null +} + +export default async () => null diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-and-inline-use-server.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-and-inline-use-server.js.snap.md new file mode 100644 index 000000000..f5f601588 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-and-inline-use-server.js.snap.md @@ -0,0 +1,53 @@ +## Input + +```js +'use server' + +async function innerAction(action, ...args) { + 'use server' + return await action(...args) +} + +function wrapAction(action) { + return innerAction.bind(null, action) +} + +export async function exportedAction() { + 'use server' + return null +} + +export default async () => null +``` + +## server action + +**Status:** transformed + +**References:** exportedAction, default + +```js +'use server' + +async function innerAction(action, ...args) { + 'use server' + return await action(...args) +} + +function wrapAction(action) { + return innerAction.bind(null, action) +} + +async function exportedAction() { + 'use server' + return null +} + +const $$effect_default = async () => null + +$runtime(exportedAction, "", "exportedAction"); +export { exportedAction }; + +$runtime($$effect_default, "", "default"); +export default $$effect_default; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-use-server.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-use-server.js new file mode 100644 index 000000000..7478ad7de --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-use-server.js @@ -0,0 +1,15 @@ +'use server' + +const privateFunction = () => 'Secret' + +export const log = async (mesg) => { + console.log('%s', mesg) +} + +export async function greet(name) { + return 'Hello ' + name +} + +export default async function () { + return Date.now() +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-use-server.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-use-server.js.snap.md new file mode 100644 index 000000000..1d4a6ca0f --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-action/top-level-use-server.js.snap.md @@ -0,0 +1,52 @@ +## Input + +```js +'use server' + +const privateFunction = () => 'Secret' + +export const log = async (mesg) => { + console.log('%s', mesg) +} + +export async function greet(name) { + return 'Hello ' + name +} + +export default async function () { + return Date.now() +} +``` + +## server action + +**Status:** transformed + +**References:** log, greet, default + +```js +'use server' + +const privateFunction = () => 'Secret' + +const log = async (mesg) => { + console.log('%s', mesg) +} + +async function greet(name) { + return 'Hello ' + name +} + +const $$effect_default = async function () { + return Date.now() +} + +$runtime(log, "", "log"); +export { log }; + +$runtime(greet, "", "greet"); +export { greet }; + +$runtime($$effect_default, "", "default"); +export default $$effect_default; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-client-proxy/top-level-use-client.js b/packages/plugin-rsc/src/transforms/fixtures/waku/server-client-proxy/top-level-use-client.js new file mode 100644 index 000000000..0e9932101 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-client-proxy/top-level-use-client.js @@ -0,0 +1,42 @@ +'use client' + +import { atom } from 'jotai/vanilla' +import { Component, createContext, useContext, memo } from 'react' +import { unstable_allowServer as allowServer } from 'waku/client' + +const initialCount = 1 +const TWO = 2 +function double(x) { + return x * TWO +} +export const countAtom = allowServer(atom(double(initialCount))) + +export const Empty = () => null + +function Private() { + return 'Secret' +} +const SecretComponent = () => 'Secret' +const SecretFunction = (n) => 'Secret' + n + +export function Greet({ name }) { + return 'Hello ' + name +} + +export class MyComponent extends Component { + render() { + return 'Class Component' + } +} + +const MyContext = createContext() + +export const useMyContext = () => useContext(MyContext) + +const MyProvider = memo(MyContext) + +export const NAME = 'World' + +export default function App() { + return 'Hello World' +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/waku/server-client-proxy/top-level-use-client.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/waku/server-client-proxy/top-level-use-client.js.snap.md new file mode 100644 index 000000000..0f78a7e51 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/waku/server-client-proxy/top-level-use-client.js.snap.md @@ -0,0 +1,92 @@ +## Input + +```js +'use client' + +import { atom } from 'jotai/vanilla' +import { Component, createContext, useContext, memo } from 'react' +import { unstable_allowServer as allowServer } from 'waku/client' + +const initialCount = 1 +const TWO = 2 +function double(x) { + return x * TWO +} +export const countAtom = allowServer(atom(double(initialCount))) + +export const Empty = () => null + +function Private() { + return 'Secret' +} +const SecretComponent = () => 'Secret' +const SecretFunction = (n) => 'Secret' + n + +export function Greet({ name }) { + return 'Hello ' + name +} + +export class MyComponent extends Component { + render() { + return 'Class Component' + } +} + +const MyContext = createContext() + +export const useMyContext = () => useContext(MyContext) + +const MyProvider = memo(MyContext) + +export const NAME = 'World' + +export default function App() { + return 'Hello World' +} +``` + +## server client proxy + +**Status:** transformed + +**References:** countAtom, Empty, Greet, MyComponent, useMyContext, NAME, default + +```js +'use client' + +import { atom } from 'jotai/vanilla' +import { Component, createContext, useContext, memo } from 'react' +import { unstable_allowServer as allowServer } from 'waku/client' + +const initialCount = 1 +const TWO = 2 +function double(x) { + return x * TWO +} +export const countAtom = /* #__PURE__ */ $runtime("#countAtom", "countAtom"); + +export const Empty = /* #__PURE__ */ $runtime("#Empty", "Empty"); + +function Private() { + return 'Secret' +} +const SecretComponent = () => 'Secret' +const SecretFunction = (n) => 'Secret' + n + +export const Greet = /* #__PURE__ */ $runtime("#Greet", "Greet"); + + +export const MyComponent = /* #__PURE__ */ $runtime("#MyComponent", "MyComponent"); + + +const MyContext = createContext() + +export const useMyContext = /* #__PURE__ */ $runtime("#useMyContext", "useMyContext"); + +const MyProvider = memo(MyContext) + +export const NAME = /* #__PURE__ */ $runtime("#NAME", "NAME"); + +export default /* #__PURE__ */ $runtime("#default", "default"); + +``` diff --git a/packages/plugin-rsc/src/transforms/proxy-export.test.ts b/packages/plugin-rsc/src/transforms/proxy-export.test.ts index b4bd9a035..cca6086c6 100644 --- a/packages/plugin-rsc/src/transforms/proxy-export.test.ts +++ b/packages/plugin-rsc/src/transforms/proxy-export.test.ts @@ -1,172 +1,17 @@ import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformProxyExport } from './proxy-export' -import { transformWrapExport } from './wrap-export' -async function testTransform( - input: string, - options?: { keep?: boolean; ignoreExportAllDeclaration?: boolean }, -) { +async function testTransform(input: string) { const ast = await parseAstAsync(input) const result = transformProxyExport(ast, { code: input, - runtime: (name, meta) => { - if (meta?.value) { - return `$$proxy(${meta.value}, "", ${JSON.stringify(name)})` - } - return `$$proxy("", ${JSON.stringify(name)})` - }, - ...options, + runtime: (name) => `$$proxy("", ${JSON.stringify(name)})`, }) return { ...result, output: result.output.toString() } } -describe(transformWrapExport, () => { - test('basic', async () => { - const input = ` -export const Arrow = () => { - -}; -export default "hi"; -export function Fn() { -}; - -export async function AsyncFn() { - - -}; - -export class Cls {}; -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "Arrow", - "default", - "Fn", - "AsyncFn", - "Cls", - ], - "output": " - export const Arrow = /* #__PURE__ */ $$proxy("", "Arrow"); - - export default /* #__PURE__ */ $$proxy("", "default"); - - export const Fn = /* #__PURE__ */ $$proxy("", "Fn"); - - - export const AsyncFn = /* #__PURE__ */ $$proxy("", "AsyncFn"); - - - export const Cls = /* #__PURE__ */ $$proxy("", "Cls"); - - ", - } - `) - }) - - test('export destructuring', async () => { - const input = ` -export const { x, y: [z] } = { x: 0, y: [1] }; -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "x", - "z", - ], - "output": " - export const x = /* #__PURE__ */ $$proxy("", "x"); - export const z = /* #__PURE__ */ $$proxy("", "z"); - - ", - } - `) - }) - - test('default function', async () => { - const input = `export default function Fn() {}` - expect(await testTransform(input)).toMatchInlineSnapshot( - ` - { - "exportNames": [ - "default", - ], - "output": "export default /* #__PURE__ */ $$proxy("", "default"); - ", - } - `, - ) - }) - - test('default anonymous function', async () => { - const input = `export default function () {}` - expect(await testTransform(input)).toMatchInlineSnapshot( - ` - { - "exportNames": [ - "default", - ], - "output": "export default /* #__PURE__ */ $$proxy("", "default"); - ", - } - `, - ) - }) - - test('default class', async () => { - const input = `export default class Cls {}` - expect(await testTransform(input)).toMatchInlineSnapshot( - ` - { - "exportNames": [ - "default", - ], - "output": "export default /* #__PURE__ */ $$proxy("", "default"); - ", - } - `, - ) - }) - - test('export simple', async () => { - const input = ` -const x = 0; -export { x } -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "x", - ], - "output": " - - export const x = /* #__PURE__ */ $$proxy("", "x"); - - ", - } - `) - }) - - test('export rename', async () => { - const input = ` -const x = 0; -export { x as y } -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "y", - ], - "output": " - - export const y = /* #__PURE__ */ $$proxy("", "y"); - - ", - } - `) - }) - +describe(transformProxyExport, () => { test('export string name throws', async () => { const input = ` const x = 0; @@ -177,124 +22,9 @@ export { x as "my thing" } ) }) - test('re-export simple', async () => { - const input = `export { x } from "./dep"` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "x", - ], - "output": "export const x = /* #__PURE__ */ $$proxy("", "x"); - ", - } - `) - }) - - test('re-export rename', async () => { - const input = `export { x as y } from "./dep"` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "y", - ], - "output": "export const y = /* #__PURE__ */ $$proxy("", "y"); - ", - } - `) - }) - - test('re-export namespace', async () => { - const input = `export * as all from "./dep"` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "all", - ], - "output": "export const all = /* #__PURE__ */ $$proxy("", "all"); - ", - } - `) - }) - - test('re-export all (ignoreExportAllDeclaration)', async () => { - const input = `export * from "./dep"` - expect(await testTransform(input, { ignoreExportAllDeclaration: true })) - .toMatchInlineSnapshot(` - { - "exportNames": [], - "output": "", - } - `) - }) - - test('re-export all (unresolved throws)', async () => { - const input = `export * from "./dep"` - await expect(testTransform(input)).rejects.toThrow( + test('re-export all throws', async () => { + await expect(testTransform(`export * from "./dep"`)).rejects.toThrow( 'unsupported ExportAllDeclaration', ) }) - - test('keep', async () => { - // Waku must run its DCE before this transform. For example: - // - // // user source - // export const countAtom = allowServer(atom(local1)); - // export const MyClientComp = () =>
; - // - // // after Waku's DCE - // export const countAtom = atom(local1); - // export const MyClientComp = () => { throw new Error('...') }; - // - // // after this transform with `keep: true` - // export const countAtom = $$proxy(atom(local1), "", "countAtom"); - // export const MyClientComp = $$proxy( - // () => { throw new Error('...') }, "", "MyClientComp" - // ); - // - // The input below represents Waku's output. `keep` disables our normal DCE - // so its retained imports, dependencies, and export initializers survive. - const input = `\ -"use client" -import { atom } from 'jotai/vanilla'; - -const local1 = 1; -export const countAtom = atom(local1); - -export const MyClientComp = () => { throw new Error('...') } -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - { - "exportNames": [ - "countAtom", - "MyClientComp", - ], - "output": " - - - - export const countAtom = /* #__PURE__ */ $$proxy("", "countAtom"); - - - export const MyClientComp = /* #__PURE__ */ $$proxy("", "MyClientComp"); - - ", - } - `) - expect(await testTransform(input, { keep: true })).toMatchInlineSnapshot(` - { - "exportNames": [ - "countAtom", - "MyClientComp", - ], - "output": ""use client" - import { atom } from 'jotai/vanilla'; - - const local1 = 1; - export const countAtom = /* #__PURE__ */ $$proxy(atom(local1), "", "countAtom"); - - export const MyClientComp = /* #__PURE__ */ $$proxy(() => { throw new Error('...') }, "", "MyClientComp"); - ", - } - `) - }) }) diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index f9f2f0c0c..71664fa11 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -1,8 +1,10 @@ import path from 'node:path' import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' +import { transformCjsToEsm } from './cjs' import { transformHoistInlineDirective } from './hoist' import { transformModuleExportEffect } from './module-export-effect' +import { transformProxyExport } from './proxy-export' import { formatDecodedSourceMapMarkdown, formatSourceMapMarkdownFixture, @@ -10,6 +12,25 @@ import { import { transformWrapExport } from './wrap-export' describe('source map fixtures', () => { + const cjsFixtures = import.meta.glob( + ['./fixtures/source-map/cjs/**/*.js', '!**/*.snap.*'], + { query: 'raw' }, + ) + for (const [file, load] of Object.entries(cjsFixtures)) { + test(`cjs/${path.basename(file)}`, async () => { + const input = ((await load()) as any).default as string + const ast = await parseAstAsync(input) + const result = transformCjsToEsm(input, ast, { id: '/test.js' }) + const outputs = [{ name: 'cjs-to-esm', output: result.output }] + await expect( + formatSourceMapMarkdownFixture(input, outputs), + ).toMatchFileSnapshot(file + '.snap.md') + await expect(formatDecodedSourceMapMarkdown(outputs)).toMatchFileSnapshot( + file + '.map.snap.md', + ) + }) + } + const wrapExportFixtures = import.meta.glob( ['./fixtures/source-map/wrap-export/**/*.js', '!**/*.snap.*'], { query: 'raw' }, @@ -30,6 +51,10 @@ describe('source map fixtures', () => { generate: ({ binding, exportName }) => `registerServerReference(${binding}, ${JSON.stringify(exportName)})`, }) + const proxyResult = transformProxyExport(ast, { + code: input, + runtime: (name) => `createServerReference(${JSON.stringify(name)})`, + }) const outputs = [ { name: 'wrap-export', @@ -41,6 +66,11 @@ describe('source map fixtures', () => { output: effectResult.output, references: effectResult.referenceNames, }, + { + name: 'proxy-export', + output: proxyResult.output, + references: proxyResult.exportNames, + }, ] await expect( formatSourceMapMarkdownFixture(input, outputs), @@ -51,6 +81,57 @@ describe('source map fixtures', () => { }) } + const proxyExportFixtures = import.meta.glob( + ['./fixtures/source-map/proxy-export/**/*.js', '!**/*.snap.*'], + { query: 'raw' }, + ) + const proxyExportFixtureVariants: Record< + string, + { + name: string + keep?: boolean + ignoreExportAllDeclaration?: boolean + }[] + > = { + './fixtures/source-map/proxy-export/export-all-ignore.js': [ + { name: 'proxy-export', ignoreExportAllDeclaration: true }, + ], + './fixtures/source-map/proxy-export/keep.js': [ + { name: 'proxy-export' }, + { name: 'proxy-export-keep', keep: true }, + ], + } + for (const [file, load] of Object.entries(proxyExportFixtures)) { + test(`proxy-export/${path.basename(file)}`, async () => { + const input = ((await load()) as any).default as string + const ast = await parseAstAsync(input) + const variants = proxyExportFixtureVariants[file] ?? [ + { name: 'proxy-export' }, + ] + const outputs = variants.map(({ name, ...options }) => { + const result = transformProxyExport(ast, { + code: input, + ...options, + runtime: (name, meta) => + meta?.value + ? `createServerReference(${meta.value}, ${JSON.stringify(name)})` + : `createServerReference(${JSON.stringify(name)})`, + }) + return { + name, + output: result.output, + references: result.exportNames, + } + }) + await expect( + formatSourceMapMarkdownFixture(input, outputs), + ).toMatchFileSnapshot(file + '.snap.md') + await expect(formatDecodedSourceMapMarkdown(outputs)).toMatchFileSnapshot( + file + '.map.snap.md', + ) + }) + } + const hoistFixtures = import.meta.glob( ['./fixtures/source-map/hoist/**/*.js', '!**/*.snap.*'], { query: 'raw' }, diff --git a/packages/plugin-rsc/src/transforms/test-utils.ts b/packages/plugin-rsc/src/transforms/test-utils.ts index 78783fbd8..c9288b7aa 100644 --- a/packages/plugin-rsc/src/transforms/test-utils.ts +++ b/packages/plugin-rsc/src/transforms/test-utils.ts @@ -6,6 +6,39 @@ type SourceMapFixtureOutput = { references?: readonly string[] } +type TransformFixtureOutput = { + name: string + output?: MagicString + references?: readonly string[] +} + +export function formatTransformMarkdownFixture( + input: string, + outputs: readonly TransformFixtureOutput[], +): string { + const sections = [] + sections.push(`\ +## Input + +${formatCodeBlock('js', input)}`) + for (const { name, output, references } of outputs) { + const status = output + ? output.hasChanged() + ? 'transformed' + : 'unchanged' + : 'skipped' + sections.push(`\ +## ${name} + +**Status:** ${status} + +**References:** ${references?.join(', ') || '(none)'} + +${formatCodeBlock('js', output?.toString() ?? input)}`) + } + return sections.join('\n\n') + '\n' +} + export function formatSourceMapMarkdownFixture( input: string, outputs: readonly SourceMapFixtureOutput[], diff --git a/packages/plugin-rsc/src/transforms/waku.test.ts b/packages/plugin-rsc/src/transforms/waku.test.ts index 37e30e410..44b199067 100644 --- a/packages/plugin-rsc/src/transforms/waku.test.ts +++ b/packages/plugin-rsc/src/transforms/waku.test.ts @@ -1,543 +1,93 @@ +import path from 'node:path' import { parseAstAsync } from 'vite' -import { describe, expect, test } from 'vitest' +import { expect, test } from 'vitest' import { transformDirectiveProxyExport } from './proxy-export' import { transformServerActionServer } from './server-action' +import { formatTransformMarkdownFixture } from './test-utils' -// copied from +// Fixtures copied from // https://github.com/wakujs/waku/blob/55cc5fb3c74b1cd9fa5dac5b20b8626c4d5043ff/packages/waku/tests/vite-plugin-rsc-transform-internals.test.ts -async function testDirectiveTransform(input: string, directive: string) { - const ast = await parseAstAsync(input) - const result = transformDirectiveProxyExport(ast, { - directive, - code: input, - runtime: (name) => - `$runtime(${JSON.stringify('#' + name)}, ${JSON.stringify(name)})`, - keep: directive === 'use client', - }) - - if (!result || !result.output.hasChanged()) { - return - } - - return result.output.toString() -} - -describe('internal transform function for server environment', () => { - async function testTransform(input: string) { +const serverActionFixtures = import.meta.glob( + ['./fixtures/waku/server-action/**/*.js', '!**/*.snap.*'], + { query: 'raw' }, +) +for (const [file, load] of Object.entries(serverActionFixtures)) { + test(`server action/${path.basename(file)}`, async () => { + const input = ((await load()) as any).default as string const ast = await parseAstAsync(input) const result = transformServerActionServer(input, ast, { runtime: (value, name) => `$runtime(${value}, "", ${JSON.stringify(name)})`, }) - - if (!('output' in result) || !result.output.hasChanged()) { - return - } - - return result.output.toString() - } - - test('no transformation', async () => { - const input = ` -export default function App() { - return "Hello World"; -} -` - expect(await testTransform(input)).toBeUndefined() - }) - - test('top-level use client', async () => { - const input = ` -'use client'; - -import { Component, createContext, useContext, memo } from 'react'; -import { atom } from 'jotai/vanilla'; -import { unstable_allowServer as allowServer } from 'waku/client'; - -const initialCount = 1; -const TWO = 2; -function double (x) { - return x * TWO; -} -export const countAtom = allowServer(atom(double(initialCount))); - -export const Empty = () => null; - -function Private() { - return "Secret"; -} -const SecretComponent = () => "Secret"; -const SecretFunction = (n) => 'Secret' + n; - -export function Greet({ name }) { - return "Hello " + name; -} - -export class MyComponent extends Component { - render() { - return "Class Component"; - } -} - -const MyContext = createContext(); - -export const useMyContext = () => useContext(MyContext); - -const MyProvider = memo(MyContext); - -export const NAME = 'World'; - -export default function App() { - return "Hello World"; -} -` - expect(await testDirectiveTransform(input, 'use client')) - .toMatchInlineSnapshot(` - " - 'use client'; - - import { Component, createContext, useContext, memo } from 'react'; - import { atom } from 'jotai/vanilla'; - import { unstable_allowServer as allowServer } from 'waku/client'; - - const initialCount = 1; - const TWO = 2; - function double (x) { - return x * TWO; - } - export const countAtom = /* #__PURE__ */ $runtime("#countAtom", "countAtom"); - - export const Empty = /* #__PURE__ */ $runtime("#Empty", "Empty"); - - function Private() { - return "Secret"; - } - const SecretComponent = () => "Secret"; - const SecretFunction = (n) => 'Secret' + n; - - export const Greet = /* #__PURE__ */ $runtime("#Greet", "Greet"); - - - export const MyComponent = /* #__PURE__ */ $runtime("#MyComponent", "MyComponent"); - - - const MyContext = createContext(); - - export const useMyContext = /* #__PURE__ */ $runtime("#useMyContext", "useMyContext"); - - const MyProvider = memo(MyContext); - - export const NAME = /* #__PURE__ */ $runtime("#NAME", "NAME"); - - export default /* #__PURE__ */ $runtime("#default", "default"); - - " - `) - }) - - test('top-level use server', async () => { - const input = ` -'use server'; - -const privateFunction = () => 'Secret'; - -export const log = async (mesg) => { - console.log(mesg); -}; - -export async function greet(name) { - return 'Hello ' + name; -} - -export default async function() { - return Date.now(); -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - 'use server'; - - const privateFunction = () => 'Secret'; - - const log = async (mesg) => { - console.log(mesg); - }; - - async function greet(name) { - return 'Hello ' + name; - } - - const $$effect_default = async function() { - return Date.now(); - } - - $runtime(log, "", "log"); - export { log }; - - $runtime(greet, "", "greet"); - export { greet }; - - $runtime($$effect_default, "", "default"); - export default $$effect_default; - " - `) - }) - - test('server action in object', async () => { - const input = ` -const AI = { - actions: { - foo: async () => { - 'use server'; - return 0; - }, - }, -}; - -export function ServerProvider() { - return AI; -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - const AI = { - actions: { - foo: /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"), + await parseAstAsync(result.output.toString()) + await expect( + formatTransformMarkdownFixture(input, [ + { + name: 'server action', + output: result.output, + references: result.referenceNames, }, - }; - - export function ServerProvider() { - return AI; - } - - ;export async function $$hoist_0_anonymous_server_function() { - 'use server'; - return 0; - }; - /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); - " - `) + ]), + ).toMatchFileSnapshot(file + '.snap.md') }) - - test('top-level use server and inline use server', async () => { - const input = ` -'use server'; - -async function innerAction(action, ...args) { - 'use server'; - return await action(...args); -} - -function wrapAction(action) { - return innerAction.bind(null, action); } -export async function exportedAction() { - 'use server'; - return null; -} - -export default async () => null; -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - 'use server'; - - async function innerAction(action, ...args) { - 'use server'; - return await action(...args); - } - - function wrapAction(action) { - return innerAction.bind(null, action); - } - - async function exportedAction() { - 'use server'; - return null; - } - - const $$effect_default = async () => null; - - $runtime(exportedAction, "", "exportedAction"); - export { exportedAction }; - - $runtime($$effect_default, "", "default"); - export default $$effect_default; - " - `) - }) - - test('inline use server (function declaration)', async () => { - const input = ` -export default function App() { - const a = 'test'; - async function log(mesg) { - 'use server'; - console.log(mesg, a); - } - return log; -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - export default function App() { - const a = 'test'; - const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log").bind(null, a); - return log; - } - - ;export async function $$hoist_0_log(a, mesg) { - 'use server'; - console.log(mesg, a); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); - " - `) - }) - - test('inline use server (const function expression)', async () => { - const input = ` -export default function App() { - const rand = Math.random(); - const log = async function (mesg) { - 'use server'; - console.log(mesg, rand); - }; - return log; -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - export default function App() { - const rand = Math.random(); - const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log").bind(null, rand); - return log; - } - - ;export async function $$hoist_0_log(rand, mesg) { - 'use server'; - console.log(mesg, rand); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); - " - `) - }) - - test('inline use server (const arrow function)', async () => { - const input = ` -const now = Date.now(); -export default function App() { - const log = async (mesg) => { - 'use server'; - console.log(mesg, now); - }; - return log; -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - const now = Date.now(); - export default function App() { - const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log"); - return log; - } - - ;export async function $$hoist_0_log(mesg) { - 'use server'; - console.log(mesg, now); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); - " - `) - }) - - test('inline use server (anonymous arrow function)', async () => { - const input = ` -const now = Date.now(); -export default function App() { - return (mesg) => { - 'use server'; - console.log(mesg, now); - }; -} -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - const now = Date.now(); - export default function App() { - return /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"); - } - - ;export function $$hoist_0_anonymous_server_function(mesg) { - 'use server'; - console.log(mesg, now); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); - " - `) - }) - - test('inline use server (various patterns)', async () => { - const input = ` -const actions = { - log: async (mesg) => { - 'use server'; - console.log(mesg); - }, -}; - -async function log2 (mesg) { - 'use server'; - console.log(mesg); -} - -const log3 = async function(mesg) { - 'use server'; - console.log(mesg); -} - -const log4 = async (mesg) => { - 'use server'; - console.log(mesg); -}; - -const defaultFn = async function(mesg) { - 'use server'; - console.log(mesg); -} - -export default defaultFn; -` - expect(await testTransform(input)).toMatchInlineSnapshot(` - " - const actions = { - log: /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"), - }; - - const log2 = /* #__PURE__ */ $runtime($$hoist_1_log2, "", "$$hoist_1_log2"); - - const log3 = /* #__PURE__ */ $runtime($$hoist_2_log3, "", "$$hoist_2_log3") - - const log4 = /* #__PURE__ */ $runtime($$hoist_3_log4, "", "$$hoist_3_log4"); - - const defaultFn = /* #__PURE__ */ $runtime($$hoist_4_defaultFn, "", "$$hoist_4_defaultFn") - - export default defaultFn; - - ;export async function $$hoist_0_anonymous_server_function(mesg) { - 'use server'; - console.log(mesg); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); - - ;export async function $$hoist_1_log2(mesg) { - 'use server'; - console.log(mesg); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_1_log2, "name", { value: "log2" }); - - ;export async function $$hoist_2_log3(mesg) { - 'use server'; - console.log(mesg); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_2_log3, "name", { value: "log3" }); - - ;export async function $$hoist_3_log4(mesg) { - 'use server'; - console.log(mesg); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_3_log4, "name", { value: "log4" }); - - ;export async function $$hoist_4_defaultFn(mesg) { - 'use server'; - console.log(mesg); - }; - /* #__PURE__ */ Object.defineProperty($$hoist_4_defaultFn, "name", { value: "defaultFn" }); - " - `) - }) -}) - -describe('internal transform function for client environment', () => { - test('no transformation', async () => { - const input = ` -export const log = (mesg) => { - console.log(mesg); -}; -` - expect(await testDirectiveTransform(input, 'use server')).toBeUndefined() +const serverClientProxyFixtures = import.meta.glob( + ['./fixtures/waku/server-client-proxy/**/*.js', '!**/*.snap.*'], + { query: 'raw' }, +) +for (const [file, load] of Object.entries(serverClientProxyFixtures)) { + test(`server client proxy/${path.basename(file)}`, async () => { + const input = ((await load()) as any).default as string + const ast = await parseAstAsync(input) + const result = transformDirectiveProxyExport(ast, { + directive: 'use client', + code: input, + runtime: (name) => + `$runtime(${JSON.stringify('#' + name)}, ${JSON.stringify(name)})`, + keep: true, + }) + if (result) { + await parseAstAsync(result.output.toString()) + } + await expect( + formatTransformMarkdownFixture(input, [ + { + name: 'server client proxy', + output: result?.output, + references: result?.exportNames, + }, + ]), + ).toMatchFileSnapshot(file + '.snap.md') }) - - test('top-level use server', async () => { - const input = ` -'use server'; - -const privateFunction = () => 'Secret'; - -export const log1 = async function(mesg) { - console.log(mesg); } -export const log2 = async (mesg) => { - console.log(mesg); -}; - -export async function log3(mesg) { - console.log(mesg); -} - -export default async function log4(mesg) { - console.log(mesg); -} -` - expect(await testDirectiveTransform(input, 'use server')) - .toMatchInlineSnapshot(` - " - - - - - export const log1 = /* #__PURE__ */ $runtime("#log1", "log1"); - - - export const log2 = /* #__PURE__ */ $runtime("#log2", "log2"); - - - export const log3 = /* #__PURE__ */ $runtime("#log3", "log3"); - - - export default /* #__PURE__ */ $runtime("#default", "default"); - - " - `) +const clientServerProxyFixtures = import.meta.glob( + ['./fixtures/waku/client-server-proxy/**/*.js', '!**/*.snap.*'], + { query: 'raw' }, +) +for (const [file, load] of Object.entries(clientServerProxyFixtures)) { + test(`client server proxy/${path.basename(file)}`, async () => { + const input = ((await load()) as any).default as string + const ast = await parseAstAsync(input) + const result = transformDirectiveProxyExport(ast, { + directive: 'use server', + code: input, + runtime: (name) => + `$runtime(${JSON.stringify('#' + name)}, ${JSON.stringify(name)})`, + }) + if (result) { + await parseAstAsync(result.output.toString()) + } + await expect( + formatTransformMarkdownFixture(input, [ + { + name: 'client server proxy', + output: result?.output, + references: result?.exportNames, + }, + ]), + ).toMatchFileSnapshot(file + '.snap.md') }) - - test('top-level use server for SSR', async () => { - const input = ` -'use server'; - -import { getEnv } from 'waku'; - -const privateFunction = () => getEnv('SECRET'); - -export async function log(mesg) { - console.log(mesg); } -` - expect(await testDirectiveTransform(input, 'use server')) - .toMatchInlineSnapshot(` - " - - - - - - - export const log = /* #__PURE__ */ $runtime("#log", "log"); - - " - `) - }) -})