From 44120037c746188c34c27a9c8fb5508a65fe547e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:57:50 +0900 Subject: [PATCH 01/52] feat(rsc): add module export transform Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/index.ts | 1 + .../src/transforms/module-export.test.ts | 144 +++++++ .../src/transforms/module-export.ts | 377 ++++++++++++++++++ 3 files changed, 522 insertions(+) create mode 100644 packages/plugin-rsc/src/transforms/module-export.test.ts create mode 100644 packages/plugin-rsc/src/transforms/module-export.ts diff --git a/packages/plugin-rsc/src/transforms/index.ts b/packages/plugin-rsc/src/transforms/index.ts index b37480dae..1f1520681 100644 --- a/packages/plugin-rsc/src/transforms/index.ts +++ b/packages/plugin-rsc/src/transforms/index.ts @@ -1,4 +1,5 @@ export * from './hoist' +export * from './module-export' export * from './wrap-export' export * from './proxy-export' export * from './utils' diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts new file mode 100644 index 000000000..0ac507881 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -0,0 +1,144 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, test } from 'vitest' +import { + transformModuleExport, + type TransformModuleExportOptions, +} from './module-export' + +async function transform( + input: string, + options: Omit = {}, +) { + const ast = await parseAstAsync(input) + return transformModuleExport(input, ast, { + ...options, + generate: ({ implementation, binding, exportName }) => + `const ${binding} = wrap(${implementation}, ${JSON.stringify(exportName)});\n` + + `export { ${binding} as ${exportName} };`, + }) +} + +describe(transformModuleExport, () => { + test('extracts direct and default declarations', async () => { + const result = await transform(` +export async function action() {} +export const loader = async () => {}, value = 1 +export default async function Page() {} +`) + + expect(result.referenceNames).toEqual([ + 'action', + 'loader', + 'value', + 'default', + ]) + expect(result.output.toString()).toMatchInlineSnapshot(` + " + async function action$$impl() {} + const action = wrap(action$$impl, \"action\"); + export { action as action }; + + const loader$$impl = async () => {}, value$$impl = 1 + const loader = wrap(loader$$impl, \"loader\"); + export { loader as loader }; + const value = wrap(value$$impl, \"value\"); + export { value as value }; + + async function Page$$impl() {} + const Page = wrap(Page$$impl, \"default\"); + export { Page as default }; + + " + `) + }) + + test('handles aliases, re-exports, filtering, and name collisions', async () => { + const result = await transform( + ` +const value = async () => {} +const exposed = 0 +export { value as action, exposed as skipped } +export { remote as action2 } from './dep' +export * from './other' +`, + { + exportAll: 'preserve', + filter: (name) => name !== 'skipped', + }, + ) + + expect(result.referenceNames).toEqual(['action', 'action2']) + expect(result.output.toString()).toMatchInlineSnapshot(` + " + const value = async () => {} + const exposed = 0 + + const $$module_action = wrap(value, "action"); + export { $$module_action as action }; + export { exposed as skipped }; + + + import { remote as $$import_remote } from './dep'; + const $$module_action2 = wrap($$import_remote, "action2"); + export { $$module_action2 as action2 }; + + export * from './other' + " + `) + }) + + test('reports metadata and preserves filtered declarations', async () => { + const contexts: unknown[] = [] + const input = `export const Page = () => {}, value = 1; export default Page;` + const ast = await parseAstAsync(input) + const result = transformModuleExport(input, ast, { + filter: (_name, meta) => meta.isFunction !== false, + exportAll: 'preserve', + generate: (context) => { + contexts.push(context) + return `const ${context.binding} = wrap(${context.implementation}); export { ${context.binding} as ${context.exportName} };` + }, + }) + + expect(contexts).toEqual([ + { + implementation: 'Page$$impl', + binding: 'Page', + exportName: 'Page', + meta: { + localName: 'Page', + declarationKind: 'const', + isFunction: true, + }, + }, + { + implementation: 'Page', + binding: '$$default', + exportName: 'default', + meta: { + defaultExportIdentifierName: 'Page', + isFunction: undefined, + }, + }, + ]) + expect(result.output.toString()).toContain('value = 1;') + expect(result.output.toString()).toContain('export { value };') + }) + + test('validates selected exports and export-all policy', async () => { + await expect( + transform(`export function action() {}`, { + rejectNonAsyncFunction: true, + }), + ).rejects.toThrow('unsupported non async function') + await expect(transform(`export * from './dep'`)).rejects.toThrow( + 'unsupported ExportAllDeclaration', + ) + await expect(transform(`export const { action } = value`)).rejects.toThrow( + 'unsupported destructured export declaration', + ) + await expect( + transform(`export var action = async () => {}; var action;`), + ).rejects.toThrow('unsupported duplicate export binding') + }) +}) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts new file mode 100644 index 000000000..fc70ff5d7 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -0,0 +1,377 @@ +import { tinyassert } from '@hiogawa/utils' +import type { + ExportDefaultDeclaration, + Identifier, + Node, + Program, + VariableDeclaration, +} from 'estree' +import MagicString from 'magic-string' +import type { ESTree } from 'vite' +import { buildScopeTree } from './scope' +import { extractIdentifiers, validateNonAsyncFunction } from './utils' + +export type ModuleExportMeta = { + localName?: string + declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] + isFunction?: boolean + defaultExportIdentifierName?: string +} + +export type ModuleExportGenerateContext = { + implementation: string + binding: string + exportName: string + meta: ModuleExportMeta +} + +export type TransformModuleExportOptions = { + generate: (context: ModuleExportGenerateContext) => string + filter?: (name: string, meta: ModuleExportMeta) => boolean + rejectNonAsyncFunction?: boolean + exportAll?: 'error' | 'preserve' +} + +export function transformModuleExport( + input: string, + viteAst: ESTree.Program, + options: TransformModuleExportOptions, +): { + output: MagicString + referenceNames: string[] +} { + const ast = viteAst as unknown as Program + const output = new MagicString(input) + const referenceNames: string[] = [] + const emissions = new Map() + const filter = options.filter ?? (() => true) + const usedNames = new Set(buildScopeTree(ast).moduleScope.declarations) + const declarationCounts = getModuleDeclarationCounts(ast) + + function allocateName(base: string): string { + let name = base + for (let i = 2; usedNames.has(name); i++) { + name = `${base}_${i}` + } + usedNames.add(name) + return name + } + + function extractDeclaration( + identifier: Identifier, + exportName: string, + meta: ModuleExportMeta, + position: number, + ): void { + const localName = identifier.name + if (declarationCounts.get(localName) !== 1) { + throw Object.assign(new Error('unsupported duplicate export binding'), { + pos: identifier.start, + }) + } + const implementation = allocateName(`${localName}$$impl`) + output.update(identifier.start, identifier.end, implementation) + + // The source name is available for the generated canonical binding after + // its declaration is renamed to the private implementation. + usedNames.delete(localName) + const binding = allocateName(localName) + generate({ implementation, binding, exportName, meta }, position) + } + + function emit(position: number, code: string): void { + const codes = emissions.get(position) ?? [] + codes.push(code) + emissions.set(position, codes) + } + + function generate( + context: ModuleExportGenerateContext, + position: number, + ): void { + referenceNames.push(context.exportName) + emit(position, options.generate(context)) + } + + function preserveExport( + localName: string, + exportName: string, + position: number, + ): void { + emit( + position, + localName === exportName + ? `export { ${localName} };` + : `export { ${localName} as ${exportName} };`, + ) + } + + for (const node of ast.body) { + if (node.type === 'ExportNamedDeclaration') { + if (node.declaration) { + if ( + node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration' + ) { + tinyassert(node.declaration.id) + const identifier = node.declaration.id + const meta: ModuleExportMeta = { + localName: identifier.name, + declarationKind: + node.declaration.type === 'FunctionDeclaration' + ? 'function' + : 'class', + isFunction: getIsFunction(node.declaration), + } + if (!filter(identifier.name, meta)) continue + + validateNonAsyncFunction(options, node.declaration) + output.remove(node.start, node.declaration.start) + extractDeclaration(identifier, identifier.name, meta, node.end) + } else if (node.declaration.type === 'VariableDeclaration') { + const variableDeclaration = node.declaration + const selected: Array<{ + identifier: Identifier + meta: ModuleExportMeta + }> = [] + const preserved: string[] = [] + + for (const declaration of node.declaration.declarations) { + const identifiers = extractIdentifiers(declaration.id) + if ( + declaration.id.type !== 'Identifier' && + identifiers.some((identifier) => + filter(identifier.name, { + localName: identifier.name, + declarationKind: variableDeclaration.kind, + }), + ) + ) { + throw Object.assign( + new Error('unsupported destructured export declaration'), + { pos: declaration.id.start }, + ) + } + const isFunction = + declaration.id.type === 'Identifier' && declaration.init + ? getIsFunction(declaration.init) + : undefined + let validate = false + for (const identifier of identifiers) { + const meta: ModuleExportMeta = { + localName: identifier.name, + declarationKind: variableDeclaration.kind, + isFunction, + } + if (filter(identifier.name, meta)) { + selected.push({ identifier, meta }) + validate = true + } else { + preserved.push(identifier.name) + } + } + if (validate && declaration.init) { + validateNonAsyncFunction(options, declaration.init) + } + } + + if (selected.length === 0) continue + output.remove(node.start, variableDeclaration.start) + for (const { identifier, meta } of selected) { + extractDeclaration(identifier, identifier.name, meta, node.end) + } + for (const name of preserved) preserveExport(name, name, node.end) + } else { + node.declaration satisfies never + } + } else if (node.specifiers.length > 0) { + const selected = node.specifiers.map((specifier) => { + tinyassert(specifier.local.type === 'Identifier') + if (specifier.exported.type !== 'Identifier') { + throw Object.assign( + new Error('unsupported string literal export name'), + { pos: specifier.exported.start }, + ) + } + const meta: ModuleExportMeta = {} + return { + localName: specifier.local.name, + exportName: specifier.exported.name, + meta, + selected: filter(specifier.exported.name, meta), + } + }) + if (!selected.some((item) => item.selected)) continue + + output.remove(node.start, node.end) + const sourceTail = node.source + ? input.slice(node.source.end, node.end).replace(/;?\s*$/, ';') + : undefined + for (const item of selected) { + if (!item.selected) { + if (node.source) { + emit( + node.end, + `export { ${item.localName} as ${item.exportName} } from ${node.source.raw}${sourceTail}`, + ) + } else { + preserveExport(item.localName, item.exportName, node.end) + } + continue + } + + let implementation = item.localName + if (node.source) { + implementation = allocateName(`$$import_${item.localName}`) + emit( + node.end, + `import { ${item.localName} as ${implementation} } from ${node.source.raw}${sourceTail}`, + ) + } + const binding = allocateName(`$$module_${item.exportName}`) + generate( + { + implementation, + binding, + exportName: item.exportName, + meta: item.meta, + }, + node.end, + ) + } + } + } else if (node.type === 'ExportAllDeclaration') { + if (options.exportAll !== 'preserve') { + throw Object.assign(new Error('unsupported ExportAllDeclaration'), { + pos: node.start, + }) + } + } else if (node.type === 'ExportDefaultDeclaration') { + let implementation: string + let bindingBase = '$$default' + let meta: ModuleExportMeta + + if ( + (node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration') && + node.declaration.id + ) { + const identifier = node.declaration.id + meta = { + localName: identifier.name, + declarationKind: + node.declaration.type === 'FunctionDeclaration' + ? 'function' + : 'class', + isFunction: getIsFunction(node.declaration), + } + if (!filter('default', meta)) continue + + validateNonAsyncFunction(options, node.declaration) + output.remove(node.start, node.declaration.start) + if (declarationCounts.get(identifier.name) !== 1) { + throw Object.assign( + new Error('unsupported duplicate export binding'), + { + pos: identifier.start, + }, + ) + } + implementation = allocateName(`${identifier.name}$$impl`) + output.update(identifier.start, identifier.end, implementation) + usedNames.delete(identifier.name) + bindingBase = identifier.name + } else { + meta = { + defaultExportIdentifierName: + node.declaration.type === 'Identifier' + ? node.declaration.name + : undefined, + isFunction: getIsFunction(node.declaration), + } + if (!filter('default', meta)) continue + + validateNonAsyncFunction(options, node.declaration) + if (node.declaration.type === 'Identifier') { + implementation = node.declaration.name + output.remove(node.start, node.end) + } else { + implementation = allocateName('$$default$$impl') + output.update( + node.start, + node.declaration.start, + `const ${implementation} = `, + ) + } + } + + const binding = allocateName(bindingBase) + generate( + { implementation, binding, exportName: 'default', meta }, + node.end, + ) + } + } + + for (const [position, codes] of emissions) { + output.appendLeft(position, `\n${codes.join('\n')}\n`) + } + + return { output, referenceNames } +} + +function getModuleDeclarationCounts(ast: Program): Map { + const counts = new Map() + const add = (name: string) => counts.set(name, (counts.get(name) ?? 0) + 1) + + for (const statement of ast.body) { + if (statement.type === 'ImportDeclaration') { + for (const specifier of statement.specifiers) add(specifier.local.name) + continue + } + + const declaration = + statement.type === 'ExportNamedDeclaration' || + statement.type === 'ExportDefaultDeclaration' + ? statement.declaration + : statement + if (!declaration) continue + + if (declaration.type === 'VariableDeclaration') { + for (const declarator of declaration.declarations) { + for (const identifier of extractIdentifiers(declarator.id)) { + add(identifier.name) + } + } + } else if ( + (declaration.type === 'FunctionDeclaration' || + declaration.type === 'ClassDeclaration') && + declaration.id + ) { + add(declaration.id.name) + } + } + + return counts +} + +function getIsFunction( + node: Node | ExportDefaultDeclaration['declaration'], +): boolean | undefined { + if ( + node.type === 'FunctionDeclaration' || + node.type === 'ArrowFunctionExpression' || + node.type === 'FunctionExpression' + ) { + return true + } + if ( + node.type === 'ClassDeclaration' || + node.type === 'Literal' || + node.type === 'ObjectExpression' || + node.type === 'ArrayExpression' || + node.type === 'ClassExpression' + ) { + return false + } +} From e18a148cd0caf12327019e6bdaa7134b46157f50 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:06:54 +0900 Subject: [PATCH 02/52] refactor(rsc): migrate module export transforms Co-authored-by: OpenCode --- .../custom-server-function-plugin.ts | 15 ++- .../callable-cache-plugin.ts | 15 ++- packages/plugin-rsc/src/plugin.ts | 28 +++--- .../src/transforms/module-export.test.ts | 29 +++--- .../src/transforms/module-export.ts | 92 +++++++++++++++++-- .../src/transforms/server-action.test.ts | 3 + .../src/transforms/server-action.ts | 16 +++- .../plugin-rsc/src/transforms/waku.test.ts | 34 +++---- .../plugin-rsc/src/transforms/wrap-export.ts | 1 + 9 files changed, 172 insertions(+), 61 deletions(-) diff --git a/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts b/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts index 03a9510f6..8e8b5d4ee 100644 --- a/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts +++ b/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts @@ -3,7 +3,7 @@ import { hasDirective, transformDirectiveProxyExport, transformHoistInlineDirective, - transformWrapExport, + transformModuleExport, } from '@vitejs/plugin-rsc/transforms' import { parseAstAsync, type Plugin } from 'vite' @@ -37,9 +37,16 @@ export function customServerFunctionPlugin(): Plugin { const runtime = (value: string, name: string) => `$$CustomReactServer.registerServerReference(${value}, ${JSON.stringify(reference.referenceKey)}, ${JSON.stringify(name)})` const result = hasDirective(ast.body, directive) - ? transformWrapExport(code, ast, { - runtime, + ? transformModuleExport(code, ast, { rejectNonAsyncFunction: true, + generate: ({ implementation, binding, exportName }) => { + const declaration = + `const ${binding} = /* #__PURE__ */ ` + + `${runtime(implementation, exportName)};` + return binding === exportName + ? `export ${declaration}` + : `${declaration}\nexport { ${binding} as ${exportName} };` + }, }) : transformHoistInlineDirective(code, ast, { directive, @@ -53,7 +60,7 @@ export function customServerFunctionPlugin(): Plugin { manager.serverReferences.replaceClaim(pluginName, id, { ...reference, - exportNames: 'names' in result ? result.names : result.exportNames, + exportNames: 'names' in result ? result.names : result.referenceNames, }) result.output.prepend( `import * as $$CustomReactServer from "@vitejs/plugin-rsc/react/rsc/server";\n`, diff --git a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts index f84717491..e249d80cd 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts +++ b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts @@ -3,7 +3,7 @@ import { hasDirective, transformDirectiveProxyExport, transformHoistInlineDirective, - transformWrapExport, + transformModuleExport, } from '@vitejs/plugin-rsc/transforms' import { parseAstAsync, type Plugin } from 'vite' @@ -35,9 +35,16 @@ export function callableCachePlugin(): Plugin { `${JSON.stringify(reference.referenceKey)},` + `${JSON.stringify(name)})` const result = hasDirective(ast.body, directive) - ? transformWrapExport(code, ast, { - runtime, + ? transformModuleExport(code, ast, { rejectNonAsyncFunction: true, + generate: ({ implementation, binding, exportName }) => { + const declaration = + `const ${binding} = /* #__PURE__ */ ` + + `${runtime(implementation, exportName)};` + return binding === exportName + ? `export ${declaration}` + : `${declaration}\nexport { ${binding} as ${exportName} };` + }, }) : transformHoistInlineDirective(code, ast, { directive, @@ -52,7 +59,7 @@ export function callableCachePlugin(): Plugin { manager.serverReferences.replaceClaim(pluginName, id, { ...reference, - exportNames: 'names' in result ? result.names : result.exportNames, + exportNames: 'names' in result ? result.names : result.referenceNames, }) result.output.prepend( `import $$cacheWrapper from "/src/framework/use-cache-runtime";\n` + diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 965e7eaaf..89202dc2c 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -70,12 +70,12 @@ import { slash, } from './plugins/vite-utils' import { - type TransformWrapExportFilter, + type ModuleExportMeta, hasDirective, transformDirectiveProxyExport, transformExpandExportAll, + transformModuleExport, transformServerActionServer, - transformWrapExport, findDirectives, type TransformExpandExportAllContext, } from './transforms' @@ -2430,7 +2430,7 @@ function vitePluginRscCss( }: { id: string code: string - }): false | TransformWrapExportFilter { + }): false | ((name: string, meta: ModuleExportMeta) => boolean) { const { filename, query } = parseIdQuery(id) if ('vite-rsc-css-export' in query) { const value = query['vite-rsc-css-export'] @@ -2462,7 +2462,7 @@ function vitePluginRscCss( // export const Page = () => {} return (_name: string, meta) => !!( - (meta.isFunction && meta.declName && /^[A-Z]/.test(meta.declName)) || + (meta.isFunction && meta.localName && /^[A-Z]/.test(meta.localName)) || (meta.defaultExportIdentifierName && /^[A-Z]/.test(meta.defaultExportIdentifierName)) ) @@ -2764,19 +2764,25 @@ export async function transformRscCssExport(options: { ast: Awaited> code: string id?: string - filter: TransformWrapExportFilter + filter: (name: string, meta: ModuleExportMeta) => boolean }): Promise<{ output: MagicString } | undefined> { if (hasDirective(options.ast.body, 'use client')) { return } - const result = transformWrapExport(options.code, options.ast, { - runtime: (value, name, meta) => - `__vite_rsc_wrap_css__(${value}, ${JSON.stringify( - meta.defaultExportIdentifierName ?? name, - )})`, + const result = transformModuleExport(options.code, options.ast, { + generate: ({ implementation, binding, exportName, meta }) => { + const declaration = + `const ${binding} = /* #__PURE__ */ ` + + `__vite_rsc_wrap_css__(${implementation}, ${JSON.stringify( + meta.defaultExportIdentifierName ?? exportName, + )});` + return binding === exportName + ? `export ${declaration}` + : `${declaration}\nexport { ${binding} as ${exportName} };` + }, filter: options.filter, - ignoreExportAllDeclaration: true, + exportAll: 'preserve', }) if (result.output.hasChanged()) { if (!options.code.includes('__vite_rsc_react__')) { diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts index 0ac507881..cd0cca8f2 100644 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -22,7 +22,7 @@ describe(transformModuleExport, () => { test('extracts direct and default declarations', async () => { const result = await transform(` export async function action() {} -export const loader = async () => {}, value = 1 +export const loader = async () => {} /* comma, here */, value = loader export default async function Page() {} `) @@ -35,17 +35,18 @@ export default async function Page() {} expect(result.output.toString()).toMatchInlineSnapshot(` " async function action$$impl() {} - const action = wrap(action$$impl, \"action\"); + const action = wrap(action$$impl, "action"); export { action as action }; - const loader$$impl = async () => {}, value$$impl = 1 - const loader = wrap(loader$$impl, \"loader\"); + const loader$$impl = async () => {} /* comma, here */; + const loader = wrap(loader$$impl, "loader"); export { loader as loader }; - const value = wrap(value$$impl, \"value\"); + const value$$impl = loader + const value = wrap(value$$impl, "value"); export { value as value }; async function Page$$impl() {} - const Page = wrap(Page$$impl, \"default\"); + const Page = wrap(Page$$impl, "default"); export { Page as default }; " @@ -55,9 +56,9 @@ export default async function Page() {} test('handles aliases, re-exports, filtering, and name collisions', async () => { const result = await transform( ` +export { value as action, exposed as skipped } const value = async () => {} const exposed = 0 -export { value as action, exposed as skipped } export { remote as action2 } from './dep' export * from './other' `, @@ -70,19 +71,20 @@ export * from './other' expect(result.referenceNames).toEqual(['action', 'action2']) expect(result.output.toString()).toMatchInlineSnapshot(` " - const value = async () => {} - const exposed = 0 - const $$module_action = wrap(value, "action"); - export { $$module_action as action }; export { exposed as skipped }; + const value = async () => {} + const exposed = 0 import { remote as $$import_remote } from './dep'; const $$module_action2 = wrap($$import_remote, "action2"); export { $$module_action2 as action2 }; export * from './other' + + const $$module_action = wrap(value, "action"); + export { $$module_action as action }; " `) }) @@ -139,6 +141,9 @@ export * from './other' ) await expect( transform(`export var action = async () => {}; var action;`), - ).rejects.toThrow('unsupported duplicate export binding') + ).rejects.toThrow('unsupported mutable export declaration') + await expect( + transform(`export let action = async () => {}`), + ).rejects.toThrow('unsupported mutable export declaration') }) }) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts index fc70ff5d7..4e99e5eef 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -130,13 +130,16 @@ export function transformModuleExport( extractDeclaration(identifier, identifier.name, meta, node.end) } else if (node.declaration.type === 'VariableDeclaration') { const variableDeclaration = node.declaration - const selected: Array<{ - identifier: Identifier - meta: ModuleExportMeta + const declarations: Array<{ + node: (typeof variableDeclaration.declarations)[number] + selected: Array<{ + identifier: Identifier + meta: ModuleExportMeta + }> + preserved: string[] }> = [] - const preserved: string[] = [] - for (const declaration of node.declaration.declarations) { + for (const declaration of variableDeclaration.declarations) { const identifiers = extractIdentifiers(declaration.id) if ( declaration.id.type !== 'Identifier' && @@ -156,6 +159,8 @@ export function transformModuleExport( declaration.id.type === 'Identifier' && declaration.init ? getIsFunction(declaration.init) : undefined + const selected: (typeof declarations)[number]['selected'] = [] + const preserved: string[] = [] let validate = false for (const identifier of identifiers) { const meta: ModuleExportMeta = { @@ -173,14 +178,54 @@ export function transformModuleExport( if (validate && declaration.init) { validateNonAsyncFunction(options, declaration.init) } + declarations.push({ + node: declaration, + selected, + preserved, + }) + } + + if ( + !declarations.some((declaration) => declaration.selected.length) + ) { + continue + } + if (variableDeclaration.kind !== 'const') { + throw Object.assign( + new Error('unsupported mutable export declaration'), + { pos: variableDeclaration.start }, + ) } - if (selected.length === 0) continue output.remove(node.start, variableDeclaration.start) - for (const { identifier, meta } of selected) { - extractDeclaration(identifier, identifier.name, meta, node.end) + for (const [index, declaration] of declarations.entries()) { + const position = + index === declarations.length - 1 + ? node.end + : declaration.node.end + for (const { identifier, meta } of declaration.selected) { + extractDeclaration(identifier, identifier.name, meta, position) + } + for (const name of declaration.preserved) { + preserveExport(name, name, position) + } + } + for (let i = 1; i < declarations.length; i++) { + const previous = declarations[i - 1]!.node + const current = declarations[i]!.node + const separator = input.slice(previous.end, current.start) + const comma = findSeparatorComma(separator) + const prefix = separator.slice(0, comma) + const rest = separator.slice(comma + 1) + const codes = emissions.get(previous.end) + tinyassert(codes) + emissions.delete(previous.end) + output.update( + previous.end, + current.start, + `${prefix};\n${codes.join('\n')}\n${variableDeclaration.kind}${/^\s/.test(rest) ? '' : ' '}${rest}`, + ) } - for (const name of preserved) preserveExport(name, name, node.end) } else { node.declaration satisfies never } @@ -221,6 +266,7 @@ export function transformModuleExport( } let implementation = item.localName + const position = node.source ? node.end : input.length if (node.source) { implementation = allocateName(`$$import_${item.localName}`) emit( @@ -236,7 +282,7 @@ export function transformModuleExport( exportName: item.exportName, meta: item.meta, }, - node.end, + position, ) } } @@ -320,6 +366,32 @@ export function transformModuleExport( return { output, referenceNames } } +function findSeparatorComma(separator: string): number { + let inLineComment = false + let inBlockComment = false + for (let i = 0; i < separator.length; i++) { + const char = separator[i] + const next = separator[i + 1] + if (inLineComment) { + if (char === '\n' || char === '\r') inLineComment = false + } else if (inBlockComment) { + if (char === '*' && next === '/') { + inBlockComment = false + i++ + } + } else if (char === '/' && next === '/') { + inLineComment = true + i++ + } else if (char === '/' && next === '*') { + inBlockComment = true + i++ + } else if (char === ',') { + return i + } + } + throw new Error('missing variable declarator separator') +} + function getModuleDeclarationCounts(ast: Program): Map { const counts = new Map() const add = (name: string) => counts.set(name, (counts.get(name) ?? 0) + 1) diff --git a/packages/plugin-rsc/src/transforms/server-action.test.ts b/packages/plugin-rsc/src/transforms/server-action.test.ts index ff6b343cb..4b7270619 100644 --- a/packages/plugin-rsc/src/transforms/server-action.test.ts +++ b/packages/plugin-rsc/src/transforms/server-action.test.ts @@ -18,6 +18,9 @@ test('normalizes top-level server reference names', async () => { exportNames: ['action'], referenceNames: ['action'], }) + expect(result.output.toString()).toMatchInlineSnapshot( + `"'use server'; async function action$$impl() {}\nexport const action = /* #__PURE__ */ action$$impl;\n"`, + ) }) test('normalizes inline server reference names', async () => { diff --git a/packages/plugin-rsc/src/transforms/server-action.ts b/packages/plugin-rsc/src/transforms/server-action.ts index ed3efe606..ae6518fe6 100644 --- a/packages/plugin-rsc/src/transforms/server-action.ts +++ b/packages/plugin-rsc/src/transforms/server-action.ts @@ -1,8 +1,8 @@ import type MagicString from 'magic-string' import type { ESTree } from 'vite' import { transformHoistInlineDirective } from './hoist' +import { transformModuleExport } from './module-export' import { hasDirective } from './utils' -import { transformWrapExport } from './wrap-export' export function transformServerActionServer( input: string, @@ -26,8 +26,18 @@ export function transformServerActionServer( } { // TODO: unify (generalize transformHoistInlineDirective to support top-level directive cases) if (hasDirective(ast.body, 'use server')) { - const result = transformWrapExport(input, ast, options) - return { ...result, referenceNames: result.exportNames } + const result = transformModuleExport(input, ast, { + rejectNonAsyncFunction: options.rejectNonAsyncFunction, + generate: ({ implementation, binding, exportName }) => { + const declaration = + `const ${binding} = /* #__PURE__ */ ` + + `${options.runtime(implementation, exportName)};` + return binding === exportName + ? `export ${declaration}` + : `${declaration}\nexport { ${binding} as ${exportName} };` + }, + }) + return { ...result, exportNames: result.referenceNames } } const result = transformHoistInlineDirective(input, ast, { ...options, diff --git a/packages/plugin-rsc/src/transforms/waku.test.ts b/packages/plugin-rsc/src/transforms/waku.test.ts index a89d6bbda..4e9cd3e63 100644 --- a/packages/plugin-rsc/src/transforms/waku.test.ts +++ b/packages/plugin-rsc/src/transforms/waku.test.ts @@ -169,24 +169,24 @@ export default async function() { const privateFunction = () => 'Secret'; - let log = async (mesg) => { + const log$$impl = async (mesg) => { console.log(mesg); }; + export const log = /* #__PURE__ */ $runtime(log$$impl, "", "log"); - async function greet(name) { + + async function greet$$impl(name) { return 'Hello ' + name; } + export const greet = /* #__PURE__ */ $runtime(greet$$impl, "", "greet"); + - const $$default = async function() { + const $$default$$impl = async function() { return Date.now(); } - log = /* #__PURE__ */ $runtime(log, "", "log"); - export { log }; - greet = /* #__PURE__ */ $runtime(greet, "", "greet"); - export { greet }; - ; - const $$wrap_$$default = /* #__PURE__ */ $runtime($$default, "", "default"); - export { $$wrap_$$default as default }; + const $$default = /* #__PURE__ */ $runtime($$default$$impl, "", "default"); + export { $$default as default }; + " `) }) @@ -260,17 +260,17 @@ export default async () => null; return innerAction.bind(null, action); } - async function exportedAction() { + async function exportedAction$$impl() { 'use server'; return null; } + export const exportedAction = /* #__PURE__ */ $runtime(exportedAction$$impl, "", "exportedAction"); + + + const $$default$$impl = async () => null; + const $$default = /* #__PURE__ */ $runtime($$default$$impl, "", "default"); + export { $$default as default }; - const $$default = async () => null; - exportedAction = /* #__PURE__ */ $runtime(exportedAction, "", "exportedAction"); - export { exportedAction }; - ; - const $$wrap_$$default = /* #__PURE__ */ $runtime($$default, "", "default"); - export { $$wrap_$$default as default }; " `) }) diff --git a/packages/plugin-rsc/src/transforms/wrap-export.ts b/packages/plugin-rsc/src/transforms/wrap-export.ts index 07f0f1c30..bad3c9ed5 100644 --- a/packages/plugin-rsc/src/transforms/wrap-export.ts +++ b/packages/plugin-rsc/src/transforms/wrap-export.ts @@ -49,6 +49,7 @@ export type TransformWrapExportOptions = { filter?: TransformWrapExportFilter } +/** @deprecated Use `transformModuleExport` instead. */ export function transformWrapExport( input: string, viteAst: ESTree.Program, From 63603519bc0062ccdf3c784a28971368ffccba53 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:38:45 +0900 Subject: [PATCH 03/52] refactor(rsc): clarify module export transform types Co-authored-by: OpenCode --- packages/plugin-rsc/src/plugin.ts | 6 +- .../src/transforms/module-export.test.ts | 63 ++++++++++++------- .../src/transforms/module-export.ts | 39 +++++++----- 3 files changed, 65 insertions(+), 43 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 89202dc2c..beee21822 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -70,7 +70,7 @@ import { slash, } from './plugins/vite-utils' import { - type ModuleExportMeta, + type TransformModuleExportFilter, hasDirective, transformDirectiveProxyExport, transformExpandExportAll, @@ -2430,7 +2430,7 @@ function vitePluginRscCss( }: { id: string code: string - }): false | ((name: string, meta: ModuleExportMeta) => boolean) { + }): false | TransformModuleExportFilter { const { filename, query } = parseIdQuery(id) if ('vite-rsc-css-export' in query) { const value = query['vite-rsc-css-export'] @@ -2764,7 +2764,7 @@ export async function transformRscCssExport(options: { ast: Awaited> code: string id?: string - filter: (name: string, meta: ModuleExportMeta) => boolean + filter: TransformModuleExportFilter }): Promise<{ output: MagicString } | undefined> { if (hasDirective(options.ast.body, 'use client')) { return diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts index cd0cca8f2..9287919a6 100644 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -2,6 +2,7 @@ import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformModuleExport, + type TransformModuleExportGenerateContext, type TransformModuleExportOptions, } from './module-export' @@ -90,8 +91,9 @@ export * from './other' }) test('reports metadata and preserves filtered declarations', async () => { - const contexts: unknown[] = [] - const input = `export const Page = () => {}, value = 1; export default Page;` + const contexts: TransformModuleExportGenerateContext[] = [] + const input = `export const Page = () => {}, value = 1; +export default Page;` const ast = await parseAstAsync(input) const result = transformModuleExport(input, ast, { filter: (_name, meta) => meta.isFunction !== false, @@ -102,29 +104,42 @@ export * from './other' }, }) - expect(contexts).toEqual([ + expect({ + contexts, + output: result.output.toString(), + }).toMatchInlineSnapshot(` { - implementation: 'Page$$impl', - binding: 'Page', - exportName: 'Page', - meta: { - localName: 'Page', - declarationKind: 'const', - isFunction: true, - }, - }, - { - implementation: 'Page', - binding: '$$default', - exportName: 'default', - meta: { - defaultExportIdentifierName: 'Page', - isFunction: undefined, - }, - }, - ]) - expect(result.output.toString()).toContain('value = 1;') - expect(result.output.toString()).toContain('export { value };') + "contexts": [ + { + "binding": "Page", + "exportName": "Page", + "implementation": "Page$$impl", + "meta": { + "declarationKind": "const", + "isFunction": true, + "localName": "Page", + }, + }, + { + "binding": "$$default", + "exportName": "default", + "implementation": "Page", + "meta": { + "defaultExportIdentifierName": "Page", + "isFunction": undefined, + }, + }, + ], + "output": "const Page$$impl = () => {}; + const Page = wrap(Page$$impl); export { Page as Page }; + const value = 1; + export { value }; + + + const $$default = wrap(Page); export { $$default as default }; + ", + } + `) }) test('validates selected exports and export-all policy', async () => { diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts index 4e99e5eef..6a2a72037 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -11,35 +11,42 @@ import type { ESTree } from 'vite' import { buildScopeTree } from './scope' import { extractIdentifiers, validateNonAsyncFunction } from './utils' -export type ModuleExportMeta = { +export type TransformModuleExportMeta = { localName?: string declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] isFunction?: boolean defaultExportIdentifierName?: string } -export type ModuleExportGenerateContext = { +export type TransformModuleExportGenerateContext = { implementation: string binding: string exportName: string - meta: ModuleExportMeta + meta: TransformModuleExportMeta } +export type TransformModuleExportFilter = ( + name: string, + meta: TransformModuleExportMeta, +) => boolean + export type TransformModuleExportOptions = { - generate: (context: ModuleExportGenerateContext) => string - filter?: (name: string, meta: ModuleExportMeta) => boolean + generate: (context: TransformModuleExportGenerateContext) => string + filter?: TransformModuleExportFilter rejectNonAsyncFunction?: boolean exportAll?: 'error' | 'preserve' } +export type TransformModuleExportResult = { + output: MagicString + referenceNames: string[] +} + export function transformModuleExport( input: string, viteAst: ESTree.Program, options: TransformModuleExportOptions, -): { - output: MagicString - referenceNames: string[] -} { +): TransformModuleExportResult { const ast = viteAst as unknown as Program const output = new MagicString(input) const referenceNames: string[] = [] @@ -60,7 +67,7 @@ export function transformModuleExport( function extractDeclaration( identifier: Identifier, exportName: string, - meta: ModuleExportMeta, + meta: TransformModuleExportMeta, position: number, ): void { const localName = identifier.name @@ -86,7 +93,7 @@ export function transformModuleExport( } function generate( - context: ModuleExportGenerateContext, + context: TransformModuleExportGenerateContext, position: number, ): void { referenceNames.push(context.exportName) @@ -115,7 +122,7 @@ export function transformModuleExport( ) { tinyassert(node.declaration.id) const identifier = node.declaration.id - const meta: ModuleExportMeta = { + const meta: TransformModuleExportMeta = { localName: identifier.name, declarationKind: node.declaration.type === 'FunctionDeclaration' @@ -134,7 +141,7 @@ export function transformModuleExport( node: (typeof variableDeclaration.declarations)[number] selected: Array<{ identifier: Identifier - meta: ModuleExportMeta + meta: TransformModuleExportMeta }> preserved: string[] }> = [] @@ -163,7 +170,7 @@ export function transformModuleExport( const preserved: string[] = [] let validate = false for (const identifier of identifiers) { - const meta: ModuleExportMeta = { + const meta: TransformModuleExportMeta = { localName: identifier.name, declarationKind: variableDeclaration.kind, isFunction, @@ -238,7 +245,7 @@ export function transformModuleExport( { pos: specifier.exported.start }, ) } - const meta: ModuleExportMeta = {} + const meta: TransformModuleExportMeta = {} return { localName: specifier.local.name, exportName: specifier.exported.name, @@ -295,7 +302,7 @@ export function transformModuleExport( } else if (node.type === 'ExportDefaultDeclaration') { let implementation: string let bindingBase = '$$default' - let meta: ModuleExportMeta + let meta: TransformModuleExportMeta if ( (node.declaration.type === 'FunctionDeclaration' || From 7c52056724ecd8aa5806c2084fa5fdc0de578ae1 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:41:26 +0900 Subject: [PATCH 04/52] docs(rsc): explain module export transform Co-authored-by: OpenCode --- .../src/transforms/module-export.ts | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts index 6a2a72037..efe4dead4 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -12,15 +12,20 @@ import { buildScopeTree } from './scope' import { extractIdentifiers, validateNonAsyncFunction } from './utils' export type TransformModuleExportMeta = { + /** Source-local declaration name when one is statically available. */ localName?: string declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] isFunction?: boolean + /** Identifier referenced by `export default Identifier`. */ defaultExportIdentifierName?: string } export type TransformModuleExportGenerateContext = { + /** Private source implementation or imported/local value being transformed. */ implementation: string + /** Collision-free local name reserved for the canonical runtime result. */ binding: string + /** Public module export name, including `default`. */ exportName: string meta: TransformModuleExportMeta } @@ -39,9 +44,45 @@ export type TransformModuleExportOptions = { export type TransformModuleExportResult = { output: MagicString + /** Selected public export names in source order. */ referenceNames: string[] } +/** + * Extracts selected module exports into implementation bindings and delegates + * complete canonical binding and export generation to the consumer. + * + * Conceptually: + * + * ```js + * export async function action(value) { + * return value + * } + * ``` + * + * becomes: + * + * ```js + * async function action$$impl(value) { + * return value + * } + * export const action = __RUNTIME__(action$$impl, 'action') + * ``` + * + * `generate` owns the complete generated declaration and export code represented + * by `export const ...` above. The transform does not classify or rewrite that + * code, so consumers also own effects and purity annotations. + * + * Generated code for direct declarations is placed immediately after each + * implementation. Local export specifiers are generated at module end so their + * values have initialized, while re-exports are converted to local imports at + * the original export position. + * + * This canonical-binding model intentionally does not preserve source function + * hoisting under the exported name. Selected mutable, destructured, and duplicate + * declaration bindings are rejected instead of receiving implicit reassignment + * semantics from the deprecated `transformWrapExport` transform. + */ export function transformModuleExport( input: string, viteAst: ESTree.Program, @@ -205,6 +246,8 @@ export function transformModuleExport( } output.remove(node.start, variableDeclaration.start) + // Split declarators so each generated canonical binding is initialized + // before a later declarator can reference its source export name. for (const [index, declaration] of declarations.entries()) { const position = index === declarations.length - 1 @@ -273,6 +316,8 @@ export function transformModuleExport( } let implementation = item.localName + // Local specifiers can appear before their declarations, unlike + // re-exports whose imported implementation is available immediately. const position = node.source ? node.end : input.length if (node.source) { implementation = allocateName(`$$import_${item.localName}`) From 4d0b8747a22d391894f8339c815340c336f3ca39 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:46:27 +0900 Subject: [PATCH 05/52] feat(rsc): return module export contexts Co-authored-by: OpenCode --- .../src/transforms/module-export.test.ts | 28 ++++++++----------- .../src/transforms/module-export.ts | 12 ++++++-- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts index 9287919a6..3fcde8f4d 100644 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -2,7 +2,6 @@ import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformModuleExport, - type TransformModuleExportGenerateContext, type TransformModuleExportOptions, } from './module-export' @@ -91,25 +90,30 @@ export * from './other' }) test('reports metadata and preserves filtered declarations', async () => { - const contexts: TransformModuleExportGenerateContext[] = [] const input = `export const Page = () => {}, value = 1; export default Page;` const ast = await parseAstAsync(input) const result = transformModuleExport(input, ast, { filter: (_name, meta) => meta.isFunction !== false, exportAll: 'preserve', - generate: (context) => { - contexts.push(context) - return `const ${context.binding} = wrap(${context.implementation}); export { ${context.binding} as ${context.exportName} };` - }, + generate: (context) => + `const ${context.binding} = wrap(${context.implementation}); export { ${context.binding} as ${context.exportName} };`, }) expect({ - contexts, + references: result.references, output: result.output.toString(), }).toMatchInlineSnapshot(` { - "contexts": [ + "output": "const Page$$impl = () => {}; + const Page = wrap(Page$$impl); export { Page as Page }; + const value = 1; + export { value }; + + + const $$default = wrap(Page); export { $$default as default }; + ", + "references": [ { "binding": "Page", "exportName": "Page", @@ -130,14 +134,6 @@ export default Page;` }, }, ], - "output": "const Page$$impl = () => {}; - const Page = wrap(Page$$impl); export { Page as Page }; - const value = 1; - export { value }; - - - const $$default = wrap(Page); export { $$default as default }; - ", } `) }) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts index efe4dead4..807ea3c16 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -44,6 +44,8 @@ export type TransformModuleExportOptions = { export type TransformModuleExportResult = { output: MagicString + /** Full generation contexts for selected exports in source order. */ + references: TransformModuleExportGenerateContext[] /** Selected public export names in source order. */ referenceNames: string[] } @@ -90,7 +92,7 @@ export function transformModuleExport( ): TransformModuleExportResult { const ast = viteAst as unknown as Program const output = new MagicString(input) - const referenceNames: string[] = [] + const references: TransformModuleExportGenerateContext[] = [] const emissions = new Map() const filter = options.filter ?? (() => true) const usedNames = new Set(buildScopeTree(ast).moduleScope.declarations) @@ -137,7 +139,7 @@ export function transformModuleExport( context: TransformModuleExportGenerateContext, position: number, ): void { - referenceNames.push(context.exportName) + references.push(context) emit(position, options.generate(context)) } @@ -415,7 +417,11 @@ export function transformModuleExport( output.appendLeft(position, `\n${codes.join('\n')}\n`) } - return { output, referenceNames } + return { + output, + references, + referenceNames: references.map((reference) => reference.exportName), + } } function findSeparatorComma(separator: string): number { From 1ad2fae1acbee30e16ed3a0aa97d6cd60ad4a6cb Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Thu, 30 Jul 2026 19:44:33 +0900 Subject: [PATCH 06/52] refactor(rsc): simplify multi-declarator exports Co-authored-by: OpenCode --- .../src/transforms/module-export.test.ts | 25 ++++++-- .../src/transforms/module-export.ts | 62 +++---------------- 2 files changed, 27 insertions(+), 60 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts index 3fcde8f4d..e76878d9a 100644 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -22,7 +22,7 @@ describe(transformModuleExport, () => { test('extracts direct and default declarations', async () => { const result = await transform(` export async function action() {} -export const loader = async () => {} /* comma, here */, value = loader +export const loader = async () => {}, value = 1 export default async function Page() {} `) @@ -38,10 +38,9 @@ export default async function Page() {} const action = wrap(action$$impl, "action"); export { action as action }; - const loader$$impl = async () => {} /* comma, here */; + const loader$$impl = async () => {}, value$$impl = 1 const loader = wrap(loader$$impl, "loader"); export { loader as loader }; - const value$$impl = loader const value = wrap(value$$impl, "value"); export { value as value }; @@ -53,6 +52,23 @@ export default async function Page() {} `) }) + test('documents dependent multi-declarator TDZ', async () => { + const result = await transform( + `export const first = async () => {}, second = first`, + ) + + // `first` is a later generated const in this output. Supporting this + // uncommon dependency would require splitting the source declaration. + expect(result.output.toString()).toMatchInlineSnapshot(` + "const first$$impl = async () => {}, second$$impl = first + const first = wrap(first$$impl, \"first\"); + export { first as first }; + const second = wrap(second$$impl, \"second\"); + export { second as second }; + " + `) + }) + test('handles aliases, re-exports, filtering, and name collisions', async () => { const result = await transform( ` @@ -105,9 +121,8 @@ export default Page;` output: result.output.toString(), }).toMatchInlineSnapshot(` { - "output": "const Page$$impl = () => {}; + "output": "const Page$$impl = () => {}, value = 1; const Page = wrap(Page$$impl); export { Page as Page }; - const value = 1; export { value }; diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts index 807ea3c16..8bb2fea1c 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -75,10 +75,10 @@ export type TransformModuleExportResult = { * by `export const ...` above. The transform does not classify or rewrite that * code, so consumers also own effects and purity annotations. * - * Generated code for direct declarations is placed immediately after each - * implementation. Local export specifiers are generated at module end so their - * values have initialized, while re-exports are converted to local imports at - * the original export position. + * Generated code for direct declarations is placed immediately after the source + * declaration. Local export specifiers are generated at module end so their values + * have initialized, while re-exports are converted to local imports at the original + * export position. * * This canonical-binding model intentionally does not preserve source function * hoisting under the exported name. Selected mutable, destructured, and duplicate @@ -248,36 +248,14 @@ export function transformModuleExport( } output.remove(node.start, variableDeclaration.start) - // Split declarators so each generated canonical binding is initialized - // before a later declarator can reference its source export name. - for (const [index, declaration] of declarations.entries()) { - const position = - index === declarations.length - 1 - ? node.end - : declaration.node.end + for (const declaration of declarations) { for (const { identifier, meta } of declaration.selected) { - extractDeclaration(identifier, identifier.name, meta, position) + extractDeclaration(identifier, identifier.name, meta, node.end) } for (const name of declaration.preserved) { - preserveExport(name, name, position) + preserveExport(name, name, node.end) } } - for (let i = 1; i < declarations.length; i++) { - const previous = declarations[i - 1]!.node - const current = declarations[i]!.node - const separator = input.slice(previous.end, current.start) - const comma = findSeparatorComma(separator) - const prefix = separator.slice(0, comma) - const rest = separator.slice(comma + 1) - const codes = emissions.get(previous.end) - tinyassert(codes) - emissions.delete(previous.end) - output.update( - previous.end, - current.start, - `${prefix};\n${codes.join('\n')}\n${variableDeclaration.kind}${/^\s/.test(rest) ? '' : ' '}${rest}`, - ) - } } else { node.declaration satisfies never } @@ -424,32 +402,6 @@ export function transformModuleExport( } } -function findSeparatorComma(separator: string): number { - let inLineComment = false - let inBlockComment = false - for (let i = 0; i < separator.length; i++) { - const char = separator[i] - const next = separator[i + 1] - if (inLineComment) { - if (char === '\n' || char === '\r') inLineComment = false - } else if (inBlockComment) { - if (char === '*' && next === '/') { - inBlockComment = false - i++ - } - } else if (char === '/' && next === '/') { - inLineComment = true - i++ - } else if (char === '/' && next === '*') { - inBlockComment = true - i++ - } else if (char === ',') { - return i - } - } - throw new Error('missing variable declarator separator') -} - function getModuleDeclarationCounts(ast: Program): Map { const counts = new Map() const add = (name: string) => counts.set(name, (counts.get(name) ?? 0) + 1) From ec8275e85d9538fcf383b63ebc9ca5372eeb0c39 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 13:36:06 +0900 Subject: [PATCH 07/52] refactor(rsc): split module export models Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/index.ts | 2 + .../src/transforms/module-export-effect.ts | 204 +++++++++++++++++ .../src/transforms/module-export-hoist.ts | 214 ++++++++++++++++++ .../transforms/module-export-models.test.ts | 151 ++++++++++++ 4 files changed, 571 insertions(+) create mode 100644 packages/plugin-rsc/src/transforms/module-export-effect.ts create mode 100644 packages/plugin-rsc/src/transforms/module-export-hoist.ts create mode 100644 packages/plugin-rsc/src/transforms/module-export-models.test.ts diff --git a/packages/plugin-rsc/src/transforms/index.ts b/packages/plugin-rsc/src/transforms/index.ts index 1f1520681..fabdc36aa 100644 --- a/packages/plugin-rsc/src/transforms/index.ts +++ b/packages/plugin-rsc/src/transforms/index.ts @@ -1,5 +1,7 @@ export * from './hoist' export * from './module-export' +export * from './module-export-effect' +export * from './module-export-hoist' export * from './wrap-export' export * from './proxy-export' export * from './utils' diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.ts b/packages/plugin-rsc/src/transforms/module-export-effect.ts new file mode 100644 index 000000000..eaadb568c --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export-effect.ts @@ -0,0 +1,204 @@ +import { tinyassert } from '@hiogawa/utils' +import type { ExportDefaultDeclaration, Node, Program } from 'estree' +import MagicString from 'magic-string' +import type { ESTree } from 'vite' +import type { + TransformModuleExportFilter, + TransformModuleExportMeta, +} from './module-export' +import { buildScopeTree } from './scope' +import { extractNames, validateNonAsyncFunction } from './utils' + +export type TransformModuleExportEffectContext = { + binding: string + exportName: string + meta: TransformModuleExportMeta +} + +export type TransformModuleExportEffectOptions = { + generate: (context: TransformModuleExportEffectContext) => string + filter?: TransformModuleExportFilter + rejectNonAsyncFunction?: boolean + exportAll?: 'error' | 'preserve' +} + +/** + * Preserves selected source exports and appends one generated module effect for + * each exported value. This models Next.js-style module Server Action lowering. + */ +export function transformModuleExportEffect( + input: string, + viteAst: ESTree.Program, + options: TransformModuleExportEffectOptions, +): { + output: MagicString + references: TransformModuleExportEffectContext[] + referenceNames: string[] +} { + const ast = viteAst as unknown as Program + const output = new MagicString(input) + const filter = options.filter ?? (() => true) + const references: TransformModuleExportEffectContext[] = [] + const effects: string[] = [] + const usedNames = new Set(buildScopeTree(ast).moduleScope.declarations) + + function allocateName(base: string): string { + let name = base + for (let i = 2; usedNames.has(name); i++) name = `${base}_${i}` + usedNames.add(name) + return name + } + + function generate(context: TransformModuleExportEffectContext): void { + references.push(context) + effects.push(options.generate(context)) + } + + for (const node of ast.body) { + if (node.type === 'ExportNamedDeclaration') { + if (node.declaration) { + if ( + node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration' + ) { + tinyassert(node.declaration.id) + const binding = node.declaration.id.name + const meta: TransformModuleExportMeta = { + localName: binding, + declarationKind: + node.declaration.type === 'FunctionDeclaration' + ? 'function' + : 'class', + isFunction: + node.declaration.type === 'FunctionDeclaration' ? true : false, + } + if (!filter(binding, meta)) continue + validateNonAsyncFunction(options, node.declaration) + generate({ binding, exportName: binding, meta }) + } else if (node.declaration.type === 'VariableDeclaration') { + for (const declaration of node.declaration.declarations) { + const names = extractNames(declaration.id) + const isFunction = + declaration.id.type === 'Identifier' && declaration.init + ? getIsFunction(declaration.init) + : undefined + let validate = false + for (const binding of names) { + const meta: TransformModuleExportMeta = { + localName: binding, + declarationKind: node.declaration.kind, + isFunction, + } + if (filter(binding, meta)) { + validate = true + generate({ binding, exportName: binding, meta }) + } + } + if (validate && declaration.init) { + validateNonAsyncFunction(options, declaration.init) + } + } + } + } else { + for (const specifier of node.specifiers) { + tinyassert(specifier.local.type === 'Identifier') + if (specifier.exported.type !== 'Identifier') { + throw Object.assign( + new Error('unsupported string literal export name'), + { pos: specifier.exported.start }, + ) + } + const exportName = specifier.exported.name + const meta: TransformModuleExportMeta = {} + if (!filter(exportName, meta)) continue + + let binding = specifier.local.name + if (node.source) { + binding = allocateName(`$$effect_import_${binding}`) + const sourceTail = input + .slice(node.source.end, node.end) + .replace(/;?\s*$/, ';') + output.append( + `\nimport { ${specifier.local.name} as ${binding} } from ${node.source.raw}${sourceTail}`, + ) + } + generate({ binding, exportName, meta }) + } + } + } else if (node.type === 'ExportAllDeclaration') { + if (options.exportAll !== 'preserve') { + throw Object.assign(new Error('unsupported ExportAllDeclaration'), { + pos: node.start, + }) + } + } else if (node.type === 'ExportDefaultDeclaration') { + let binding: string + let meta: TransformModuleExportMeta + if ( + (node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration') && + node.declaration.id + ) { + binding = node.declaration.id.name + meta = { + localName: binding, + declarationKind: + node.declaration.type === 'FunctionDeclaration' + ? 'function' + : 'class', + isFunction: + node.declaration.type === 'FunctionDeclaration' ? true : false, + } + } else if (node.declaration.type === 'Identifier') { + binding = node.declaration.name + meta = { defaultExportIdentifierName: binding } + } else { + binding = allocateName('$$effect_default') + meta = { isFunction: getIsFunction(node.declaration) } + } + if (!filter('default', meta)) continue + validateNonAsyncFunction(options, node.declaration) + + if ( + node.declaration.type !== 'Identifier' && + !( + (node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration') && + node.declaration.id + ) + ) { + output.update(node.start, node.declaration.start, `const ${binding} = `) + output.appendLeft(node.end, `\nexport default ${binding};`) + } + generate({ binding, exportName: 'default', meta }) + } + } + + if (effects.length > 0) output.append(`\n${effects.join('\n')}\n`) + return { + output, + references, + referenceNames: references.map((reference) => reference.exportName), + } +} + +function getIsFunction( + node: Node | ExportDefaultDeclaration['declaration'], +): boolean | undefined { + if ( + node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression' || + node.type === 'ArrowFunctionExpression' + ) { + return true + } + if ( + node.type === 'ClassDeclaration' || + node.type === 'Literal' || + node.type === 'ObjectExpression' || + node.type === 'ArrayExpression' || + node.type === 'ClassExpression' + ) { + return false + } +} diff --git a/packages/plugin-rsc/src/transforms/module-export-hoist.ts b/packages/plugin-rsc/src/transforms/module-export-hoist.ts new file mode 100644 index 000000000..b13314fd7 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export-hoist.ts @@ -0,0 +1,214 @@ +import type { + ArrowFunctionExpression, + ExportDefaultDeclaration, + ExportNamedDeclaration, + FunctionExpression, + Node, + Program, + VariableDeclarator, +} from 'estree' +import MagicString from 'magic-string' +import type { ESTree } from 'vite' +import type { + TransformModuleExportFilter, + TransformModuleExportMeta, +} from './module-export' +import { buildScopeTree } from './scope' +import { hasDirective, validateNonAsyncFunction } from './utils' + +type DefaultFunctionDeclaration = Extract< + ExportDefaultDeclaration['declaration'], + { type: 'FunctionDeclaration' } +> + +type ModuleFunction = + | DefaultFunctionDeclaration + | FunctionExpression + | ArrowFunctionExpression + +type HoistCandidate = { + node: ModuleFunction + parent: ExportDefaultDeclaration | ExportNamedDeclaration | VariableDeclarator + exportName: string + sourceName: string + meta: TransformModuleExportMeta +} + +export type TransformModuleExportHoistContext = { + implementation: string + exportName: string + meta: TransformModuleExportMeta +} + +export type TransformModuleExportHoistOptions = { + directive: string + runtime: (context: TransformModuleExportHoistContext) => string + filter?: TransformModuleExportFilter + rejectNonAsyncFunction?: boolean +} + +/** + * Treats a module directive as though it were attached to each directly exported + * function, then applies inline-style implementation hoisting and expression-site + * runtime replacement. Local export specifiers and re-exports are left unchanged. + */ +export function transformModuleExportHoist( + source: string, + viteAst: ESTree.Program, + options: TransformModuleExportHoistOptions, +): { + output: MagicString + references: TransformModuleExportHoistContext[] + referenceNames: string[] +} { + const ast = viteAst as unknown as Program + let input = source + if (!input.endsWith('\n')) input += '\n' + const output = new MagicString(input) + const references: TransformModuleExportHoistContext[] = [] + const filter = options.filter ?? (() => true) + if (!hasDirective(viteAst.body, options.directive)) { + return { output, references, referenceNames: [] } + } + + const usedNames = new Set(buildScopeTree(ast).moduleScope.declarations) + const candidates: HoistCandidate[] = [] + + for (const statement of ast.body) { + if (statement.type === 'ExportNamedDeclaration' && statement.declaration) { + if (statement.declaration.type === 'FunctionDeclaration') { + const name = statement.declaration.id.name + candidates.push({ + node: statement.declaration, + parent: statement, + exportName: name, + sourceName: name, + meta: { + localName: name, + declarationKind: 'function', + isFunction: true, + }, + }) + } else if (statement.declaration.type === 'VariableDeclaration') { + for (const declaration of statement.declaration.declarations) { + if ( + declaration.id.type === 'Identifier' && + declaration.init && + isFunctionNode(declaration.init) + ) { + candidates.push({ + node: declaration.init, + parent: declaration, + exportName: declaration.id.name, + sourceName: declaration.id.name, + meta: { + localName: declaration.id.name, + declarationKind: statement.declaration.kind, + isFunction: true, + }, + }) + } + } + } + } else if ( + statement.type === 'ExportDefaultDeclaration' && + isFunctionNode(statement.declaration) + ) { + const sourceName = + statement.declaration.type !== 'ArrowFunctionExpression' && + statement.declaration.id + ? statement.declaration.id.name + : 'anonymous_default' + candidates.push({ + node: statement.declaration, + parent: statement, + exportName: 'default', + sourceName, + meta: { + localName: + sourceName === 'anonymous_default' ? undefined : sourceName, + declarationKind: + statement.declaration.type === 'FunctionDeclaration' + ? 'function' + : undefined, + isFunction: true, + }, + }) + } + } + + function allocateName(base: string): string { + let name = base + for (let i = 2; usedNames.has(name); i++) name = `${base}_${i}` + usedNames.add(name) + return name + } + + for (const candidate of candidates) { + if (!filter(candidate.exportName, candidate.meta)) continue + const node = candidate.node + if (node.type === 'FunctionExpression' && node.id) { + throw Object.assign( + new Error('unsupported named function expression export'), + { pos: node.start }, + ) + } + validateNonAsyncFunction(options, node) + + const implementation = allocateName( + `$$module_hoist_${references.length}_${candidate.sourceName}`, + ) + const params = node.params + .map((parameter) => input.slice(parameter.start, parameter.end)) + .join(', ') + const prefix = `\n;${node.async ? 'async ' : ''}function${node.generator ? '*' : ''} ${implementation}(${params}) ` + if (node.body.type === 'BlockStatement') { + output.update(node.start, node.body.start, prefix) + output.appendLeft(node.end, ';') + } else { + output.update(node.start, node.body.start, `${prefix}{ return `) + output.appendLeft(node.end, ' };') + } + output.appendLeft( + node.end, + `\n/* #__PURE__ */ Object.defineProperty(${implementation}, "name", { value: ${JSON.stringify(candidate.sourceName)} });\n`, + ) + output.move(node.start, node.end, input.length) + + const context: TransformModuleExportHoistContext = { + implementation, + exportName: candidate.exportName, + meta: candidate.meta, + } + references.push(context) + const runtime = `/* #__PURE__ */ ${options.runtime(context)}` + + if (node.type === 'FunctionDeclaration' && node.id) { + const sourceName = node.id.name + let replacement = `const ${sourceName} = ${runtime};` + if (candidate.parent.type === 'ExportDefaultDeclaration') { + output.remove(candidate.parent.start, node.start) + replacement += `\nexport default ${sourceName};` + } + output.appendLeft(node.start, replacement) + } else { + output.appendLeft(node.start, runtime) + } + } + + return { + output, + references, + referenceNames: references.map((reference) => reference.exportName), + } +} + +function isFunctionNode( + node: Node | ExportDefaultDeclaration['declaration'], +): node is ModuleFunction { + return ( + node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression' || + node.type === 'ArrowFunctionExpression' + ) +} diff --git a/packages/plugin-rsc/src/transforms/module-export-models.test.ts b/packages/plugin-rsc/src/transforms/module-export-models.test.ts new file mode 100644 index 000000000..af644169d --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export-models.test.ts @@ -0,0 +1,151 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, test } from 'vitest' +import { transformModuleExport } from './module-export' +import { transformModuleExportEffect } from './module-export-effect' +import { transformModuleExportHoist } from './module-export-hoist' + +describe('module export transform models', () => { + test('compares canonical bindings, export effects, and hoisted expressions', async () => { + const input = `"use cache"; +export async function action(value) { + return value +} +export const loader = async () => "loaded" +export default async function Page() { + return "page" +} +` + const ast = await parseAstAsync(input) + const canonical = transformModuleExport(input, ast, { + generate: ({ implementation, binding, exportName }) => + `const ${binding} = wrap(${implementation}, ${JSON.stringify(exportName)}); export { ${binding} as ${exportName} };`, + }) + const effect = transformModuleExportEffect(input, ast, { + generate: ({ binding, exportName }) => + `register(${binding}, ${JSON.stringify(exportName)});`, + }) + const hoist = transformModuleExportHoist(input, ast, { + directive: 'use cache', + runtime: ({ implementation, exportName }) => + `wrap(${implementation}, ${JSON.stringify(exportName)})`, + }) + + const outputs = { + canonical: canonical.output.toString(), + effect: effect.output.toString(), + hoist: hoist.output.toString(), + } + await Promise.all( + Object.values(outputs).map((output) => parseAstAsync(output)), + ) + + expect({ + referenceNames: { + canonical: canonical.referenceNames, + effect: effect.referenceNames, + hoist: hoist.referenceNames, + }, + outputs, + }).toMatchInlineSnapshot(` + { + "outputs": { + "canonical": ""use cache"; + async function action$$impl(value) { + return value + } + const action = wrap(action$$impl, "action"); export { action as action }; + + const loader$$impl = async () => "loaded" + const loader = wrap(loader$$impl, "loader"); export { loader as loader }; + + async function Page$$impl() { + return "page" + } + const Page = wrap(Page$$impl, "default"); export { Page as default }; + + ", + "effect": ""use cache"; + export async function action(value) { + return value + } + export const loader = async () => "loaded" + export default async function Page() { + return "page" + } + + register(action, "action"); + register(loader, "loader"); + register(Page, "default"); + ", + "hoist": ""use cache"; + export const action = /* #__PURE__ */ wrap($$module_hoist_0_action, "action"); + export const loader = /* #__PURE__ */ wrap($$module_hoist_1_loader, "loader") + const Page = /* #__PURE__ */ wrap($$module_hoist_2_Page, "default"); + export default Page; + + ;async function $$module_hoist_0_action(value) { + return value + }; + /* #__PURE__ */ Object.defineProperty($$module_hoist_0_action, "name", { value: "action" }); + + ;async function $$module_hoist_1_loader() { return "loaded" }; + /* #__PURE__ */ Object.defineProperty($$module_hoist_1_loader, "name", { value: "loader" }); + + ;async function $$module_hoist_2_Page() { + return "page" + }; + /* #__PURE__ */ Object.defineProperty($$module_hoist_2_Page, "name", { value: "Page" }); + ", + }, + "referenceNames": { + "canonical": [ + "action", + "loader", + "default", + ], + "effect": [ + "action", + "loader", + "default", + ], + "hoist": [ + "action", + "loader", + "default", + ], + }, + } + `) + }) + + test('supports anonymous default functions', async () => { + const input = `"use cache"; export default async function () {}` + const ast = await parseAstAsync(input) + const effect = transformModuleExportEffect(input, ast, { + generate: ({ binding }) => `register(${binding});`, + }) + const hoist = transformModuleExportHoist(input, ast, { + directive: 'use cache', + runtime: ({ implementation }) => `wrap(${implementation})`, + }) + + await expect(parseAstAsync(effect.output.toString())).resolves.toBeDefined() + await expect(parseAstAsync(hoist.output.toString())).resolves.toBeDefined() + expect({ + effect: effect.output.toString(), + hoist: hoist.output.toString(), + }).toMatchInlineSnapshot(` + { + "effect": ""use cache"; const $$effect_default = async function () {} + export default $$effect_default; + register($$effect_default); + ", + "hoist": ""use cache"; export default /* #__PURE__ */ wrap($$module_hoist_0_anonymous_default) + + ;async function $$module_hoist_0_anonymous_default() {}; + /* #__PURE__ */ Object.defineProperty($$module_hoist_0_anonymous_default, "name", { value: "anonymous_default" }); + ", + } + `) + }) +}) From 50ecb7d08457a88ca6c3e4c376aac3d27df703c8 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 13:55:14 +0900 Subject: [PATCH 08/52] test(rsc): compare module export source maps Co-authored-by: OpenCode --- ...-anonymous.js.module-export-effect.snap.js | 14 +++++ ...t-anonymous.js.module-export-hoist.snap.js | 14 +++++ ...default-anonymous.js.module-export.snap.js | 14 +++++ ... default-anonymous.js.wrap-export.snap.js} | 0 ...identifier.js.module-export-effect.snap.js | 15 +++++ ...-identifier.js.module-export-hoist.snap.js | 13 +++++ ...efault-identifier.js.module-export.snap.js | 16 ++++++ ...default-identifier.js.wrap-export.snap.js} | 0 ...ault-named.js.module-export-effect.snap.js | 13 +++++ ...fault-named.js.module-export-hoist.snap.js | 15 +++++ .../default-named.js.module-export.snap.js | 14 +++++ ...s => default-named.js.wrap-export.snap.js} | 0 ...ocal-alias.js.module-export-effect.snap.js | 15 +++++ ...local-alias.js.module-export-hoist.snap.js | 13 +++++ .../local-alias.js.module-export.snap.js | 16 ++++++ ....js => local-alias.js.wrap-export.snap.js} | 0 ...le-exports.js.module-export-effect.snap.js | 18 ++++++ ...ple-exports.js.module-export-hoist.snap.js | 21 +++++++ .../multiple-exports.js.module-export.snap.js | 21 +++++++ ...> multiple-exports.js.wrap-export.snap.js} | 0 ...d-function.js.module-export-effect.snap.js | 13 +++++ ...ed-function.js.module-export-hoist.snap.js | 14 +++++ .../named-function.js.module-export.snap.js | 14 +++++ ... => named-function.js.wrap-export.snap.js} | 0 .../reexport.js.module-export-effect.snap.js | 12 ++++ .../reexport.js.module-export-hoist.snap.js | 9 +++ .../reexport.js.module-export.snap.js | 13 +++++ ...nap.js => reexport.js.wrap-export.snap.js} | 0 .../variables.js.module-export-effect.snap.js | 16 ++++++ .../variables.js.module-export-hoist.snap.js | 19 +++++++ .../variables.js.module-export.snap.js | 19 +++++++ ...ap.js => variables.js.wrap-export.snap.js} | 0 .../src/transforms/source-map.test.ts | 56 +++++++++++++++---- 33 files changed, 405 insertions(+), 12 deletions(-) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{default-anonymous.js.snap.js => default-anonymous.js.wrap-export.snap.js} (100%) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{default-identifier.js.snap.js => default-identifier.js.wrap-export.snap.js} (100%) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{default-named.js.snap.js => default-named.js.wrap-export.snap.js} (100%) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{local-alias.js.snap.js => local-alias.js.wrap-export.snap.js} (100%) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{multiple-exports.js.snap.js => multiple-exports.js.wrap-export.snap.js} (100%) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{named-function.js.snap.js => named-function.js.wrap-export.snap.js} (100%) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{reexport.js.snap.js => reexport.js.wrap-export.snap.js} (100%) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{variables.js.snap.js => variables.js.wrap-export.snap.js} (100%) diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js new file mode 100644 index 000000000..f9c8eb700 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCx5QkFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzs7OyJ9 +*/ + +'use server' + +const $$effect_default = async function () { + return 'default anonymous function called' +} +export default $$effect_default; + +registerServerReference($$effect_default, "default"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js new file mode 100644 index 000000000..9fd8d9714 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MzM1ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJkZWZhdWx0IikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fub255bW91c19kZWZhdWx0KCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImFub255bW91c19kZWZhdWx0IiB9KTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsT0FBTztBQUFDO0FBQUEscURBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzsifQ== +*/ + +'use server' + +export default /* #__PURE__ */ registerServerReference($$module_hoist_0_anonymous_default, "default") + +;async function $$module_hoist_0_anonymous_default() { + return 'default anonymous function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_anonymous_default, "name", { value: "anonymous_default" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js new file mode 100644 index 000000000..03cf36fa7 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjEwACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0JCRpbXBsID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CmNvbnN0ICQkZGVmYXVsdCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCQkaW1wbCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKCjMyMwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsd0JBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMzQzs7OzsifQ== +*/ + +'use server' + +const $$default$$impl = async function () { + return 'default anonymous function called' +} +const $$default = registerServerReference($$default$$impl, "default"); +export { $$default as default }; + diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js new file mode 100644 index 000000000..ac3810316 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js @@ -0,0 +1,15 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTgwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CjM2OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNuQzs7QUFFQSxNQUFNLENBQUMsT0FBTyxDQUFDOzs7In0= +*/ + +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +export default defaultIdentifier + +registerServerReference(defaultIdentifier, "default"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js new file mode 100644 index 000000000..6d2d91d5b --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js @@ -0,0 +1,13 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTI0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgozNjcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRUEsTUFBTSxDQUFDLE9BQU8sQ0FBQzsifQ== +*/ + +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +export default defaultIdentifier diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js new file mode 100644 index 000000000..bb580aa1a --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js @@ -0,0 +1,16 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTk5ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgoKY29uc3QgJCRkZWZhdWx0ID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CgozNDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7Ozs7OzsifQ== +*/ + +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + + +const $$default = registerServerReference(defaultIdentifier, "default"); +export { $$default as default }; + diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js new file mode 100644 index 000000000..7e778f877 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js @@ -0,0 +1,13 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CjM1OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBkZWZhdWx0TmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7OzsifQ== +*/ + +'use server' + +export default async function defaultNamedFunction() { + return 'default named function called' +} + +registerServerReference(defaultNamedFunction, "default"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js new file mode 100644 index 000000000..2646d81f9 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js @@ -0,0 +1,15 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#Mzk1ACd1c2Ugc2VydmVyJwoKY29uc3QgZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgZGVmYXVsdE5hbWVkRnVuY3Rpb247Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHROYW1lZEZ1bmN0aW9uIiB9KTsKMzEwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07Ozs7QUFFSTtBQUFBLHdEQUFzQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7In0= +*/ + +'use server' + +const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_defaultNamedFunction, "default"); +export default defaultNamedFunction; + +;async function $$module_hoist_0_defaultNamedFunction() { + return 'default named function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_defaultNamedFunction, "name", { value: "defaultNamedFunction" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js new file mode 100644 index 000000000..eaa62a1a2 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjQxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBkZWZhdWx0TmFtZWRGdW5jdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRlZmF1bHROYW1lZEZ1bmN0aW9uJCRpbXBsLCAiZGVmYXVsdCIpOwpleHBvcnQgeyBkZWZhdWx0TmFtZWRGdW5jdGlvbiBhcyBkZWZhdWx0IH07CgozNDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLDBCQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OzsifQ== +*/ + +'use server' + +async function defaultNamedFunction$$impl() { + return 'default named function called' +} +const defaultNamedFunction = registerServerReference(defaultNamedFunction$$impl, "default"); +export { defaultNamedFunction as default }; + diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js new file mode 100644 index 000000000..240204610 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js @@ -0,0 +1,15 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGxvY2FsQWxpYXMsICJhbGlhc2VkQWN0aW9uIik7CjM4OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOztBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7OzsifQ== +*/ + +'use server' + +async function localAlias() { + return 'local alias called' +} + +export { localAlias as aliasedAction } + +registerServerReference(localAlias, "aliasedAction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js new file mode 100644 index 000000000..e963a40eb --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js @@ -0,0 +1,13 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGxvY2FsQWxpYXMoKSB7XG4gIHJldHVybiAnbG9jYWwgYWxpYXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUI7O0FBRUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQzsifQ== +*/ + +'use server' + +async function localAlias() { + return 'local alias called' +} + +export { localAlias as aliasedAction } diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js new file mode 100644 index 000000000..8db29c5a3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js @@ -0,0 +1,16 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV9hbGlhc2VkQWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfYWxpYXNlZEFjdGlvbiBhcyBhbGlhc2VkQWN0aW9uIH07CjMzNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOzs7Ozs7In0= +*/ + +'use server' + +async function localAlias() { + return 'local alias called' +} + + + +const $$module_aliasedAction = registerServerReference(localAlias, "aliasedAction"); +export { $$module_aliasedAction as aliasedAction }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js new file mode 100644 index 000000000..caae66e9a --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js @@ -0,0 +1,18 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjY4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwo1MDcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7O0FBRUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9 +*/ + +'use server' + +export async function firstAction() { + return 'first action called' +} + +export async function secondAction() { + return 'second action called' +} + +registerServerReference(firstAction, "firstAction"); +registerServerReference(secondAction, "secondAction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js new file mode 100644 index 000000000..1286692a1 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js @@ -0,0 +1,21 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#NjIyACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwoKZXhwb3J0IGNvbnN0IHNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0QWN0aW9uIiB9KTsKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzFfc2Vjb25kQWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJzZWNvbmRBY3Rpb24iIH0pOwo0NTAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNOztBQUlOLE1BQU07QUFKQztBQUFBLCtDQUE2QjtBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPO0FBQUEsZ0RBQThCO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7OyJ9 +*/ + +'use server' + +export const firstAction = /* #__PURE__ */ registerServerReference($$module_hoist_0_firstAction, "firstAction"); + +export const secondAction = /* #__PURE__ */ registerServerReference($$module_hoist_1_secondAction, "secondAction"); + +;async function $$module_hoist_0_firstAction() { + return 'first action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_firstAction, "name", { value: "firstAction" }); + +;async function $$module_hoist_1_secondAction() { + return 'second action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_1_secondAction, "name", { value: "secondAction" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js new file mode 100644 index 000000000..4a85a4665 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js @@ -0,0 +1,21 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#NDAwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IGZpcnN0QWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24kJGltcGwsICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiBhcyBmaXJzdEFjdGlvbiB9OwoKCmFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IHNlY29uZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiQkaW1wbCwgInNlY29uZEFjdGlvbiIpOwpleHBvcnQgeyBzZWNvbmRBY3Rpb24gYXMgc2Vjb25kQWN0aW9uIH07Cgo0OTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7Ozs7O0FBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9 +*/ + +'use server' + +async function firstAction$$impl() { + return 'first action called' +} +const firstAction = registerServerReference(firstAction$$impl, "firstAction"); +export { firstAction as firstAction }; + + +async function secondAction$$impl() { + return 'second action called' +} +const secondAction = registerServerReference(secondAction$$impl, "secondAction"); +export { secondAction as secondAction }; + diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js new file mode 100644 index 000000000..9ac5214b0 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js @@ -0,0 +1,13 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTQ3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CjMxNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OzsifQ== +*/ + +'use server' + +export async function namedFunction() { + return 'named function called' +} + +registerServerReference(namedFunction, "namedFunction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js new file mode 100644 index 000000000..72c1949d1 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MzI4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IG5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9uYW1lZEZ1bmN0aW9uLCAibmFtZWRGdW5jdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8wX25hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwoyODUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTTtBQUFDO0FBQUEsaURBQStCO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OyJ9 +*/ + +'use server' + +export const namedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_namedFunction, "namedFunction"); + +;async function $$module_hoist_0_namedFunction() { + return 'named function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_namedFunction, "name", { value: "namedFunction" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js new file mode 100644 index 000000000..367bb1bf9 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjE3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBuYW1lZEZ1bmN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiQkaW1wbCwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiBhcyBuYW1lZEZ1bmN0aW9uIH07CgozMDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7OyJ9 +*/ + +'use server' + +async function namedFunction$$impl() { + return 'named function called' +} +const namedFunction = registerServerReference(namedFunction$$impl, "namedFunction"); +export { namedFunction as namedFunction }; + diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js new file mode 100644 index 000000000..f9b0e07f5 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js @@ -0,0 +1,12 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjM3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CjI2MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7In0= +*/ + +'use server' + +export { reexportedAction } from './reexport-source' + +import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; +registerServerReference($$effect_import_reexportedAction, "reexportedAction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js new file mode 100644 index 000000000..3f2baec49 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js @@ -0,0 +1,9 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#NjcAJ3VzZSBzZXJ2ZXInCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCjI1OAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07In0= +*/ + +'use server' + +export { reexportedAction } from './reexport-source' diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js new file mode 100644 index 000000000..afb0bdf19 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js @@ -0,0 +1,13 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjYzACd1c2Ugc2VydmVyJwoKCmltcG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gYXMgJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfcmVleHBvcnRlZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlX3JlZXhwb3J0ZWRBY3Rpb24gYXMgcmVleHBvcnRlZEFjdGlvbiB9OwoKMTc2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gfSBmcm9tICcuL3JlZXhwb3J0LXNvdXJjZSdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7Ozs7OyJ9 +*/ + +'use server' + + +import { reexportedAction as $$import_reexportedAction } from './reexport-source'; +const $$module_reexportedAction = registerServerReference($$import_reexportedAction, "reexportedAction"); +export { $$module_reexportedAction as reexportedAction }; + diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js new file mode 100644 index 000000000..5ee0ce693 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js @@ -0,0 +1,16 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#Mjk5ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpOwpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKNTQ2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRS9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQzs7OzsifQ== +*/ + +'use server' + +export const arrowFunction = async () => 'arrow function called' + +export const functionExpression = async function () { + return 'function expression called' +} + +registerServerReference(arrowFunction, "arrowFunction"); +registerServerReference(functionExpression, "functionExpression"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js new file mode 100644 index 000000000..c4b958ccc --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js @@ -0,0 +1,19 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#Njc0ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9hcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpCgpleHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzFfZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fycm93RnVuY3Rpb24oKSB7IHJldHVybiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJyB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMV9mdW5jdGlvbkV4cHJlc3Npb24oKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8xX2Z1bmN0aW9uRXhwcmVzc2lvbiwgIm5hbWUiLCB7IHZhbHVlOiAiZnVuY3Rpb25FeHByZXNzaW9uIiB9KTsKNDk0AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRTVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUZKO0FBQUEsMERBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRTdCO0FBQUEsc0RBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7OyJ9 +*/ + +'use server' + +export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_arrowFunction, "arrowFunction") + +export const functionExpression = /* #__PURE__ */ registerServerReference($$module_hoist_1_functionExpression, "functionExpression") + +;async function $$module_hoist_0_arrowFunction() { return 'arrow function called' }; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_arrowFunction, "name", { value: "arrowFunction" }); + +;async function $$module_hoist_1_functionExpression() { + return 'function expression called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_1_functionExpression, "name", { value: "functionExpression" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js new file mode 100644 index 000000000..6b0fd15ee --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js @@ -0,0 +1,19 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#NDU1ACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiQkaW1wbCA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCmNvbnN0IGFycm93RnVuY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uJCRpbXBsLCAiYXJyb3dGdW5jdGlvbiIpOwpleHBvcnQgeyBhcnJvd0Z1bmN0aW9uIGFzIGFycm93RnVuY3Rpb24gfTsKCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwgPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwsICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKZXhwb3J0IHsgZnVuY3Rpb25FeHByZXNzaW9uIGFzIGZ1bmN0aW9uRXhwcmVzc2lvbiB9OwoKNTMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7O0FBRXhELEtBQUssQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ3BDOzs7OyJ9 +*/ + +'use server' + +const arrowFunction$$impl = async () => 'arrow function called' +const arrowFunction = registerServerReference(arrowFunction$$impl, "arrowFunction"); +export { arrowFunction as arrowFunction }; + + +const functionExpression$$impl = async function () { + return 'function expression called' +} +const functionExpression = registerServerReference(functionExpression$$impl, "functionExpression"); +export { functionExpression as functionExpression }; + diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.wrap-export.snap.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 2f6a79ad4..b5151d09d 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -2,27 +2,59 @@ import path from 'node:path' import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformHoistInlineDirective } from './hoist' +import { transformModuleExport } from './module-export' +import { transformModuleExportEffect } from './module-export-effect' +import { transformModuleExportHoist } from './module-export-hoist' import { formatSourceMapFixture } from './test-utils' import { transformWrapExport } from './wrap-export' describe('source map fixtures', () => { - const wrapExportFixtures = import.meta.glob( + const moduleExportFixtures = import.meta.glob( ['./fixtures/source-map/wrap-export/**/*.js', '!**/*.snap.*'], { query: 'raw' }, ) - for (const [file, load] of Object.entries(wrapExportFixtures)) { - test(`wrap-export/${path.basename(file)}`, async () => { - const input = ((await load()) as any).default as string - const ast = await parseAstAsync(input) - const result = transformWrapExport(input, ast, { - runtime: (value, name) => - `registerServerReference(${value}, ${JSON.stringify(name)})`, + const moduleExportModels = [ + 'wrap-export', + 'module-export', + 'module-export-effect', + 'module-export-hoist', + ] as const + + for (const model of moduleExportModels) { + for (const [file, load] of Object.entries(moduleExportFixtures)) { + test(`${model}/${path.basename(file)}`, async () => { + const input = ((await load()) as any).default as string + const ast = await parseAstAsync(input) + let output + if (model === 'wrap-export') { + output = transformWrapExport(input, ast, { + runtime: (value, name) => + `registerServerReference(${value}, ${JSON.stringify(name)})`, + }).output + } else if (model === 'module-export') { + output = transformModuleExport(input, ast, { + generate: ({ implementation, binding, exportName }) => + `const ${binding} = registerServerReference(${implementation}, ${JSON.stringify(exportName)});\n` + + `export { ${binding} as ${exportName} };`, + }).output + } else if (model === 'module-export-effect') { + output = transformModuleExportEffect(input, ast, { + generate: ({ binding, exportName }) => + `registerServerReference(${binding}, ${JSON.stringify(exportName)});`, + }).output + } else { + output = transformModuleExportHoist(input, ast, { + directive: 'use server', + runtime: ({ implementation, exportName }) => + `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, + }).output + } + await expect(formatSourceMapFixture(output)).toMatchFileSnapshot( + `${file}.${model}.snap.js`, + ) }) - await expect(formatSourceMapFixture(result.output)).toMatchFileSnapshot( - file + '.snap.js', - ) - }) + } } const hoistFixtures = import.meta.glob( From 62ab0cc94af942c551fb9c09be83aebc695b670e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 14:12:57 +0900 Subject: [PATCH 09/52] refactor(rsc): simplify module export names Co-authored-by: OpenCode --- .../src/transforms/module-export-effect.ts | 13 +-- .../src/transforms/module-export-hoist.ts | 13 +-- .../src/transforms/module-export.test.ts | 6 +- .../src/transforms/module-export.ts | 86 +++---------------- 4 files changed, 16 insertions(+), 102 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.ts b/packages/plugin-rsc/src/transforms/module-export-effect.ts index eaadb568c..7eab5ee18 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.ts @@ -6,7 +6,6 @@ import type { TransformModuleExportFilter, TransformModuleExportMeta, } from './module-export' -import { buildScopeTree } from './scope' import { extractNames, validateNonAsyncFunction } from './utils' export type TransformModuleExportEffectContext = { @@ -40,14 +39,6 @@ export function transformModuleExportEffect( const filter = options.filter ?? (() => true) const references: TransformModuleExportEffectContext[] = [] const effects: string[] = [] - const usedNames = new Set(buildScopeTree(ast).moduleScope.declarations) - - function allocateName(base: string): string { - let name = base - for (let i = 2; usedNames.has(name); i++) name = `${base}_${i}` - usedNames.add(name) - return name - } function generate(context: TransformModuleExportEffectContext): void { references.push(context) @@ -114,7 +105,7 @@ export function transformModuleExportEffect( let binding = specifier.local.name if (node.source) { - binding = allocateName(`$$effect_import_${binding}`) + binding = `$$effect_import_${exportName}` const sourceTail = input .slice(node.source.end, node.end) .replace(/;?\s*$/, ';') @@ -153,7 +144,7 @@ export function transformModuleExportEffect( binding = node.declaration.name meta = { defaultExportIdentifierName: binding } } else { - binding = allocateName('$$effect_default') + binding = '$$effect_default' meta = { isFunction: getIsFunction(node.declaration) } } if (!filter('default', meta)) continue diff --git a/packages/plugin-rsc/src/transforms/module-export-hoist.ts b/packages/plugin-rsc/src/transforms/module-export-hoist.ts index b13314fd7..bcb94d113 100644 --- a/packages/plugin-rsc/src/transforms/module-export-hoist.ts +++ b/packages/plugin-rsc/src/transforms/module-export-hoist.ts @@ -13,7 +13,6 @@ import type { TransformModuleExportFilter, TransformModuleExportMeta, } from './module-export' -import { buildScopeTree } from './scope' import { hasDirective, validateNonAsyncFunction } from './utils' type DefaultFunctionDeclaration = Extract< @@ -71,7 +70,6 @@ export function transformModuleExportHoist( return { output, references, referenceNames: [] } } - const usedNames = new Set(buildScopeTree(ast).moduleScope.declarations) const candidates: HoistCandidate[] = [] for (const statement of ast.body) { @@ -137,13 +135,6 @@ export function transformModuleExportHoist( } } - function allocateName(base: string): string { - let name = base - for (let i = 2; usedNames.has(name); i++) name = `${base}_${i}` - usedNames.add(name) - return name - } - for (const candidate of candidates) { if (!filter(candidate.exportName, candidate.meta)) continue const node = candidate.node @@ -155,9 +146,7 @@ export function transformModuleExportHoist( } validateNonAsyncFunction(options, node) - const implementation = allocateName( - `$$module_hoist_${references.length}_${candidate.sourceName}`, - ) + const implementation = `$$module_hoist_${references.length}_${candidate.sourceName}` const params = node.params .map((parameter) => input.slice(parameter.start, parameter.end)) .join(', ') diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts index e76878d9a..e426decc6 100644 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -69,7 +69,7 @@ export default async function Page() {} `) }) - test('handles aliases, re-exports, filtering, and name collisions', async () => { + test('handles aliases, re-exports, and filtering', async () => { const result = await transform( ` export { value as action, exposed as skipped } @@ -93,8 +93,8 @@ export * from './other' const value = async () => {} const exposed = 0 - import { remote as $$import_remote } from './dep'; - const $$module_action2 = wrap($$import_remote, "action2"); + import { remote as $$import_action2 } from './dep'; + const $$module_action2 = wrap($$import_action2, "action2"); export { $$module_action2 as action2 }; export * from './other' diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts index 8bb2fea1c..14af64283 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -8,7 +8,6 @@ import type { } from 'estree' import MagicString from 'magic-string' import type { ESTree } from 'vite' -import { buildScopeTree } from './scope' import { extractIdentifiers, validateNonAsyncFunction } from './utils' export type TransformModuleExportMeta = { @@ -23,7 +22,7 @@ export type TransformModuleExportMeta = { export type TransformModuleExportGenerateContext = { /** Private source implementation or imported/local value being transformed. */ implementation: string - /** Collision-free local name reserved for the canonical runtime result. */ + /** Generated local name reserved for the canonical runtime result. */ binding: string /** Public module export name, including `default`. */ exportName: string @@ -81,8 +80,8 @@ export type TransformModuleExportResult = { * export position. * * This canonical-binding model intentionally does not preserve source function - * hoisting under the exported name. Selected mutable, destructured, and duplicate - * declaration bindings are rejected instead of receiving implicit reassignment + * hoisting under the exported name. Selected mutable and destructured declaration + * bindings are rejected instead of receiving implicit reassignment * semantics from the deprecated `transformWrapExport` transform. */ export function transformModuleExport( @@ -95,17 +94,6 @@ export function transformModuleExport( const references: TransformModuleExportGenerateContext[] = [] const emissions = new Map() const filter = options.filter ?? (() => true) - const usedNames = new Set(buildScopeTree(ast).moduleScope.declarations) - const declarationCounts = getModuleDeclarationCounts(ast) - - function allocateName(base: string): string { - let name = base - for (let i = 2; usedNames.has(name); i++) { - name = `${base}_${i}` - } - usedNames.add(name) - return name - } function extractDeclaration( identifier: Identifier, @@ -114,19 +102,9 @@ export function transformModuleExport( position: number, ): void { const localName = identifier.name - if (declarationCounts.get(localName) !== 1) { - throw Object.assign(new Error('unsupported duplicate export binding'), { - pos: identifier.start, - }) - } - const implementation = allocateName(`${localName}$$impl`) + const implementation = `${localName}$$impl` output.update(identifier.start, identifier.end, implementation) - - // The source name is available for the generated canonical binding after - // its declaration is renamed to the private implementation. - usedNames.delete(localName) - const binding = allocateName(localName) - generate({ implementation, binding, exportName, meta }, position) + generate({ implementation, binding: localName, exportName, meta }, position) } function emit(position: number, code: string): void { @@ -300,13 +278,13 @@ export function transformModuleExport( // re-exports whose imported implementation is available immediately. const position = node.source ? node.end : input.length if (node.source) { - implementation = allocateName(`$$import_${item.localName}`) + implementation = `$$import_${item.exportName}` emit( node.end, `import { ${item.localName} as ${implementation} } from ${node.source.raw}${sourceTail}`, ) } - const binding = allocateName(`$$module_${item.exportName}`) + const binding = `$$module_${item.exportName}` generate( { implementation, @@ -347,17 +325,8 @@ export function transformModuleExport( validateNonAsyncFunction(options, node.declaration) output.remove(node.start, node.declaration.start) - if (declarationCounts.get(identifier.name) !== 1) { - throw Object.assign( - new Error('unsupported duplicate export binding'), - { - pos: identifier.start, - }, - ) - } - implementation = allocateName(`${identifier.name}$$impl`) + implementation = `${identifier.name}$$impl` output.update(identifier.start, identifier.end, implementation) - usedNames.delete(identifier.name) bindingBase = identifier.name } else { meta = { @@ -374,7 +343,7 @@ export function transformModuleExport( implementation = node.declaration.name output.remove(node.start, node.end) } else { - implementation = allocateName('$$default$$impl') + implementation = '$$default$$impl' output.update( node.start, node.declaration.start, @@ -383,7 +352,7 @@ export function transformModuleExport( } } - const binding = allocateName(bindingBase) + const binding = bindingBase generate( { implementation, binding, exportName: 'default', meta }, node.end, @@ -402,41 +371,6 @@ export function transformModuleExport( } } -function getModuleDeclarationCounts(ast: Program): Map { - const counts = new Map() - const add = (name: string) => counts.set(name, (counts.get(name) ?? 0) + 1) - - for (const statement of ast.body) { - if (statement.type === 'ImportDeclaration') { - for (const specifier of statement.specifiers) add(specifier.local.name) - continue - } - - const declaration = - statement.type === 'ExportNamedDeclaration' || - statement.type === 'ExportDefaultDeclaration' - ? statement.declaration - : statement - if (!declaration) continue - - if (declaration.type === 'VariableDeclaration') { - for (const declarator of declaration.declarations) { - for (const identifier of extractIdentifiers(declarator.id)) { - add(identifier.name) - } - } - } else if ( - (declaration.type === 'FunctionDeclaration' || - declaration.type === 'ClassDeclaration') && - declaration.id - ) { - add(declaration.id.name) - } - } - - return counts -} - function getIsFunction( node: Node | ExportDefaultDeclaration['declaration'], ): boolean | undefined { From d9049478420c772d01f9074464f6926eb9dec4ec Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 14:25:37 +0900 Subject: [PATCH 10/52] test(rsc): group module export source maps Co-authored-by: OpenCode --- ...-anonymous.js.module-export-effect.snap.js | 14 --- ...t-anonymous.js.module-export-hoist.snap.js | 14 --- ...default-anonymous.js.module-export.snap.js | 14 --- .../wrap-export/default-anonymous.js.snap.md | 69 +++++++++++++ .../default-anonymous.js.wrap-export.snap.js | 14 --- ...identifier.js.module-export-effect.snap.js | 15 --- ...-identifier.js.module-export-hoist.snap.js | 13 --- ...efault-identifier.js.module-export.snap.js | 16 ---- .../wrap-export/default-identifier.js.snap.md | 75 +++++++++++++++ .../default-identifier.js.wrap-export.snap.js | 16 ---- ...ault-named.js.module-export-effect.snap.js | 13 --- ...fault-named.js.module-export-hoist.snap.js | 15 --- .../default-named.js.module-export.snap.js | 14 --- .../wrap-export/default-named.js.snap.md | 69 +++++++++++++ .../default-named.js.wrap-export.snap.js | 14 --- ...ocal-alias.js.module-export-effect.snap.js | 15 --- ...local-alias.js.module-export-hoist.snap.js | 13 --- .../local-alias.js.module-export.snap.js | 16 ---- .../wrap-export/local-alias.js.snap.md | 75 +++++++++++++++ .../local-alias.js.wrap-export.snap.js | 16 ---- ...le-exports.js.module-export-effect.snap.js | 18 ---- ...ple-exports.js.module-export-hoist.snap.js | 21 ---- .../multiple-exports.js.module-export.snap.js | 21 ---- .../wrap-export/multiple-exports.js.snap.md | 96 +++++++++++++++++++ .../multiple-exports.js.wrap-export.snap.js | 19 ---- ...d-function.js.module-export-effect.snap.js | 13 --- ...ed-function.js.module-export-hoist.snap.js | 14 --- .../named-function.js.module-export.snap.js | 14 --- .../wrap-export/named-function.js.snap.md | 67 +++++++++++++ .../named-function.js.wrap-export.snap.js | 13 --- .../reexport.js.module-export-effect.snap.js | 12 --- .../reexport.js.module-export-hoist.snap.js | 9 -- .../reexport.js.module-export.snap.js | 13 --- .../wrap-export/reexport.js.snap.md | 58 +++++++++++ .../reexport.js.wrap-export.snap.js | 13 --- .../variables.js.module-export-effect.snap.js | 16 ---- .../variables.js.module-export-hoist.snap.js | 19 ---- .../variables.js.module-export.snap.js | 19 ---- .../wrap-export/variables.js.snap.md | 86 +++++++++++++++++ .../variables.js.wrap-export.snap.js | 17 ---- .../src/transforms/source-map.test.ts | 24 +++-- .../plugin-rsc/src/transforms/test-utils.ts | 20 ++++ 42 files changed, 629 insertions(+), 493 deletions(-) delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.wrap-export.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.wrap-export.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.wrap-export.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.wrap-export.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.wrap-export.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.wrap-export.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.wrap-export.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.wrap-export.snap.js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js deleted file mode 100644 index f9c8eb700..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-effect.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCx5QkFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzs7OyJ9 -*/ - -'use server' - -const $$effect_default = async function () { - return 'default anonymous function called' -} -export default $$effect_default; - -registerServerReference($$effect_default, "default"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js deleted file mode 100644 index 9fd8d9714..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export-hoist.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MzM1ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJkZWZhdWx0IikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fub255bW91c19kZWZhdWx0KCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImFub255bW91c19kZWZhdWx0IiB9KTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsT0FBTztBQUFDO0FBQUEscURBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzsifQ== -*/ - -'use server' - -export default /* #__PURE__ */ registerServerReference($$module_hoist_0_anonymous_default, "default") - -;async function $$module_hoist_0_anonymous_default() { - return 'default anonymous function called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_anonymous_default, "name", { value: "anonymous_default" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js deleted file mode 100644 index 03cf36fa7..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.module-export.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjEwACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0JCRpbXBsID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CmNvbnN0ICQkZGVmYXVsdCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCQkaW1wbCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKCjMyMwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsd0JBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMzQzs7OzsifQ== -*/ - -'use server' - -const $$default$$impl = async function () { - return 'default anonymous function called' -} -const $$default = registerServerReference($$default$$impl, "default"); -export { $$default as default }; - 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 new file mode 100644 index 000000000..4ad95ddfd --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md @@ -0,0 +1,69 @@ +## Input + +```js +'use server' + +export default async function () { + return 'default anonymous function called' +} +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CjsKY29uc3QgJCR3cmFwXyQkZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGRlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkd3JhcF8kJGRlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLGtCQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0=) + +```js +'use server' + +const $$default = async function () { + return 'default anonymous function called' +} +; +const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); +export { $$wrap_$$default as default }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjEwACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0JCRpbXBsID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CmNvbnN0ICQkZGVmYXVsdCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCQkaW1wbCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKCjMyMwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsd0JBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMzQzs7OzsifQ==) + +```js +'use server' + +const $$default$$impl = async function () { + return 'default anonymous function called' +} +const $$default = registerServerReference($$default$$impl, "default"); +export { $$default as default }; + +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCx5QkFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzs7OyJ9) + +```js +'use server' + +const $$effect_default = async function () { + return 'default anonymous function called' +} +export default $$effect_default; + +registerServerReference($$effect_default, "default"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzM1ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJkZWZhdWx0IikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fub255bW91c19kZWZhdWx0KCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImFub255bW91c19kZWZhdWx0IiB9KTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsT0FBTztBQUFDO0FBQUEscURBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzsifQ==) + +```js +'use server' + +export default /* #__PURE__ */ registerServerReference($$module_hoist_0_anonymous_default, "default") + +;async function $$module_hoist_0_anonymous_default() { + return 'default anonymous function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_anonymous_default, "name", { value: "anonymous_default" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.wrap-export.snap.js deleted file mode 100644 index d1fd45515..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.wrap-export.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CjsKY29uc3QgJCR3cmFwXyQkZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGRlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkd3JhcF8kJGRlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLGtCQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0= -*/ - -'use server' - -const $$default = async function () { - return 'default anonymous function called' -} -; -const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); -export { $$wrap_$$default as default }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js deleted file mode 100644 index ac3810316..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-effect.snap.js +++ /dev/null @@ -1,15 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTgwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CjM2OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNuQzs7QUFFQSxNQUFNLENBQUMsT0FBTyxDQUFDOzs7In0= -*/ - -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -export default defaultIdentifier - -registerServerReference(defaultIdentifier, "default"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js deleted file mode 100644 index 6d2d91d5b..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export-hoist.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTI0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgozNjcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRUEsTUFBTSxDQUFDLE9BQU8sQ0FBQzsifQ== -*/ - -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -export default defaultIdentifier diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js deleted file mode 100644 index bb580aa1a..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.module-export.snap.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTk5ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgoKY29uc3QgJCRkZWZhdWx0ID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CgozNDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7Ozs7OzsifQ== -*/ - -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - - -const $$default = registerServerReference(defaultIdentifier, "default"); -export { $$default as default }; - 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 new file mode 100644 index 000000000..5531766b9 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md @@ -0,0 +1,75 @@ +## Input + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +export default defaultIdentifier +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjU3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGRlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgo7CmNvbnN0ICQkd3JhcF8kJGRlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRkZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJHdyYXBfJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLGtCQUFlOzs7OyJ9) + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +const $$default = defaultIdentifier +; +const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); +export { $$wrap_$$default as default }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk5ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgoKY29uc3QgJCRkZWZhdWx0ID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CgozNDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7Ozs7OzsifQ==) + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + + +const $$default = registerServerReference(defaultIdentifier, "default"); +export { $$default as default }; + +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTgwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CjM2OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNuQzs7QUFFQSxNQUFNLENBQUMsT0FBTyxDQUFDOzs7In0=) + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +export default defaultIdentifier + +registerServerReference(defaultIdentifier, "default"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTI0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgozNjcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRUEsTUFBTSxDQUFDLE9BQU8sQ0FBQzsifQ==) + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +export default defaultIdentifier +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.wrap-export.snap.js deleted file mode 100644 index 8f8865f1e..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.wrap-export.snap.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjU3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGRlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgo7CmNvbnN0ICQkd3JhcF8kJGRlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRkZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJHdyYXBfJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLGtCQUFlOzs7OyJ9 -*/ - -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -const $$default = defaultIdentifier -; -const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); -export { $$wrap_$$default as default }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js deleted file mode 100644 index 7e778f877..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-effect.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CjM1OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBkZWZhdWx0TmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7OzsifQ== -*/ - -'use server' - -export default async function defaultNamedFunction() { - return 'default named function called' -} - -registerServerReference(defaultNamedFunction, "default"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js deleted file mode 100644 index 2646d81f9..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export-hoist.snap.js +++ /dev/null @@ -1,15 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#Mzk1ACd1c2Ugc2VydmVyJwoKY29uc3QgZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgZGVmYXVsdE5hbWVkRnVuY3Rpb247Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHROYW1lZEZ1bmN0aW9uIiB9KTsKMzEwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07Ozs7QUFFSTtBQUFBLHdEQUFzQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7In0= -*/ - -'use server' - -const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_defaultNamedFunction, "default"); -export default defaultNamedFunction; - -;async function $$module_hoist_0_defaultNamedFunction() { - return 'default named function called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_defaultNamedFunction, "name", { value: "defaultNamedFunction" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js deleted file mode 100644 index eaa62a1a2..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.module-export.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjQxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBkZWZhdWx0TmFtZWRGdW5jdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRlZmF1bHROYW1lZEZ1bmN0aW9uJCRpbXBsLCAiZGVmYXVsdCIpOwpleHBvcnQgeyBkZWZhdWx0TmFtZWRGdW5jdGlvbiBhcyBkZWZhdWx0IH07CgozNDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLDBCQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OzsifQ== -*/ - -'use server' - -async function defaultNamedFunction$$impl() { - return 'default named function called' -} -const defaultNamedFunction = registerServerReference(defaultNamedFunction$$impl, "default"); -export { defaultNamedFunction as default }; - 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 new file mode 100644 index 000000000..754dcbbe3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md @@ -0,0 +1,69 @@ +## Input + +```js +'use server' + +export default async function defaultNamedFunction() { + return 'default named function called' +} +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjYwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQo7CmNvbnN0ICQkd3JhcF9kZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShkZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX2RlZmF1bHROYW1lZEZ1bmN0aW9uIGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) + +```js +'use server' + +async function defaultNamedFunction() { + return 'default named function called' +} +; +const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, "default"); +export { $$wrap_defaultNamedFunction as default }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjQxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBkZWZhdWx0TmFtZWRGdW5jdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRlZmF1bHROYW1lZEZ1bmN0aW9uJCRpbXBsLCAiZGVmYXVsdCIpOwpleHBvcnQgeyBkZWZhdWx0TmFtZWRGdW5jdGlvbiBhcyBkZWZhdWx0IH07CgozNDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLDBCQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OzsifQ==) + +```js +'use server' + +async function defaultNamedFunction$$impl() { + return 'default named function called' +} +const defaultNamedFunction = registerServerReference(defaultNamedFunction$$impl, "default"); +export { defaultNamedFunction as default }; + +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CjM1OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBkZWZhdWx0TmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7OzsifQ==) + +```js +'use server' + +export default async function defaultNamedFunction() { + return 'default named function called' +} + +registerServerReference(defaultNamedFunction, "default"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#Mzk1ACd1c2Ugc2VydmVyJwoKY29uc3QgZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgZGVmYXVsdE5hbWVkRnVuY3Rpb247Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHROYW1lZEZ1bmN0aW9uIiB9KTsKMzEwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07Ozs7QUFFSTtBQUFBLHdEQUFzQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7In0=) + +```js +'use server' + +const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_defaultNamedFunction, "default"); +export default defaultNamedFunction; + +;async function $$module_hoist_0_defaultNamedFunction() { + return 'default named function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_defaultNamedFunction, "name", { value: "defaultNamedFunction" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.wrap-export.snap.js deleted file mode 100644 index 6480fb172..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.wrap-export.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjYwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQo7CmNvbnN0ICQkd3JhcF9kZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShkZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX2RlZmF1bHROYW1lZEZ1bmN0aW9uIGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0= -*/ - -'use server' - -async function defaultNamedFunction() { - return 'default named function called' -} -; -const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, "default"); -export { $$wrap_defaultNamedFunction as default }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js deleted file mode 100644 index 240204610..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-effect.snap.js +++ /dev/null @@ -1,15 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGxvY2FsQWxpYXMsICJhbGlhc2VkQWN0aW9uIik7CjM4OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOztBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7OzsifQ== -*/ - -'use server' - -async function localAlias() { - return 'local alias called' -} - -export { localAlias as aliasedAction } - -registerServerReference(localAlias, "aliasedAction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js deleted file mode 100644 index e963a40eb..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export-hoist.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGxvY2FsQWxpYXMoKSB7XG4gIHJldHVybiAnbG9jYWwgYWxpYXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUI7O0FBRUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQzsifQ== -*/ - -'use server' - -async function localAlias() { - return 'local alias called' -} - -export { localAlias as aliasedAction } diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js deleted file mode 100644 index 8db29c5a3..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.module-export.snap.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV9hbGlhc2VkQWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfYWxpYXNlZEFjdGlvbiBhcyBhbGlhc2VkQWN0aW9uIH07CjMzNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOzs7Ozs7In0= -*/ - -'use server' - -async function localAlias() { - return 'local alias called' -} - - - -const $$module_aliasedAction = registerServerReference(localAlias, "aliasedAction"); -export { $$module_aliasedAction as aliasedAction }; 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 new file mode 100644 index 000000000..9a35395c4 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md @@ -0,0 +1,75 @@ +## Input + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + +export { localAlias as aliasedAction } +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX2xvY2FsQWxpYXMgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCR3cmFwX2xvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9OwozMzYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7Ozs7OyJ9) + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + + +; +const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); +export { $$wrap_localAlias as aliasedAction }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV9hbGlhc2VkQWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfYWxpYXNlZEFjdGlvbiBhcyBhbGlhc2VkQWN0aW9uIH07CjMzNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOzs7Ozs7In0=) + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + + + +const $$module_aliasedAction = registerServerReference(localAlias, "aliasedAction"); +export { $$module_aliasedAction as aliasedAction }; +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGxvY2FsQWxpYXMsICJhbGlhc2VkQWN0aW9uIik7CjM4OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOztBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7OzsifQ==) + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + +export { localAlias as aliasedAction } + +registerServerReference(localAlias, "aliasedAction"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGxvY2FsQWxpYXMoKSB7XG4gIHJldHVybiAnbG9jYWwgYWxpYXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUI7O0FBRUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQzsifQ==) + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + +export { localAlias as aliasedAction } +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.wrap-export.snap.js deleted file mode 100644 index ec5c2b8f0..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.wrap-export.snap.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX2xvY2FsQWxpYXMgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCR3cmFwX2xvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9OwozMzYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7Ozs7OyJ9 -*/ - -'use server' - -async function localAlias() { - return 'local alias called' -} - - -; -const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); -export { $$wrap_localAlias as aliasedAction }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js deleted file mode 100644 index caae66e9a..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-effect.snap.js +++ /dev/null @@ -1,18 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjY4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwo1MDcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7O0FBRUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9 -*/ - -'use server' - -export async function firstAction() { - return 'first action called' -} - -export async function secondAction() { - return 'second action called' -} - -registerServerReference(firstAction, "firstAction"); -registerServerReference(secondAction, "secondAction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js deleted file mode 100644 index 1286692a1..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export-hoist.snap.js +++ /dev/null @@ -1,21 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#NjIyACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwoKZXhwb3J0IGNvbnN0IHNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0QWN0aW9uIiB9KTsKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzFfc2Vjb25kQWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJzZWNvbmRBY3Rpb24iIH0pOwo0NTAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNOztBQUlOLE1BQU07QUFKQztBQUFBLCtDQUE2QjtBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPO0FBQUEsZ0RBQThCO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7OyJ9 -*/ - -'use server' - -export const firstAction = /* #__PURE__ */ registerServerReference($$module_hoist_0_firstAction, "firstAction"); - -export const secondAction = /* #__PURE__ */ registerServerReference($$module_hoist_1_secondAction, "secondAction"); - -;async function $$module_hoist_0_firstAction() { - return 'first action called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_firstAction, "name", { value: "firstAction" }); - -;async function $$module_hoist_1_secondAction() { - return 'second action called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_1_secondAction, "name", { value: "secondAction" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js deleted file mode 100644 index 4a85a4665..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.module-export.snap.js +++ /dev/null @@ -1,21 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#NDAwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IGZpcnN0QWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24kJGltcGwsICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiBhcyBmaXJzdEFjdGlvbiB9OwoKCmFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IHNlY29uZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiQkaW1wbCwgInNlY29uZEFjdGlvbiIpOwpleHBvcnQgeyBzZWNvbmRBY3Rpb24gYXMgc2Vjb25kQWN0aW9uIH07Cgo0OTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7Ozs7O0FBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9 -*/ - -'use server' - -async function firstAction$$impl() { - return 'first action called' -} -const firstAction = registerServerReference(firstAction$$impl, "firstAction"); -export { firstAction as firstAction }; - - -async function secondAction$$impl() { - return 'second action called' -} -const secondAction = registerServerReference(secondAction$$impl, "secondAction"); -export { secondAction as secondAction }; - 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 new file mode 100644 index 000000000..dd12ab3ea --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md @@ -0,0 +1,96 @@ +## Input + +```js +'use server' + +export async function firstAction() { + return 'first action called' +} + +export async function secondAction() { + return 'second action called' +} +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzYzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQpmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CmV4cG9ydCB7IGZpcnN0QWN0aW9uIH07CnNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKZXhwb3J0IHsgc2Vjb25kQWN0aW9uIH07CjUwNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7XG4gIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCdcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHtcbiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FBTkE7QUFBQTtBQUlBO0FBQUE7In0=) + +```js +'use server' + +async function firstAction() { + return 'first action called' +} + +async function secondAction() { + return 'second action called' +} +firstAction = /* #__PURE__ */ registerServerReference(firstAction, "firstAction"); +export { firstAction }; +secondAction = /* #__PURE__ */ registerServerReference(secondAction, "secondAction"); +export { secondAction }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDAwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IGZpcnN0QWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24kJGltcGwsICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiBhcyBmaXJzdEFjdGlvbiB9OwoKCmFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IHNlY29uZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiQkaW1wbCwgInNlY29uZEFjdGlvbiIpOwpleHBvcnQgeyBzZWNvbmRBY3Rpb24gYXMgc2Vjb25kQWN0aW9uIH07Cgo0OTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7Ozs7O0FBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9) + +```js +'use server' + +async function firstAction$$impl() { + return 'first action called' +} +const firstAction = registerServerReference(firstAction$$impl, "firstAction"); +export { firstAction as firstAction }; + + +async function secondAction$$impl() { + return 'second action called' +} +const secondAction = registerServerReference(secondAction$$impl, "secondAction"); +export { secondAction as secondAction }; + +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjY4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwo1MDcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7O0FBRUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9) + +```js +'use server' + +export async function firstAction() { + return 'first action called' +} + +export async function secondAction() { + return 'second action called' +} + +registerServerReference(firstAction, "firstAction"); +registerServerReference(secondAction, "secondAction"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjIyACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwoKZXhwb3J0IGNvbnN0IHNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0QWN0aW9uIiB9KTsKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzFfc2Vjb25kQWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJzZWNvbmRBY3Rpb24iIH0pOwo0NTAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNOztBQUlOLE1BQU07QUFKQztBQUFBLCtDQUE2QjtBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPO0FBQUEsZ0RBQThCO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7OyJ9) + +```js +'use server' + +export const firstAction = /* #__PURE__ */ registerServerReference($$module_hoist_0_firstAction, "firstAction"); + +export const secondAction = /* #__PURE__ */ registerServerReference($$module_hoist_1_secondAction, "secondAction"); + +;async function $$module_hoist_0_firstAction() { + return 'first action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_firstAction, "name", { value: "firstAction" }); + +;async function $$module_hoist_1_secondAction() { + return 'second action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_1_secondAction, "name", { value: "secondAction" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.wrap-export.snap.js deleted file mode 100644 index 4cdb47bf3..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.wrap-export.snap.js +++ /dev/null @@ -1,19 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MzYzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQpmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CmV4cG9ydCB7IGZpcnN0QWN0aW9uIH07CnNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKZXhwb3J0IHsgc2Vjb25kQWN0aW9uIH07CjUwNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7XG4gIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCdcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHtcbiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FBTkE7QUFBQTtBQUlBO0FBQUE7In0= -*/ - -'use server' - -async function firstAction() { - return 'first action called' -} - -async function secondAction() { - return 'second action called' -} -firstAction = /* #__PURE__ */ registerServerReference(firstAction, "firstAction"); -export { firstAction }; -secondAction = /* #__PURE__ */ registerServerReference(secondAction, "secondAction"); -export { secondAction }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js deleted file mode 100644 index 9ac5214b0..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-effect.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTQ3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CjMxNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OzsifQ== -*/ - -'use server' - -export async function namedFunction() { - return 'named function called' -} - -registerServerReference(namedFunction, "namedFunction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js deleted file mode 100644 index 72c1949d1..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export-hoist.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MzI4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IG5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9uYW1lZEZ1bmN0aW9uLCAibmFtZWRGdW5jdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8wX25hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwoyODUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTTtBQUFDO0FBQUEsaURBQStCO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OyJ9 -*/ - -'use server' - -export const namedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_namedFunction, "namedFunction"); - -;async function $$module_hoist_0_namedFunction() { - return 'named function called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_namedFunction, "name", { value: "namedFunction" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js deleted file mode 100644 index 367bb1bf9..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.module-export.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjE3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBuYW1lZEZ1bmN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiQkaW1wbCwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiBhcyBuYW1lZEZ1bmN0aW9uIH07CgozMDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7OyJ9 -*/ - -'use server' - -async function namedFunction$$impl() { - return 'named function called' -} -const namedFunction = registerServerReference(namedFunction$$impl, "namedFunction"); -export { namedFunction as namedFunction }; - 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 new file mode 100644 index 000000000..7d7bca214 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md @@ -0,0 +1,67 @@ +## Input + +```js +'use server' + +export async function namedFunction() { + return 'named function called' +} +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpuYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CmV4cG9ydCB7IG5hbWVkRnVuY3Rpb24gfTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9CO0FBRkE7QUFBQTsifQ==) + +```js +'use server' + +async function namedFunction() { + return 'named function called' +} +namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, "namedFunction"); +export { namedFunction }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBuYW1lZEZ1bmN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiQkaW1wbCwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiBhcyBuYW1lZEZ1bmN0aW9uIH07CgozMDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7OyJ9) + +```js +'use server' + +async function namedFunction$$impl() { + return 'named function called' +} +const namedFunction = registerServerReference(namedFunction$$impl, "namedFunction"); +export { namedFunction as namedFunction }; + +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTQ3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CjMxNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OzsifQ==) + +```js +'use server' + +export async function namedFunction() { + return 'named function called' +} + +registerServerReference(namedFunction, "namedFunction"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzI4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IG5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9uYW1lZEZ1bmN0aW9uLCAibmFtZWRGdW5jdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8wX25hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwoyODUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTTtBQUFDO0FBQUEsaURBQStCO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OyJ9) + +```js +'use server' + +export const namedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_namedFunction, "namedFunction"); + +;async function $$module_hoist_0_namedFunction() { + return 'named function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_namedFunction, "name", { value: "namedFunction" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.wrap-export.snap.js deleted file mode 100644 index 3f597bb58..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.wrap-export.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTk3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpuYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CmV4cG9ydCB7IG5hbWVkRnVuY3Rpb24gfTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9CO0FBRkE7QUFBQTsifQ== -*/ - -'use server' - -async function namedFunction() { - return 'named function called' -} -namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, "namedFunction"); -export { namedFunction }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js deleted file mode 100644 index f9b0e07f5..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-effect.snap.js +++ /dev/null @@ -1,12 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjM3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CjI2MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7In0= -*/ - -'use server' - -export { reexportedAction } from './reexport-source' - -import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; -registerServerReference($$effect_import_reexportedAction, "reexportedAction"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js deleted file mode 100644 index 3f2baec49..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export-hoist.snap.js +++ /dev/null @@ -1,9 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#NjcAJ3VzZSBzZXJ2ZXInCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCjI1OAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07In0= -*/ - -'use server' - -export { reexportedAction } from './reexport-source' diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js deleted file mode 100644 index afb0bdf19..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.module-export.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjYzACd1c2Ugc2VydmVyJwoKCmltcG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gYXMgJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfcmVleHBvcnRlZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlX3JlZXhwb3J0ZWRBY3Rpb24gYXMgcmVleHBvcnRlZEFjdGlvbiB9OwoKMTc2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gfSBmcm9tICcuL3JlZXhwb3J0LXNvdXJjZSdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7Ozs7OyJ9 -*/ - -'use server' - - -import { reexportedAction as $$import_reexportedAction } from './reexport-source'; -const $$module_reexportedAction = registerServerReference($$import_reexportedAction, "reexportedAction"); -export { $$module_reexportedAction as reexportedAction }; - 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 new file mode 100644 index 000000000..a74cbd673 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md @@ -0,0 +1,58 @@ +## Input + +```js +'use server' + +export { reexportedAction } from './reexport-source' +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk0ACd1c2Ugc2VydmVyJwoKCjsKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnOwpjb25zdCAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ==) + +```js +'use server' + + +; +import { reexportedAction as $$import_reexportedAction } from './reexport-source'; +const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, "reexportedAction"); +export { $$wrap_$$import_reexportedAction as reexportedAction }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjYzACd1c2Ugc2VydmVyJwoKCmltcG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gYXMgJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfcmVleHBvcnRlZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlX3JlZXhwb3J0ZWRBY3Rpb24gYXMgcmVleHBvcnRlZEFjdGlvbiB9OwoKMTc2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gfSBmcm9tICcuL3JlZXhwb3J0LXNvdXJjZSdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7Ozs7OyJ9) + +```js +'use server' + + +import { reexportedAction as $$import_reexportedAction } from './reexport-source'; +const $$module_reexportedAction = registerServerReference($$import_reexportedAction, "reexportedAction"); +export { $$module_reexportedAction as reexportedAction }; + +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CjI2MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7In0=) + +```js +'use server' + +export { reexportedAction } from './reexport-source' + +import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; +registerServerReference($$effect_import_reexportedAction, "reexportedAction"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjcAJ3VzZSBzZXJ2ZXInCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCjI1OAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07In0=) + +```js +'use server' + +export { reexportedAction } from './reexport-source' +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.wrap-export.snap.js deleted file mode 100644 index f8c3429ef..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.wrap-export.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#Mjk0ACd1c2Ugc2VydmVyJwoKCjsKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnOwpjb25zdCAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ== -*/ - -'use server' - - -; -import { reexportedAction as $$import_reexportedAction } from './reexport-source'; -const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, "reexportedAction"); -export { $$wrap_$$import_reexportedAction as reexportedAction }; diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js deleted file mode 100644 index 5ee0ce693..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-effect.snap.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#Mjk5ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpOwpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKNTQ2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRS9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQzs7OzsifQ== -*/ - -'use server' - -export const arrowFunction = async () => 'arrow function called' - -export const functionExpression = async function () { - return 'function expression called' -} - -registerServerReference(arrowFunction, "arrowFunction"); -registerServerReference(functionExpression, "functionExpression"); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js deleted file mode 100644 index c4b958ccc..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export-hoist.snap.js +++ /dev/null @@ -1,19 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#Njc0ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9hcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpCgpleHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzFfZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fycm93RnVuY3Rpb24oKSB7IHJldHVybiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJyB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMV9mdW5jdGlvbkV4cHJlc3Npb24oKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8xX2Z1bmN0aW9uRXhwcmVzc2lvbiwgIm5hbWUiLCB7IHZhbHVlOiAiZnVuY3Rpb25FeHByZXNzaW9uIiB9KTsKNDk0AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRTVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUZKO0FBQUEsMERBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRTdCO0FBQUEsc0RBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7OyJ9 -*/ - -'use server' - -export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_arrowFunction, "arrowFunction") - -export const functionExpression = /* #__PURE__ */ registerServerReference($$module_hoist_1_functionExpression, "functionExpression") - -;async function $$module_hoist_0_arrowFunction() { return 'arrow function called' }; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_arrowFunction, "name", { value: "arrowFunction" }); - -;async function $$module_hoist_1_functionExpression() { - return 'function expression called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_1_functionExpression, "name", { value: "functionExpression" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js deleted file mode 100644 index 6b0fd15ee..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.module-export.snap.js +++ /dev/null @@ -1,19 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#NDU1ACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiQkaW1wbCA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCmNvbnN0IGFycm93RnVuY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uJCRpbXBsLCAiYXJyb3dGdW5jdGlvbiIpOwpleHBvcnQgeyBhcnJvd0Z1bmN0aW9uIGFzIGFycm93RnVuY3Rpb24gfTsKCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwgPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwsICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKZXhwb3J0IHsgZnVuY3Rpb25FeHByZXNzaW9uIGFzIGZ1bmN0aW9uRXhwcmVzc2lvbiB9OwoKNTMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7O0FBRXhELEtBQUssQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ3BDOzs7OyJ9 -*/ - -'use server' - -const arrowFunction$$impl = async () => 'arrow function called' -const arrowFunction = registerServerReference(arrowFunction$$impl, "arrowFunction"); -export { arrowFunction as arrowFunction }; - - -const functionExpression$$impl = async function () { - return 'function expression called' -} -const functionExpression = registerServerReference(functionExpression$$impl, "functionExpression"); -export { functionExpression as functionExpression }; - 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 new file mode 100644 index 000000000..ca192da54 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md @@ -0,0 +1,86 @@ +## Input + +```js +'use server' + +export const arrowFunction = async () => 'arrow function called' + +export const functionExpression = async function () { + return 'function expression called' +} +``` + +## wrap-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDA2ACd1c2Ugc2VydmVyJwoKbGV0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKbGV0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CmFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwpmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosR0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxHQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFFQTtBQUFBOyJ9) + +```js +'use server' + +let arrowFunction = async () => 'arrow function called' + +let functionExpression = async function () { + return 'function expression called' +} +arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, "arrowFunction"); +export { arrowFunction }; +functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, "functionExpression"); +export { functionExpression }; +``` + +## module-export + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDU1ACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiQkaW1wbCA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCmNvbnN0IGFycm93RnVuY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uJCRpbXBsLCAiYXJyb3dGdW5jdGlvbiIpOwpleHBvcnQgeyBhcnJvd0Z1bmN0aW9uIGFzIGFycm93RnVuY3Rpb24gfTsKCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwgPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwsICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKZXhwb3J0IHsgZnVuY3Rpb25FeHByZXNzaW9uIGFzIGZ1bmN0aW9uRXhwcmVzc2lvbiB9OwoKNTMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7O0FBRXhELEtBQUssQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ3BDOzs7OyJ9) + +```js +'use server' + +const arrowFunction$$impl = async () => 'arrow function called' +const arrowFunction = registerServerReference(arrowFunction$$impl, "arrowFunction"); +export { arrowFunction as arrowFunction }; + + +const functionExpression$$impl = async function () { + return 'function expression called' +} +const functionExpression = registerServerReference(functionExpression$$impl, "functionExpression"); +export { functionExpression as functionExpression }; + +``` + +## module-export-effect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk5ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpOwpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKNTQ2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRS9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQzs7OzsifQ==) + +```js +'use server' + +export const arrowFunction = async () => 'arrow function called' + +export const functionExpression = async function () { + return 'function expression called' +} + +registerServerReference(arrowFunction, "arrowFunction"); +registerServerReference(functionExpression, "functionExpression"); +``` + +## module-export-hoist + +[Source map visualization](https://evanw.github.io/source-map-visualization/#Njc0ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9hcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpCgpleHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzFfZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fycm93RnVuY3Rpb24oKSB7IHJldHVybiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJyB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMV9mdW5jdGlvbkV4cHJlc3Npb24oKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8xX2Z1bmN0aW9uRXhwcmVzc2lvbiwgIm5hbWUiLCB7IHZhbHVlOiAiZnVuY3Rpb25FeHByZXNzaW9uIiB9KTsKNDk0AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRTVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUZKO0FBQUEsMERBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRTdCO0FBQUEsc0RBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7OyJ9) + +```js +'use server' + +export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_arrowFunction, "arrowFunction") + +export const functionExpression = /* #__PURE__ */ registerServerReference($$module_hoist_1_functionExpression, "functionExpression") + +;async function $$module_hoist_0_arrowFunction() { return 'arrow function called' }; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_arrowFunction, "name", { value: "arrowFunction" }); + +;async function $$module_hoist_1_functionExpression() { + return 'function expression called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_1_functionExpression, "name", { value: "functionExpression" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.wrap-export.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.wrap-export.snap.js deleted file mode 100644 index 0c9760023..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.wrap-export.snap.js +++ /dev/null @@ -1,17 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#NDA2ACd1c2Ugc2VydmVyJwoKbGV0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKbGV0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CmFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwpmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosR0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxHQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFFQTtBQUFBOyJ9 -*/ - -'use server' - -let arrowFunction = async () => 'arrow function called' - -let functionExpression = async function () { - return 'function expression called' -} -arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, "arrowFunction"); -export { arrowFunction }; -functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, "functionExpression"); -export { functionExpression }; diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index b5151d09d..bc8bb5f84 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -5,7 +5,10 @@ import { transformHoistInlineDirective } from './hoist' import { transformModuleExport } from './module-export' import { transformModuleExportEffect } from './module-export-effect' import { transformModuleExportHoist } from './module-export-hoist' -import { formatSourceMapFixture } from './test-utils' +import { + formatSourceMapFixture, + formatSourceMapMarkdownFixture, +} from './test-utils' import { transformWrapExport } from './wrap-export' describe('source map fixtures', () => { @@ -21,11 +24,11 @@ describe('source map fixtures', () => { 'module-export-hoist', ] as const - for (const model of moduleExportModels) { - for (const [file, load] of Object.entries(moduleExportFixtures)) { - test(`${model}/${path.basename(file)}`, async () => { - const input = ((await load()) as any).default as string - const ast = await parseAstAsync(input) + for (const [file, load] of Object.entries(moduleExportFixtures)) { + test(`module-export-models/${path.basename(file)}`, async () => { + const input = ((await load()) as any).default as string + const ast = await parseAstAsync(input) + const outputs = moduleExportModels.map((model) => { let output if (model === 'wrap-export') { output = transformWrapExport(input, ast, { @@ -50,11 +53,12 @@ describe('source map fixtures', () => { `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, }).output } - await expect(formatSourceMapFixture(output)).toMatchFileSnapshot( - `${file}.${model}.snap.js`, - ) + return { name: model, output } }) - } + await expect( + formatSourceMapMarkdownFixture(input, outputs), + ).toMatchFileSnapshot(`${file}.snap.md`) + }) } const hoistFixtures = import.meta.glob( diff --git a/packages/plugin-rsc/src/transforms/test-utils.ts b/packages/plugin-rsc/src/transforms/test-utils.ts index 3a7bb0d58..2dd9ef027 100644 --- a/packages/plugin-rsc/src/transforms/test-utils.ts +++ b/packages/plugin-rsc/src/transforms/test-utils.ts @@ -13,6 +13,26 @@ ${visualization} ${code}` } +export function formatSourceMapMarkdownFixture( + input: string, + outputs: readonly { name: string; output: MagicString }[], +): string { + const sections = [`## Input\n\n${formatJavaScriptBlock(input)}`] + for (const { name, output } of outputs) { + const code = output.toString() + const map = output.generateMap({ includeContent: true, hires: 'boundary' }) + const visualization = generateVisualizationLink(code, map.toString()) + sections.push( + `## ${name}\n\n[Source map visualization](${visualization})\n\n${formatJavaScriptBlock(code)}`, + ) + } + return sections.join('\n\n') + '\n' +} + +function formatJavaScriptBlock(code: string): string { + return `\`\`\`js\n${code}${code.endsWith('\n') ? '' : '\n'}\`\`\`` +} + function generateVisualizationLink(code: string, map: string): string { const codeBuffer = Buffer.from(code) const mapBuffer = Buffer.from(map) From 3c7641e396f9bf9cb78dd77a1531fd31e50584c6 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 14:43:16 +0900 Subject: [PATCH 11/52] refactor(rsc): allow mutable module exports Co-authored-by: OpenCode --- .../src/transforms/module-export.test.ts | 26 ++++++++++++++----- .../src/transforms/module-export.ts | 13 +++------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts index e426decc6..f782b1257 100644 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -69,6 +69,26 @@ export default async function Page() {} `) }) + test('canonicalizes mutable declaration initial values', async () => { + const result = await transform(` +export var action = async () => {} +export let loader = async () => {} +`) + + expect(result.output.toString()).toMatchInlineSnapshot(` + " + var action$$impl = async () => {} + const action = wrap(action$$impl, \"action\"); + export { action as action }; + + let loader$$impl = async () => {} + const loader = wrap(loader$$impl, \"loader\"); + export { loader as loader }; + + " + `) + }) + test('handles aliases, re-exports, and filtering', async () => { const result = await transform( ` @@ -165,11 +185,5 @@ export default Page;` await expect(transform(`export const { action } = value`)).rejects.toThrow( 'unsupported destructured export declaration', ) - await expect( - transform(`export var action = async () => {}; var action;`), - ).rejects.toThrow('unsupported mutable export declaration') - await expect( - transform(`export let action = async () => {}`), - ).rejects.toThrow('unsupported mutable export declaration') }) }) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts index 14af64283..ba9a227d9 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -80,9 +80,9 @@ export type TransformModuleExportResult = { * export position. * * This canonical-binding model intentionally does not preserve source function - * hoisting under the exported name. Selected mutable and destructured declaration - * bindings are rejected instead of receiving implicit reassignment - * semantics from the deprecated `transformWrapExport` transform. + * hoisting or mutable reassignment under the exported name. Consumers can reject + * mutable declarations through `meta.declarationKind` when required. Selected + * destructured declaration bindings remain unsupported. */ export function transformModuleExport( input: string, @@ -218,13 +218,6 @@ export function transformModuleExport( ) { continue } - if (variableDeclaration.kind !== 'const') { - throw Object.assign( - new Error('unsupported mutable export declaration'), - { pos: variableDeclaration.start }, - ) - } - output.remove(node.start, variableDeclaration.start) for (const declaration of declarations) { for (const { identifier, meta } of declaration.selected) { From 9bb4d9556666465c8b0bd269ce3c56834121a85e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 14:57:32 +0900 Subject: [PATCH 12/52] test(rsc): compare module export coverage Co-authored-by: OpenCode --- .../wrap-export/default-anonymous.js.snap.md | 16 ++++ .../wrap-export/default-identifier.js.snap.md | 16 ++++ .../wrap-export/default-named.js.snap.md | 16 ++++ .../wrap-export/dependent-declarators.js | 4 + .../dependent-declarators.js.snap.md | 83 +++++++++++++++++ .../wrap-export/destructured-export.js | 5 + .../destructured-export.js.snap.md | 69 ++++++++++++++ .../wrap-export/local-alias.js.snap.md | 16 ++++ .../wrap-export/multiple-exports.js.snap.md | 16 ++++ .../wrap-export/named-function-expression.js | 5 + .../named-function-expression.js.snap.md | 72 ++++++++++++++ .../wrap-export/named-function.js.snap.md | 16 ++++ .../wrap-export/pre-declaration-reference.js | 7 ++ .../pre-declaration-reference.js.snap.md | 93 +++++++++++++++++++ .../wrap-export/reexport.js.snap.md | 16 ++++ .../wrap-export/variables.js.snap.md | 16 ++++ .../src/transforms/source-map.test.ts | 64 ++++++++----- .../plugin-rsc/src/transforms/test-utils.ts | 18 +++- 18 files changed, 521 insertions(+), 27 deletions(-) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md 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 4ad95ddfd..39fe6b4d2 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 @@ -10,6 +10,10 @@ export default async function () { ## wrap-export +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CjsKY29uc3QgJCR3cmFwXyQkZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGRlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkd3JhcF8kJGRlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLGtCQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0=) ```js @@ -25,6 +29,10 @@ export { $$wrap_$$default as default }; ## module-export +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjEwACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0JCRpbXBsID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CmNvbnN0ICQkZGVmYXVsdCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCQkaW1wbCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKCjMyMwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsd0JBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMzQzs7OzsifQ==) ```js @@ -40,6 +48,10 @@ export { $$default as default }; ## module-export-effect +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCx5QkFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzs7OyJ9) ```js @@ -55,6 +67,10 @@ registerServerReference($$effect_default, "default"); ## module-export-hoist +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MzM1ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJkZWZhdWx0IikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fub255bW91c19kZWZhdWx0KCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImFub255bW91c19kZWZhdWx0IiB9KTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsT0FBTztBQUFDO0FBQUEscURBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzsifQ==) ```js 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 5531766b9..95f4a90fd 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 @@ -12,6 +12,10 @@ export default defaultIdentifier ## wrap-export +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjU3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGRlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgo7CmNvbnN0ICQkd3JhcF8kJGRlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRkZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJHdyYXBfJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLGtCQUFlOzs7OyJ9) ```js @@ -29,6 +33,10 @@ export { $$wrap_$$default as default }; ## module-export +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTk5ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgoKY29uc3QgJCRkZWZhdWx0ID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CgozNDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7Ozs7OzsifQ==) ```js @@ -46,6 +54,10 @@ export { $$default as default }; ## module-export-effect +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTgwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CjM2OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNuQzs7QUFFQSxNQUFNLENBQUMsT0FBTyxDQUFDOzs7In0=) ```js @@ -62,6 +74,10 @@ registerServerReference(defaultIdentifier, "default"); ## module-export-hoist +**Status:** unchanged + +**References:** (none) + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTI0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgozNjcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRUEsTUFBTSxDQUFDLE9BQU8sQ0FBQzsifQ==) ```js 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 754dcbbe3..5b8e37110 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 @@ -10,6 +10,10 @@ export default async function defaultNamedFunction() { ## wrap-export +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjYwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQo7CmNvbnN0ICQkd3JhcF9kZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShkZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX2RlZmF1bHROYW1lZEZ1bmN0aW9uIGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) ```js @@ -25,6 +29,10 @@ export { $$wrap_defaultNamedFunction as default }; ## module-export +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjQxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBkZWZhdWx0TmFtZWRGdW5jdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRlZmF1bHROYW1lZEZ1bmN0aW9uJCRpbXBsLCAiZGVmYXVsdCIpOwpleHBvcnQgeyBkZWZhdWx0TmFtZWRGdW5jdGlvbiBhcyBkZWZhdWx0IH07CgozNDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLDBCQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OzsifQ==) ```js @@ -40,6 +48,10 @@ export { defaultNamedFunction as default }; ## module-export-effect +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CjM1OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBkZWZhdWx0TmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7OzsifQ==) ```js @@ -54,6 +66,10 @@ registerServerReference(defaultNamedFunction, "default"); ## module-export-hoist +**Status:** transformed + +**References:** default + [Source map visualization](https://evanw.github.io/source-map-visualization/#Mzk1ACd1c2Ugc2VydmVyJwoKY29uc3QgZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgZGVmYXVsdE5hbWVkRnVuY3Rpb247Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHROYW1lZEZ1bmN0aW9uIiB9KTsKMzEwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07Ozs7QUFFSTtBQUFBLHdEQUFzQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7In0=) ```js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js new file mode 100644 index 000000000..95a50e601 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js @@ -0,0 +1,4 @@ +'use server' + +export const first = async () => 'first action called', + second = first 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 new file mode 100644 index 000000000..4693f0337 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md @@ -0,0 +1,83 @@ +## Input + +```js +'use server' + +export const first = async () => 'first action called', + second = first +``` + +## wrap-export + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjQ4ACd1c2Ugc2VydmVyJwoKbGV0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLAogIHNlY29uZCA9IGZpcnN0CmZpcnN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZpcnN0LCAiZmlyc3QiKTsKZXhwb3J0IHsgZmlyc3QgfTsKc2Vjb25kID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwpleHBvcnQgeyBzZWNvbmQgfTsKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEdBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFg7QUFBQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +let first = async () => 'first action called', + second = first +first = /* #__PURE__ */ registerServerReference(first, "first"); +export { first }; +second = /* #__PURE__ */ registerServerReference(second, "second"); +export { second }; +``` + +## module-export + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjc0ACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QkJGltcGwgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kJCRpbXBsID0gZmlyc3QKY29uc3QgZmlyc3QgPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdCQkaW1wbCwgImZpcnN0Iik7CmV4cG9ydCB7IGZpcnN0IGFzIGZpcnN0IH07CmNvbnN0IHNlY29uZCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCQkaW1wbCwgInNlY29uZCIpOwpleHBvcnQgeyBzZWNvbmQgYXMgc2Vjb25kIH07CgozNDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFdBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEQsQ0FBQyxDQUFDLFlBQU0sQ0FBQyxDQUFDLENBQUM7Ozs7OzsifQ==) + +```js +'use server' + +const first$$impl = async () => 'first action called', + second$$impl = first +const first = registerServerReference(first$$impl, "first"); +export { first as first }; +const second = registerServerReference(second$$impl, "second"); +export { second as second }; + +``` + +## module-export-effect + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLAogIHNlY29uZCA9IGZpcnN0CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdCwgImZpcnN0Iik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwozNTEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7OyJ9) + +```js +'use server' + +export const first = async () => 'first action called', + second = first + +registerServerReference(first, "first"); +registerServerReference(second, "second"); +``` + +## module-export-hoist + +**Status:** transformed + +**References:** first + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjkzACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfZmlyc3QsICJmaXJzdCIpLAogIHNlY29uZCA9IGZpcnN0Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMF9maXJzdCgpIHsgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJyB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZmlyc3QsICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0IiB9KTsKMzIyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMseUVBQWtDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFU7QUFBQSxrREFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTs7In0=) + +```js +'use server' + +export const first = /* #__PURE__ */ registerServerReference($$module_hoist_0_first, "first"), + second = first + +;async function $$module_hoist_0_first() { return 'first action called' }; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_first, "name", { value: "first" }); +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js new file mode 100644 index 000000000..488a76ef3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js @@ -0,0 +1,5 @@ +'use server' + +const source = async () => 'destructured export called' + +export const { action } = { action: source } 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 new file mode 100644 index 000000000..9cf12a82a --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md @@ -0,0 +1,69 @@ +## Input + +```js +'use server' + +const source = async () => 'destructured export called' + +export const { action } = { action: source } +``` + +## wrap-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKbGV0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKNDMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmNvbnN0IHNvdXJjZSA9IGFzeW5jICgpID0+ICdkZXN0cnVjdHVyZWQgZXhwb3J0IGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7QUFFL0MsR0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQTNDO0FBQUE7In0=) + +```js +'use server' + +const source = async () => 'destructured export called' + +let { action } = { action: source } +action = /* #__PURE__ */ registerServerReference(action, "action"); +export { action }; +``` + +## module-export + +**Status:** error + +```text +unsupported destructured export declaration +``` + +## module-export-effect + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTYwACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwo0MzEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNOztBQUV0RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDOzs7In0=) + +```js +'use server' + +const source = async () => 'destructured export called' + +export const { action } = { action: source } + +registerServerReference(action, "action"); +``` + +## module-export-hoist + +**Status:** unchanged + +**References:** (none) + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTE2ACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH0KNDI5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmNvbnN0IHNvdXJjZSA9IGFzeW5jICgpID0+ICdkZXN0cnVjdHVyZWQgZXhwb3J0IGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7QUFFdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQzsifQ==) + +```js +'use server' + +const source = async () => 'destructured export called' + +export const { action } = { action: source } +``` 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 9a35395c4..4228063dd 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 @@ -12,6 +12,10 @@ export { localAlias as aliasedAction } ## wrap-export +**Status:** transformed + +**References:** aliasedAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX2xvY2FsQWxpYXMgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCR3cmFwX2xvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9OwozMzYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7Ozs7OyJ9) ```js @@ -29,6 +33,10 @@ export { $$wrap_localAlias as aliasedAction }; ## module-export +**Status:** transformed + +**References:** aliasedAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV9hbGlhc2VkQWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfYWxpYXNlZEFjdGlvbiBhcyBhbGlhc2VkQWN0aW9uIH07CjMzNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOzs7Ozs7In0=) ```js @@ -46,6 +54,10 @@ export { $$module_aliasedAction as aliasedAction }; ## module-export-effect +**Status:** transformed + +**References:** aliasedAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGxvY2FsQWxpYXMsICJhbGlhc2VkQWN0aW9uIik7CjM4OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOztBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7OzsifQ==) ```js @@ -62,6 +74,10 @@ registerServerReference(localAlias, "aliasedAction"); ## module-export-hoist +**Status:** unchanged + +**References:** (none) + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGxvY2FsQWxpYXMoKSB7XG4gIHJldHVybiAnbG9jYWwgYWxpYXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUI7O0FBRUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQzsifQ==) ```js 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 dd12ab3ea..117dbec01 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 @@ -14,6 +14,10 @@ export async function secondAction() { ## wrap-export +**Status:** transformed + +**References:** firstAction, secondAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MzYzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQpmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CmV4cG9ydCB7IGZpcnN0QWN0aW9uIH07CnNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKZXhwb3J0IHsgc2Vjb25kQWN0aW9uIH07CjUwNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7XG4gIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCdcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHtcbiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FBTkE7QUFBQTtBQUlBO0FBQUE7In0=) ```js @@ -34,6 +38,10 @@ export { secondAction }; ## module-export +**Status:** transformed + +**References:** firstAction, secondAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#NDAwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IGZpcnN0QWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24kJGltcGwsICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiBhcyBmaXJzdEFjdGlvbiB9OwoKCmFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IHNlY29uZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiQkaW1wbCwgInNlY29uZEFjdGlvbiIpOwpleHBvcnQgeyBzZWNvbmRBY3Rpb24gYXMgc2Vjb25kQWN0aW9uIH07Cgo0OTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7Ozs7O0FBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9) ```js @@ -56,6 +64,10 @@ export { secondAction as secondAction }; ## module-export-effect +**Status:** transformed + +**References:** firstAction, secondAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjY4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwo1MDcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7O0FBRUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9) ```js @@ -75,6 +87,10 @@ registerServerReference(secondAction, "secondAction"); ## module-export-hoist +**Status:** transformed + +**References:** firstAction, secondAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#NjIyACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwoKZXhwb3J0IGNvbnN0IHNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0QWN0aW9uIiB9KTsKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzFfc2Vjb25kQWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJzZWNvbmRBY3Rpb24iIH0pOwo0NTAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNOztBQUlOLE1BQU07QUFKQztBQUFBLCtDQUE2QjtBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPO0FBQUEsZ0RBQThCO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7OyJ9) ```js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js new file mode 100644 index 000000000..169221675 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js @@ -0,0 +1,5 @@ +'use server' + +export const action = async function actionImplementation() { + return 'named function expression called' +} 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 new file mode 100644 index 000000000..6eeb5420d --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md @@ -0,0 +1,72 @@ +## Input + +```js +'use server' + +export const action = async function actionImplementation() { + return 'named function expression called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjAwACd1c2Ugc2VydmVyJwoKbGV0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkgewogIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYWxsZWQnCn0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEdBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDO0FBRkE7QUFBQTsifQ==) + +```js +'use server' + +let action = async function actionImplementation() { + return 'named function expression called' +} +action = /* #__PURE__ */ registerServerReference(action, "action"); +export { action }; +``` + +## module-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE1ACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uJCRpbXBsID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQpjb25zdCBhY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24kJGltcGwsICJhY3Rpb24iKTsKZXhwb3J0IHsgYWN0aW9uIGFzIGFjdGlvbiB9OwoKMzgwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxZQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOzs7OyJ9) + +```js +'use server' + +const action$$impl = async function actionImplementation() { + return 'named function expression called' +} +const action = registerServerReference(action$$impl, "action"); +export { action as action }; + +``` + +## module-export-effect + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY2ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkgewogIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwozODkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOzs7In0=) + +```js +'use server' + +export const action = async function actionImplementation() { + return 'named function expression called' +} + +registerServerReference(action, "action"); +``` + +## module-export-hoist + +**Status:** error + +```text +unsupported named function expression export +``` 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 7d7bca214..acd0f4724 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 @@ -10,6 +10,10 @@ export async function namedFunction() { ## wrap-export +**Status:** transformed + +**References:** namedFunction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTk3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpuYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CmV4cG9ydCB7IG5hbWVkRnVuY3Rpb24gfTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9CO0FBRkE7QUFBQTsifQ==) ```js @@ -24,6 +28,10 @@ export { namedFunction }; ## module-export +**Status:** transformed + +**References:** namedFunction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjE3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBuYW1lZEZ1bmN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiQkaW1wbCwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiBhcyBuYW1lZEZ1bmN0aW9uIH07CgozMDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7OyJ9) ```js @@ -39,6 +47,10 @@ export { namedFunction as namedFunction }; ## module-export-effect +**Status:** transformed + +**References:** namedFunction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MTQ3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CjMxNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OzsifQ==) ```js @@ -53,6 +65,10 @@ registerServerReference(namedFunction, "namedFunction"); ## module-export-hoist +**Status:** transformed + +**References:** namedFunction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MzI4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IG5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9uYW1lZEZ1bmN0aW9uLCAibmFtZWRGdW5jdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8wX25hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwoyODUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTTtBQUFDO0FBQUEsaURBQStCO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OyJ9) ```js diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js new file mode 100644 index 000000000..151114097 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js @@ -0,0 +1,7 @@ +'use server' + +void action + +export async function action() { + return 'action called' +} 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 new file mode 100644 index 000000000..2f7b023ea --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md @@ -0,0 +1,93 @@ +## Input + +```js +'use server' + +void action + +export async function action() { + return 'action called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY3ACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzE4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCO0FBRkE7QUFBQTsifQ==) + +```js +'use server' + +void action + +async function action() { + return 'action called' +} +action = /* #__PURE__ */ registerServerReference(action, "action"); +export { action }; +``` + +## module-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTgwACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KY29uc3QgYWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uJCRpbXBsLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiBhcyBhY3Rpb24gfTsKCjMxMQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG52b2lkIGFjdGlvblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uKCkge1xuICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxJQUFJLENBQUM7O0FBRUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2Qjs7OzsifQ==) + +```js +'use server' + +void action + +async function action$$impl() { + return 'action called' +} +const action = registerServerReference(action$$impl, "action"); +export { action as action }; + +``` + +## module-export-effect + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTMxACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7CiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24sICJhY3Rpb24iKTsKMzIwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFTCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2Qjs7OyJ9) + +```js +'use server' + +void action + +export async function action() { + return 'action called' +} + +registerServerReference(action, "action"); +``` + +## module-export-hoist + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjkxACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmV4cG9ydCBjb25zdCBhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9hY3Rpb24sICJhY3Rpb24iKTsKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2FjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfaG9pc3RfMF9hY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbiIgfSk7CjI5MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG52b2lkIGFjdGlvblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uKCkge1xuICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxJQUFJLENBQUM7O0FBRUwsTUFBTTtBQUFDO0FBQUEsMENBQXdCO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2Qjs7In0=) + +```js +'use server' + +void action + +export const action = /* #__PURE__ */ registerServerReference($$module_hoist_0_action, "action"); + +;async function $$module_hoist_0_action() { + return 'action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_hoist_0_action, "name", { value: "action" }); +``` 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 a74cbd673..c9c6d6c21 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 @@ -8,6 +8,10 @@ export { reexportedAction } from './reexport-source' ## wrap-export +**Status:** transformed + +**References:** reexportedAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk0ACd1c2Ugc2VydmVyJwoKCjsKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnOwpjb25zdCAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ==) ```js @@ -22,6 +26,10 @@ export { $$wrap_$$import_reexportedAction as reexportedAction }; ## module-export +**Status:** transformed + +**References:** reexportedAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjYzACd1c2Ugc2VydmVyJwoKCmltcG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gYXMgJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfcmVleHBvcnRlZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlX3JlZXhwb3J0ZWRBY3Rpb24gYXMgcmVleHBvcnRlZEFjdGlvbiB9OwoKMTc2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gfSBmcm9tICcuL3JlZXhwb3J0LXNvdXJjZSdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7Ozs7OyJ9) ```js @@ -36,6 +44,10 @@ export { $$module_reexportedAction as reexportedAction }; ## module-export-effect +**Status:** transformed + +**References:** reexportedAction + [Source map visualization](https://evanw.github.io/source-map-visualization/#MjM3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CjI2MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7In0=) ```js @@ -49,6 +61,10 @@ registerServerReference($$effect_import_reexportedAction, "reexportedAction"); ## module-export-hoist +**Status:** unchanged + +**References:** (none) + [Source map visualization](https://evanw.github.io/source-map-visualization/#NjcAJ3VzZSBzZXJ2ZXInCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCjI1OAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07In0=) ```js 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 ca192da54..fc4feeb87 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 @@ -12,6 +12,10 @@ export const functionExpression = async function () { ## wrap-export +**Status:** transformed + +**References:** arrowFunction, functionExpression + [Source map visualization](https://evanw.github.io/source-map-visualization/#NDA2ACd1c2Ugc2VydmVyJwoKbGV0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKbGV0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CmFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwpmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosR0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxHQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFFQTtBQUFBOyJ9) ```js @@ -30,6 +34,10 @@ export { functionExpression }; ## module-export +**Status:** transformed + +**References:** arrowFunction, functionExpression + [Source map visualization](https://evanw.github.io/source-map-visualization/#NDU1ACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiQkaW1wbCA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCmNvbnN0IGFycm93RnVuY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uJCRpbXBsLCAiYXJyb3dGdW5jdGlvbiIpOwpleHBvcnQgeyBhcnJvd0Z1bmN0aW9uIGFzIGFycm93RnVuY3Rpb24gfTsKCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwgPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwsICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKZXhwb3J0IHsgZnVuY3Rpb25FeHByZXNzaW9uIGFzIGZ1bmN0aW9uRXhwcmVzc2lvbiB9OwoKNTMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7O0FBRXhELEtBQUssQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ3BDOzs7OyJ9) ```js @@ -50,6 +58,10 @@ export { functionExpression as functionExpression }; ## module-export-effect +**Status:** transformed + +**References:** arrowFunction, functionExpression + [Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk5ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpOwpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKNTQ2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRS9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQzs7OzsifQ==) ```js @@ -67,6 +79,10 @@ registerServerReference(functionExpression, "functionExpression"); ## module-export-hoist +**Status:** transformed + +**References:** arrowFunction, functionExpression + [Source map visualization](https://evanw.github.io/source-map-visualization/#Njc0ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9hcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpCgpleHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzFfZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fycm93RnVuY3Rpb24oKSB7IHJldHVybiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJyB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMV9mdW5jdGlvbkV4cHJlc3Npb24oKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8xX2Z1bmN0aW9uRXhwcmVzc2lvbiwgIm5hbWUiLCB7IHZhbHVlOiAiZnVuY3Rpb25FeHByZXNzaW9uIiB9KTsKNDk0AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRTVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUZKO0FBQUEsMERBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRTdCO0FBQUEsc0RBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7OyJ9) ```js diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index bc8bb5f84..b218f8f32 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -29,31 +29,47 @@ describe('source map fixtures', () => { const input = ((await load()) as any).default as string const ast = await parseAstAsync(input) const outputs = moduleExportModels.map((model) => { - let output - if (model === 'wrap-export') { - output = transformWrapExport(input, ast, { - runtime: (value, name) => - `registerServerReference(${value}, ${JSON.stringify(name)})`, - }).output - } else if (model === 'module-export') { - output = transformModuleExport(input, ast, { - generate: ({ implementation, binding, exportName }) => - `const ${binding} = registerServerReference(${implementation}, ${JSON.stringify(exportName)});\n` + - `export { ${binding} as ${exportName} };`, - }).output - } else if (model === 'module-export-effect') { - output = transformModuleExportEffect(input, ast, { - generate: ({ binding, exportName }) => - `registerServerReference(${binding}, ${JSON.stringify(exportName)});`, - }).output - } else { - output = transformModuleExportHoist(input, ast, { - directive: 'use server', - runtime: ({ implementation, exportName }) => - `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, - }).output + try { + let output + let references: string[] + if (model === 'wrap-export') { + const result = transformWrapExport(input, ast, { + runtime: (value, name) => + `registerServerReference(${value}, ${JSON.stringify(name)})`, + }) + output = result.output + references = result.exportNames + } else if (model === 'module-export') { + const result = transformModuleExport(input, ast, { + generate: ({ implementation, binding, exportName }) => + `const ${binding} = registerServerReference(${implementation}, ${JSON.stringify(exportName)});\n` + + `export { ${binding} as ${exportName} };`, + }) + output = result.output + references = result.referenceNames + } else if (model === 'module-export-effect') { + const result = transformModuleExportEffect(input, ast, { + generate: ({ binding, exportName }) => + `registerServerReference(${binding}, ${JSON.stringify(exportName)});`, + }) + output = result.output + references = result.referenceNames + } else { + const result = transformModuleExportHoist(input, ast, { + directive: 'use server', + runtime: ({ implementation, exportName }) => + `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, + }) + output = result.output + references = result.referenceNames + } + return { name: model, output, references } + } catch (error) { + return { + name: model, + error: error instanceof Error ? error.message : String(error), + } } - return { name: model, output } }) await expect( formatSourceMapMarkdownFixture(input, outputs), diff --git a/packages/plugin-rsc/src/transforms/test-utils.ts b/packages/plugin-rsc/src/transforms/test-utils.ts index 2dd9ef027..50e8a2ac2 100644 --- a/packages/plugin-rsc/src/transforms/test-utils.ts +++ b/packages/plugin-rsc/src/transforms/test-utils.ts @@ -15,15 +15,27 @@ ${code}` export function formatSourceMapMarkdownFixture( input: string, - outputs: readonly { name: string; output: MagicString }[], + outputs: readonly { + name: string + output?: MagicString + error?: string + references?: readonly string[] + }[], ): string { const sections = [`## Input\n\n${formatJavaScriptBlock(input)}`] - for (const { name, output } of outputs) { + for (const { name, output, error, references } of outputs) { + if (error !== undefined) { + sections.push( + `## ${name}\n\n**Status:** error\n\n\`\`\`text\n${error}\n\`\`\``, + ) + continue + } + if (!output) throw new Error(`missing output for ${name}`) const code = output.toString() const map = output.generateMap({ includeContent: true, hires: 'boundary' }) const visualization = generateVisualizationLink(code, map.toString()) sections.push( - `## ${name}\n\n[Source map visualization](${visualization})\n\n${formatJavaScriptBlock(code)}`, + `## ${name}\n\n**Status:** ${output.hasChanged() ? 'transformed' : 'unchanged'}\n\n**References:** ${references?.join(', ') || '(none)'}\n\n[Source map visualization](${visualization})\n\n${formatJavaScriptBlock(code)}`, ) } return sections.join('\n\n') + '\n' From 18c328fb20485107a56fbf339690aa2ff9b8af03 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:37:29 +0900 Subject: [PATCH 13/52] fix(rsc): preserve module export effect mappings Co-authored-by: OpenCode --- packages/plugin-rsc/e2e/source-map.test.ts | 17 +-- .../wrap-export/default-anonymous.js.snap.md | 4 +- .../wrap-export/default-identifier.js.snap.md | 7 +- .../wrap-export/default-named.js.snap.md | 5 +- .../dependent-declarators.js.snap.md | 5 +- .../destructured-export.js.snap.md | 5 +- .../wrap-export/local-alias.js.snap.md | 5 +- .../wrap-export/multiple-exports.js.snap.md | 9 +- .../named-function-expression.js.snap.md | 5 +- .../wrap-export/named-function.js.snap.md | 5 +- .../pre-declaration-reference.js.snap.md | 5 +- .../wrap-export/reexport.js.snap.md | 6 +- .../wrap-export/variables.js.snap.md | 9 +- .../src/transforms/module-export-effect.ts | 115 ++++++++++++++---- .../transforms/module-export-models.test.ts | 41 +++++-- .../src/transforms/server-action.test.ts | 9 +- .../src/transforms/server-action.ts | 17 +-- .../src/transforms/source-map.test.ts | 4 +- .../plugin-rsc/src/transforms/waku.test.ts | 31 ++--- 19 files changed, 209 insertions(+), 95 deletions(-) diff --git a/packages/plugin-rsc/e2e/source-map.test.ts b/packages/plugin-rsc/e2e/source-map.test.ts index 9ad059dc7..739e560c1 100644 --- a/packages/plugin-rsc/e2e/source-map.test.ts +++ b/packages/plugin-rsc/e2e/source-map.test.ts @@ -49,18 +49,16 @@ const serverReferenceCases: { route: '/defaults', references: [ { - // Currently resolves to the end of the declaration. name: 'default-named-function', - rolldown: '/src/features/defaults/named.ts:4:0', + rolldown: '/src/features/defaults/named.ts:2:0', }, { - // Currently resolves to the end of the declaration. name: 'default-anonymous-function', - rolldown: '/src/features/defaults/anonymous.ts:4:0', + rolldown: '/src/features/defaults/anonymous.ts:2:0', }, { name: 'default-identifier', - rolldown: '/src/features/defaults/identifier.ts:6:15', + rolldown: '/src/features/defaults/identifier.ts:6:0', }, ], }, @@ -68,20 +66,17 @@ const serverReferenceCases: { route: '/specifiers', references: [ { - // Currently resolves to the end of the local declaration. name: 'local-alias', - rolldown: '/src/features/specifiers/local-alias.ts:4:0', + rolldown: '/src/features/specifiers/local-alias.ts:6:0', }, { - // Rolldown resolves to the directive while Rollup has no mapping. name: 're-export', - rolldown: '/src/features/specifiers/reexport.ts:0:0', + rolldown: '/src/features/specifiers/reexport.ts:2:0', rollup: null, }, { - // Rolldown resolves to the directive while Rollup has no mapping. name: 'export-all', - rolldown: '/src/features/specifiers/export-all.ts:0:0', + rolldown: '/src/features/specifiers/export-all.ts:2:0', rollup: null, }, ], 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 39fe6b4d2..ef362e98d 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 @@ -52,7 +52,7 @@ export { $$default as default }; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCx5QkFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgJCRlZmZlY3RfZGVmYXVsdDsKMzM1AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFTCx5QkFBUyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDO0FBRkE7QUFBQTtBQUFBOyJ9) ```js 'use server' @@ -60,9 +60,9 @@ export { $$default as default }; const $$effect_default = async function () { return 'default anonymous function called' } -export default $$effect_default; registerServerReference($$effect_default, "default"); +export default $$effect_default; ``` ## module-export-hoist 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 95f4a90fd..933a4bef7 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 @@ -58,7 +58,7 @@ export { $$default as default }; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTgwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CjM2OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNuQzs7QUFFQSxNQUFNLENBQUMsT0FBTyxDQUFDOzs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGVmZmVjdF9kZWZhdWx0ID0gZGVmYXVsdElkZW50aWZpZXI7CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNjIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRU07QUFBTjtBQUFBO0FBQUE7In0=) ```js 'use server' @@ -67,9 +67,10 @@ async function defaultIdentifier() { return 'default identifier called' } -export default defaultIdentifier +const $$effect_default = defaultIdentifier; -registerServerReference(defaultIdentifier, "default"); +registerServerReference($$effect_default, "default"); +export default $$effect_default; ``` ## module-export-hoist 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 5b8e37110..23ac408d0 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 @@ -52,16 +52,17 @@ export { defaultNamedFunction as default }; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CjM1OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBkZWZhdWx0TmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTkzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CmV4cG9ydCBkZWZhdWx0IGRlZmF1bHROYW1lZEZ1bmN0aW9uOwozNTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2QztBQUZBO0FBQUE7QUFBQTsifQ==) ```js 'use server' -export default async function defaultNamedFunction() { +async function defaultNamedFunction() { return 'default named function called' } registerServerReference(defaultNamedFunction, "default"); +export default defaultNamedFunction; ``` ## module-export-hoist 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 4693f0337..e34634781 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 @@ -52,16 +52,17 @@ export { second as second }; **References:** first, second -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLAogIHNlY29uZCA9IGZpcnN0CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdCwgImZpcnN0Iik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwozNTEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTkxACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kID0gZmlyc3QKCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZpcnN0LCAiZmlyc3QiKTsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2Uoc2Vjb25kLCAic2Vjb25kIik7CmV4cG9ydCB7IGZpcnN0LCBzZWNvbmQgfTsKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFg7QUFBQTtBQUFBO0FBQUE7In0=) ```js 'use server' -export const first = async () => 'first action called', +const first = async () => 'first action called', second = first registerServerReference(first, "first"); registerServerReference(second, "second"); +export { first, second }; ``` ## module-export-hoist 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 9cf12a82a..bf210bba1 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 @@ -40,16 +40,17 @@ unsupported destructured export declaration **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTYwACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwo0MzEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNOztBQUV0RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDOzs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiB9Owo0MzUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNOztBQUUvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFBM0M7QUFBQTtBQUFBOyJ9) ```js 'use server' const source = async () => 'destructured export called' -export const { action } = { action: source } +const { action } = { action: source } registerServerReference(action, "action"); +export { action }; ``` ## module-export-hoist 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 4228063dd..8fdffc3da 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 @@ -58,7 +58,7 @@ export { $$module_aliasedAction as aliasedAction }; **References:** aliasedAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGxvY2FsQWxpYXMsICJhbGlhc2VkQWN0aW9uIik7CjM4OQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOztBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShsb2NhbEFsaWFzLCAiYWxpYXNlZEFjdGlvbiIpOwpleHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfQozNDgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7O0FBRUE7QUFBQTtBQUFBOyJ9) ```js 'use server' @@ -67,9 +67,10 @@ async function localAlias() { return 'local alias called' } -export { localAlias as aliasedAction } + registerServerReference(localAlias, "aliasedAction"); +export { localAlias as aliasedAction } ``` ## module-export-hoist 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 117dbec01..eecedac9b 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 @@ -68,21 +68,24 @@ export { secondAction as secondAction }; **References:** firstAction, secondAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjY4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwo1MDcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7O0FBRUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiB9OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2Uoc2Vjb25kQWN0aW9uLCAic2Vjb25kQWN0aW9uIik7CmV4cG9ydCB7IHNlY29uZEFjdGlvbiB9Owo1MTQAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3Qjs7QUFFTyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM5QjtBQU5BO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTsifQ==) ```js 'use server' -export async function firstAction() { +async function firstAction() { return 'first action called' } -export async function secondAction() { +async function secondAction() { return 'second action called' } registerServerReference(firstAction, "firstAction"); +export { firstAction }; + registerServerReference(secondAction, "secondAction"); +export { secondAction }; ``` ## module-export-hoist 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 6eeb5420d..1554a5411 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 @@ -51,16 +51,17 @@ export { action as action }; **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY2ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkgewogIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwozODkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOzs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTc4ACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiB9OwozOTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDMUM7QUFGQTtBQUFBO0FBQUE7In0=) ```js 'use server' -export const action = async function actionImplementation() { +const action = async function actionImplementation() { return 'named function expression called' } registerServerReference(action, "action"); +export { action }; ``` ## module-export-hoist 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 acd0f4724..8ed876491 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 @@ -51,16 +51,17 @@ export { namedFunction as namedFunction }; **References:** namedFunction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTQ3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CjMxNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiB9OwozMTcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7QUFGQTtBQUFBO0FBQUE7In0=) ```js 'use server' -export async function namedFunction() { +async function namedFunction() { return 'named function called' } registerServerReference(namedFunction, "namedFunction"); +export { namedFunction }; ``` ## module-export-hoist 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 2f7b023ea..d0222a26c 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 @@ -57,18 +57,19 @@ export { action as action }; **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTMxACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7CiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24sICJhY3Rpb24iKTsKMzIwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFTCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2Qjs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTQzACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCO0FBRkE7QUFBQTtBQUFBOyJ9) ```js 'use server' void action -export async function action() { +async function action() { return 'action called' } registerServerReference(action, "action"); +export { action }; ``` ## module-export-hoist 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 c9c6d6c21..10aa2ceb7 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 @@ -48,15 +48,17 @@ export { $$module_reexportedAction as reexportedAction }; **References:** reexportedAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM3ACd1c2Ugc2VydmVyJwoKZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CjI2MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM4ACd1c2Ugc2VydmVyJwoKCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZWZmZWN0X2ltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsxODgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07OztBQUVYO0FBQUE7QUFBQTs7In0=) ```js 'use server' + + export { reexportedAction } from './reexport-source' +registerServerReference($$effect_import_reexportedAction, "reexportedAction"); import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; -registerServerReference($$effect_import_reexportedAction, "reexportedAction"); ``` ## module-export-hoist 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 fc4feeb87..35515bddf 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 @@ -62,19 +62,22 @@ export { functionExpression as functionExpression }; **References:** arrowFunction, functionExpression -[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk5ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpOwpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKNTQ2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRS9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQzs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzQzACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NTMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTsifQ==) ```js 'use server' -export const arrowFunction = async () => 'arrow function called' +const arrowFunction = async () => 'arrow function called' -export const functionExpression = async function () { +const functionExpression = async function () { return 'function expression called' } registerServerReference(arrowFunction, "arrowFunction"); +export { arrowFunction }; + registerServerReference(functionExpression, "functionExpression"); +export { functionExpression }; ``` ## module-export-hoist diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.ts b/packages/plugin-rsc/src/transforms/module-export-effect.ts index 7eab5ee18..a17d95be9 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.ts @@ -15,15 +15,15 @@ export type TransformModuleExportEffectContext = { } export type TransformModuleExportEffectOptions = { - generate: (context: TransformModuleExportEffectContext) => string + runtime: (context: TransformModuleExportEffectContext) => string filter?: TransformModuleExportFilter rejectNonAsyncFunction?: boolean exportAll?: 'error' | 'preserve' } /** - * Preserves selected source exports and appends one generated module effect for - * each exported value. This models Next.js-style module Server Action lowering. + * Preserves selected source bindings and emits one mapped module effect for each + * exported value. This models Next.js-style module Server Action lowering. */ export function transformModuleExportEffect( input: string, @@ -38,11 +38,23 @@ export function transformModuleExportEffect( const output = new MagicString(input) const filter = options.filter ?? (() => true) const references: TransformModuleExportEffectContext[] = [] - const effects: string[] = [] - function generate(context: TransformModuleExportEffectContext): void { + // Generated-name collision detection is intentionally out of scope, matching + // the other module export transforms. + + function generate(context: TransformModuleExportEffectContext): string { references.push(context) - effects.push(options.generate(context)) + return `${options.runtime(context)};` + } + + function replaceAndMove( + start: number, + end: number, + destination: number, + code: string, + ): void { + output.update(start, end, `\n${code}\n`) + if (end !== destination) output.move(start, end, destination) } for (const node of ast.body) { @@ -65,10 +77,18 @@ export function transformModuleExportEffect( } if (!filter(binding, meta)) continue validateNonAsyncFunction(options, node.declaration) - generate({ binding, exportName: binding, meta }) + replaceAndMove( + node.start, + node.declaration.start, + input.length, + `${generate({ binding, exportName: binding, meta })}\nexport { ${binding} };`, + ) } else if (node.declaration.type === 'VariableDeclaration') { + const exportNames: string[] = [] + const effects: string[] = [] for (const declaration of node.declaration.declarations) { const names = extractNames(declaration.id) + exportNames.push(...names) const isFunction = declaration.id.type === 'Identifier' && declaration.init ? getIsFunction(declaration.init) @@ -82,15 +102,24 @@ export function transformModuleExportEffect( } if (filter(binding, meta)) { validate = true - generate({ binding, exportName: binding, meta }) + effects.push(generate({ binding, exportName: binding, meta })) } } if (validate && declaration.init) { validateNonAsyncFunction(options, declaration.init) } } + if (effects.length > 0) { + replaceAndMove( + node.start, + node.declaration.start, + input.length, + `${effects.join('\n')}\nexport { ${exportNames.join(', ')} };`, + ) + } } } else { + const effects: string[] = [] for (const specifier of node.specifiers) { tinyassert(specifier.local.type === 'Identifier') if (specifier.exported.type !== 'Identifier') { @@ -113,7 +142,25 @@ export function transformModuleExportEffect( `\nimport { ${specifier.local.name} as ${binding} } from ${node.source.raw}${sourceTail}`, ) } - generate({ binding, exportName, meta }) + effects.push(generate({ binding, exportName, meta })) + } + if (effects.length > 0) { + const originalExport = input.slice(node.start, node.end) + if (node.source) { + replaceAndMove( + node.start, + node.end, + input.length, + `${originalExport}\n${effects.join('\n')}`, + ) + } else { + replaceAndMove( + node.start, + node.end, + input.length, + `${effects.join('\n')}\n${originalExport}`, + ) + } } } } else if (node.type === 'ExportAllDeclaration') { @@ -141,31 +188,57 @@ export function transformModuleExportEffect( node.declaration.type === 'FunctionDeclaration' ? true : false, } } else if (node.declaration.type === 'Identifier') { - binding = node.declaration.name - meta = { defaultExportIdentifierName: binding } + binding = '$$effect_default' + meta = { defaultExportIdentifierName: node.declaration.name } } else { binding = '$$effect_default' meta = { isFunction: getIsFunction(node.declaration) } } if (!filter('default', meta)) continue validateNonAsyncFunction(options, node.declaration) + const effect = generate({ binding, exportName: 'default', meta }) - if ( - node.declaration.type !== 'Identifier' && - !( - (node.declaration.type === 'FunctionDeclaration' || - node.declaration.type === 'ClassDeclaration') && - node.declaration.id + if (node.declaration.type === 'Identifier') { + const exportTokenEnd = node.start + 'export'.length + output.update( + exportTokenEnd, + node.end, + `const ${binding} = ${node.declaration.name};`, + ) + replaceAndMove( + node.start, + exportTokenEnd, + input.length, + `${effect}\nexport default ${binding};`, ) + } else if ( + (node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration') && + node.declaration.id ) { - output.update(node.start, node.declaration.start, `const ${binding} = `) - output.appendLeft(node.end, `\nexport default ${binding};`) + replaceAndMove( + node.start, + node.declaration.start, + input.length, + `${effect}\nexport default ${binding};`, + ) + } else { + const exportTokenEnd = node.start + 'export'.length + output.update( + exportTokenEnd, + node.declaration.start, + `const ${binding} = `, + ) + replaceAndMove( + node.start, + exportTokenEnd, + input.length, + `${effect}\nexport default ${binding};`, + ) } - generate({ binding, exportName: 'default', meta }) } } - if (effects.length > 0) output.append(`\n${effects.join('\n')}\n`) return { output, references, diff --git a/packages/plugin-rsc/src/transforms/module-export-models.test.ts b/packages/plugin-rsc/src/transforms/module-export-models.test.ts index af644169d..db6cfefd7 100644 --- a/packages/plugin-rsc/src/transforms/module-export-models.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-models.test.ts @@ -21,8 +21,8 @@ export default async function Page() { `const ${binding} = wrap(${implementation}, ${JSON.stringify(exportName)}); export { ${binding} as ${exportName} };`, }) const effect = transformModuleExportEffect(input, ast, { - generate: ({ binding, exportName }) => - `register(${binding}, ${JSON.stringify(exportName)});`, + runtime: ({ binding, exportName }) => + `register(${binding}, ${JSON.stringify(exportName)})`, }) const hoist = transformModuleExportHoist(input, ast, { directive: 'use cache', @@ -65,17 +65,22 @@ export default async function Page() { ", "effect": ""use cache"; - export async function action(value) { + async function action(value) { return value } - export const loader = async () => "loaded" - export default async function Page() { + const loader = async () => "loaded" + async function Page() { return "page" } register(action, "action"); + export { action }; + register(loader, "loader"); + export { loader }; + register(Page, "default"); + export default Page; ", "hoist": ""use cache"; export const action = /* #__PURE__ */ wrap($$module_hoist_0_action, "action"); @@ -122,7 +127,7 @@ export default async function Page() { const input = `"use cache"; export default async function () {}` const ast = await parseAstAsync(input) const effect = transformModuleExportEffect(input, ast, { - generate: ({ binding }) => `register(${binding});`, + runtime: ({ binding }) => `register(${binding})`, }) const hoist = transformModuleExportHoist(input, ast, { directive: 'use cache', @@ -137,8 +142,8 @@ export default async function Page() { }).toMatchInlineSnapshot(` { "effect": ""use cache"; const $$effect_default = async function () {} - export default $$effect_default; register($$effect_default); + export default $$effect_default; ", "hoist": ""use cache"; export default /* #__PURE__ */ wrap($$module_hoist_0_anonymous_default) @@ -148,4 +153,26 @@ export default async function Page() { } `) }) + + test('captures default identifiers before later reassignment', async () => { + const input = `let action = async () => 'first' +export default action +action = async () => 'second' +` + const ast = await parseAstAsync(input) + const effect = transformModuleExportEffect(input, ast, { + runtime: ({ binding }) => `register(${binding})`, + }) + + await expect(parseAstAsync(effect.output.toString())).resolves.toBeDefined() + expect(effect.output.toString()).toMatchInlineSnapshot(` + "let action = async () => 'first' + const $$effect_default = action; + action = async () => 'second' + + register($$effect_default); + export default $$effect_default; + " + `) + }) }) diff --git a/packages/plugin-rsc/src/transforms/server-action.test.ts b/packages/plugin-rsc/src/transforms/server-action.test.ts index 4b7270619..9d7e90a8d 100644 --- a/packages/plugin-rsc/src/transforms/server-action.test.ts +++ b/packages/plugin-rsc/src/transforms/server-action.test.ts @@ -5,7 +5,7 @@ import { transformServerActionServer } from './server-action' async function transform(input: string) { const ast = await parseAstAsync(input) return transformServerActionServer(input, ast, { - runtime: (value) => value, + runtime: (value) => `register(${value})`, }) } @@ -19,7 +19,12 @@ test('normalizes top-level server reference names', async () => { referenceNames: ['action'], }) expect(result.output.toString()).toMatchInlineSnapshot( - `"'use server'; async function action$$impl() {}\nexport const action = /* #__PURE__ */ action$$impl;\n"`, + ` + "'use server'; async function action() {} + register(action); + export { action }; + " + `, ) }) diff --git a/packages/plugin-rsc/src/transforms/server-action.ts b/packages/plugin-rsc/src/transforms/server-action.ts index 8477e36f4..c93f013ef 100644 --- a/packages/plugin-rsc/src/transforms/server-action.ts +++ b/packages/plugin-rsc/src/transforms/server-action.ts @@ -1,16 +1,17 @@ import type MagicString from 'magic-string' import type { ESTree } from 'vite' import { transformHoistInlineDirective } from './hoist' -import { transformModuleExport } from './module-export' +import { transformModuleExportEffect } from './module-export-effect' import { hasDirective } from './utils' // TODO: Preserve the `runtime` call's original Server Function position for -// every module export and inline directive shape. +// every inline directive shape. // https://github.com/vitejs/vite-plugin-react/issues/1361 export function transformServerActionServer( input: string, ast: ESTree.Program, options: { + /** Must register the supplied function operationally for module directives. */ runtime: (value: string, name: string) => string rejectNonAsyncFunction?: boolean encode?: (value: string) => string @@ -29,16 +30,10 @@ export function transformServerActionServer( } { // TODO: unify (generalize transformHoistInlineDirective to support top-level directive cases) if (hasDirective(ast.body, 'use server')) { - const result = transformModuleExport(input, ast, { + const result = transformModuleExportEffect(input, ast, { rejectNonAsyncFunction: options.rejectNonAsyncFunction, - generate: ({ implementation, binding, exportName }) => { - const declaration = - `const ${binding} = /* #__PURE__ */ ` + - `${options.runtime(implementation, exportName)};` - return binding === exportName - ? `export ${declaration}` - : `${declaration}\nexport { ${binding} as ${exportName} };` - }, + runtime: ({ binding, exportName }) => + options.runtime(binding, exportName), }) return { ...result, exportNames: result.referenceNames } } diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index b218f8f32..4449b9267 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -49,8 +49,8 @@ describe('source map fixtures', () => { references = result.referenceNames } else if (model === 'module-export-effect') { const result = transformModuleExportEffect(input, ast, { - generate: ({ binding, exportName }) => - `registerServerReference(${binding}, ${JSON.stringify(exportName)});`, + runtime: ({ binding, exportName }) => + `registerServerReference(${binding}, ${JSON.stringify(exportName)})`, }) output = result.output references = result.referenceNames diff --git a/packages/plugin-rsc/src/transforms/waku.test.ts b/packages/plugin-rsc/src/transforms/waku.test.ts index 1fe526127..37e30e410 100644 --- a/packages/plugin-rsc/src/transforms/waku.test.ts +++ b/packages/plugin-rsc/src/transforms/waku.test.ts @@ -160,24 +160,26 @@ export default async function() { const privateFunction = () => 'Secret'; - const log$$impl = async (mesg) => { + const log = async (mesg) => { console.log(mesg); }; - export const log = /* #__PURE__ */ $runtime(log$$impl, "", "log"); - - async function greet$$impl(name) { + async function greet(name) { return 'Hello ' + name; } - export const greet = /* #__PURE__ */ $runtime(greet$$impl, "", "greet"); - - const $$default$$impl = async function() { + const $$effect_default = async function() { return Date.now(); } - const $$default = /* #__PURE__ */ $runtime($$default$$impl, "", "default"); - export { $$default as default }; + $runtime(log, "", "log"); + export { log }; + + $runtime(greet, "", "greet"); + export { greet }; + + $runtime($$effect_default, "", "default"); + export default $$effect_default; " `) }) @@ -251,17 +253,18 @@ export default async () => null; return innerAction.bind(null, action); } - async function exportedAction$$impl() { + async function exportedAction() { 'use server'; return null; } - export const exportedAction = /* #__PURE__ */ $runtime(exportedAction$$impl, "", "exportedAction"); + const $$effect_default = async () => null; - const $$default$$impl = async () => null; - const $$default = /* #__PURE__ */ $runtime($$default$$impl, "", "default"); - export { $$default as default }; + $runtime(exportedAction, "", "exportedAction"); + export { exportedAction }; + $runtime($$effect_default, "", "default"); + export default $$effect_default; " `) }) From 406ae5221bcc1d1ff3f9aee7ccf89c798b1d8a19 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:14:00 +0900 Subject: [PATCH 14/52] refactor(rsc): narrow module export transform Co-authored-by: OpenCode --- .../custom-server-function-plugin.ts | 14 +- .../callable-cache-plugin.ts | 15 +- packages/plugin-rsc/src/plugin.ts | 28 +- .../wrap-export/default-anonymous.js.snap.js | 14 + .../wrap-export/default-anonymous.js.snap.md | 85 ---- .../wrap-export/default-identifier.js.snap.js | 16 + .../wrap-export/default-identifier.js.snap.md | 92 ----- .../wrap-export/default-named.js.snap.js | 14 + .../wrap-export/default-named.js.snap.md | 86 ---- .../wrap-export/dependent-declarators.js | 4 - .../dependent-declarators.js.snap.md | 84 ---- .../wrap-export/destructured-export.js | 5 - .../destructured-export.js.snap.md | 70 ---- .../wrap-export/local-alias.js.snap.js | 16 + .../wrap-export/local-alias.js.snap.md | 92 ----- .../wrap-export/multiple-exports.js.snap.js | 19 + .../wrap-export/multiple-exports.js.snap.md | 115 ------ .../wrap-export/named-function-expression.js | 5 - .../named-function-expression.js.snap.md | 73 ---- .../wrap-export/named-function.js.snap.js | 13 + .../wrap-export/named-function.js.snap.md | 84 ---- .../wrap-export/pre-declaration-reference.js | 7 - .../pre-declaration-reference.js.snap.md | 94 ----- .../wrap-export/reexport.js.snap.js | 13 + .../wrap-export/reexport.js.snap.md | 76 ---- .../wrap-export/variables.js.snap.js | 17 + .../wrap-export/variables.js.snap.md | 105 ----- packages/plugin-rsc/src/transforms/index.ts | 2 - .../transforms/module-export-effect.test.ts | 89 ++++ .../src/transforms/module-export-effect.ts | 37 +- .../src/transforms/module-export-hoist.ts | 203 --------- .../transforms/module-export-models.test.ts | 178 -------- .../src/transforms/module-export.test.ts | 189 --------- .../src/transforms/module-export.ts | 386 ------------------ .../plugin-rsc/src/transforms/wrap-export.ts | 1 - 35 files changed, 255 insertions(+), 2086 deletions(-) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/module-export-effect.test.ts delete mode 100644 packages/plugin-rsc/src/transforms/module-export-hoist.ts delete mode 100644 packages/plugin-rsc/src/transforms/module-export-models.test.ts delete mode 100644 packages/plugin-rsc/src/transforms/module-export.test.ts delete mode 100644 packages/plugin-rsc/src/transforms/module-export.ts diff --git a/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts b/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts index 8e8b5d4ee..84db95ae1 100644 --- a/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts +++ b/packages/plugin-rsc/examples/custom-server-function/custom-server-function-plugin.ts @@ -3,7 +3,7 @@ import { hasDirective, transformDirectiveProxyExport, transformHoistInlineDirective, - transformModuleExport, + transformModuleExportEffect, } from '@vitejs/plugin-rsc/transforms' import { parseAstAsync, type Plugin } from 'vite' @@ -37,16 +37,10 @@ export function customServerFunctionPlugin(): Plugin { const runtime = (value: string, name: string) => `$$CustomReactServer.registerServerReference(${value}, ${JSON.stringify(reference.referenceKey)}, ${JSON.stringify(name)})` const result = hasDirective(ast.body, directive) - ? transformModuleExport(code, ast, { + ? transformModuleExportEffect(code, ast, { rejectNonAsyncFunction: true, - generate: ({ implementation, binding, exportName }) => { - const declaration = - `const ${binding} = /* #__PURE__ */ ` + - `${runtime(implementation, exportName)};` - return binding === exportName - ? `export ${declaration}` - : `${declaration}\nexport { ${binding} as ${exportName} };` - }, + runtime: ({ binding, exportName }) => + runtime(binding, exportName), }) : transformHoistInlineDirective(code, ast, { directive, diff --git a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts index e249d80cd..f84717491 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts +++ b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts @@ -3,7 +3,7 @@ import { hasDirective, transformDirectiveProxyExport, transformHoistInlineDirective, - transformModuleExport, + transformWrapExport, } from '@vitejs/plugin-rsc/transforms' import { parseAstAsync, type Plugin } from 'vite' @@ -35,16 +35,9 @@ export function callableCachePlugin(): Plugin { `${JSON.stringify(reference.referenceKey)},` + `${JSON.stringify(name)})` const result = hasDirective(ast.body, directive) - ? transformModuleExport(code, ast, { + ? transformWrapExport(code, ast, { + runtime, rejectNonAsyncFunction: true, - generate: ({ implementation, binding, exportName }) => { - const declaration = - `const ${binding} = /* #__PURE__ */ ` + - `${runtime(implementation, exportName)};` - return binding === exportName - ? `export ${declaration}` - : `${declaration}\nexport { ${binding} as ${exportName} };` - }, }) : transformHoistInlineDirective(code, ast, { directive, @@ -59,7 +52,7 @@ export function callableCachePlugin(): Plugin { manager.serverReferences.replaceClaim(pluginName, id, { ...reference, - exportNames: 'names' in result ? result.names : result.referenceNames, + exportNames: 'names' in result ? result.names : result.exportNames, }) result.output.prepend( `import $$cacheWrapper from "/src/framework/use-cache-runtime";\n` + diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 697cda35b..b29404cbc 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -70,12 +70,12 @@ import { slash, } from './plugins/vite-utils' import { - type TransformModuleExportFilter, + type TransformWrapExportFilter, hasDirective, transformDirectiveProxyExport, transformExpandExportAll, - transformModuleExport, transformServerActionServer, + transformWrapExport, findDirectives, type TransformExpandExportAllContext, } from './transforms' @@ -2419,7 +2419,7 @@ function vitePluginRscCss( }: { id: string code: string - }): false | TransformModuleExportFilter { + }): false | TransformWrapExportFilter { const { filename, query } = parseIdQuery(id) if ('vite-rsc-css-export' in query) { const value = query['vite-rsc-css-export'] @@ -2451,7 +2451,7 @@ function vitePluginRscCss( // export const Page = () => {} return (_name: string, meta) => !!( - (meta.isFunction && meta.localName && /^[A-Z]/.test(meta.localName)) || + (meta.isFunction && meta.declName && /^[A-Z]/.test(meta.declName)) || (meta.defaultExportIdentifierName && /^[A-Z]/.test(meta.defaultExportIdentifierName)) ) @@ -2753,25 +2753,19 @@ export async function transformRscCssExport(options: { ast: Awaited> code: string id?: string - filter: TransformModuleExportFilter + filter: TransformWrapExportFilter }): Promise<{ output: MagicString } | undefined> { if (hasDirective(options.ast.body, 'use client')) { return } - const result = transformModuleExport(options.code, options.ast, { - generate: ({ implementation, binding, exportName, meta }) => { - const declaration = - `const ${binding} = /* #__PURE__ */ ` + - `__vite_rsc_wrap_css__(${implementation}, ${JSON.stringify( - meta.defaultExportIdentifierName ?? exportName, - )});` - return binding === exportName - ? `export ${declaration}` - : `${declaration}\nexport { ${binding} as ${exportName} };` - }, + const result = transformWrapExport(options.code, options.ast, { + runtime: (value, name, meta) => + `__vite_rsc_wrap_css__(${value}, ${JSON.stringify( + meta.defaultExportIdentifierName ?? name, + )})`, filter: options.filter, - exportAll: 'preserve', + ignoreExportAllDeclaration: true, }) if (result.output.hasChanged()) { if (!options.code.includes('__vite_rsc_react__')) { diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js new file mode 100644 index 000000000..d1fd45515 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CjsKY29uc3QgJCR3cmFwXyQkZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGRlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkd3JhcF8kJGRlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLGtCQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0= +*/ + +'use server' + +const $$default = async function () { + return 'default anonymous function called' +} +; +const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); +export { $$wrap_$$default as default }; 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 deleted file mode 100644 index ef362e98d..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md +++ /dev/null @@ -1,85 +0,0 @@ -## Input - -```js -'use server' - -export default async function () { - return 'default anonymous function called' -} -``` - -## wrap-export - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CjsKY29uc3QgJCR3cmFwXyQkZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGRlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkd3JhcF8kJGRlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLGtCQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0=) - -```js -'use server' - -const $$default = async function () { - return 'default anonymous function called' -} -; -const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); -export { $$wrap_$$default as default }; -``` - -## module-export - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjEwACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0JCRpbXBsID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CmNvbnN0ICQkZGVmYXVsdCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCQkaW1wbCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKCjMyMwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsd0JBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMzQzs7OzsifQ==) - -```js -'use server' - -const $$default$$impl = async function () { - return 'default anonymous function called' -} -const $$default = registerServerReference($$default$$impl, "default"); -export { $$default as default }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgJCRlZmZlY3RfZGVmYXVsdDsKMzM1AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFTCx5QkFBUyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDO0FBRkE7QUFBQTtBQUFBOyJ9) - -```js -'use server' - -const $$effect_default = async function () { - return 'default anonymous function called' -} - -registerServerReference($$effect_default, "default"); -export default $$effect_default; -``` - -## module-export-hoist - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzM1ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJkZWZhdWx0IikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fub255bW91c19kZWZhdWx0KCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYW5vbnltb3VzX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImFub255bW91c19kZWZhdWx0IiB9KTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsT0FBTztBQUFDO0FBQUEscURBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzsifQ==) - -```js -'use server' - -export default /* #__PURE__ */ registerServerReference($$module_hoist_0_anonymous_default, "default") - -;async function $$module_hoist_0_anonymous_default() { - return 'default anonymous function called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_anonymous_default, "name", { value: "anonymous_default" }); -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js new file mode 100644 index 000000000..8f8865f1e --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js @@ -0,0 +1,16 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjU3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGRlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgo7CmNvbnN0ICQkd3JhcF8kJGRlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRkZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJHdyYXBfJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLGtCQUFlOzs7OyJ9 +*/ + +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +const $$default = defaultIdentifier +; +const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); +export { $$wrap_$$default as default }; 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 deleted file mode 100644 index 933a4bef7..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md +++ /dev/null @@ -1,92 +0,0 @@ -## Input - -```js -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -export default defaultIdentifier -``` - -## wrap-export - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjU3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGRlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgo7CmNvbnN0ICQkd3JhcF8kJGRlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRkZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJHdyYXBfJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLGtCQUFlOzs7OyJ9) - -```js -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -const $$default = defaultIdentifier -; -const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); -export { $$wrap_$$default as default }; -``` - -## module-export - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk5ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgoKY29uc3QgJCRkZWZhdWx0ID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdElkZW50aWZpZXIsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CgozNDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7Ozs7OzsifQ==) - -```js -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - - -const $$default = registerServerReference(defaultIdentifier, "default"); -export { $$default as default }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGVmZmVjdF9kZWZhdWx0ID0gZGVmYXVsdElkZW50aWZpZXI7CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNjIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRU07QUFBTjtBQUFBO0FBQUE7In0=) - -```js -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -const $$effect_default = defaultIdentifier; - -registerServerReference($$effect_default, "default"); -export default $$effect_default; -``` - -## module-export-hoist - -**Status:** unchanged - -**References:** (none) - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTI0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9CgpleHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllcgozNjcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRUEsTUFBTSxDQUFDLE9BQU8sQ0FBQzsifQ==) - -```js -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -export default defaultIdentifier -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js new file mode 100644 index 000000000..6480fb172 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js @@ -0,0 +1,14 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjYwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQo7CmNvbnN0ICQkd3JhcF9kZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShkZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX2RlZmF1bHROYW1lZEZ1bmN0aW9uIGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0= +*/ + +'use server' + +async function defaultNamedFunction() { + return 'default named function called' +} +; +const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, "default"); +export { $$wrap_defaultNamedFunction as default }; 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 deleted file mode 100644 index 23ac408d0..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md +++ /dev/null @@ -1,86 +0,0 @@ -## Input - -```js -'use server' - -export default async function defaultNamedFunction() { - return 'default named function called' -} -``` - -## wrap-export - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjYwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQo7CmNvbnN0ICQkd3JhcF9kZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShkZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX2RlZmF1bHROYW1lZEZ1bmN0aW9uIGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) - -```js -'use server' - -async function defaultNamedFunction() { - return 'default named function called' -} -; -const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, "default"); -export { $$wrap_defaultNamedFunction as default }; -``` - -## module-export - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjQxACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBkZWZhdWx0TmFtZWRGdW5jdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRlZmF1bHROYW1lZEZ1bmN0aW9uJCRpbXBsLCAiZGVmYXVsdCIpOwpleHBvcnQgeyBkZWZhdWx0TmFtZWRGdW5jdGlvbiBhcyBkZWZhdWx0IH07CgozNDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLDBCQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OzsifQ==) - -```js -'use server' - -async function defaultNamedFunction$$impl() { - return 'default named function called' -} -const defaultNamedFunction = registerServerReference(defaultNamedFunction$$impl, "default"); -export { defaultNamedFunction as default }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTkzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CmV4cG9ydCBkZWZhdWx0IGRlZmF1bHROYW1lZEZ1bmN0aW9uOwozNTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2QztBQUZBO0FBQUE7QUFBQTsifQ==) - -```js -'use server' - -async function defaultNamedFunction() { - return 'default named function called' -} - -registerServerReference(defaultNamedFunction, "default"); -export default defaultNamedFunction; -``` - -## module-export-hoist - -**Status:** transformed - -**References:** default - -[Source map visualization](https://evanw.github.io/source-map-visualization/#Mzk1ACd1c2Ugc2VydmVyJwoKY29uc3QgZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgZGVmYXVsdE5hbWVkRnVuY3Rpb247Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMF9kZWZhdWx0TmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHROYW1lZEZ1bmN0aW9uIiB9KTsKMzEwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07Ozs7QUFFSTtBQUFBLHdEQUFzQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7In0=) - -```js -'use server' - -const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_defaultNamedFunction, "default"); -export default defaultNamedFunction; - -;async function $$module_hoist_0_defaultNamedFunction() { - return 'default named function called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_defaultNamedFunction, "name", { value: "defaultNamedFunction" }); -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js deleted file mode 100644 index 95a50e601..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js +++ /dev/null @@ -1,4 +0,0 @@ -'use server' - -export const first = async () => 'first action called', - second = first 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 deleted file mode 100644 index e34634781..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md +++ /dev/null @@ -1,84 +0,0 @@ -## Input - -```js -'use server' - -export const first = async () => 'first action called', - second = first -``` - -## wrap-export - -**Status:** transformed - -**References:** first, second - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjQ4ACd1c2Ugc2VydmVyJwoKbGV0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLAogIHNlY29uZCA9IGZpcnN0CmZpcnN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZpcnN0LCAiZmlyc3QiKTsKZXhwb3J0IHsgZmlyc3QgfTsKc2Vjb25kID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwpleHBvcnQgeyBzZWNvbmQgfTsKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEdBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFg7QUFBQTtBQUFBO0FBQUE7In0=) - -```js -'use server' - -let first = async () => 'first action called', - second = first -first = /* #__PURE__ */ registerServerReference(first, "first"); -export { first }; -second = /* #__PURE__ */ registerServerReference(second, "second"); -export { second }; -``` - -## module-export - -**Status:** transformed - -**References:** first, second - -[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjc0ACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QkJGltcGwgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kJCRpbXBsID0gZmlyc3QKY29uc3QgZmlyc3QgPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdCQkaW1wbCwgImZpcnN0Iik7CmV4cG9ydCB7IGZpcnN0IGFzIGZpcnN0IH07CmNvbnN0IHNlY29uZCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCQkaW1wbCwgInNlY29uZCIpOwpleHBvcnQgeyBzZWNvbmQgYXMgc2Vjb25kIH07CgozNDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFdBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEQsQ0FBQyxDQUFDLFlBQU0sQ0FBQyxDQUFDLENBQUM7Ozs7OzsifQ==) - -```js -'use server' - -const first$$impl = async () => 'first action called', - second$$impl = first -const first = registerServerReference(first$$impl, "first"); -export { first as first }; -const second = registerServerReference(second$$impl, "second"); -export { second as second }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** first, second - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTkxACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kID0gZmlyc3QKCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZpcnN0LCAiZmlyc3QiKTsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2Uoc2Vjb25kLCAic2Vjb25kIik7CmV4cG9ydCB7IGZpcnN0LCBzZWNvbmQgfTsKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFg7QUFBQTtBQUFBO0FBQUE7In0=) - -```js -'use server' - -const first = async () => 'first action called', - second = first - -registerServerReference(first, "first"); -registerServerReference(second, "second"); -export { first, second }; -``` - -## module-export-hoist - -**Status:** transformed - -**References:** first - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjkzACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfZmlyc3QsICJmaXJzdCIpLAogIHNlY29uZCA9IGZpcnN0Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMF9maXJzdCgpIHsgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJyB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZmlyc3QsICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0IiB9KTsKMzIyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMseUVBQWtDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFU7QUFBQSxrREFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTs7In0=) - -```js -'use server' - -export const first = /* #__PURE__ */ registerServerReference($$module_hoist_0_first, "first"), - second = first - -;async function $$module_hoist_0_first() { return 'first action called' }; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_first, "name", { value: "first" }); -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js deleted file mode 100644 index 488a76ef3..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js +++ /dev/null @@ -1,5 +0,0 @@ -'use server' - -const source = async () => 'destructured export called' - -export const { action } = { action: source } 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 deleted file mode 100644 index bf210bba1..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md +++ /dev/null @@ -1,70 +0,0 @@ -## Input - -```js -'use server' - -const source = async () => 'destructured export called' - -export const { action } = { action: source } -``` - -## wrap-export - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKbGV0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKNDMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmNvbnN0IHNvdXJjZSA9IGFzeW5jICgpID0+ICdkZXN0cnVjdHVyZWQgZXhwb3J0IGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7QUFFL0MsR0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQTNDO0FBQUE7In0=) - -```js -'use server' - -const source = async () => 'destructured export called' - -let { action } = { action: source } -action = /* #__PURE__ */ registerServerReference(action, "action"); -export { action }; -``` - -## module-export - -**Status:** error - -```text -unsupported destructured export declaration -``` - -## module-export-effect - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiB9Owo0MzUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNOztBQUUvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFBM0M7QUFBQTtBQUFBOyJ9) - -```js -'use server' - -const source = async () => 'destructured export called' - -const { action } = { action: source } - -registerServerReference(action, "action"); -export { action }; -``` - -## module-export-hoist - -**Status:** unchanged - -**References:** (none) - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTE2ACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH0KNDI5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmNvbnN0IHNvdXJjZSA9IGFzeW5jICgpID0+ICdkZXN0cnVjdHVyZWQgZXhwb3J0IGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7QUFFdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQzsifQ==) - -```js -'use server' - -const source = async () => 'destructured export called' - -export const { action } = { action: source } -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js new file mode 100644 index 000000000..ec5c2b8f0 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js @@ -0,0 +1,16 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX2xvY2FsQWxpYXMgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCR3cmFwX2xvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9OwozMzYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7Ozs7OyJ9 +*/ + +'use server' + +async function localAlias() { + return 'local alias called' +} + + +; +const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); +export { $$wrap_localAlias as aliasedAction }; 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 deleted file mode 100644 index 8fdffc3da..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md +++ /dev/null @@ -1,92 +0,0 @@ -## Input - -```js -'use server' - -async function localAlias() { - return 'local alias called' -} - -export { localAlias as aliasedAction } -``` - -## wrap-export - -**Status:** transformed - -**References:** aliasedAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX2xvY2FsQWxpYXMgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCR3cmFwX2xvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9OwozMzYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7Ozs7OyJ9) - -```js -'use server' - -async function localAlias() { - return 'local alias called' -} - - -; -const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); -export { $$wrap_localAlias as aliasedAction }; -``` - -## module-export - -**Status:** transformed - -**References:** aliasedAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV9hbGlhc2VkQWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfYWxpYXNlZEFjdGlvbiBhcyBhbGlhc2VkQWN0aW9uIH07CjMzNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOzs7Ozs7In0=) - -```js -'use server' - -async function localAlias() { - return 'local alias called' -} - - - -const $$module_aliasedAction = registerServerReference(localAlias, "aliasedAction"); -export { $$module_aliasedAction as aliasedAction }; -``` - -## module-export-effect - -**Status:** transformed - -**References:** aliasedAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShsb2NhbEFsaWFzLCAiYWxpYXNlZEFjdGlvbiIpOwpleHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfQozNDgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7O0FBRUE7QUFBQTtBQUFBOyJ9) - -```js -'use server' - -async function localAlias() { - return 'local alias called' -} - - - -registerServerReference(localAlias, "aliasedAction"); -export { localAlias as aliasedAction } -``` - -## module-export-hoist - -**Status:** unchanged - -**References:** (none) - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTE2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH0KMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGxvY2FsQWxpYXMoKSB7XG4gIHJldHVybiAnbG9jYWwgYWxpYXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUI7O0FBRUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQzsifQ==) - -```js -'use server' - -async function localAlias() { - return 'local alias called' -} - -export { localAlias as aliasedAction } -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js new file mode 100644 index 000000000..4cdb47bf3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js @@ -0,0 +1,19 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MzYzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQpmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CmV4cG9ydCB7IGZpcnN0QWN0aW9uIH07CnNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKZXhwb3J0IHsgc2Vjb25kQWN0aW9uIH07CjUwNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7XG4gIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCdcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHtcbiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FBTkE7QUFBQTtBQUlBO0FBQUE7In0= +*/ + +'use server' + +async function firstAction() { + return 'first action called' +} + +async function secondAction() { + return 'second action called' +} +firstAction = /* #__PURE__ */ registerServerReference(firstAction, "firstAction"); +export { firstAction }; +secondAction = /* #__PURE__ */ registerServerReference(secondAction, "secondAction"); +export { secondAction }; 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 deleted file mode 100644 index eecedac9b..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md +++ /dev/null @@ -1,115 +0,0 @@ -## Input - -```js -'use server' - -export async function firstAction() { - return 'first action called' -} - -export async function secondAction() { - return 'second action called' -} -``` - -## wrap-export - -**Status:** transformed - -**References:** firstAction, secondAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzYzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQpmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CmV4cG9ydCB7IGZpcnN0QWN0aW9uIH07CnNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKZXhwb3J0IHsgc2Vjb25kQWN0aW9uIH07CjUwNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7XG4gIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCdcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHtcbiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FBTkE7QUFBQTtBQUlBO0FBQUE7In0=) - -```js -'use server' - -async function firstAction() { - return 'first action called' -} - -async function secondAction() { - return 'second action called' -} -firstAction = /* #__PURE__ */ registerServerReference(firstAction, "firstAction"); -export { firstAction }; -secondAction = /* #__PURE__ */ registerServerReference(secondAction, "secondAction"); -export { secondAction }; -``` - -## module-export - -**Status:** transformed - -**References:** firstAction, secondAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDAwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24kJGltcGwoKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IGZpcnN0QWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24kJGltcGwsICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiBhcyBmaXJzdEFjdGlvbiB9OwoKCmFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9CmNvbnN0IHNlY29uZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiQkaW1wbCwgInNlY29uZEFjdGlvbiIpOwpleHBvcnQgeyBzZWNvbmRBY3Rpb24gYXMgc2Vjb25kQWN0aW9uIH07Cgo0OTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7Ozs7O0FBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OyJ9) - -```js -'use server' - -async function firstAction$$impl() { - return 'first action called' -} -const firstAction = registerServerReference(firstAction$$impl, "firstAction"); -export { firstAction as firstAction }; - - -async function secondAction$$impl() { - return 'second action called' -} -const secondAction = registerServerReference(secondAction$$impl, "secondAction"); -export { secondAction as secondAction }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** firstAction, secondAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiB9OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2Uoc2Vjb25kQWN0aW9uLCAic2Vjb25kQWN0aW9uIik7CmV4cG9ydCB7IHNlY29uZEFjdGlvbiB9Owo1MTQAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3Qjs7QUFFTyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM5QjtBQU5BO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTsifQ==) - -```js -'use server' - -async function firstAction() { - return 'first action called' -} - -async function secondAction() { - return 'second action called' -} - -registerServerReference(firstAction, "firstAction"); -export { firstAction }; - -registerServerReference(secondAction, "secondAction"); -export { secondAction }; -``` - -## module-export-hoist - -**Status:** transformed - -**References:** firstAction, secondAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#NjIyACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwoKZXhwb3J0IGNvbnN0IHNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfZmlyc3RBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0QWN0aW9uIiB9KTsKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8xX3NlY29uZEFjdGlvbigpIHsKICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzFfc2Vjb25kQWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJzZWNvbmRBY3Rpb24iIH0pOwo0NTAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNOztBQUlOLE1BQU07QUFKQztBQUFBLCtDQUE2QjtBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPO0FBQUEsZ0RBQThCO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7OyJ9) - -```js -'use server' - -export const firstAction = /* #__PURE__ */ registerServerReference($$module_hoist_0_firstAction, "firstAction"); - -export const secondAction = /* #__PURE__ */ registerServerReference($$module_hoist_1_secondAction, "secondAction"); - -;async function $$module_hoist_0_firstAction() { - return 'first action called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_firstAction, "name", { value: "firstAction" }); - -;async function $$module_hoist_1_secondAction() { - return 'second action called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_1_secondAction, "name", { value: "secondAction" }); -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js deleted file mode 100644 index 169221675..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js +++ /dev/null @@ -1,5 +0,0 @@ -'use server' - -export const action = async function actionImplementation() { - return 'named function expression called' -} 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 deleted file mode 100644 index 1554a5411..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md +++ /dev/null @@ -1,73 +0,0 @@ -## Input - -```js -'use server' - -export const action = async function actionImplementation() { - return 'named function expression called' -} -``` - -## wrap-export - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjAwACd1c2Ugc2VydmVyJwoKbGV0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkgewogIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYWxsZWQnCn0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEdBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDO0FBRkE7QUFBQTsifQ==) - -```js -'use server' - -let action = async function actionImplementation() { - return 'named function expression called' -} -action = /* #__PURE__ */ registerServerReference(action, "action"); -export { action }; -``` - -## module-export - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE1ACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uJCRpbXBsID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQpjb25zdCBhY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24kJGltcGwsICJhY3Rpb24iKTsKZXhwb3J0IHsgYWN0aW9uIGFzIGFjdGlvbiB9OwoKMzgwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxZQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOzs7OyJ9) - -```js -'use server' - -const action$$impl = async function actionImplementation() { - return 'named function expression called' -} -const action = registerServerReference(action$$impl, "action"); -export { action as action }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTc4ACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiB9OwozOTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDMUM7QUFGQTtBQUFBO0FBQUE7In0=) - -```js -'use server' - -const action = async function actionImplementation() { - return 'named function expression called' -} - -registerServerReference(action, "action"); -export { action }; -``` - -## module-export-hoist - -**Status:** error - -```text -unsupported named function expression export -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js new file mode 100644 index 000000000..3f597bb58 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js @@ -0,0 +1,13 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#MTk3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpuYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CmV4cG9ydCB7IG5hbWVkRnVuY3Rpb24gfTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9CO0FBRkE7QUFBQTsifQ== +*/ + +'use server' + +async function namedFunction() { + return 'named function called' +} +namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, "namedFunction"); +export { namedFunction }; 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 deleted file mode 100644 index 8ed876491..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md +++ /dev/null @@ -1,84 +0,0 @@ -## Input - -```js -'use server' - -export async function namedFunction() { - return 'named function called' -} -``` - -## wrap-export - -**Status:** transformed - -**References:** namedFunction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpuYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CmV4cG9ydCB7IG5hbWVkRnVuY3Rpb24gfTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9CO0FBRkE7QUFBQTsifQ==) - -```js -'use server' - -async function namedFunction() { - return 'named function called' -} -namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, "namedFunction"); -export { namedFunction }; -``` - -## module-export - -**Status:** transformed - -**References:** namedFunction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpjb25zdCBuYW1lZEZ1bmN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiQkaW1wbCwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiBhcyBuYW1lZEZ1bmN0aW9uIH07CgozMDYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7OyJ9) - -```js -'use server' - -async function namedFunction$$impl() { - return 'named function called' -} -const namedFunction = registerServerReference(namedFunction$$impl, "namedFunction"); -export { namedFunction as namedFunction }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** namedFunction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiB9OwozMTcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7QUFGQTtBQUFBO0FBQUE7In0=) - -```js -'use server' - -async function namedFunction() { - return 'named function called' -} - -registerServerReference(namedFunction, "namedFunction"); -export { namedFunction }; -``` - -## module-export-hoist - -**Status:** transformed - -**References:** namedFunction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzI4ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IG5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9uYW1lZEZ1bmN0aW9uLCAibmFtZWRGdW5jdGlvbiIpOwoKO2FzeW5jIGZ1bmN0aW9uICQkbW9kdWxlX2hvaXN0XzBfbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8wX25hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwoyODUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsTUFBTTtBQUFDO0FBQUEsaURBQStCO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7OyJ9) - -```js -'use server' - -export const namedFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_namedFunction, "namedFunction"); - -;async function $$module_hoist_0_namedFunction() { - return 'named function called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_namedFunction, "name", { value: "namedFunction" }); -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js deleted file mode 100644 index 151114097..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js +++ /dev/null @@ -1,7 +0,0 @@ -'use server' - -void action - -export async function action() { - return 'action called' -} 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 deleted file mode 100644 index d0222a26c..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md +++ /dev/null @@ -1,94 +0,0 @@ -## Input - -```js -'use server' - -void action - -export async function action() { - return 'action called' -} -``` - -## wrap-export - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY3ACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzE4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCO0FBRkE7QUFBQTsifQ==) - -```js -'use server' - -void action - -async function action() { - return 'action called' -} -action = /* #__PURE__ */ registerServerReference(action, "action"); -export { action }; -``` - -## module-export - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTgwACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbiQkaW1wbCgpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KY29uc3QgYWN0aW9uID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uJCRpbXBsLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiBhcyBhY3Rpb24gfTsKCjMxMQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG52b2lkIGFjdGlvblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uKCkge1xuICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxJQUFJLENBQUM7O0FBRUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2Qjs7OzsifQ==) - -```js -'use server' - -void action - -async function action$$impl() { - return 'action called' -} -const action = registerServerReference(action$$impl, "action"); -export { action as action }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTQzACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCO0FBRkE7QUFBQTtBQUFBOyJ9) - -```js -'use server' - -void action - -async function action() { - return 'action called' -} - -registerServerReference(action, "action"); -export { action }; -``` - -## module-export-hoist - -**Status:** transformed - -**References:** action - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjkxACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmV4cG9ydCBjb25zdCBhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9hY3Rpb24sICJhY3Rpb24iKTsKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2FjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfaG9pc3RfMF9hY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbiIgfSk7CjI5MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG52b2lkIGFjdGlvblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uKCkge1xuICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxJQUFJLENBQUM7O0FBRUwsTUFBTTtBQUFDO0FBQUEsMENBQXdCO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2Qjs7In0=) - -```js -'use server' - -void action - -export const action = /* #__PURE__ */ registerServerReference($$module_hoist_0_action, "action"); - -;async function $$module_hoist_0_action() { - return 'action called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_action, "name", { value: "action" }); -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js new file mode 100644 index 000000000..f8c3429ef --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js @@ -0,0 +1,13 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#Mjk0ACd1c2Ugc2VydmVyJwoKCjsKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnOwpjb25zdCAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ== +*/ + +'use server' + + +; +import { reexportedAction as $$import_reexportedAction } from './reexport-source'; +const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, "reexportedAction"); +export { $$wrap_$$import_reexportedAction as reexportedAction }; 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 deleted file mode 100644 index 10aa2ceb7..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md +++ /dev/null @@ -1,76 +0,0 @@ -## Input - -```js -'use server' - -export { reexportedAction } from './reexport-source' -``` - -## wrap-export - -**Status:** transformed - -**References:** reexportedAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk0ACd1c2Ugc2VydmVyJwoKCjsKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnOwpjb25zdCAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ==) - -```js -'use server' - - -; -import { reexportedAction as $$import_reexportedAction } from './reexport-source'; -const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, "reexportedAction"); -export { $$wrap_$$import_reexportedAction as reexportedAction }; -``` - -## module-export - -**Status:** transformed - -**References:** reexportedAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjYzACd1c2Ugc2VydmVyJwoKCmltcG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gYXMgJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfcmVleHBvcnRlZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkaW1wb3J0X3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlX3JlZXhwb3J0ZWRBY3Rpb24gYXMgcmVleHBvcnRlZEFjdGlvbiB9OwoKMTc2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gfSBmcm9tICcuL3JlZXhwb3J0LXNvdXJjZSdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7Ozs7OyJ9) - -```js -'use server' - - -import { reexportedAction as $$import_reexportedAction } from './reexport-source'; -const $$module_reexportedAction = registerServerReference($$import_reexportedAction, "reexportedAction"); -export { $$module_reexportedAction as reexportedAction }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** reexportedAction - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM4ACd1c2Ugc2VydmVyJwoKCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZWZmZWN0X2ltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsxODgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07OztBQUVYO0FBQUE7QUFBQTs7In0=) - -```js -'use server' - - - -export { reexportedAction } from './reexport-source' -registerServerReference($$effect_import_reexportedAction, "reexportedAction"); - -import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; -``` - -## module-export-hoist - -**Status:** unchanged - -**References:** (none) - -[Source map visualization](https://evanw.github.io/source-map-visualization/#NjcAJ3VzZSBzZXJ2ZXInCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCjI1OAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07In0=) - -```js -'use server' - -export { reexportedAction } from './reexport-source' -``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js new file mode 100644 index 000000000..0c9760023 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js @@ -0,0 +1,17 @@ +/* +Source map visualization: + +https://evanw.github.io/source-map-visualization/#NDA2ACd1c2Ugc2VydmVyJwoKbGV0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKbGV0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CmFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwpmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosR0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxHQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFFQTtBQUFBOyJ9 +*/ + +'use server' + +let arrowFunction = async () => 'arrow function called' + +let functionExpression = async function () { + return 'function expression called' +} +arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, "arrowFunction"); +export { arrowFunction }; +functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, "functionExpression"); +export { functionExpression }; 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 deleted file mode 100644 index 35515bddf..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md +++ /dev/null @@ -1,105 +0,0 @@ -## Input - -```js -'use server' - -export const arrowFunction = async () => 'arrow function called' - -export const functionExpression = async function () { - return 'function expression called' -} -``` - -## wrap-export - -**Status:** transformed - -**References:** arrowFunction, functionExpression - -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDA2ACd1c2Ugc2VydmVyJwoKbGV0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKbGV0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CmFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwpmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosR0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxHQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFFQTtBQUFBOyJ9) - -```js -'use server' - -let arrowFunction = async () => 'arrow function called' - -let functionExpression = async function () { - return 'function expression called' -} -arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, "arrowFunction"); -export { arrowFunction }; -functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, "functionExpression"); -export { functionExpression }; -``` - -## module-export - -**Status:** transformed - -**References:** arrowFunction, functionExpression - -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDU1ACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiQkaW1wbCA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCmNvbnN0IGFycm93RnVuY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhcnJvd0Z1bmN0aW9uJCRpbXBsLCAiYXJyb3dGdW5jdGlvbiIpOwpleHBvcnQgeyBhcnJvd0Z1bmN0aW9uIGFzIGFycm93RnVuY3Rpb24gfTsKCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwgPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24kJGltcGwsICJmdW5jdGlvbkV4cHJlc3Npb24iKTsKZXhwb3J0IHsgZnVuY3Rpb25FeHByZXNzaW9uIGFzIGZ1bmN0aW9uRXhwcmVzc2lvbiB9OwoKNTMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxtQkFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7O0FBRXhELEtBQUssQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ3BDOzs7OyJ9) - -```js -'use server' - -const arrowFunction$$impl = async () => 'arrow function called' -const arrowFunction = registerServerReference(arrowFunction$$impl, "arrowFunction"); -export { arrowFunction as arrowFunction }; - - -const functionExpression$$impl = async function () { - return 'function expression called' -} -const functionExpression = registerServerReference(functionExpression$$impl, "functionExpression"); -export { functionExpression as functionExpression }; - -``` - -## module-export-effect - -**Status:** transformed - -**References:** arrowFunction, functionExpression - -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzQzACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NTMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTsifQ==) - -```js -'use server' - -const arrowFunction = async () => 'arrow function called' - -const functionExpression = async function () { - return 'function expression called' -} - -registerServerReference(arrowFunction, "arrowFunction"); -export { arrowFunction }; - -registerServerReference(functionExpression, "functionExpression"); -export { functionExpression }; -``` - -## module-export-hoist - -**Status:** transformed - -**References:** arrowFunction, functionExpression - -[Source map visualization](https://evanw.github.io/source-map-visualization/#Njc0ACd1c2Ugc2VydmVyJwoKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfaG9pc3RfMF9hcnJvd0Z1bmN0aW9uLCAiYXJyb3dGdW5jdGlvbiIpCgpleHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlX2hvaXN0XzFfZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIikKCjthc3luYyBmdW5jdGlvbiAkJG1vZHVsZV9ob2lzdF8wX2Fycm93RnVuY3Rpb24oKSB7IHJldHVybiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJyB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlX2hvaXN0XzBfYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7Cgo7YXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfaG9pc3RfMV9mdW5jdGlvbkV4cHJlc3Npb24oKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV9ob2lzdF8xX2Z1bmN0aW9uRXhwcmVzc2lvbiwgIm5hbWUiLCB7IHZhbHVlOiAiZnVuY3Rpb25FeHByZXNzaW9uIiB9KTsKNDk0AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRTVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUZKO0FBQUEsMERBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRTdCO0FBQUEsc0RBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7OyJ9) - -```js -'use server' - -export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_hoist_0_arrowFunction, "arrowFunction") - -export const functionExpression = /* #__PURE__ */ registerServerReference($$module_hoist_1_functionExpression, "functionExpression") - -;async function $$module_hoist_0_arrowFunction() { return 'arrow function called' }; -/* #__PURE__ */ Object.defineProperty($$module_hoist_0_arrowFunction, "name", { value: "arrowFunction" }); - -;async function $$module_hoist_1_functionExpression() { - return 'function expression called' -}; -/* #__PURE__ */ Object.defineProperty($$module_hoist_1_functionExpression, "name", { value: "functionExpression" }); -``` diff --git a/packages/plugin-rsc/src/transforms/index.ts b/packages/plugin-rsc/src/transforms/index.ts index fabdc36aa..6147430da 100644 --- a/packages/plugin-rsc/src/transforms/index.ts +++ b/packages/plugin-rsc/src/transforms/index.ts @@ -1,7 +1,5 @@ export * from './hoist' -export * from './module-export' export * from './module-export-effect' -export * from './module-export-hoist' export * from './wrap-export' export * from './proxy-export' export * from './utils' diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.test.ts b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts new file mode 100644 index 000000000..8bdfc8e17 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts @@ -0,0 +1,89 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, test } from 'vitest' +import { + transformModuleExportEffect, + type TransformModuleExportEffectOptions, +} from './module-export-effect' + +async function transform( + input: string, + options: Omit = {}, +) { + const ast = await parseAstAsync(input) + return transformModuleExportEffect(input, ast, { + ...options, + runtime: ({ binding, exportName }) => + `register(${binding}, ${JSON.stringify(exportName)})`, + }) +} + +describe(transformModuleExportEffect, () => { + test('preserves declarations and emits effects after initialization', async () => { + const result = await transform(` +export async function action() {} +export const loader = async () => {}, value = 1 +export default async function Page() {} +`) + + expect(result.referenceNames).toEqual([ + 'action', + 'loader', + 'value', + 'default', + ]) + expect(result.output.toString()).toMatchInlineSnapshot(` + " + async function action() {} + const loader = async () => {}, value = 1 + async function Page() {} + + register(action, \"action\"); + export { action }; + + register(loader, \"loader\"); + register(value, \"value\"); + export { loader, value }; + + register(Page, \"default\"); + export default Page; + " + `) + }) + + test('preserves mutable bindings and local export aliases', async () => { + const result = await transform(` +export { action as renamed } +let action = async () => 'first' +action = async () => 'second' +`) + + expect(result.referenceNames).toEqual(['renamed']) + expect(result.output.toString()).toMatchInlineSnapshot(` + " + + let action = async () => 'first' + action = async () => 'second' + + register(action, \"renamed\"); + export { action as renamed } + " + `) + }) + + test('captures a default identifier before later reassignment', async () => { + const result = await transform(`let action = async () => 'first' +export default action +action = async () => 'second' +`) + + expect(result.output.toString()).toMatchInlineSnapshot(` + "let action = async () => 'first' + const $$effect_default = action; + action = async () => 'second' + + register($$effect_default, \"default\"); + export default $$effect_default; + " + `) + }) +}) diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.ts b/packages/plugin-rsc/src/transforms/module-export-effect.ts index a17d95be9..17396c7a2 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.ts @@ -1,22 +1,35 @@ import { tinyassert } from '@hiogawa/utils' -import type { ExportDefaultDeclaration, Node, Program } from 'estree' +import type { + ExportDefaultDeclaration, + Node, + Program, + VariableDeclaration, +} from 'estree' import MagicString from 'magic-string' import type { ESTree } from 'vite' -import type { - TransformModuleExportFilter, - TransformModuleExportMeta, -} from './module-export' import { extractNames, validateNonAsyncFunction } from './utils' +export type TransformModuleExportEffectMeta = { + localName?: string + declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] + isFunction?: boolean + defaultExportIdentifierName?: string +} + +export type TransformModuleExportEffectFilter = ( + name: string, + meta: TransformModuleExportEffectMeta, +) => boolean + export type TransformModuleExportEffectContext = { binding: string exportName: string - meta: TransformModuleExportMeta + meta: TransformModuleExportEffectMeta } export type TransformModuleExportEffectOptions = { runtime: (context: TransformModuleExportEffectContext) => string - filter?: TransformModuleExportFilter + filter?: TransformModuleExportEffectFilter rejectNonAsyncFunction?: boolean exportAll?: 'error' | 'preserve' } @@ -40,7 +53,7 @@ export function transformModuleExportEffect( const references: TransformModuleExportEffectContext[] = [] // Generated-name collision detection is intentionally out of scope, matching - // the other module export transforms. + // the other transform helpers. function generate(context: TransformModuleExportEffectContext): string { references.push(context) @@ -66,7 +79,7 @@ export function transformModuleExportEffect( ) { tinyassert(node.declaration.id) const binding = node.declaration.id.name - const meta: TransformModuleExportMeta = { + const meta: TransformModuleExportEffectMeta = { localName: binding, declarationKind: node.declaration.type === 'FunctionDeclaration' @@ -95,7 +108,7 @@ export function transformModuleExportEffect( : undefined let validate = false for (const binding of names) { - const meta: TransformModuleExportMeta = { + const meta: TransformModuleExportEffectMeta = { localName: binding, declarationKind: node.declaration.kind, isFunction, @@ -129,7 +142,7 @@ export function transformModuleExportEffect( ) } const exportName = specifier.exported.name - const meta: TransformModuleExportMeta = {} + const meta: TransformModuleExportEffectMeta = {} if (!filter(exportName, meta)) continue let binding = specifier.local.name @@ -171,7 +184,7 @@ export function transformModuleExportEffect( } } else if (node.type === 'ExportDefaultDeclaration') { let binding: string - let meta: TransformModuleExportMeta + let meta: TransformModuleExportEffectMeta if ( (node.declaration.type === 'FunctionDeclaration' || node.declaration.type === 'ClassDeclaration') && diff --git a/packages/plugin-rsc/src/transforms/module-export-hoist.ts b/packages/plugin-rsc/src/transforms/module-export-hoist.ts deleted file mode 100644 index bcb94d113..000000000 --- a/packages/plugin-rsc/src/transforms/module-export-hoist.ts +++ /dev/null @@ -1,203 +0,0 @@ -import type { - ArrowFunctionExpression, - ExportDefaultDeclaration, - ExportNamedDeclaration, - FunctionExpression, - Node, - Program, - VariableDeclarator, -} from 'estree' -import MagicString from 'magic-string' -import type { ESTree } from 'vite' -import type { - TransformModuleExportFilter, - TransformModuleExportMeta, -} from './module-export' -import { hasDirective, validateNonAsyncFunction } from './utils' - -type DefaultFunctionDeclaration = Extract< - ExportDefaultDeclaration['declaration'], - { type: 'FunctionDeclaration' } -> - -type ModuleFunction = - | DefaultFunctionDeclaration - | FunctionExpression - | ArrowFunctionExpression - -type HoistCandidate = { - node: ModuleFunction - parent: ExportDefaultDeclaration | ExportNamedDeclaration | VariableDeclarator - exportName: string - sourceName: string - meta: TransformModuleExportMeta -} - -export type TransformModuleExportHoistContext = { - implementation: string - exportName: string - meta: TransformModuleExportMeta -} - -export type TransformModuleExportHoistOptions = { - directive: string - runtime: (context: TransformModuleExportHoistContext) => string - filter?: TransformModuleExportFilter - rejectNonAsyncFunction?: boolean -} - -/** - * Treats a module directive as though it were attached to each directly exported - * function, then applies inline-style implementation hoisting and expression-site - * runtime replacement. Local export specifiers and re-exports are left unchanged. - */ -export function transformModuleExportHoist( - source: string, - viteAst: ESTree.Program, - options: TransformModuleExportHoistOptions, -): { - output: MagicString - references: TransformModuleExportHoistContext[] - referenceNames: string[] -} { - const ast = viteAst as unknown as Program - let input = source - if (!input.endsWith('\n')) input += '\n' - const output = new MagicString(input) - const references: TransformModuleExportHoistContext[] = [] - const filter = options.filter ?? (() => true) - if (!hasDirective(viteAst.body, options.directive)) { - return { output, references, referenceNames: [] } - } - - const candidates: HoistCandidate[] = [] - - for (const statement of ast.body) { - if (statement.type === 'ExportNamedDeclaration' && statement.declaration) { - if (statement.declaration.type === 'FunctionDeclaration') { - const name = statement.declaration.id.name - candidates.push({ - node: statement.declaration, - parent: statement, - exportName: name, - sourceName: name, - meta: { - localName: name, - declarationKind: 'function', - isFunction: true, - }, - }) - } else if (statement.declaration.type === 'VariableDeclaration') { - for (const declaration of statement.declaration.declarations) { - if ( - declaration.id.type === 'Identifier' && - declaration.init && - isFunctionNode(declaration.init) - ) { - candidates.push({ - node: declaration.init, - parent: declaration, - exportName: declaration.id.name, - sourceName: declaration.id.name, - meta: { - localName: declaration.id.name, - declarationKind: statement.declaration.kind, - isFunction: true, - }, - }) - } - } - } - } else if ( - statement.type === 'ExportDefaultDeclaration' && - isFunctionNode(statement.declaration) - ) { - const sourceName = - statement.declaration.type !== 'ArrowFunctionExpression' && - statement.declaration.id - ? statement.declaration.id.name - : 'anonymous_default' - candidates.push({ - node: statement.declaration, - parent: statement, - exportName: 'default', - sourceName, - meta: { - localName: - sourceName === 'anonymous_default' ? undefined : sourceName, - declarationKind: - statement.declaration.type === 'FunctionDeclaration' - ? 'function' - : undefined, - isFunction: true, - }, - }) - } - } - - for (const candidate of candidates) { - if (!filter(candidate.exportName, candidate.meta)) continue - const node = candidate.node - if (node.type === 'FunctionExpression' && node.id) { - throw Object.assign( - new Error('unsupported named function expression export'), - { pos: node.start }, - ) - } - validateNonAsyncFunction(options, node) - - const implementation = `$$module_hoist_${references.length}_${candidate.sourceName}` - const params = node.params - .map((parameter) => input.slice(parameter.start, parameter.end)) - .join(', ') - const prefix = `\n;${node.async ? 'async ' : ''}function${node.generator ? '*' : ''} ${implementation}(${params}) ` - if (node.body.type === 'BlockStatement') { - output.update(node.start, node.body.start, prefix) - output.appendLeft(node.end, ';') - } else { - output.update(node.start, node.body.start, `${prefix}{ return `) - output.appendLeft(node.end, ' };') - } - output.appendLeft( - node.end, - `\n/* #__PURE__ */ Object.defineProperty(${implementation}, "name", { value: ${JSON.stringify(candidate.sourceName)} });\n`, - ) - output.move(node.start, node.end, input.length) - - const context: TransformModuleExportHoistContext = { - implementation, - exportName: candidate.exportName, - meta: candidate.meta, - } - references.push(context) - const runtime = `/* #__PURE__ */ ${options.runtime(context)}` - - if (node.type === 'FunctionDeclaration' && node.id) { - const sourceName = node.id.name - let replacement = `const ${sourceName} = ${runtime};` - if (candidate.parent.type === 'ExportDefaultDeclaration') { - output.remove(candidate.parent.start, node.start) - replacement += `\nexport default ${sourceName};` - } - output.appendLeft(node.start, replacement) - } else { - output.appendLeft(node.start, runtime) - } - } - - return { - output, - references, - referenceNames: references.map((reference) => reference.exportName), - } -} - -function isFunctionNode( - node: Node | ExportDefaultDeclaration['declaration'], -): node is ModuleFunction { - return ( - node.type === 'FunctionDeclaration' || - node.type === 'FunctionExpression' || - node.type === 'ArrowFunctionExpression' - ) -} diff --git a/packages/plugin-rsc/src/transforms/module-export-models.test.ts b/packages/plugin-rsc/src/transforms/module-export-models.test.ts deleted file mode 100644 index db6cfefd7..000000000 --- a/packages/plugin-rsc/src/transforms/module-export-models.test.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { parseAstAsync } from 'vite' -import { describe, expect, test } from 'vitest' -import { transformModuleExport } from './module-export' -import { transformModuleExportEffect } from './module-export-effect' -import { transformModuleExportHoist } from './module-export-hoist' - -describe('module export transform models', () => { - test('compares canonical bindings, export effects, and hoisted expressions', async () => { - const input = `"use cache"; -export async function action(value) { - return value -} -export const loader = async () => "loaded" -export default async function Page() { - return "page" -} -` - const ast = await parseAstAsync(input) - const canonical = transformModuleExport(input, ast, { - generate: ({ implementation, binding, exportName }) => - `const ${binding} = wrap(${implementation}, ${JSON.stringify(exportName)}); export { ${binding} as ${exportName} };`, - }) - const effect = transformModuleExportEffect(input, ast, { - runtime: ({ binding, exportName }) => - `register(${binding}, ${JSON.stringify(exportName)})`, - }) - const hoist = transformModuleExportHoist(input, ast, { - directive: 'use cache', - runtime: ({ implementation, exportName }) => - `wrap(${implementation}, ${JSON.stringify(exportName)})`, - }) - - const outputs = { - canonical: canonical.output.toString(), - effect: effect.output.toString(), - hoist: hoist.output.toString(), - } - await Promise.all( - Object.values(outputs).map((output) => parseAstAsync(output)), - ) - - expect({ - referenceNames: { - canonical: canonical.referenceNames, - effect: effect.referenceNames, - hoist: hoist.referenceNames, - }, - outputs, - }).toMatchInlineSnapshot(` - { - "outputs": { - "canonical": ""use cache"; - async function action$$impl(value) { - return value - } - const action = wrap(action$$impl, "action"); export { action as action }; - - const loader$$impl = async () => "loaded" - const loader = wrap(loader$$impl, "loader"); export { loader as loader }; - - async function Page$$impl() { - return "page" - } - const Page = wrap(Page$$impl, "default"); export { Page as default }; - - ", - "effect": ""use cache"; - async function action(value) { - return value - } - const loader = async () => "loaded" - async function Page() { - return "page" - } - - register(action, "action"); - export { action }; - - register(loader, "loader"); - export { loader }; - - register(Page, "default"); - export default Page; - ", - "hoist": ""use cache"; - export const action = /* #__PURE__ */ wrap($$module_hoist_0_action, "action"); - export const loader = /* #__PURE__ */ wrap($$module_hoist_1_loader, "loader") - const Page = /* #__PURE__ */ wrap($$module_hoist_2_Page, "default"); - export default Page; - - ;async function $$module_hoist_0_action(value) { - return value - }; - /* #__PURE__ */ Object.defineProperty($$module_hoist_0_action, "name", { value: "action" }); - - ;async function $$module_hoist_1_loader() { return "loaded" }; - /* #__PURE__ */ Object.defineProperty($$module_hoist_1_loader, "name", { value: "loader" }); - - ;async function $$module_hoist_2_Page() { - return "page" - }; - /* #__PURE__ */ Object.defineProperty($$module_hoist_2_Page, "name", { value: "Page" }); - ", - }, - "referenceNames": { - "canonical": [ - "action", - "loader", - "default", - ], - "effect": [ - "action", - "loader", - "default", - ], - "hoist": [ - "action", - "loader", - "default", - ], - }, - } - `) - }) - - test('supports anonymous default functions', async () => { - const input = `"use cache"; export default async function () {}` - const ast = await parseAstAsync(input) - const effect = transformModuleExportEffect(input, ast, { - runtime: ({ binding }) => `register(${binding})`, - }) - const hoist = transformModuleExportHoist(input, ast, { - directive: 'use cache', - runtime: ({ implementation }) => `wrap(${implementation})`, - }) - - await expect(parseAstAsync(effect.output.toString())).resolves.toBeDefined() - await expect(parseAstAsync(hoist.output.toString())).resolves.toBeDefined() - expect({ - effect: effect.output.toString(), - hoist: hoist.output.toString(), - }).toMatchInlineSnapshot(` - { - "effect": ""use cache"; const $$effect_default = async function () {} - register($$effect_default); - export default $$effect_default; - ", - "hoist": ""use cache"; export default /* #__PURE__ */ wrap($$module_hoist_0_anonymous_default) - - ;async function $$module_hoist_0_anonymous_default() {}; - /* #__PURE__ */ Object.defineProperty($$module_hoist_0_anonymous_default, "name", { value: "anonymous_default" }); - ", - } - `) - }) - - test('captures default identifiers before later reassignment', async () => { - const input = `let action = async () => 'first' -export default action -action = async () => 'second' -` - const ast = await parseAstAsync(input) - const effect = transformModuleExportEffect(input, ast, { - runtime: ({ binding }) => `register(${binding})`, - }) - - await expect(parseAstAsync(effect.output.toString())).resolves.toBeDefined() - expect(effect.output.toString()).toMatchInlineSnapshot(` - "let action = async () => 'first' - const $$effect_default = action; - action = async () => 'second' - - register($$effect_default); - export default $$effect_default; - " - `) - }) -}) diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts deleted file mode 100644 index f782b1257..000000000 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { parseAstAsync } from 'vite' -import { describe, expect, test } from 'vitest' -import { - transformModuleExport, - type TransformModuleExportOptions, -} from './module-export' - -async function transform( - input: string, - options: Omit = {}, -) { - const ast = await parseAstAsync(input) - return transformModuleExport(input, ast, { - ...options, - generate: ({ implementation, binding, exportName }) => - `const ${binding} = wrap(${implementation}, ${JSON.stringify(exportName)});\n` + - `export { ${binding} as ${exportName} };`, - }) -} - -describe(transformModuleExport, () => { - test('extracts direct and default declarations', async () => { - const result = await transform(` -export async function action() {} -export const loader = async () => {}, value = 1 -export default async function Page() {} -`) - - expect(result.referenceNames).toEqual([ - 'action', - 'loader', - 'value', - 'default', - ]) - expect(result.output.toString()).toMatchInlineSnapshot(` - " - async function action$$impl() {} - const action = wrap(action$$impl, "action"); - export { action as action }; - - const loader$$impl = async () => {}, value$$impl = 1 - const loader = wrap(loader$$impl, "loader"); - export { loader as loader }; - const value = wrap(value$$impl, "value"); - export { value as value }; - - async function Page$$impl() {} - const Page = wrap(Page$$impl, "default"); - export { Page as default }; - - " - `) - }) - - test('documents dependent multi-declarator TDZ', async () => { - const result = await transform( - `export const first = async () => {}, second = first`, - ) - - // `first` is a later generated const in this output. Supporting this - // uncommon dependency would require splitting the source declaration. - expect(result.output.toString()).toMatchInlineSnapshot(` - "const first$$impl = async () => {}, second$$impl = first - const first = wrap(first$$impl, \"first\"); - export { first as first }; - const second = wrap(second$$impl, \"second\"); - export { second as second }; - " - `) - }) - - test('canonicalizes mutable declaration initial values', async () => { - const result = await transform(` -export var action = async () => {} -export let loader = async () => {} -`) - - expect(result.output.toString()).toMatchInlineSnapshot(` - " - var action$$impl = async () => {} - const action = wrap(action$$impl, \"action\"); - export { action as action }; - - let loader$$impl = async () => {} - const loader = wrap(loader$$impl, \"loader\"); - export { loader as loader }; - - " - `) - }) - - test('handles aliases, re-exports, and filtering', async () => { - const result = await transform( - ` -export { value as action, exposed as skipped } -const value = async () => {} -const exposed = 0 -export { remote as action2 } from './dep' -export * from './other' -`, - { - exportAll: 'preserve', - filter: (name) => name !== 'skipped', - }, - ) - - expect(result.referenceNames).toEqual(['action', 'action2']) - expect(result.output.toString()).toMatchInlineSnapshot(` - " - - export { exposed as skipped }; - - const value = async () => {} - const exposed = 0 - - import { remote as $$import_action2 } from './dep'; - const $$module_action2 = wrap($$import_action2, "action2"); - export { $$module_action2 as action2 }; - - export * from './other' - - const $$module_action = wrap(value, "action"); - export { $$module_action as action }; - " - `) - }) - - test('reports metadata and preserves filtered declarations', async () => { - const input = `export const Page = () => {}, value = 1; -export default Page;` - const ast = await parseAstAsync(input) - const result = transformModuleExport(input, ast, { - filter: (_name, meta) => meta.isFunction !== false, - exportAll: 'preserve', - generate: (context) => - `const ${context.binding} = wrap(${context.implementation}); export { ${context.binding} as ${context.exportName} };`, - }) - - expect({ - references: result.references, - output: result.output.toString(), - }).toMatchInlineSnapshot(` - { - "output": "const Page$$impl = () => {}, value = 1; - const Page = wrap(Page$$impl); export { Page as Page }; - export { value }; - - - const $$default = wrap(Page); export { $$default as default }; - ", - "references": [ - { - "binding": "Page", - "exportName": "Page", - "implementation": "Page$$impl", - "meta": { - "declarationKind": "const", - "isFunction": true, - "localName": "Page", - }, - }, - { - "binding": "$$default", - "exportName": "default", - "implementation": "Page", - "meta": { - "defaultExportIdentifierName": "Page", - "isFunction": undefined, - }, - }, - ], - } - `) - }) - - test('validates selected exports and export-all policy', async () => { - await expect( - transform(`export function action() {}`, { - rejectNonAsyncFunction: true, - }), - ).rejects.toThrow('unsupported non async function') - await expect(transform(`export * from './dep'`)).rejects.toThrow( - 'unsupported ExportAllDeclaration', - ) - await expect(transform(`export const { action } = value`)).rejects.toThrow( - 'unsupported destructured export declaration', - ) - }) -}) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts deleted file mode 100644 index ba9a227d9..000000000 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ /dev/null @@ -1,386 +0,0 @@ -import { tinyassert } from '@hiogawa/utils' -import type { - ExportDefaultDeclaration, - Identifier, - Node, - Program, - VariableDeclaration, -} from 'estree' -import MagicString from 'magic-string' -import type { ESTree } from 'vite' -import { extractIdentifiers, validateNonAsyncFunction } from './utils' - -export type TransformModuleExportMeta = { - /** Source-local declaration name when one is statically available. */ - localName?: string - declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] - isFunction?: boolean - /** Identifier referenced by `export default Identifier`. */ - defaultExportIdentifierName?: string -} - -export type TransformModuleExportGenerateContext = { - /** Private source implementation or imported/local value being transformed. */ - implementation: string - /** Generated local name reserved for the canonical runtime result. */ - binding: string - /** Public module export name, including `default`. */ - exportName: string - meta: TransformModuleExportMeta -} - -export type TransformModuleExportFilter = ( - name: string, - meta: TransformModuleExportMeta, -) => boolean - -export type TransformModuleExportOptions = { - generate: (context: TransformModuleExportGenerateContext) => string - filter?: TransformModuleExportFilter - rejectNonAsyncFunction?: boolean - exportAll?: 'error' | 'preserve' -} - -export type TransformModuleExportResult = { - output: MagicString - /** Full generation contexts for selected exports in source order. */ - references: TransformModuleExportGenerateContext[] - /** Selected public export names in source order. */ - referenceNames: string[] -} - -/** - * Extracts selected module exports into implementation bindings and delegates - * complete canonical binding and export generation to the consumer. - * - * Conceptually: - * - * ```js - * export async function action(value) { - * return value - * } - * ``` - * - * becomes: - * - * ```js - * async function action$$impl(value) { - * return value - * } - * export const action = __RUNTIME__(action$$impl, 'action') - * ``` - * - * `generate` owns the complete generated declaration and export code represented - * by `export const ...` above. The transform does not classify or rewrite that - * code, so consumers also own effects and purity annotations. - * - * Generated code for direct declarations is placed immediately after the source - * declaration. Local export specifiers are generated at module end so their values - * have initialized, while re-exports are converted to local imports at the original - * export position. - * - * This canonical-binding model intentionally does not preserve source function - * hoisting or mutable reassignment under the exported name. Consumers can reject - * mutable declarations through `meta.declarationKind` when required. Selected - * destructured declaration bindings remain unsupported. - */ -export function transformModuleExport( - input: string, - viteAst: ESTree.Program, - options: TransformModuleExportOptions, -): TransformModuleExportResult { - const ast = viteAst as unknown as Program - const output = new MagicString(input) - const references: TransformModuleExportGenerateContext[] = [] - const emissions = new Map() - const filter = options.filter ?? (() => true) - - function extractDeclaration( - identifier: Identifier, - exportName: string, - meta: TransformModuleExportMeta, - position: number, - ): void { - const localName = identifier.name - const implementation = `${localName}$$impl` - output.update(identifier.start, identifier.end, implementation) - generate({ implementation, binding: localName, exportName, meta }, position) - } - - function emit(position: number, code: string): void { - const codes = emissions.get(position) ?? [] - codes.push(code) - emissions.set(position, codes) - } - - function generate( - context: TransformModuleExportGenerateContext, - position: number, - ): void { - references.push(context) - emit(position, options.generate(context)) - } - - function preserveExport( - localName: string, - exportName: string, - position: number, - ): void { - emit( - position, - localName === exportName - ? `export { ${localName} };` - : `export { ${localName} as ${exportName} };`, - ) - } - - for (const node of ast.body) { - if (node.type === 'ExportNamedDeclaration') { - if (node.declaration) { - if ( - node.declaration.type === 'FunctionDeclaration' || - node.declaration.type === 'ClassDeclaration' - ) { - tinyassert(node.declaration.id) - const identifier = node.declaration.id - const meta: TransformModuleExportMeta = { - localName: identifier.name, - declarationKind: - node.declaration.type === 'FunctionDeclaration' - ? 'function' - : 'class', - isFunction: getIsFunction(node.declaration), - } - if (!filter(identifier.name, meta)) continue - - validateNonAsyncFunction(options, node.declaration) - output.remove(node.start, node.declaration.start) - extractDeclaration(identifier, identifier.name, meta, node.end) - } else if (node.declaration.type === 'VariableDeclaration') { - const variableDeclaration = node.declaration - const declarations: Array<{ - node: (typeof variableDeclaration.declarations)[number] - selected: Array<{ - identifier: Identifier - meta: TransformModuleExportMeta - }> - preserved: string[] - }> = [] - - for (const declaration of variableDeclaration.declarations) { - const identifiers = extractIdentifiers(declaration.id) - if ( - declaration.id.type !== 'Identifier' && - identifiers.some((identifier) => - filter(identifier.name, { - localName: identifier.name, - declarationKind: variableDeclaration.kind, - }), - ) - ) { - throw Object.assign( - new Error('unsupported destructured export declaration'), - { pos: declaration.id.start }, - ) - } - const isFunction = - declaration.id.type === 'Identifier' && declaration.init - ? getIsFunction(declaration.init) - : undefined - const selected: (typeof declarations)[number]['selected'] = [] - const preserved: string[] = [] - let validate = false - for (const identifier of identifiers) { - const meta: TransformModuleExportMeta = { - localName: identifier.name, - declarationKind: variableDeclaration.kind, - isFunction, - } - if (filter(identifier.name, meta)) { - selected.push({ identifier, meta }) - validate = true - } else { - preserved.push(identifier.name) - } - } - if (validate && declaration.init) { - validateNonAsyncFunction(options, declaration.init) - } - declarations.push({ - node: declaration, - selected, - preserved, - }) - } - - if ( - !declarations.some((declaration) => declaration.selected.length) - ) { - continue - } - output.remove(node.start, variableDeclaration.start) - for (const declaration of declarations) { - for (const { identifier, meta } of declaration.selected) { - extractDeclaration(identifier, identifier.name, meta, node.end) - } - for (const name of declaration.preserved) { - preserveExport(name, name, node.end) - } - } - } else { - node.declaration satisfies never - } - } else if (node.specifiers.length > 0) { - const selected = node.specifiers.map((specifier) => { - tinyassert(specifier.local.type === 'Identifier') - if (specifier.exported.type !== 'Identifier') { - throw Object.assign( - new Error('unsupported string literal export name'), - { pos: specifier.exported.start }, - ) - } - const meta: TransformModuleExportMeta = {} - return { - localName: specifier.local.name, - exportName: specifier.exported.name, - meta, - selected: filter(specifier.exported.name, meta), - } - }) - if (!selected.some((item) => item.selected)) continue - - output.remove(node.start, node.end) - const sourceTail = node.source - ? input.slice(node.source.end, node.end).replace(/;?\s*$/, ';') - : undefined - for (const item of selected) { - if (!item.selected) { - if (node.source) { - emit( - node.end, - `export { ${item.localName} as ${item.exportName} } from ${node.source.raw}${sourceTail}`, - ) - } else { - preserveExport(item.localName, item.exportName, node.end) - } - continue - } - - let implementation = item.localName - // Local specifiers can appear before their declarations, unlike - // re-exports whose imported implementation is available immediately. - const position = node.source ? node.end : input.length - if (node.source) { - implementation = `$$import_${item.exportName}` - emit( - node.end, - `import { ${item.localName} as ${implementation} } from ${node.source.raw}${sourceTail}`, - ) - } - const binding = `$$module_${item.exportName}` - generate( - { - implementation, - binding, - exportName: item.exportName, - meta: item.meta, - }, - position, - ) - } - } - } else if (node.type === 'ExportAllDeclaration') { - if (options.exportAll !== 'preserve') { - throw Object.assign(new Error('unsupported ExportAllDeclaration'), { - pos: node.start, - }) - } - } else if (node.type === 'ExportDefaultDeclaration') { - let implementation: string - let bindingBase = '$$default' - let meta: TransformModuleExportMeta - - if ( - (node.declaration.type === 'FunctionDeclaration' || - node.declaration.type === 'ClassDeclaration') && - node.declaration.id - ) { - const identifier = node.declaration.id - meta = { - localName: identifier.name, - declarationKind: - node.declaration.type === 'FunctionDeclaration' - ? 'function' - : 'class', - isFunction: getIsFunction(node.declaration), - } - if (!filter('default', meta)) continue - - validateNonAsyncFunction(options, node.declaration) - output.remove(node.start, node.declaration.start) - implementation = `${identifier.name}$$impl` - output.update(identifier.start, identifier.end, implementation) - bindingBase = identifier.name - } else { - meta = { - defaultExportIdentifierName: - node.declaration.type === 'Identifier' - ? node.declaration.name - : undefined, - isFunction: getIsFunction(node.declaration), - } - if (!filter('default', meta)) continue - - validateNonAsyncFunction(options, node.declaration) - if (node.declaration.type === 'Identifier') { - implementation = node.declaration.name - output.remove(node.start, node.end) - } else { - implementation = '$$default$$impl' - output.update( - node.start, - node.declaration.start, - `const ${implementation} = `, - ) - } - } - - const binding = bindingBase - generate( - { implementation, binding, exportName: 'default', meta }, - node.end, - ) - } - } - - for (const [position, codes] of emissions) { - output.appendLeft(position, `\n${codes.join('\n')}\n`) - } - - return { - output, - references, - referenceNames: references.map((reference) => reference.exportName), - } -} - -function getIsFunction( - node: Node | ExportDefaultDeclaration['declaration'], -): boolean | undefined { - if ( - node.type === 'FunctionDeclaration' || - node.type === 'ArrowFunctionExpression' || - node.type === 'FunctionExpression' - ) { - return true - } - if ( - node.type === 'ClassDeclaration' || - node.type === 'Literal' || - node.type === 'ObjectExpression' || - node.type === 'ArrayExpression' || - node.type === 'ClassExpression' - ) { - return false - } -} diff --git a/packages/plugin-rsc/src/transforms/wrap-export.ts b/packages/plugin-rsc/src/transforms/wrap-export.ts index bad3c9ed5..07f0f1c30 100644 --- a/packages/plugin-rsc/src/transforms/wrap-export.ts +++ b/packages/plugin-rsc/src/transforms/wrap-export.ts @@ -49,7 +49,6 @@ export type TransformWrapExportOptions = { filter?: TransformWrapExportFilter } -/** @deprecated Use `transformModuleExport` instead. */ export function transformWrapExport( input: string, viteAst: ESTree.Program, From 714d08ae93ddf0a243aa5a9acd138c693acd10ed Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:25:37 +0900 Subject: [PATCH 15/52] test(rsc): compare module export mappings Co-authored-by: OpenCode --- .../default-anonymous.js.map.snap.md | 25 ++++++++ .../default-anonymous.js.map.snap.txt | 8 --- .../wrap-export/default-anonymous.js.snap.js | 14 ----- .../wrap-export/default-anonymous.js.snap.md | 47 ++++++++++++++ .../default-identifier.js.map.snap.md | 26 ++++++++ .../wrap-export/default-identifier.js.snap.js | 16 ----- .../wrap-export/default-identifier.js.snap.md | 53 ++++++++++++++++ .../wrap-export/default-named.js.map.snap.md | 23 +++++++ .../wrap-export/default-named.js.map.snap.txt | 7 --- .../wrap-export/default-named.js.snap.js | 14 ----- .../wrap-export/default-named.js.snap.md | 47 ++++++++++++++ .../wrap-export/local-alias.js.map.snap.md | 23 +++++++ .../wrap-export/local-alias.js.map.snap.txt | 7 --- .../wrap-export/local-alias.js.snap.js | 16 ----- .../wrap-export/local-alias.js.snap.md | 53 ++++++++++++++++ .../multiple-exports.js.map.snap.md | 33 ++++++++++ .../wrap-export/multiple-exports.js.snap.js | 19 ------ .../wrap-export/multiple-exports.js.snap.md | 63 +++++++++++++++++++ .../wrap-export/named-function.js.map.snap.md | 22 +++++++ .../named-function.js.map.snap.txt | 6 -- .../wrap-export/named-function.js.snap.js | 13 ---- .../wrap-export/named-function.js.snap.md | 46 ++++++++++++++ .../wrap-export/reexport.js.map.snap.md | 19 ++++++ .../wrap-export/reexport.js.map.snap.txt | 5 -- .../wrap-export/reexport.js.snap.js | 13 ---- .../wrap-export/reexport.js.snap.md | 44 +++++++++++++ .../wrap-export/variables.js.map.snap.md | 31 +++++++++ .../wrap-export/variables.js.map.snap.txt | 11 ---- .../wrap-export/variables.js.snap.js | 17 ----- .../wrap-export/variables.js.snap.md | 57 +++++++++++++++++ .../src/transforms/source-map.test.ts | 54 +++++++++------- .../plugin-rsc/src/transforms/test-utils.ts | 39 ++++++++++++ 32 files changed, 681 insertions(+), 190 deletions(-) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.txt delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.txt delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.txt delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.txt delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.txt delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.md delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.txt delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md 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 new file mode 100644 index 000000000..392988413 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.md @@ -0,0 +1,25 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "export default " --> (2:0) "const $$default = " +(2:15) "async function () {\n" --> (2:18) "async function () {\n" +(3:0) " return 'default anonymous function called'\n" --> (3:0) " return 'default anonymous function called'\n" +(4:0) "}\n" --> (4:0) "}\n" +[unmapped] --> (5:0) ";\n" +[unmapped] --> (6:0) "const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, \"default\");\n" +[unmapped] --> (7:0) "export { $$wrap_$$default as default };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:6) " default " --> (2:0) "const $$effect_default = " +(2:15) "async function () {\n" --> (2:25) "async function () {\n" +(3:0) " return 'default anonymous function called'\n" --> (3:0) " return 'default anonymous function called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(2:0) "export default async function () {\n" --> (5:0) "\n" +(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" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.txt b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.txt deleted file mode 100644 index 6d29f5d87..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.txt +++ /dev/null @@ -1,8 +0,0 @@ -(0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:0) "export default " --> (2:0) "const $$default = " -(2:15) "async function () {\n" --> (2:18) "async function () {\n" -(3:0) " return 'default anonymous function called'\n" --> (3:0) " return 'default anonymous function called'\n" -(4:0) "}\n" --> (4:0) "}\n" -[unmapped] --> (5:0) ";\n" -[unmapped] --> (6:0) "const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, \"default\");\n" -[unmapped] --> (7:0) "export { $$wrap_$$default as default };\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js deleted file mode 100644 index d1fd45515..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CjsKY29uc3QgJCR3cmFwXyQkZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGRlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkd3JhcF8kJGRlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLGtCQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0= -*/ - -'use server' - -const $$default = async function () { - return 'default anonymous function called' -} -; -const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); -export { $$wrap_$$default as default }; 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 new file mode 100644 index 000000000..2c88b1a97 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.snap.md @@ -0,0 +1,47 @@ +## Input + +```js +'use server' + +export default async function () { + return 'default anonymous function called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9CjsKY29uc3QgJCR3cmFwXyQkZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGRlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkd3JhcF8kJGRlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLGtCQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0=) + +```js +'use server' + +const $$default = async function () { + return 'default anonymous function called' +} +; +const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); +export { $$wrap_$$default as default }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRlZmZlY3RfZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IGRlZmF1bHQgJCRlZmZlY3RfZGVmYXVsdDsKMzM1AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGFub255bW91cyBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFTCx5QkFBUyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDO0FBRkE7QUFBQTtBQUFBOyJ9) + +```js +'use server' + +const $$effect_default = async function () { + return 'default anonymous function called' +} + +registerServerReference($$effect_default, "default"); +export default $$effect_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 new file mode 100644 index 000000000..a7c2a494c --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.map.snap.md @@ -0,0 +1,26 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function defaultIdentifier() {\n" --> (2:0) "async function defaultIdentifier() {\n" +(3:0) " return 'default identifier called'\n" --> (3:0) " return 'default identifier called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(6:0) "export default " --> (6:0) "const $$default = " +(6:15) "defaultIdentifier\n" --> (6:18) "defaultIdentifier\n" +[unmapped] --> (7:0) ";\n" +[unmapped] --> (8:0) "const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, \"default\");\n" +[unmapped] --> (9:0) "export { $$wrap_$$default as default };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function defaultIdentifier() {\n" --> (2:0) "async function defaultIdentifier() {\n" +(3:0) " return 'default identifier called'\n" --> (3:0) " return 'default identifier called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(6:6) " default defaultIdentifier\n" --> (6:0) "const $$effect_default = defaultIdentifier;\n" +(6:0) "export default defaultIdentifier\n" --> (7:0) "\n" +(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" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js deleted file mode 100644 index 8f8865f1e..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjU3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGRlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgo7CmNvbnN0ICQkd3JhcF8kJGRlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRkZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJHdyYXBfJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLGtCQUFlOzs7OyJ9 -*/ - -'use server' - -async function defaultIdentifier() { - return 'default identifier called' -} - -const $$default = defaultIdentifier -; -const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); -export { $$wrap_$$default as default }; 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 new file mode 100644 index 000000000..d8039095b --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.snap.md @@ -0,0 +1,53 @@ +## Input + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +export default defaultIdentifier +``` + +## wrap-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjU3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGRlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgo7CmNvbnN0ICQkd3JhcF8kJGRlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRkZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJHdyYXBfJCRkZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLGtCQUFlOzs7OyJ9) + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +const $$default = defaultIdentifier +; +const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); +export { $$wrap_$$default as default }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJGVmZmVjdF9kZWZhdWx0ID0gZGVmYXVsdElkZW50aWZpZXI7CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNjIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBpZGVudGlmaWVyIGNhbGxlZCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdElkZW50aWZpZXJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDbkM7O0FBRU07QUFBTjtBQUFBO0FBQUE7In0=) + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +const $$effect_default = defaultIdentifier; + +registerServerReference($$effect_default, "default"); +export default $$effect_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 new file mode 100644 index 000000000..86fa79fd2 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.md @@ -0,0 +1,23 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:15) "async function defaultNamedFunction() {\n" --> (2:0) "async function defaultNamedFunction() {\n" +(3:0) " return 'default named function called'\n" --> (3:0) " return 'default named function called'\n" +(4:0) "}\n" --> (4:0) "}\n" +[unmapped] --> (5:0) ";\n" +[unmapped] --> (6:0) "const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, \"default\");\n" +[unmapped] --> (7:0) "export { $$wrap_defaultNamedFunction as default };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:15) "async function defaultNamedFunction() {\n" --> (2:0) "async function defaultNamedFunction() {\n" +(3:0) " return 'default named function called'\n" --> (3:0) " return 'default named function called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(2:0) "export default async function defaultNamedFunction() {\n" --> (5:0) "\n" +(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" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.txt b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.txt deleted file mode 100644 index c54867b2f..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.map.snap.txt +++ /dev/null @@ -1,7 +0,0 @@ -(0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:15) "async function defaultNamedFunction() {\n" --> (2:0) "async function defaultNamedFunction() {\n" -(3:0) " return 'default named function called'\n" --> (3:0) " return 'default named function called'\n" -(4:0) "}\n" --> (4:0) "}\n" -[unmapped] --> (5:0) ";\n" -[unmapped] --> (6:0) "const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, \"default\");\n" -[unmapped] --> (7:0) "export { $$wrap_defaultNamedFunction as default };\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js deleted file mode 100644 index 6480fb172..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.js +++ /dev/null @@ -1,14 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjYwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQo7CmNvbnN0ICQkd3JhcF9kZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShkZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX2RlZmF1bHROYW1lZEZ1bmN0aW9uIGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0= -*/ - -'use server' - -async function defaultNamedFunction() { - return 'default named function called' -} -; -const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, "default"); -export { $$wrap_defaultNamedFunction as default }; 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 new file mode 100644 index 000000000..b31b20bea --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md @@ -0,0 +1,47 @@ +## Input + +```js +'use server' + +export default async function defaultNamedFunction() { + return 'default named function called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjYwACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQo7CmNvbnN0ICQkd3JhcF9kZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShkZWZhdWx0TmFtZWRGdW5jdGlvbiwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX2RlZmF1bHROYW1lZEZ1bmN0aW9uIGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) + +```js +'use server' + +async function defaultNamedFunction() { + return 'default named function called' +} +; +const $$wrap_defaultNamedFunction = /* #__PURE__ */ registerServerReference(defaultNamedFunction, "default"); +export { $$wrap_defaultNamedFunction as default }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTkzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0Iik7CmV4cG9ydCBkZWZhdWx0IGRlZmF1bHROYW1lZEZ1bmN0aW9uOwozNTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2QztBQUZBO0FBQUE7QUFBQTsifQ==) + +```js +'use server' + +async function defaultNamedFunction() { + return 'default named function called' +} + +registerServerReference(defaultNamedFunction, "default"); +export default defaultNamedFunction; +``` 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 new file mode 100644 index 000000000..c3ac63ed7 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md @@ -0,0 +1,23 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function localAlias() {\n" --> (2:0) "async function localAlias() {\n" +(3:0) " return 'local alias called'\n" --> (3:0) " return 'local alias called'\n" +(4:0) "}\n" --> (4:0) "}\n" +[unmapped] --> (7:0) ";\n" +[unmapped] --> (8:0) "const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, \"aliasedAction\");\n" +[unmapped] --> (9:0) "export { $$wrap_localAlias as aliasedAction };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function localAlias() {\n" --> (2:0) "async function localAlias() {\n" +(3:0) " return 'local alias called'\n" --> (3:0) " return 'local alias called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(6:0) "export { localAlias as aliasedAction }\n" --> (7:0) "\n" +(6:0) "export { localAlias as aliasedAction }\n" --> (8:0) "registerServerReference(localAlias, \"aliasedAction\");\n" +(6:0) "export { localAlias as aliasedAction }\n" --> (9:0) "export { localAlias as aliasedAction }\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.txt b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.txt deleted file mode 100644 index 423001662..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.txt +++ /dev/null @@ -1,7 +0,0 @@ -(0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:0) "async function localAlias() {\n" --> (2:0) "async function localAlias() {\n" -(3:0) " return 'local alias called'\n" --> (3:0) " return 'local alias called'\n" -(4:0) "}\n" --> (4:0) "}\n" -[unmapped] --> (7:0) ";\n" -[unmapped] --> (8:0) "const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, \"aliasedAction\");\n" -[unmapped] --> (9:0) "export { $$wrap_localAlias as aliasedAction };\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js deleted file mode 100644 index ec5c2b8f0..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX2xvY2FsQWxpYXMgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCR3cmFwX2xvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9OwozMzYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7Ozs7OyJ9 -*/ - -'use server' - -async function localAlias() { - return 'local alias called' -} - - -; -const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); -export { $$wrap_localAlias as aliasedAction }; 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 new file mode 100644 index 000000000..3f4054e24 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.snap.md @@ -0,0 +1,53 @@ +## Input + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + +export { localAlias as aliasedAction } +``` + +## wrap-export + +**Status:** transformed + +**References:** aliasedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX2xvY2FsQWxpYXMgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobG9jYWxBbGlhcywgImFsaWFzZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCR3cmFwX2xvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9OwozMzYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7Ozs7OyJ9) + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + + +; +const $$wrap_localAlias = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); +export { $$wrap_localAlias as aliasedAction }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** aliasedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShsb2NhbEFsaWFzLCAiYWxpYXNlZEFjdGlvbiIpOwpleHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfQozNDgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHtcbiAgcmV0dXJuICdsb2NhbCBhbGlhcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IGxvY2FsQWxpYXMgYXMgYWxpYXNlZEFjdGlvbiB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM1Qjs7O0FBRUE7QUFBQTtBQUFBOyJ9) + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + + + +registerServerReference(localAlias, "aliasedAction"); +export { localAlias as aliasedAction } +``` 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 new file mode 100644 index 000000000..72485f5a2 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.map.snap.md @@ -0,0 +1,33 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "async function firstAction() {\n" --> (2:0) "async function firstAction() {\n" +(3:0) " return 'first action called'\n" --> (3:0) " return 'first action called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(6:7) "async function secondAction() {\n" --> (6:0) "async function secondAction() {\n" +(7:0) " return 'second action called'\n" --> (7:0) " return 'second action called'\n" +(8:0) "}\n" --> (8:0) "}\n" +(2:0) "export async function firstAction() {\n" --> (9:0) "firstAction = /* #__PURE__ */ registerServerReference(firstAction, \"firstAction\");\n" +(2:0) "export async function firstAction() {\n" --> (10:0) "export { firstAction };\n" +(6:0) "export async function secondAction() {\n" --> (11:0) "secondAction = /* #__PURE__ */ registerServerReference(secondAction, \"secondAction\");\n" +(6:0) "export async function secondAction() {\n" --> (12:0) "export { secondAction };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "async function firstAction() {\n" --> (2:0) "async function firstAction() {\n" +(3:0) " return 'first action called'\n" --> (3:0) " return 'first action called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(6:7) "async function secondAction() {\n" --> (6:0) "async function secondAction() {\n" +(7:0) " return 'second action called'\n" --> (7:0) " return 'second action called'\n" +(8:0) "}\n" --> (8:0) "}\n" +(2:0) "export async function firstAction() {\n" --> (9:0) "\n" +(2:0) "export async function firstAction() {\n" --> (10:0) "registerServerReference(firstAction, \"firstAction\");\n" +(2:0) "export async function firstAction() {\n" --> (11:0) "export { firstAction };\n" +(6:0) "export async function secondAction() {\n" --> (12:0) "\n" +(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" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js deleted file mode 100644 index 4cdb47bf3..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.js +++ /dev/null @@ -1,19 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MzYzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQpmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CmV4cG9ydCB7IGZpcnN0QWN0aW9uIH07CnNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKZXhwb3J0IHsgc2Vjb25kQWN0aW9uIH07CjUwNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7XG4gIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCdcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHtcbiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FBTkE7QUFBQTtBQUlBO0FBQUE7In0= -*/ - -'use server' - -async function firstAction() { - return 'first action called' -} - -async function secondAction() { - return 'second action called' -} -firstAction = /* #__PURE__ */ registerServerReference(firstAction, "firstAction"); -export { firstAction }; -secondAction = /* #__PURE__ */ registerServerReference(secondAction, "secondAction"); -export { secondAction }; 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 new file mode 100644 index 000000000..20e24de54 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.snap.md @@ -0,0 +1,63 @@ +## Input + +```js +'use server' + +export async function firstAction() { + return 'first action called' +} + +export async function secondAction() { + return 'second action called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** firstAction, secondAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzYzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQpmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIik7CmV4cG9ydCB7IGZpcnN0QWN0aW9uIH07CnNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKZXhwb3J0IHsgc2Vjb25kQWN0aW9uIH07CjUwNAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7XG4gIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCdcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlY29uZEFjdGlvbigpIHtcbiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzdCOztBQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FBTkE7QUFBQTtBQUlBO0FBQUE7In0=) + +```js +'use server' + +async function firstAction() { + return 'first action called' +} + +async function secondAction() { + return 'second action called' +} +firstAction = /* #__PURE__ */ registerServerReference(firstAction, "firstAction"); +export { firstAction }; +secondAction = /* #__PURE__ */ registerServerReference(secondAction, "secondAction"); +export { secondAction }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** firstAction, secondAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3RBY3Rpb24sICJmaXJzdEFjdGlvbiIpOwpleHBvcnQgeyBmaXJzdEFjdGlvbiB9OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2Uoc2Vjb25kQWN0aW9uLCAic2Vjb25kQWN0aW9uIik7CmV4cG9ydCB7IHNlY29uZEFjdGlvbiB9Owo1MTQAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3Qjs7QUFFTyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM5QjtBQU5BO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTsifQ==) + +```js +'use server' + +async function firstAction() { + return 'first action called' +} + +async function secondAction() { + return 'second action called' +} + +registerServerReference(firstAction, "firstAction"); +export { firstAction }; + +registerServerReference(secondAction, "secondAction"); +export { secondAction }; +``` 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 new file mode 100644 index 000000000..291d2b0c3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.md @@ -0,0 +1,22 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "async function namedFunction() {\n" --> (2:0) "async function namedFunction() {\n" +(3:0) " return 'named function called'\n" --> (3:0) " return 'named function called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(2:0) "export async function namedFunction() {\n" --> (5:0) "namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, \"namedFunction\");\n" +(2:0) "export async function namedFunction() {\n" --> (6:0) "export { namedFunction };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "async function namedFunction() {\n" --> (2:0) "async function namedFunction() {\n" +(3:0) " return 'named function called'\n" --> (3:0) " return 'named function called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(2:0) "export async function namedFunction() {\n" --> (5:0) "\n" +(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" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.txt b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.txt deleted file mode 100644 index 55aaef07d..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.map.snap.txt +++ /dev/null @@ -1,6 +0,0 @@ -(0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:7) "async function namedFunction() {\n" --> (2:0) "async function namedFunction() {\n" -(3:0) " return 'named function called'\n" --> (3:0) " return 'named function called'\n" -(4:0) "}\n" --> (4:0) "}\n" -(2:0) "export async function namedFunction() {\n" --> (5:0) "namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, \"namedFunction\");\n" -(2:0) "export async function namedFunction() {\n" --> (6:0) "export { namedFunction };\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js deleted file mode 100644 index 3f597bb58..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTk3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpuYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CmV4cG9ydCB7IG5hbWVkRnVuY3Rpb24gfTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9CO0FBRkE7QUFBQTsifQ== -*/ - -'use server' - -async function namedFunction() { - return 'named function called' -} -namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, "namedFunction"); -export { namedFunction }; 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 new file mode 100644 index 000000000..e6fb50e56 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function.js.snap.md @@ -0,0 +1,46 @@ +## Input + +```js +'use server' + +export async function namedFunction() { + return 'named function called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** namedFunction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQpuYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CmV4cG9ydCB7IG5hbWVkRnVuY3Rpb24gfTsKMzEyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9CO0FBRkE7QUFBQTsifQ==) + +```js +'use server' + +async function namedFunction() { + return 'named function called' +} +namedFunction = /* #__PURE__ */ registerServerReference(namedFunction, "namedFunction"); +export { namedFunction }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** namedFunction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiwgIm5hbWVkRnVuY3Rpb24iKTsKZXhwb3J0IHsgbmFtZWRGdW5jdGlvbiB9OwozMTcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDL0I7QUFGQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +async function namedFunction() { + return 'named function called' +} + +registerServerReference(namedFunction, "namedFunction"); +export { namedFunction }; +``` 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 new file mode 100644 index 000000000..62a46b8fe --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.md @@ -0,0 +1,19 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +[unmapped] --> (3:0) ";\n" +[unmapped] --> (4:0) "import { reexportedAction as $$import_reexportedAction } from './reexport-source';\n" +[unmapped] --> (5:0) "const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, \"reexportedAction\");\n" +[unmapped] --> (6:0) "export { $$wrap_$$import_reexportedAction as reexportedAction };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "export { reexportedAction } from './reexport-source'\n" --> (3:0) "\n" +(2:0) "export { reexportedAction } from './reexport-source'\n" --> (4:0) "export { reexportedAction } from './reexport-source'\n" +(2:0) "export { reexportedAction } from './reexport-source'\n" --> (5:0) "registerServerReference($$effect_import_reexportedAction, \"reexportedAction\");\n" +[unmapped] --> (7:0) "import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source';" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.txt b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.txt deleted file mode 100644 index 3d792327d..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.txt +++ /dev/null @@ -1,5 +0,0 @@ -(0:0) "'use server'\n" --> (0:0) "'use server'\n" -[unmapped] --> (3:0) ";\n" -[unmapped] --> (4:0) "import { reexportedAction as $$import_reexportedAction } from './reexport-source';\n" -[unmapped] --> (5:0) "const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, \"reexportedAction\");\n" -[unmapped] --> (6:0) "export { $$wrap_$$import_reexportedAction as reexportedAction };\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js deleted file mode 100644 index f8c3429ef..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#Mjk0ACd1c2Ugc2VydmVyJwoKCjsKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnOwpjb25zdCAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ== -*/ - -'use server' - - -; -import { reexportedAction as $$import_reexportedAction } from './reexport-source'; -const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, "reexportedAction"); -export { $$wrap_$$import_reexportedAction as reexportedAction }; 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 new file mode 100644 index 000000000..84a29982d --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.snap.md @@ -0,0 +1,44 @@ +## Input + +```js +'use server' + +export { reexportedAction } from './reexport-source' +``` + +## wrap-export + +**Status:** transformed + +**References:** reexportedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk0ACd1c2Ugc2VydmVyJwoKCjsKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnOwpjb25zdCAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJHdyYXBfJCRpbXBvcnRfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ==) + +```js +'use server' + + +; +import { reexportedAction as $$import_reexportedAction } from './reexport-source'; +const $$wrap_$$import_reexportedAction = /* #__PURE__ */ registerServerReference($$import_reexportedAction, "reexportedAction"); +export { $$wrap_$$import_reexportedAction as reexportedAction }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** reexportedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM4ACd1c2Ugc2VydmVyJwoKCgpleHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZWZmZWN0X2ltcG9ydF9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwoKaW1wb3J0IHsgcmVleHBvcnRlZEFjdGlvbiBhcyAkJGVmZmVjdF9pbXBvcnRfcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsxODgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07OztBQUVYO0FBQUE7QUFBQTs7In0=) + +```js +'use server' + + + +export { reexportedAction } from './reexport-source' +registerServerReference($$effect_import_reexportedAction, "reexportedAction"); + +import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; +``` 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 new file mode 100644 index 000000000..d9a0477ce --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.md @@ -0,0 +1,31 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "const" --> (2:0) "let" +(2:12) " arrowFunction = async () => 'arrow function called'\n" --> (2:3) " arrowFunction = async () => 'arrow function called'\n" +(4:7) "const" --> (4:0) "let" +(4:12) " functionExpression = async function () {\n" --> (4:3) " functionExpression = async function () {\n" +(5:0) " return 'function expression called'\n" --> (5:0) " return 'function expression called'\n" +(6:0) "}\n" --> (6:0) "}\n" +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (7:0) "arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, \"arrowFunction\");\n" +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (8:0) "export { arrowFunction };\n" +(4:0) "export const functionExpression = async function () {\n" --> (9:0) "functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, \"functionExpression\");\n" +(4:0) "export const functionExpression = async function () {\n" --> (10:0) "export { functionExpression };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "const arrowFunction = async () => 'arrow function called'\n" --> (2:0) "const arrowFunction = async () => 'arrow function called'\n" +(4:7) "const functionExpression = async function () {\n" --> (4:0) "const functionExpression = async function () {\n" +(5:0) " return 'function expression called'\n" --> (5:0) " return 'function expression called'\n" +(6:0) "}\n" --> (6:0) "}\n" +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (7:0) "\n" +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (8:0) "registerServerReference(arrowFunction, \"arrowFunction\");\n" +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (9:0) "export { arrowFunction };\n" +(4:0) "export const functionExpression = async function () {\n" --> (10:0) "\n" +(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" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.txt b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.txt deleted file mode 100644 index 4ae4a9a12..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.map.snap.txt +++ /dev/null @@ -1,11 +0,0 @@ -(0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:7) "const" --> (2:0) "let" -(2:12) " arrowFunction = async () => 'arrow function called'\n" --> (2:3) " arrowFunction = async () => 'arrow function called'\n" -(4:7) "const" --> (4:0) "let" -(4:12) " functionExpression = async function () {\n" --> (4:3) " functionExpression = async function () {\n" -(5:0) " return 'function expression called'\n" --> (5:0) " return 'function expression called'\n" -(6:0) "}\n" --> (6:0) "}\n" -(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (7:0) "arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, \"arrowFunction\");\n" -(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (8:0) "export { arrowFunction };\n" -(4:0) "export const functionExpression = async function () {\n" --> (9:0) "functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, \"functionExpression\");\n" -(4:0) "export const functionExpression = async function () {\n" --> (10:0) "export { functionExpression };\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js deleted file mode 100644 index 0c9760023..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.js +++ /dev/null @@ -1,17 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#NDA2ACd1c2Ugc2VydmVyJwoKbGV0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKbGV0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CmFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwpmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosR0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxHQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFFQTtBQUFBOyJ9 -*/ - -'use server' - -let arrowFunction = async () => 'arrow function called' - -let functionExpression = async function () { - return 'function expression called' -} -arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, "arrowFunction"); -export { arrowFunction }; -functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, "functionExpression"); -export { functionExpression }; 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 new file mode 100644 index 000000000..b806e656f --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/variables.js.snap.md @@ -0,0 +1,57 @@ +## Input + +```js +'use server' + +export const arrowFunction = async () => 'arrow function called' + +export const functionExpression = async function () { + return 'function expression called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** arrowFunction, functionExpression + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDA2ACd1c2Ugc2VydmVyJwoKbGV0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJwoKbGV0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9CmFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwpmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosR0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxHQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFFQTtBQUFBOyJ9) + +```js +'use server' + +let arrowFunction = async () => 'arrow function called' + +let functionExpression = async function () { + return 'function expression called' +} +arrowFunction = /* #__PURE__ */ registerServerReference(arrowFunction, "arrowFunction"); +export { arrowFunction }; +functionExpression = /* #__PURE__ */ registerServerReference(functionExpression, "functionExpression"); +export { functionExpression }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** arrowFunction, functionExpression + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzQzACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKTsKZXhwb3J0IHsgYXJyb3dGdW5jdGlvbiB9OwoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZnVuY3Rpb25FeHByZXNzaW9uLCAiZnVuY3Rpb25FeHByZXNzaW9uIik7CmV4cG9ydCB7IGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1NTMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQztBQUpBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTsifQ==) + +```js +'use server' + +const arrowFunction = async () => 'arrow function called' + +const functionExpression = async function () { + return 'function expression called' +} + +registerServerReference(arrowFunction, "arrowFunction"); +export { arrowFunction }; + +registerServerReference(functionExpression, "functionExpression"); +export { functionExpression }; +``` diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 56c03c3af..23f7d42b8 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -2,7 +2,13 @@ import path from 'node:path' import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformHoistInlineDirective } from './hoist' -import { formatDecodedSourceMap, formatSourceMapFixture } from './test-utils' +import { transformModuleExportEffect } from './module-export-effect' +import { + formatDecodedSourceMap, + formatDecodedSourceMapMarkdown, + formatSourceMapFixture, + formatSourceMapMarkdownFixture, +} from './test-utils' import { transformWrapExport } from './wrap-export' describe('source map fixtures', () => { @@ -10,36 +16,36 @@ describe('source map fixtures', () => { ['./fixtures/source-map/wrap-export/**/*.js', '!**/*.snap.*'], { query: 'raw' }, ) - // Generated `registerServerReference(...)` calls should map to the original - // Server Function definition, or to the export statement for re-exports. - const textualMapFixtures = new Set([ - './fixtures/source-map/wrap-export/named-function.js', - './fixtures/source-map/wrap-export/variables.js', - - // TODO: These registrations are currently unmapped. - // https://github.com/vitejs/vite-plugin-react/issues/1361 - './fixtures/source-map/wrap-export/default-anonymous.js', - './fixtures/source-map/wrap-export/default-named.js', - './fixtures/source-map/wrap-export/local-alias.js', - './fixtures/source-map/wrap-export/reexport.js', - ]) - for (const [file, load] of Object.entries(wrapExportFixtures)) { - test(`wrap-export/${path.basename(file)}`, async () => { + test(`module-export/${path.basename(file)}`, async () => { const input = ((await load()) as any).default as string const ast = await parseAstAsync(input) - const result = transformWrapExport(input, ast, { + const wrapResult = transformWrapExport(input, ast, { runtime: (value, name) => `registerServerReference(${value}, ${JSON.stringify(name)})`, }) - await expect(formatSourceMapFixture(result.output)).toMatchFileSnapshot( - file + '.snap.js', + const effectResult = transformModuleExportEffect(input, ast, { + runtime: ({ binding, exportName }) => + `registerServerReference(${binding}, ${JSON.stringify(exportName)})`, + }) + const outputs = [ + { + name: 'wrap-export', + output: wrapResult.output, + references: wrapResult.exportNames, + }, + { + name: 'module-export-effect', + output: effectResult.output, + references: effectResult.referenceNames, + }, + ] + await expect( + formatSourceMapMarkdownFixture(input, outputs), + ).toMatchFileSnapshot(file + '.snap.md') + await expect(formatDecodedSourceMapMarkdown(outputs)).toMatchFileSnapshot( + file + '.map.snap.md', ) - if (textualMapFixtures.has(file)) { - await expect(formatDecodedSourceMap(result.output)).toMatchFileSnapshot( - file + '.map.snap.txt', - ) - } }) } diff --git a/packages/plugin-rsc/src/transforms/test-utils.ts b/packages/plugin-rsc/src/transforms/test-utils.ts index ce090da88..eb511bb64 100644 --- a/packages/plugin-rsc/src/transforms/test-utils.ts +++ b/packages/plugin-rsc/src/transforms/test-utils.ts @@ -13,6 +13,41 @@ ${visualization} ${code}` } +type SourceMapFixtureOutput = { + name: string + output: MagicString + references?: readonly string[] +} + +export function formatSourceMapMarkdownFixture( + input: string, + outputs: readonly SourceMapFixtureOutput[], +): string { + const sections = [`## Input\n\n${formatCodeBlock('js', input)}`] + for (const { name, output, references } of outputs) { + const code = output.toString() + const map = output.generateMap({ includeContent: true, hires: 'boundary' }) + const visualization = generateVisualizationLink(code, map.toString()) + sections.push( + `## ${name}\n\n**Status:** ${output.hasChanged() ? 'transformed' : 'unchanged'}\n\n**References:** ${references?.join(', ') || '(none)'}\n\n[Source map visualization](${visualization})\n\n${formatCodeBlock('js', code)}`, + ) + } + return sections.join('\n\n') + '\n' +} + +export function formatDecodedSourceMapMarkdown( + outputs: readonly SourceMapFixtureOutput[], +): string { + return ( + outputs + .map( + ({ name, output }) => + `## ${name}\n\n${formatCodeBlock('txt', formatDecodedSourceMap(output))}`, + ) + .join('\n\n') + '\n' + ) +} + /** * Formats decoded mapping ranges as compact original-to-generated text pairs. * This test-local formatter is inspired by Oxc's source map visualizer output: @@ -125,6 +160,10 @@ function sliceLine( return end === undefined && line < lines.length - 1 ? result + '\n' : result } +function formatCodeBlock(language: string, code: string): string { + return `\`\`\`${language}\n${code}${code.endsWith('\n') ? '' : '\n'}\`\`\`` +} + function generateVisualizationLink(code: string, map: string): string { const codeBuffer = Buffer.from(code) const mapBuffer = Buffer.from(map) From 27485c94545eed246c990c9afda9f1b580bd7d78 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:36:06 +0900 Subject: [PATCH 16/52] feat(rsc): add module export wrapper transform Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/index.ts | 1 + .../src/transforms/module-export.test.ts | 178 ++++++++ .../src/transforms/module-export.ts | 393 ++++++++++++++++++ 3 files changed, 572 insertions(+) create mode 100644 packages/plugin-rsc/src/transforms/module-export.test.ts create mode 100644 packages/plugin-rsc/src/transforms/module-export.ts diff --git a/packages/plugin-rsc/src/transforms/index.ts b/packages/plugin-rsc/src/transforms/index.ts index 6147430da..ae5c818ff 100644 --- a/packages/plugin-rsc/src/transforms/index.ts +++ b/packages/plugin-rsc/src/transforms/index.ts @@ -1,4 +1,5 @@ export * from './hoist' +export * from './module-export' export * from './module-export-effect' export * from './wrap-export' export * from './proxy-export' diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export.test.ts new file mode 100644 index 000000000..4ead0392b --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export.test.ts @@ -0,0 +1,178 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, test } from 'vitest' +import { + transformModuleExport, + type TransformModuleExportOptions, +} from './module-export' + +async function transform( + input: string, + options: Omit = {}, +) { + const ast = await parseAstAsync(input) + return transformModuleExport(input, ast, { + ...options, + runtime: ({ implementation, exportName }) => + `wrap(${implementation}, ${JSON.stringify(exportName)})`, + }) +} + +describe(transformModuleExport, () => { + test('hoists direct functions and replaces their original value sites', async () => { + const result = await transform(` +'use cache' +export async function action(value) { + return value +} +export const first = async () => 1, second = first +export const named = async function inner() { + return inner +} +export default async function Page() { + return 'page' +} +`) + const code = result.output.toString() + + await expect(parseAstAsync(code)).resolves.toBeDefined() + expect(result.referenceNames).toEqual([ + 'action', + 'first', + 'second', + 'named', + 'default', + ]) + expect(code).toContain( + 'export const action = /* #__PURE__ */ wrap($$module_0_implementation_action, "action");', + ) + expect(code).toContain( + 'const $$module_0_implementation_action = async function $$module_0_implementation_action(value)', + ) + expect(code).toContain( + 'const first = /* #__PURE__ */ wrap($$module_1_implementation_first, "first"), second = first', + ) + expect(code).toContain('export { first };') + expect(code).toContain( + 'export const named = /* #__PURE__ */ wrap($$module_3_implementation_named, "named")', + ) + expect(code).toContain( + 'const $$module_3_implementation_named = async function inner()', + ) + expect(code).toContain('return inner') + expect(code).toContain( + 'Object.defineProperty($$module_3_implementation_named, "name", { value: "inner" })', + ) + expect(code).toContain( + 'const Page = /* #__PURE__ */ wrap($$module_4_implementation_Page, "default");\nexport default Page;', + ) + expect(code).toContain( + 'const $$module_2_binding_second = /* #__PURE__ */ wrap(second, "second");', + ) + expect(code.indexOf("'use cache'")).toBeLessThan( + code.indexOf('const $$module_0_implementation_action'), + ) + expect(code.indexOf('const $$module_0_implementation_action')).toBeLessThan( + code.indexOf('wrap($$module_0_implementation_action'), + ) + }) + + test('wraps unresolved values at export boundaries', async () => { + const result = await transform( + ` +const local = factory() +export { local as action } +let current = first +export default current +current = second +export { remote as loader } from './dep' +export const { item } = data +export * from './all' +`, + { exportAll: 'preserve' }, + ) + const code = result.output.toString() + + await expect(parseAstAsync(code)).resolves.toBeDefined() + expect(result.referenceNames).toEqual([ + 'action', + 'default', + 'loader', + 'item', + ]) + expect(code).toContain('const $$module_1_implementation_default = current') + expect( + code.indexOf('const $$module_1_implementation_default = current'), + ).toBeLessThan(code.indexOf('current = second')) + expect(code).toContain( + 'const $$module_0_binding_action = /* #__PURE__ */ wrap(local, "action");', + ) + expect(code).toContain( + 'const $$module_1_binding_default = /* #__PURE__ */ wrap($$module_1_implementation_default, "default");', + ) + expect(code).toContain( + "import { remote as $$module_2_implementation_loader } from './dep';", + ) + expect(code).toContain( + 'const $$module_3_binding_item = /* #__PURE__ */ wrap(item, "item");', + ) + expect(code).toContain("export * from './all'") + expect(code).not.toContain('export { local as action }') + expect(code).not.toContain('export const { item }') + }) + + test('initializes implementations before wrappers and routes recursion through the wrapper', async () => { + const input = ` +export function recursive(depth) { + if (depth > 0) return recursive(depth - 1) + return recursive.marker +} +` + const ast = await parseAstAsync(input) + const result = transformModuleExport(input, ast, { + runtime: ({ implementation }) => + `Object.assign((...args) => ${implementation}(...args), { marker: "wrapped" })`, + }) + + const module = await import( + `data:text/javascript,${encodeURIComponent(result.output.toString())}` + ) + expect(module.recursive(1)).toBe('wrapped') + }) + + test('filters exports and validates selected functions', async () => { + const result = await transform( + `export const Page = async () => {}, value = 1\nexport * from './dep'`, + { + exportAll: 'preserve', + filter: (_name, meta) => meta.isFunction !== false, + rejectNonAsyncFunction: true, + }, + ) + const code = result.output.toString() + + await expect(parseAstAsync(code)).resolves.toBeDefined() + expect(result.referenceNames).toEqual(['Page']) + expect(code).toContain('export const Page = /* #__PURE__ */ wrap(') + expect(code).toContain('value = 1') + expect(code).toContain("export * from './dep'") + + await expect( + transform(`export function action() {}`, { + rejectNonAsyncFunction: true, + }), + ).rejects.toThrow('unsupported non async function') + await expect(transform(`export * from './dep'`)).rejects.toThrow( + 'unsupported ExportAllDeclaration', + ) + + const defaultClass = await transform( + `export default (class Named { static value = 1 })`, + ) + await expect( + parseAstAsync(defaultClass.output.toString()), + ).resolves.toBeDefined() + expect(defaultClass.output.toString()).toContain( + 'const $$module_0_implementation_default = (class Named', + ) + }) +}) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export.ts new file mode 100644 index 000000000..099f18a41 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/module-export.ts @@ -0,0 +1,393 @@ +import { tinyassert } from '@hiogawa/utils' +import type { + ExportDefaultDeclaration, + FunctionDeclaration, + FunctionExpression, + ArrowFunctionExpression, + Node, + Program, + VariableDeclaration, +} from 'estree' +import MagicString from 'magic-string' +import type { ESTree } from 'vite' +import { extractNames, validateNonAsyncFunction } from './utils' + +type FunctionNode = + | FunctionDeclaration + | FunctionExpression + | ArrowFunctionExpression + +export type TransformModuleExportMeta = { + localName?: string + declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] + isFunction?: boolean + defaultExportIdentifierName?: string +} + +export type TransformModuleExportContext = { + implementation: string + binding: string + exportName: string + meta: TransformModuleExportMeta +} + +export type TransformModuleExportFilter = ( + name: string, + meta: TransformModuleExportMeta, +) => boolean + +export type TransformModuleExportOptions = { + runtime: (context: TransformModuleExportContext) => string + filter?: TransformModuleExportFilter + rejectNonAsyncFunction?: boolean + exportAll?: 'error' | 'preserve' +} + +/** + * Produces canonical wrapper exports. Directly exported functions are hoisted + * and replaced at their original expression sites. Other selected exports keep + * their source values and receive canonical bindings at the export boundary. + */ +export function transformModuleExport( + source: string, + viteAst: ESTree.Program, + options: TransformModuleExportOptions, +): { + output: MagicString + references: TransformModuleExportContext[] + referenceNames: string[] +} { + const ast = viteAst as unknown as Program + let input = source + if (!input.endsWith('\n')) input += '\n' + const output = new MagicString(input) + const filter = options.filter ?? (() => true) + const references: TransformModuleExportContext[] = [] + const fallbackCode: string[] = [] + const hoistPosition = getHoistPosition(ast) + + function createContext( + implementation: string, + binding: string, + exportName: string, + meta: TransformModuleExportMeta, + ): TransformModuleExportContext { + const context = { implementation, binding, exportName, meta } + references.push(context) + return context + } + + function runtime(context: TransformModuleExportContext): string { + return `/* #__PURE__ */ ${options.runtime(context)}` + } + + function exportBinding(binding: string, exportName: string): string { + return binding === exportName + ? `export { ${binding} };` + : `export { ${binding} as ${exportName} };` + } + + function createName( + kind: 'implementation' | 'binding', + name: string, + ): string { + return `$$module_${references.length}_${kind}_${name}` + } + + function emitFallback( + implementation: string, + exportName: string, + meta: TransformModuleExportMeta, + ): void { + const binding = createName('binding', exportName) + const context = createContext(implementation, binding, exportName, meta) + fallbackCode.push( + `const ${binding} = ${runtime(context)};`, + exportBinding(binding, exportName), + ) + } + + function hoistFunction( + node: FunctionNode, + sourceName: string, + exportName: string, + meta: TransformModuleExportMeta, + ): string { + validateNonAsyncFunction(options, node) + const implementation = createName('implementation', sourceName) + const originalPrefix = + node.type === 'FunctionDeclaration' && node.id + ? input.slice(node.start, node.id.start) + + implementation + + input.slice(node.id.end, node.body.start) + : input.slice(node.start, node.body.start) + const originalName = + node.type !== 'ArrowFunctionExpression' && node.id + ? node.id.name + : sourceName + + output.update( + node.start, + node.body.start, + `\nconst ${implementation} = ${originalPrefix}`, + ) + output.appendLeft( + node.end, + `;\n/* #__PURE__ */ Object.defineProperty(${implementation}, "name", { value: ${JSON.stringify(originalName)} });\n`, + ) + output.move(node.start, node.end, hoistPosition) + + const context = createContext(implementation, sourceName, exportName, meta) + return runtime(context) + } + + for (const node of ast.body) { + if (node.type === 'ExportNamedDeclaration') { + if (node.declaration) { + if (node.declaration.type === 'FunctionDeclaration') { + tinyassert(node.declaration.id) + const name = node.declaration.id.name + const meta: TransformModuleExportMeta = { + localName: name, + declarationKind: 'function', + isFunction: true, + } + if (!filter(name, meta)) continue + + const replacement = hoistFunction(node.declaration, name, name, meta) + output.remove(node.start, node.declaration.start) + output.appendLeft( + node.declaration.start, + `export const ${name} = ${replacement};`, + ) + } else if (node.declaration.type === 'ClassDeclaration') { + tinyassert(node.declaration.id) + const name = node.declaration.id.name + const meta: TransformModuleExportMeta = { + localName: name, + declarationKind: 'class', + isFunction: false, + } + if (!filter(name, meta)) continue + + output.remove(node.start, node.declaration.start) + emitFallback(name, name, meta) + } else if (node.declaration.type === 'VariableDeclaration') { + const declaration = node.declaration + const fallbackNames = new Set() + const exportNames: string[] = [] + + for (const declarator of declaration.declarations) { + const names = extractNames(declarator.id) + exportNames.push(...names) + const directFunction = + declarator.id.type === 'Identifier' && + declarator.init && + isFunctionNode(declarator.init) + ? declarator.init + : undefined + let validate = false + + for (const name of names) { + const meta: TransformModuleExportMeta = { + localName: name, + declarationKind: declaration.kind, + isFunction: directFunction + ? true + : declarator.init + ? getIsFunction(declarator.init) + : undefined, + } + if (!filter(name, meta)) continue + validate = true + + if (directFunction && declarator.id.type === 'Identifier') { + const replacement = hoistFunction( + directFunction, + name, + name, + meta, + ) + output.appendLeft(directFunction.start, replacement) + } else { + fallbackNames.add(name) + emitFallback(name, name, meta) + } + } + + if (validate && declarator.init && !directFunction) { + validateNonAsyncFunction(options, declarator.init) + } + } + + if (fallbackNames.size > 0) { + output.remove(node.start, declaration.start) + for (const name of exportNames) { + if (!fallbackNames.has(name)) + fallbackCode.push(exportBinding(name, name)) + } + } + } + } else if (node.specifiers.length > 0) { + const preserved: string[] = [] + let selected = false + for (const specifier of node.specifiers) { + tinyassert(specifier.local.type === 'Identifier') + if (specifier.exported.type !== 'Identifier') { + throw Object.assign( + new Error('unsupported string literal export name'), + { pos: specifier.exported.start }, + ) + } + const localName = specifier.local.name + const exportName = specifier.exported.name + const meta: TransformModuleExportMeta = {} + if (!filter(exportName, meta)) { + preserved.push( + localName === exportName + ? localName + : `${localName} as ${exportName}`, + ) + continue + } + selected = true + + let implementation = localName + if (node.source) { + implementation = createName('implementation', exportName) + const sourceTail = input + .slice(node.source.end, node.end) + .replace(/;?\s*$/, ';') + fallbackCode.push( + `import { ${localName} as ${implementation} } from ${node.source.raw}${sourceTail}`, + ) + } + emitFallback(implementation, exportName, meta) + } + + if (selected) { + output.remove(node.start, node.end) + if (preserved.length > 0) { + const source = node.source ? ` from ${node.source.raw}` : '' + fallbackCode.push(`export { ${preserved.join(', ')} }${source};`) + } + } + } + } else if (node.type === 'ExportAllDeclaration') { + if (options.exportAll !== 'preserve') { + throw Object.assign(new Error('unsupported ExportAllDeclaration'), { + pos: node.start, + }) + } + } else if (node.type === 'ExportDefaultDeclaration') { + const declaration = node.declaration + let meta: TransformModuleExportMeta + + if (isFunctionNode(declaration)) { + const sourceName = + declaration.type !== 'ArrowFunctionExpression' && declaration.id + ? declaration.id.name + : 'default' + meta = { + localName: sourceName === 'default' ? undefined : sourceName, + declarationKind: + declaration.type === 'FunctionDeclaration' ? 'function' : undefined, + isFunction: true, + } + if (!filter('default', meta)) continue + + const replacement = hoistFunction( + declaration, + sourceName, + 'default', + meta, + ) + output.remove(node.start, declaration.start) + output.appendLeft( + declaration.start, + declaration.type === 'FunctionDeclaration' && declaration.id + ? `const ${sourceName} = ${replacement};\nexport default ${sourceName};` + : `export default ${replacement};`, + ) + } else { + let implementation: string + if (declaration.type === 'ClassDeclaration' && declaration.id) { + implementation = declaration.id.name + meta = { + localName: declaration.id.name, + declarationKind: + declaration.type === 'ClassDeclaration' ? 'class' : undefined, + isFunction: false, + } + if (!filter('default', meta)) continue + output.remove(node.start, declaration.start) + } else { + implementation = createName('implementation', 'default') + meta = { + defaultExportIdentifierName: + declaration.type === 'Identifier' ? declaration.name : undefined, + isFunction: getIsFunction(declaration), + } + if (!filter('default', meta)) continue + validateNonAsyncFunction(options, declaration) + const prefix = input.slice(node.start, declaration.start) + output.update( + node.start, + declaration.start, + prefix.replace( + /^export\s+default/, + () => `const ${implementation} =`, + ), + ) + } + emitFallback(implementation, 'default', meta) + } + } + } + + if (fallbackCode.length > 0) { + output.append(`\n${fallbackCode.join('\n')}\n`) + } + + return { + output, + references, + referenceNames: references.map((reference) => reference.exportName), + } +} + +function isFunctionNode( + node: Node | ExportDefaultDeclaration['declaration'], +): node is FunctionNode { + return ( + node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression' || + node.type === 'ArrowFunctionExpression' + ) +} + +function getIsFunction( + node: Node | ExportDefaultDeclaration['declaration'], +): boolean | undefined { + if (isFunctionNode(node)) return true + if ( + node.type === 'ClassDeclaration' || + node.type === 'Literal' || + node.type === 'ObjectExpression' || + node.type === 'ArrayExpression' || + node.type === 'ClassExpression' + ) { + return false + } +} + +function getHoistPosition(ast: Program): number { + for (const statement of ast.body) { + const isDirective = + statement.type === 'ExpressionStatement' && + statement.expression.type === 'Literal' && + typeof statement.expression.value === 'string' + if (!isDirective) return statement.start + } + return 0 +} From be2b47da056c24a367e25c74027ea7b52715f727 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:42:07 +0900 Subject: [PATCH 17/52] docs(rsc): explain module export source mapping Co-authored-by: OpenCode --- .../plugin-rsc/src/transforms/module-export-effect.ts | 10 ++++++++-- packages/plugin-rsc/src/transforms/server-action.ts | 4 ++-- packages/plugin-rsc/src/transforms/source-map.test.ts | 3 +++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.ts b/packages/plugin-rsc/src/transforms/module-export-effect.ts index 17396c7a2..b25ef97cd 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.ts @@ -35,8 +35,12 @@ export type TransformModuleExportEffectOptions = { } /** - * Preserves selected source bindings and emits one mapped module effect for each - * exported value. This models Next.js-style module Server Action lowering. + * Preserves source bindings and emits registration effects at module end. + * + * The start of each generated runtime expression remains mapped to its original + * Server Function export site. React captures the `registerServerReference` + * caller as the reference source location, so unmapped generated code can fall + * back to an adjacent location. Re-exports map to their export statement. */ export function transformModuleExportEffect( input: string, @@ -60,6 +64,8 @@ export function transformModuleExportEffect( return `${options.runtime(context)};` } + // Rewrite and move an existing source range so the generated runtime + // expression retains that range's original mapping at module end. function replaceAndMove( start: number, end: number, diff --git a/packages/plugin-rsc/src/transforms/server-action.ts b/packages/plugin-rsc/src/transforms/server-action.ts index c93f013ef..ec46a9f11 100644 --- a/packages/plugin-rsc/src/transforms/server-action.ts +++ b/packages/plugin-rsc/src/transforms/server-action.ts @@ -4,8 +4,8 @@ import { transformHoistInlineDirective } from './hoist' import { transformModuleExportEffect } from './module-export-effect' import { hasDirective } from './utils' -// TODO: Preserve the `runtime` call's original Server Function position for -// every inline directive shape. +// TODO: Apply the same runtime-callsite mapping contract to every inline +// directive shape. // https://github.com/vitejs/vite-plugin-react/issues/1361 export function transformServerActionServer( input: string, diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 23f7d42b8..f03b04850 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -16,6 +16,9 @@ describe('source map fixtures', () => { ['./fixtures/source-map/wrap-export/**/*.js', '!**/*.snap.*'], { query: 'raw' }, ) + // Generated runtime expressions should map to the original Server Function + // export site, or to the export statement for re-exports. React uses the + // `registerServerReference` caller as the reference's source location. for (const [file, load] of Object.entries(wrapExportFixtures)) { test(`module-export/${path.basename(file)}`, async () => { const input = ((await load()) as any).default as string From a479d5dcb09abb0184235042c09f4719bfd0ced0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:43:47 +0900 Subject: [PATCH 18/52] test(rsc): snapshot module export wrapper mappings Co-authored-by: OpenCode --- .../default-anonymous.js.map.snap.md | 13 ++++++++++ .../wrap-export/default-anonymous.js.snap.md | 19 ++++++++++++++ .../default-identifier.js.map.snap.md | 13 ++++++++++ .../wrap-export/default-identifier.js.snap.md | 21 +++++++++++++++ .../wrap-export/default-named.js.map.snap.md | 14 ++++++++++ .../wrap-export/default-named.js.snap.md | 20 ++++++++++++++ .../wrap-export/local-alias.js.map.snap.md | 11 ++++++++ .../wrap-export/local-alias.js.snap.md | 21 +++++++++++++++ .../multiple-exports.js.map.snap.md | 20 ++++++++++++++ .../wrap-export/multiple-exports.js.snap.md | 26 +++++++++++++++++++ .../wrap-export/named-function.js.map.snap.md | 13 ++++++++++ .../wrap-export/named-function.js.snap.md | 19 ++++++++++++++ .../wrap-export/reexport.js.map.snap.md | 9 +++++++ .../wrap-export/reexport.js.snap.md | 18 +++++++++++++ .../wrap-export/variables.js.map.snap.md | 18 +++++++++++++ .../wrap-export/variables.js.snap.md | 24 +++++++++++++++++ .../src/transforms/source-map.test.ts | 10 +++++++ 17 files changed, 289 insertions(+) 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..abf38d4d9 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,16 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:15) "async function () {\n" --> (2:0) "\n" +(2:15) "async function () " --> (3:0) "const $$module_0_implementation_default = async function () " +(2:33) "{\n" --> (3:60) "{\n" +(3:0) " return 'default anonymous function called'\n" --> (4:0) " return 'default anonymous function called'\n" +(4:0) "}\n" --> (5:0) "};\n" +[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_default, \"name\", { value: \"default\" });\n" +[unmapped] --> (7:0) "export default /* #__PURE__ */ registerServerReference($$module_0_implementation_default, \"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..993d24e69 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,22 @@ const $$effect_default = async function () { registerServerReference($$effect_default, "default"); export default $$effect_default; ``` + +## module-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzMxACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pOwpleHBvcnQgZGVmYXVsdCAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpOwoyOTMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVJO0FBQUEsNERBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzs7In0=) + +```js +'use server' + + +const $$module_0_implementation_default = async function () { + return 'default anonymous function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_default, "name", { value: "default" }); +export default /* #__PURE__ */ registerServerReference($$module_0_implementation_default, "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..d8b3d4ded 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,16 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function defaultIdentifier() {\n" --> (2:0) "async function defaultIdentifier() {\n" +(3:0) " return 'default identifier called'\n" --> (3:0) " return 'default identifier called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(6:0) "export default " --> (6:0) "const $$module_0_implementation_default = " +(6:15) "defaultIdentifier\n" --> (6:42) "defaultIdentifier\n" +[unmapped] --> (8:0) "const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, \"default\");\n" +[unmapped] --> (9:0) "export { $$module_0_binding_default as 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..9a7fbb1ee 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,24 @@ const $$effect_default = defaultIdentifier; registerServerReference($$effect_default, "default"); export default $$effect_default; ``` + +## module-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzI0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjM1NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNuQzs7QUFFQSwwQ0FBZTs7OzsifQ==) + +```js +'use server' + +async function defaultIdentifier() { + return 'default identifier called' +} + +const $$module_0_implementation_default = defaultIdentifier + +const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, "default"); +export { $$module_0_binding_default as 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..e42bde8d8 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,17 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:15) "async function defaultNamedFunction() {\n" --> (2:0) "\n" +(2:15) "async function defaultNamedFunction() " --> (3:0) "const $$module_0_implementation_defaultNamedFunction = async function $$module_0_implementation_defaultNamedFunction() " +(2:53) "{\n" --> (3:119) "{\n" +(3:0) " return 'default named function called'\n" --> (4:0) " return 'default named function called'\n" +(4:0) "}\n" --> (5:0) "};\n" +[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_defaultNamedFunction, \"name\", { value: \"defaultNamedFunction\" });\n" +[unmapped] --> (7:0) "const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_defaultNamedFunction, \"default\");\n" +[unmapped] --> (8:0) "export default defaultNamedFunction;\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..d7f592677 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,23 @@ async function defaultNamedFunction() { registerServerReference(defaultNamedFunction, "default"); export default defaultNamedFunction; ``` + +## module-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDc2ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uKCkgewogIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0TmFtZWRGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiZGVmYXVsdE5hbWVkRnVuY3Rpb24iIH0pOwpjb25zdCBkZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uLCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCBkZWZhdWx0TmFtZWRGdW5jdGlvbjsKMzEwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUk7QUFBQSx1SEFBc0M7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) + +```js +'use server' + + +const $$module_0_implementation_defaultNamedFunction = async function $$module_0_implementation_defaultNamedFunction() { + return 'default named function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_defaultNamedFunction, "name", { value: "defaultNamedFunction" }); +const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_defaultNamedFunction, "default"); +export default defaultNamedFunction; +``` 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 c3ac63ed7..db9785b8a 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 @@ -21,3 +21,14 @@ (6:0) "export { localAlias as aliasedAction }\n" --> (8:0) "registerServerReference(localAlias, \"aliasedAction\");\n" (6:0) "export { localAlias as aliasedAction }\n" --> (9:0) "export { localAlias as aliasedAction }\n" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function localAlias() {\n" --> (2:0) "async function localAlias() {\n" +(3:0) " return 'local alias called'\n" --> (3:0) " return 'local alias called'\n" +(4:0) "}\n" --> (4:0) "}\n" +[unmapped] --> (8:0) "const $$module_0_binding_aliasedAction = /* #__PURE__ */ registerServerReference(localAlias, \"aliasedAction\");\n" +[unmapped] --> (9:0) "export { $$module_0_binding_aliasedAction as 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 3f4054e24..57bf14127 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 @@ -51,3 +51,24 @@ async function localAlias() { registerServerReference(localAlias, "aliasedAction"); export { localAlias as aliasedAction } ``` + +## module-export + +**Status:** transformed + +**References:** aliasedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjUyACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfYWxpYXNlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShsb2NhbEFsaWFzLCAiYWxpYXNlZEFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYWxpYXNlZEFjdGlvbiBhcyBhbGlhc2VkQWN0aW9uIH07CjMzNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOzs7Ozs7In0=) + +```js +'use server' + +async function localAlias() { + return 'local alias called' +} + + + +const $$module_0_binding_aliasedAction = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); +export { $$module_0_binding_aliasedAction as aliasedAction }; +``` 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..25d420f04 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,23 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "async function firstAction() {\n" --> (2:0) "\n" +(2:7) "async function firstAction() " --> (3:0) "const $$module_0_implementation_firstAction = async function $$module_0_implementation_firstAction() " +(2:36) "{\n" --> (3:101) "{\n" +(3:0) " return 'first action called'\n" --> (4:0) " return 'first action called'\n" +(4:0) "}\n" --> (5:0) "};\n" +[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_firstAction, \"name\", { value: \"firstAction\" });\n" +(6:7) "async function secondAction() {\n" --> (7:0) "\n" +(6:7) "async function secondAction() " --> (8:0) "const $$module_1_implementation_secondAction = async function $$module_1_implementation_secondAction() " +(6:37) "{\n" --> (8:103) "{\n" +(7:0) " return 'second action called'\n" --> (9:0) " return 'second action called'\n" +(8:0) "}\n" --> (10:0) "};\n" +[unmapped] --> (11:0) "/* #__PURE__ */ Object.defineProperty($$module_1_implementation_secondAction, \"name\", { value: \"secondAction\" });\n" +[unmapped] --> (12:0) "export const firstAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_firstAction, \"firstAction\");\n" +[unmapped] --> (14:0) "export const secondAction = /* #__PURE__ */ registerServerReference($$module_1_implementation_secondAction, \"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..fcde169a2 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,29 @@ export { firstAction }; registerServerReference(secondAction, "secondAction"); export { secondAction }; ``` + +## module-export + +**Status:** transformed + +**References:** firstAction, secondAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzY3ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3RBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdEFjdGlvbiIgfSk7Cgpjb25zdCAkJG1vZHVsZV8xX2ltcGxlbWVudGF0aW9uX3NlY29uZEFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fc2Vjb25kQWN0aW9uKCkgewogIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnCn07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogInNlY29uZEFjdGlvbiIgfSk7CmV4cG9ydCBjb25zdCBmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uLCAiZmlyc3RBY3Rpb24iKTsKCmV4cG9ydCBjb25zdCBzZWNvbmRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKNDMyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXJzdEFjdGlvbigpIHtcbiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJ1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2Vjb25kQWN0aW9uKCkge1xuICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUo7QUFBQSxxR0FBNkI7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3Qjs7QUFFTztBQUFBLHVHQUE4QjtBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OzsifQ==) + +```js +'use server' + + +const $$module_0_implementation_firstAction = async function $$module_0_implementation_firstAction() { + return 'first action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_firstAction, "name", { value: "firstAction" }); + +const $$module_1_implementation_secondAction = async function $$module_1_implementation_secondAction() { + return 'second action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_1_implementation_secondAction, "name", { value: "secondAction" }); +export const firstAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_firstAction, "firstAction"); + +export const secondAction = /* #__PURE__ */ registerServerReference($$module_1_implementation_secondAction, "secondAction"); +``` 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..8d7bd9128 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,16 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "async function namedFunction() {\n" --> (2:0) "\n" +(2:7) "async function namedFunction() " --> (3:0) "const $$module_0_implementation_namedFunction = async function $$module_0_implementation_namedFunction() " +(2:38) "{\n" --> (3:105) "{\n" +(3:0) " return 'named function called'\n" --> (4:0) " return 'named function called'\n" +(4:0) "}\n" --> (5:0) "};\n" +[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_namedFunction, \"name\", { value: \"namedFunction\" });\n" +[unmapped] --> (7:0) "export const namedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_namedFunction, \"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..e151703ab 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,22 @@ async function namedFunction() { registerServerReference(namedFunction, "namedFunction"); export { namedFunction }; ``` + +## module-export + +**Status:** transformed + +**References:** namedFunction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDAyACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX25hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwpleHBvcnQgY29uc3QgbmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX25hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CjI3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSjtBQUFBLHlHQUErQjtBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7In0=) + +```js +'use server' + + +const $$module_0_implementation_namedFunction = async function $$module_0_implementation_namedFunction() { + return 'named function called' +}; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_namedFunction, "name", { value: "namedFunction" }); +export const namedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_namedFunction, "namedFunction"); +``` 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 62a46b8fe..f41a00297 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 @@ -17,3 +17,12 @@ (2:0) "export { reexportedAction } from './reexport-source'\n" --> (5:0) "registerServerReference($$effect_import_reexportedAction, \"reexportedAction\");\n" [unmapped] --> (7:0) "import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source';" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +[unmapped] --> (4:0) "import { reexportedAction as $$module_0_implementation_reexportedAction } from './reexport-source';\n" +[unmapped] --> (5:0) "const $$module_0_binding_reexportedAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_reexportedAction, \"reexportedAction\");\n" +[unmapped] --> (6:0) "export { $$module_0_binding_reexportedAction as 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 84a29982d..5e89d9535 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 @@ -42,3 +42,21 @@ registerServerReference($$effect_import_reexportedAction, "reexportedAction"); import { reexportedAction as $$effect_import_reexportedAction } from './reexport-source'; ``` + +## module-export + +**Status:** transformed + +**References:** reexportedAction + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzMzACd1c2Ugc2VydmVyJwoKCgppbXBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIGFzICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlZXhwb3J0ZWRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ==) + +```js +'use server' + + + +import { reexportedAction as $$module_0_implementation_reexportedAction } from './reexport-source'; +const $$module_0_binding_reexportedAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_reexportedAction, "reexportedAction"); +export { $$module_0_binding_reexportedAction as 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..3d672b637 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,21 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:29) "async () => 'arrow function called'\n" --> (2:0) "\n" +(2:29) "async () => " --> (3:0) "const $$module_0_implementation_arrowFunction = async () => " +(2:41) "'arrow function called'\n" --> (3:60) "'arrow function called';\n" +[unmapped] --> (4:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_arrowFunction, \"name\", { value: \"arrowFunction\" });\n" +(4:34) "async function () {\n" --> (5:0) "\n" +(4:34) "async function () " --> (6:0) "const $$module_1_implementation_functionExpression = async function () " +(4:52) "{\n" --> (6:71) "{\n" +(5:0) " return 'function expression called'\n" --> (7:0) " return 'function expression called'\n" +(6:0) "}\n" --> (8:0) "};\n" +[unmapped] --> (9:0) "/* #__PURE__ */ Object.defineProperty($$module_1_implementation_functionExpression, \"name\", { value: \"functionExpression\" });\n" +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (10:0) "export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_arrowFunction, \"arrowFunction\")\n" +(4:0) "export const functionExpression = async function () {\n" --> (12:0) "export const functionExpression = /* #__PURE__ */ registerServerReference($$module_1_implementation_functionExpression, \"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..12f59e92e 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,27 @@ export { arrowFunction }; registerServerReference(functionExpression, "functionExpression"); export { functionExpression }; ``` + +## module-export + +**Status:** transformed + +**References:** arrowFunction, functionExpression + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NzI3ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnOwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7Cgpjb25zdCAkJG1vZHVsZV8xX2ltcGxlbWVudGF0aW9uX2Z1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fZnVuY3Rpb25FeHByZXNzaW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmdW5jdGlvbkV4cHJlc3Npb24iIH0pOwpleHBvcnQgY29uc3QgYXJyb3dGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2Fycm93RnVuY3Rpb24sICJhcnJvd0Z1bmN0aW9uIikKCmV4cG9ydCBjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9mdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKQo0OTUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRWtCO0FBQUEsNERBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRTdCO0FBQUEsdUVBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7O0FBSkEsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQzs7QUFFNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOyJ9) + +```js +'use server' + + +const $$module_0_implementation_arrowFunction = async () => 'arrow function called'; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_arrowFunction, "name", { value: "arrowFunction" }); + +const $$module_1_implementation_functionExpression = async function () { + return 'function expression called' +}; +/* #__PURE__ */ Object.defineProperty($$module_1_implementation_functionExpression, "name", { value: "functionExpression" }); +export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_arrowFunction, "arrowFunction") + +export const functionExpression = /* #__PURE__ */ registerServerReference($$module_1_implementation_functionExpression, "functionExpression") +``` diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 23f7d42b8..c1ba6bb9b 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -2,6 +2,7 @@ import path from 'node:path' import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformHoistInlineDirective } from './hoist' +import { transformModuleExport } from './module-export' import { transformModuleExportEffect } from './module-export-effect' import { formatDecodedSourceMap, @@ -28,6 +29,10 @@ describe('source map fixtures', () => { runtime: ({ binding, exportName }) => `registerServerReference(${binding}, ${JSON.stringify(exportName)})`, }) + const moduleResult = transformModuleExport(input, ast, { + runtime: ({ implementation, exportName }) => + `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, + }) const outputs = [ { name: 'wrap-export', @@ -39,6 +44,11 @@ describe('source map fixtures', () => { output: effectResult.output, references: effectResult.referenceNames, }, + { + name: 'module-export', + output: moduleResult.output, + references: moduleResult.referenceNames, + }, ] await expect( formatSourceMapMarkdownFixture(input, outputs), From d894c624ae8be9012e9eea7590bab224f27ff3e3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:49:12 +0900 Subject: [PATCH 19/52] test(rsc): cover module export semantics Co-authored-by: OpenCode --- .../wrap-export/dependent-declarators.js | 4 ++ .../dependent-declarators.js.map.snap.md | 24 +++++++++ .../dependent-declarators.js.snap.md | 46 ++++++++++++++++ .../wrap-export/destructured-export.js | 5 ++ .../destructured-export.js.map.snap.md | 21 ++++++++ .../destructured-export.js.snap.md | 46 ++++++++++++++++ .../wrap-export/named-function-expression.js | 5 ++ .../named-function-expression.js.map.snap.md | 23 ++++++++ .../named-function-expression.js.snap.md | 46 ++++++++++++++++ .../wrap-export/pre-declaration-reference.js | 7 +++ .../pre-declaration-reference.js.map.snap.md | 24 +++++++++ .../pre-declaration-reference.js.snap.md | 52 +++++++++++++++++++ 12 files changed, 303 insertions(+) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js new file mode 100644 index 000000000..95a50e601 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js @@ -0,0 +1,4 @@ +'use server' + +export const first = async () => 'first action called', + second = first 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 new file mode 100644 index 000000000..eef48cd07 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md @@ -0,0 +1,24 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "const" --> (2:0) "let" +(2:12) " first = async () => 'first action called',\n" --> (2:3) " first = async () => 'first action called',\n" +(3:0) " second = first\n" --> (3:0) " second = first\n" +(2:0) "export const first = async () => 'first action called',\n" --> (4:0) "first = /* #__PURE__ */ registerServerReference(first, \"first\");\n" +(2:0) "export const first = async () => 'first action called',\n" --> (5:0) "export { first };\n" +(2:0) "export const first = async () => 'first action called',\n" --> (6:0) "second = /* #__PURE__ */ registerServerReference(second, \"second\");\n" +(2:0) "export const first = async () => 'first action called',\n" --> (7:0) "export { second };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "const first = async () => 'first action called',\n" --> (2:0) "const first = async () => 'first action called',\n" +(3:0) " second = first\n" --> (3:0) " second = first\n" +(2:0) "export const first = async () => 'first action called',\n" --> (4:0) "\n" +(2:0) "export const first = async () => 'first action called',\n" --> (5:0) "registerServerReference(first, \"first\");\n" +(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" +``` 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 new file mode 100644 index 000000000..e7a106b22 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md @@ -0,0 +1,46 @@ +## Input + +```js +'use server' + +export const first = async () => 'first action called', + second = first +``` + +## wrap-export + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjQ4ACd1c2Ugc2VydmVyJwoKbGV0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLAogIHNlY29uZCA9IGZpcnN0CmZpcnN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZpcnN0LCAiZmlyc3QiKTsKZXhwb3J0IHsgZmlyc3QgfTsKc2Vjb25kID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwpleHBvcnQgeyBzZWNvbmQgfTsKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEdBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFg7QUFBQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +let first = async () => 'first action called', + second = first +first = /* #__PURE__ */ registerServerReference(first, "first"); +export { first }; +second = /* #__PURE__ */ registerServerReference(second, "second"); +export { second }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTkxACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kID0gZmlyc3QKCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZpcnN0LCAiZmlyc3QiKTsKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2Uoc2Vjb25kLCAic2Vjb25kIik7CmV4cG9ydCB7IGZpcnN0LCBzZWNvbmQgfTsKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRFg7QUFBQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +const first = async () => 'first action called', + second = first + +registerServerReference(first, "first"); +registerServerReference(second, "second"); +export { first, second }; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js new file mode 100644 index 000000000..488a76ef3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js @@ -0,0 +1,5 @@ +'use server' + +const source = async () => 'destructured export called' + +export const { action } = { action: source } 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 new file mode 100644 index 000000000..045aecee0 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md @@ -0,0 +1,21 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "const source = async () => 'destructured export called'\n" --> (2:0) "const source = async () => 'destructured export called'\n" +(4:7) "const" --> (4:0) "let" +(4:12) " { action } = { action: source }\n" --> (4:3) " { action } = { action: source }\n" +(4:0) "export const { action } = { action: source }\n" --> (5:0) "action = /* #__PURE__ */ registerServerReference(action, \"action\");\n" +(4:0) "export const { action } = { action: source }\n" --> (6:0) "export { action };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "const source = async () => 'destructured export called'\n" --> (2:0) "const source = async () => 'destructured export called'\n" +(4:7) "const { action } = { action: source }\n" --> (4:0) "const { action } = { action: source }\n" +(4:0) "export const { action } = { action: source }\n" --> (5:0) "\n" +(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" +``` 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 new file mode 100644 index 000000000..87aabfcc0 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.snap.md @@ -0,0 +1,46 @@ +## Input + +```js +'use server' + +const source = async () => 'destructured export called' + +export const { action } = { action: source } +``` + +## wrap-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTk0ACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKbGV0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKNDMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmNvbnN0IHNvdXJjZSA9IGFzeW5jICgpID0+ICdkZXN0cnVjdHVyZWQgZXhwb3J0IGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7QUFFL0MsR0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQTNDO0FBQUE7In0=) + +```js +'use server' + +const source = async () => 'destructured export called' + +let { action } = { action: source } +action = /* #__PURE__ */ registerServerReference(action, "action"); +export { action }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcyACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiB9Owo0MzUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNOztBQUUvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFBM0M7QUFBQTtBQUFBOyJ9) + +```js +'use server' + +const source = async () => 'destructured export called' + +const { action } = { action: source } + +registerServerReference(action, "action"); +export { action }; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js new file mode 100644 index 000000000..169221675 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js @@ -0,0 +1,5 @@ +'use server' + +export const action = async function actionImplementation() { + return 'named function expression called' +} 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 new file mode 100644 index 000000000..930094923 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.map.snap.md @@ -0,0 +1,23 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "const" --> (2:0) "let" +(2:12) " action = async function actionImplementation() {\n" --> (2:3) " action = async function actionImplementation() {\n" +(3:0) " return 'named function expression called'\n" --> (3:0) " return 'named function expression called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(2:0) "export const action = async function actionImplementation() {\n" --> (5:0) "action = /* #__PURE__ */ registerServerReference(action, \"action\");\n" +(2:0) "export const action = async function actionImplementation() {\n" --> (6:0) "export { action };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "const action = async function actionImplementation() {\n" --> (2:0) "const action = async function actionImplementation() {\n" +(3:0) " return 'named function expression called'\n" --> (3:0) " return 'named function expression called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(2:0) "export const action = async function actionImplementation() {\n" --> (5:0) "\n" +(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" +``` 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 new file mode 100644 index 000000000..585c9c147 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md @@ -0,0 +1,46 @@ +## Input + +```js +'use server' + +export const action = async function actionImplementation() { + return 'named function expression called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjAwACd1c2Ugc2VydmVyJwoKbGV0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkgewogIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYWxsZWQnCn0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzg3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEdBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDO0FBRkE7QUFBQTsifQ==) + +```js +'use server' + +let action = async function actionImplementation() { + return 'named function expression called' +} +action = /* #__PURE__ */ registerServerReference(action, "action"); +export { action }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTc4ACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIik7CmV4cG9ydCB7IGFjdGlvbiB9OwozOTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDMUM7QUFGQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +const action = async function actionImplementation() { + return 'named function expression called' +} + +registerServerReference(action, "action"); +export { action }; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js new file mode 100644 index 000000000..151114097 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js @@ -0,0 +1,7 @@ +'use server' + +void action + +export async function action() { + return 'action called' +} 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 new file mode 100644 index 000000000..8ac8287a0 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.map.snap.md @@ -0,0 +1,24 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "void action\n" --> (2:0) "void action\n" +(4:7) "async function action() {\n" --> (4:0) "async function action() {\n" +(5:0) " return 'action called'\n" --> (5:0) " return 'action called'\n" +(6:0) "}\n" --> (6:0) "}\n" +(4:0) "export async function action() {\n" --> (7:0) "action = /* #__PURE__ */ registerServerReference(action, \"action\");\n" +(4:0) "export async function action() {\n" --> (8:0) "export { action };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "void action\n" --> (2:0) "void action\n" +(4:7) "async function action() {\n" --> (4:0) "async function action() {\n" +(5:0) " return 'action called'\n" --> (5:0) " return 'action called'\n" +(6:0) "}\n" --> (6:0) "}\n" +(4:0) "export async function action() {\n" --> (7:0) "\n" +(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" +``` 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 new file mode 100644 index 000000000..1229c1c36 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/pre-declaration-reference.js.snap.md @@ -0,0 +1,52 @@ +## Input + +```js +'use server' + +void action + +export async function action() { + return 'action called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTY3ACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzE4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCO0FBRkE7QUFBQTsifQ==) + +```js +'use server' + +void action + +async function action() { + return 'action called' +} +action = /* #__PURE__ */ registerServerReference(action, "action"); +export { action }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTQzACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyBhY3Rpb24gfTsKMzIzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLElBQUksQ0FBQzs7QUFFRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCO0FBRkE7QUFBQTtBQUFBOyJ9) + +```js +'use server' + +void action + +async function action() { + return 'action called' +} + +registerServerReference(action, "action"); +export { action }; +``` From 16e44fa735e18ef88415e3aaf96c4257155ce2b2 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:50:24 +0900 Subject: [PATCH 20/52] test(rsc): migrate hoist source map snapshots Co-authored-by: OpenCode --- ....js.map.snap.txt => inline.js.map.snap.md} | 4 ++ .../source-map/hoist/inline.js.snap.js | 34 ----------- .../source-map/hoist/inline.js.snap.md | 61 +++++++++++++++++++ .../src/transforms/source-map.test.ts | 19 +++--- .../plugin-rsc/src/transforms/test-utils.ts | 15 +---- 5 files changed, 78 insertions(+), 55 deletions(-) rename packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/{inline.js.map.snap.txt => inline.js.map.snap.md} (99%) delete mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.md diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.txt b/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.md similarity index 99% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.txt rename to packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.md index ea6ef1f51..b4ff152db 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.txt +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.md @@ -1,3 +1,6 @@ +## hoist + +```txt (0:0) "export function InlineDirective() {\n" --> (0:0) "export function InlineDirective() {\n" (1:0) " const captured = 'captured'\n" --> (1:0) " const captured = 'captured'\n" (3:0) " async function inlineAction() {\n" --> (3:0) " const inlineAction = /* #__PURE__ */ registerServerReference($$hoist_0_inlineAction, \"$$hoist_0_inlineAction\");\n" @@ -27,3 +30,4 @@ (15:0) " return 'inline function expression called'\n" --> (25:0) " return 'inline function expression called'\n" (16:0) " })\n" --> (26:0) " };\n" [unmapped] --> (27:0) "/* #__PURE__ */ Object.defineProperty($$hoist_2_anonymous_server_function, \"name\", { value: \"anonymous_server_function\" });\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.js deleted file mode 100644 index 117fb2135..000000000 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.js +++ /dev/null @@ -1,34 +0,0 @@ -/* -Source map visualization: - -https://evanw.github.io/source-map-visualization/#MTI0MABleHBvcnQgZnVuY3Rpb24gSW5saW5lRGlyZWN0aXZlKCkgewogIGNvbnN0IGNhcHR1cmVkID0gJ2NhcHR1cmVkJwoKICBjb25zdCBpbmxpbmVBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRob2lzdF8wX2lubGluZUFjdGlvbiwgIiQkaG9pc3RfMF9pbmxpbmVBY3Rpb24iKTsKCiAgY29uc3QgaW5saW5lQXJyb3cgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRob2lzdF8xX2lubGluZUFycm93LCAiJCRob2lzdF8xX2lubGluZUFycm93IikuYmluZChudWxsLCBlbmNyeXB0KFtjYXB0dXJlZF0pKQoKICBjb25zdW1lKGlubGluZUFjdGlvbiwgaW5saW5lQXJyb3csIC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGhvaXN0XzJfYW5vbnltb3VzX3NlcnZlcl9mdW5jdGlvbiwgIiQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uIikpCn0KCjtleHBvcnQgYXN5bmMgZnVuY3Rpb24gJCRob2lzdF8wX2lubGluZUFjdGlvbigpIHsKICAgICd1c2Ugc2VydmVyJwogICAgcmV0dXJuICdpbmxpbmUgZGlyZWN0aXZlIGNhbGxlZCcKICB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkaG9pc3RfMF9pbmxpbmVBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImlubGluZUFjdGlvbiIgfSk7Cgo7ZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICQkaG9pc3RfMV9pbmxpbmVBcnJvdygkJGhvaXN0X2VuY29kZWQsIHN1ZmZpeCA9ICdhcnJvdycpIHsKICAgIGNvbnN0IFtjYXB0dXJlZF0gPSBhd2FpdCBkZWNyeXB0KCQkaG9pc3RfZW5jb2RlZCk7Cid1c2Ugc2VydmVyJwogICAgcmV0dXJuIGAke2NhcHR1cmVkfSAke3N1ZmZpeH0gY2FsbGVkYAogIH07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRob2lzdF8xX2lubGluZUFycm93LCAibmFtZSIsIHsgdmFsdWU6ICJpbmxpbmVBcnJvdyIgfSk7Cgo7ZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uKCkgewogICAgJ3VzZSBzZXJ2ZXInCiAgICByZXR1cm4gJ2lubGluZSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKICB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJhbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uIiB9KTsKMTE5MgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBJbmxpbmVEaXJlY3RpdmUoKSB7XG4gIGNvbnN0IGNhcHR1cmVkID0gJ2NhcHR1cmVkJ1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubGluZUFjdGlvbigpIHtcbiAgICAndXNlIHNlcnZlcidcbiAgICByZXR1cm4gJ2lubGluZSBkaXJlY3RpdmUgY2FsbGVkJ1xuICB9XG5cbiAgY29uc3QgaW5saW5lQXJyb3cgPSBhc3luYyAoc3VmZml4ID0gJ2Fycm93JykgPT4ge1xuICAgICd1c2Ugc2VydmVyJ1xuICAgIHJldHVybiBgJHtjYXB0dXJlZH0gJHtzdWZmaXh9IGNhbGxlZGBcbiAgfVxuXG4gIGNvbnN1bWUoaW5saW5lQWN0aW9uLCBpbmxpbmVBcnJvdywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc2VydmVyJ1xuICAgIHJldHVybiAnaW5saW5lIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xuICB9KVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFROztBQUU1QixDQUFDOztBQUtELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7O0FBS3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLG9IQUdqQztBQUNIO0FBZEU7QUFBQSxnREFBOEI7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDbkMsQ0FBQyxDQUFDOztBQUVvQjtBQUFBLGdGQUE0QjtBQUNsRCxDQUFDLENBQUMsQ0FBQztBQUFDLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUN4QyxDQUFDLENBQUM7O0FBRW1DO0FBQUEsNkRBQWtCO0FBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUM3QyxDQUFDLENBQUM7OyJ9 -*/ - -export function InlineDirective() { - const captured = 'captured' - - const inlineAction = /* #__PURE__ */ registerServerReference($$hoist_0_inlineAction, "$$hoist_0_inlineAction"); - - const inlineArrow = /* #__PURE__ */ registerServerReference($$hoist_1_inlineArrow, "$$hoist_1_inlineArrow").bind(null, encrypt([captured])) - - consume(inlineAction, inlineArrow, /* #__PURE__ */ registerServerReference($$hoist_2_anonymous_server_function, "$$hoist_2_anonymous_server_function")) -} - -;export async function $$hoist_0_inlineAction() { - 'use server' - return 'inline directive called' - }; -/* #__PURE__ */ Object.defineProperty($$hoist_0_inlineAction, "name", { value: "inlineAction" }); - -;export async function $$hoist_1_inlineArrow($$hoist_encoded, suffix = 'arrow') { - const [captured] = await decrypt($$hoist_encoded); -'use server' - return `${captured} ${suffix} called` - }; -/* #__PURE__ */ Object.defineProperty($$hoist_1_inlineArrow, "name", { value: "inlineArrow" }); - -;export async function $$hoist_2_anonymous_server_function() { - 'use server' - return 'inline function expression called' - }; -/* #__PURE__ */ Object.defineProperty($$hoist_2_anonymous_server_function, "name", { value: "anonymous_server_function" }); diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.md new file mode 100644 index 000000000..608b835c8 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.md @@ -0,0 +1,61 @@ +## Input + +```js +export function InlineDirective() { + const captured = 'captured' + + async function inlineAction() { + 'use server' + return 'inline directive called' + } + + const inlineArrow = async (suffix = 'arrow') => { + 'use server' + return `${captured} ${suffix} called` + } + + consume(inlineAction, inlineArrow, async function () { + 'use server' + return 'inline function expression called' + }) +} +``` + +## hoist + +**Status:** transformed + +**References:** $$hoist_0_inlineAction, $$hoist_1_inlineArrow, $$hoist_2_anonymous_server_function + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTI0MABleHBvcnQgZnVuY3Rpb24gSW5saW5lRGlyZWN0aXZlKCkgewogIGNvbnN0IGNhcHR1cmVkID0gJ2NhcHR1cmVkJwoKICBjb25zdCBpbmxpbmVBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRob2lzdF8wX2lubGluZUFjdGlvbiwgIiQkaG9pc3RfMF9pbmxpbmVBY3Rpb24iKTsKCiAgY29uc3QgaW5saW5lQXJyb3cgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRob2lzdF8xX2lubGluZUFycm93LCAiJCRob2lzdF8xX2lubGluZUFycm93IikuYmluZChudWxsLCBlbmNyeXB0KFtjYXB0dXJlZF0pKQoKICBjb25zdW1lKGlubGluZUFjdGlvbiwgaW5saW5lQXJyb3csIC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGhvaXN0XzJfYW5vbnltb3VzX3NlcnZlcl9mdW5jdGlvbiwgIiQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uIikpCn0KCjtleHBvcnQgYXN5bmMgZnVuY3Rpb24gJCRob2lzdF8wX2lubGluZUFjdGlvbigpIHsKICAgICd1c2Ugc2VydmVyJwogICAgcmV0dXJuICdpbmxpbmUgZGlyZWN0aXZlIGNhbGxlZCcKICB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkaG9pc3RfMF9pbmxpbmVBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImlubGluZUFjdGlvbiIgfSk7Cgo7ZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICQkaG9pc3RfMV9pbmxpbmVBcnJvdygkJGhvaXN0X2VuY29kZWQsIHN1ZmZpeCA9ICdhcnJvdycpIHsKICAgIGNvbnN0IFtjYXB0dXJlZF0gPSBhd2FpdCBkZWNyeXB0KCQkaG9pc3RfZW5jb2RlZCk7Cid1c2Ugc2VydmVyJwogICAgcmV0dXJuIGAke2NhcHR1cmVkfSAke3N1ZmZpeH0gY2FsbGVkYAogIH07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRob2lzdF8xX2lubGluZUFycm93LCAibmFtZSIsIHsgdmFsdWU6ICJpbmxpbmVBcnJvdyIgfSk7Cgo7ZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uKCkgewogICAgJ3VzZSBzZXJ2ZXInCiAgICByZXR1cm4gJ2lubGluZSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKICB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJhbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uIiB9KTsKMTE5MgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBJbmxpbmVEaXJlY3RpdmUoKSB7XG4gIGNvbnN0IGNhcHR1cmVkID0gJ2NhcHR1cmVkJ1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubGluZUFjdGlvbigpIHtcbiAgICAndXNlIHNlcnZlcidcbiAgICByZXR1cm4gJ2lubGluZSBkaXJlY3RpdmUgY2FsbGVkJ1xuICB9XG5cbiAgY29uc3QgaW5saW5lQXJyb3cgPSBhc3luYyAoc3VmZml4ID0gJ2Fycm93JykgPT4ge1xuICAgICd1c2Ugc2VydmVyJ1xuICAgIHJldHVybiBgJHtjYXB0dXJlZH0gJHtzdWZmaXh9IGNhbGxlZGBcbiAgfVxuXG4gIGNvbnN1bWUoaW5saW5lQWN0aW9uLCBpbmxpbmVBcnJvdywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc2VydmVyJ1xuICAgIHJldHVybiAnaW5saW5lIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xuICB9KVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFROztBQUU1QixDQUFDOztBQUtELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7O0FBS3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLG9IQUdqQztBQUNIO0FBZEU7QUFBQSxnREFBOEI7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDbkMsQ0FBQyxDQUFDOztBQUVvQjtBQUFBLGdGQUE0QjtBQUNsRCxDQUFDLENBQUMsQ0FBQztBQUFDLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUN4QyxDQUFDLENBQUM7O0FBRW1DO0FBQUEsNkRBQWtCO0FBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUM3QyxDQUFDLENBQUM7OyJ9) + +```js +export function InlineDirective() { + const captured = 'captured' + + const inlineAction = /* #__PURE__ */ registerServerReference($$hoist_0_inlineAction, "$$hoist_0_inlineAction"); + + const inlineArrow = /* #__PURE__ */ registerServerReference($$hoist_1_inlineArrow, "$$hoist_1_inlineArrow").bind(null, encrypt([captured])) + + consume(inlineAction, inlineArrow, /* #__PURE__ */ registerServerReference($$hoist_2_anonymous_server_function, "$$hoist_2_anonymous_server_function")) +} + +;export async function $$hoist_0_inlineAction() { + 'use server' + return 'inline directive called' + }; +/* #__PURE__ */ Object.defineProperty($$hoist_0_inlineAction, "name", { value: "inlineAction" }); + +;export async function $$hoist_1_inlineArrow($$hoist_encoded, suffix = 'arrow') { + const [captured] = await decrypt($$hoist_encoded); +'use server' + return `${captured} ${suffix} called` + }; +/* #__PURE__ */ Object.defineProperty($$hoist_1_inlineArrow, "name", { value: "inlineArrow" }); + +;export async function $$hoist_2_anonymous_server_function() { + 'use server' + return 'inline function expression called' + }; +/* #__PURE__ */ Object.defineProperty($$hoist_2_anonymous_server_function, "name", { value: "anonymous_server_function" }); +``` diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index f03b04850..683b91b50 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -4,9 +4,7 @@ import { describe, expect, test } from 'vitest' import { transformHoistInlineDirective } from './hoist' import { transformModuleExportEffect } from './module-export-effect' import { - formatDecodedSourceMap, formatDecodedSourceMapMarkdown, - formatSourceMapFixture, formatSourceMapMarkdownFixture, } from './test-utils' import { transformWrapExport } from './wrap-export' @@ -68,11 +66,18 @@ describe('source map fixtures', () => { encode: (value) => `encrypt(${value})`, decode: (value) => `await decrypt(${value})`, }) - await expect(formatSourceMapFixture(result.output)).toMatchFileSnapshot( - file + '.snap.js', - ) - await expect(formatDecodedSourceMap(result.output)).toMatchFileSnapshot( - file + '.map.snap.txt', + const outputs = [ + { + name: 'hoist', + output: result.output, + references: result.names, + }, + ] + await expect( + formatSourceMapMarkdownFixture(input, outputs), + ).toMatchFileSnapshot(file + '.snap.md') + await expect(formatDecodedSourceMapMarkdown(outputs)).toMatchFileSnapshot( + file + '.map.snap.md', ) }) } diff --git a/packages/plugin-rsc/src/transforms/test-utils.ts b/packages/plugin-rsc/src/transforms/test-utils.ts index eb511bb64..8ecced64a 100644 --- a/packages/plugin-rsc/src/transforms/test-utils.ts +++ b/packages/plugin-rsc/src/transforms/test-utils.ts @@ -1,18 +1,5 @@ import type MagicString from 'magic-string' -export function formatSourceMapFixture(output: MagicString): string { - const code = output.toString() - const map = output.generateMap({ includeContent: true, hires: 'boundary' }) - const visualization = generateVisualizationLink(code, map.toString()) - return `/* -Source map visualization: - -${visualization} -*/ - -${code}` -} - type SourceMapFixtureOutput = { name: string output: MagicString @@ -53,7 +40,7 @@ export function formatDecodedSourceMapMarkdown( * This test-local formatter is inspired by Oxc's source map visualizer output: * https://github.com/oxc-project/oxc-sourcemap/blob/main/src/sourcemap_visualizer.rs */ -export function formatDecodedSourceMap(output: MagicString): string { +function formatDecodedSourceMap(output: MagicString): string { const generatedLines = output.toString().split('\n') const map = output.generateDecodedMap({ includeContent: true, From 235da5d8c4b122ba0ab0b6758a321276ee81f35a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:50:54 +0900 Subject: [PATCH 21/52] docs(rsc): remove stale inline mapping todo Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/server-action.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/server-action.ts b/packages/plugin-rsc/src/transforms/server-action.ts index ec46a9f11..b4b5de74b 100644 --- a/packages/plugin-rsc/src/transforms/server-action.ts +++ b/packages/plugin-rsc/src/transforms/server-action.ts @@ -4,9 +4,6 @@ import { transformHoistInlineDirective } from './hoist' import { transformModuleExportEffect } from './module-export-effect' import { hasDirective } from './utils' -// TODO: Apply the same runtime-callsite mapping contract to every inline -// directive shape. -// https://github.com/vitejs/vite-plugin-react/issues/1361 export function transformServerActionServer( input: string, ast: ESTree.Program, From 16fff265aaf712b1abaa5e20e5959b2ae42dd7cf Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:55:32 +0900 Subject: [PATCH 22/52] test(rsc): cover module export wrapper semantics Co-authored-by: OpenCode --- .../dependent-declarators.js.map.snap.md | 16 ++++++++++++++ .../dependent-declarators.js.snap.md | 22 +++++++++++++++++++ .../destructured-export.js.map.snap.md | 10 +++++++++ .../destructured-export.js.snap.md | 19 ++++++++++++++++ .../named-function-expression.js.map.snap.md | 13 +++++++++++ .../named-function-expression.js.snap.md | 19 ++++++++++++++++ .../pre-declaration-reference.js.map.snap.md | 14 ++++++++++++ .../pre-declaration-reference.js.snap.md | 21 ++++++++++++++++++ 8 files changed, 134 insertions(+) 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 eef48cd07..8bc066dd1 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 @@ -22,3 +22,19 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:21) "async () => 'first action called',\n" --> (2:0) "\n" +(2:21) "async () => " --> (3:0) "const $$module_0_implementation_first = async () => " +(2:33) "'first action called',\n" --> (3:52) "'first action called';\n" +[unmapped] --> (4:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_first, \"name\", { value: \"first\" });\n" +(2:7) "const first = async () => 'first action called'" --> (5:0) "const first = /* #__PURE__ */ registerServerReference($$module_0_implementation_first, \"first\")" +(2:54) ",\n" --> (5:95) ",\n" +(3:0) " second = first\n" --> (6:0) " second = first\n" +[unmapped] --> (8:0) "const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(second, \"second\");\n" +[unmapped] --> (9:0) "export { $$module_1_binding_second as second };\n" +[unmapped] --> (10:0) "export { first };\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 e7a106b22..d53d8a400 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 @@ -44,3 +44,25 @@ registerServerReference(first, "first"); registerServerReference(second, "second"); export { first, second }; ``` + +## module-export + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDY0ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCc7Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9maXJzdCwgIm5hbWUiLCB7IHZhbHVlOiAiZmlyc3QiIH0pOwpjb25zdCBmaXJzdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0LCAiZmlyc3QiKSwKICBzZWNvbmQgPSBmaXJzdAoKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmQsICJzZWNvbmQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCBhcyBzZWNvbmQgfTsKZXhwb3J0IHsgZmlyc3QgfTsKMzE3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVVO0FBQUEsb0RBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07O0FBQTlDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxrRkFBa0M7QUFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Ozs7OyJ9) + +```js +'use server' + + +const $$module_0_implementation_first = async () => 'first action called'; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_first, "name", { value: "first" }); +const first = /* #__PURE__ */ registerServerReference($$module_0_implementation_first, "first"), + second = first + +const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(second, "second"); +export { $$module_1_binding_second as second }; +export { first }; +``` 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..57a0e330c 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,13 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "const source = async () => 'destructured export called'\n" --> (2:0) "const source = async () => 'destructured export called'\n" +(4:7) "const { action } = { action: source }\n" --> (4:0) "const { action } = { action: source }\n" +[unmapped] --> (6:0) "const $$module_0_binding_action = /* #__PURE__ */ registerServerReference(action, \"action\");\n" +[unmapped] --> (7:0) "export { $$module_0_binding_action as 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..2e703d219 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,22 @@ const { action } = { action: source } registerServerReference(action, "action"); export { action }; ``` + +## module-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjUxACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24sICJhY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiBhcyBhY3Rpb24gfTsKNDIyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmNvbnN0IHNvdXJjZSA9IGFzeW5jICgpID0+ICdkZXN0cnVjdHVyZWQgZXhwb3J0IGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7QUFFL0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDOzs7OyJ9) + +```js +'use server' + +const source = async () => 'destructured export called' + +const { action } = { action: source } + +const $$module_0_binding_action = /* #__PURE__ */ registerServerReference(action, "action"); +export { $$module_0_binding_action as action }; +``` 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..1d1eb69fc 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,16 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:22) "async function actionImplementation() {\n" --> (2:0) "\n" +(2:22) "async function actionImplementation() " --> (3:0) "const $$module_0_implementation_action = async function actionImplementation() " +(2:60) "{\n" --> (3:79) "{\n" +(3:0) " return 'named function expression called'\n" --> (4:0) " return 'named function expression called'\n" +(4:0) "}\n" --> (5:0) "};\n" +[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, \"name\", { value: \"actionImplementation\" });\n" +(2:0) "export const action = async function actionImplementation() {\n" --> (7:0) "export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, \"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..3e07cd3a8 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,22 @@ const action = async function actionImplementation() { registerServerReference(action, "action"); export { action }; ``` + +## module-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzY1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2FjdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYWN0aW9uSW1wbGVtZW50YXRpb24iIH0pOwpleHBvcnQgY29uc3QgYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uLCAiYWN0aW9uIikKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVXO0FBQUEsK0VBQXNDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOztBQUZBLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7In0=) + +```js +'use server' + + +const $$module_0_implementation_action = async function actionImplementation() { + return 'named function expression called' +}; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, "name", { value: "actionImplementation" }); +export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, "action") +``` 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..b47d6b357 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,17 @@ (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" ``` + +## module-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(4:7) "async function action() {\n" --> (2:0) "\n" +(4:7) "async function action() " --> (3:0) "const $$module_0_implementation_action = async function $$module_0_implementation_action() " +(4:31) "{\n" --> (3:91) "{\n" +(5:0) " return 'action called'\n" --> (4:0) " return 'action called'\n" +(6:0) "}\n" --> (5:0) "};\n" +[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, \"name\", { value: \"action\" });\n" +(2:0) "void action\n" --> (7:0) "void action\n" +[unmapped] --> (9:0) "export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, \"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..610aecb43 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,24 @@ async function action() { registerServerReference(action, "action"); export { action }; ``` + +## module-export + +**Status:** transformed + +**References:** action + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzU4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24oKSB7CiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJhY3Rpb24iIH0pOwp2b2lkIGFjdGlvbgoKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2FjdGlvbiwgImFjdGlvbiIpOwoyODIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxudm9pZCBhY3Rpb25cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBSUo7QUFBQSwyRkFBd0I7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCOztBQUpBLElBQUksQ0FBQzs7OyJ9) + +```js +'use server' + + +const $$module_0_implementation_action = async function $$module_0_implementation_action() { + return 'action called' +}; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, "name", { value: "action" }); +void action + +export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, "action"); +``` From 8dfffef1ee56514d5c96cddedfd693df4f83c697 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:20:05 +0900 Subject: [PATCH 23/52] refactor(rsc): rename module export wrap transform Co-authored-by: OpenCode --- .../default-anonymous.js.map.snap.md | 2 +- .../wrap-export/default-anonymous.js.snap.md | 2 +- ...ult-identifier-reassignment.js.map.snap.md | 2 +- ...default-identifier-reassignment.js.snap.md | 2 +- .../default-identifier.js.map.snap.md | 2 +- .../wrap-export/default-identifier.js.snap.md | 2 +- .../wrap-export/default-named.js.map.snap.md | 2 +- .../wrap-export/default-named.js.snap.md | 2 +- .../dependent-declarators.js.map.snap.md | 2 +- .../dependent-declarators.js.snap.md | 2 +- .../destructured-export.js.map.snap.md | 2 +- .../destructured-export.js.snap.md | 2 +- .../local-alias-reassignment.js.map.snap.md | 2 +- .../local-alias-reassignment.js.snap.md | 2 +- .../wrap-export/local-alias.js.map.snap.md | 2 +- .../wrap-export/local-alias.js.snap.md | 2 +- ...l-export-before-declaration.js.map.snap.md | 2 +- ...local-export-before-declaration.js.snap.md | 2 +- .../multiple-exports.js.map.snap.md | 2 +- .../wrap-export/multiple-exports.js.snap.md | 2 +- .../named-function-expression.js.map.snap.md | 2 +- .../named-function-expression.js.snap.md | 2 +- .../wrap-export/named-function.js.map.snap.md | 2 +- .../wrap-export/named-function.js.snap.md | 2 +- .../pre-declaration-reference.js.map.snap.md | 2 +- .../pre-declaration-reference.js.snap.md | 2 +- .../reexport-attributes.js.map.snap.md | 2 +- .../reexport-attributes.js.snap.md | 2 +- .../wrap-export/reexport.js.map.snap.md | 2 +- .../wrap-export/reexport.js.snap.md | 2 +- .../wrap-export/variables.js.map.snap.md | 2 +- .../wrap-export/variables.js.snap.md | 2 +- packages/plugin-rsc/src/transforms/index.ts | 2 +- ...ort.test.ts => module-export-wrap.test.ts} | 14 +++---- ...module-export.ts => module-export-wrap.ts} | 40 +++++++++---------- .../src/transforms/source-map.test.ts | 8 ++-- 36 files changed, 64 insertions(+), 64 deletions(-) rename packages/plugin-rsc/src/transforms/{module-export.test.ts => module-export-wrap.test.ts} (94%) rename packages/plugin-rsc/src/transforms/{module-export.ts => module-export-wrap.ts} (91%) 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 abf38d4d9..5a11eaea1 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 @@ -24,7 +24,7 @@ (2:0) "export default async function () {\n" --> (7:0) "export default $$effect_default;\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 993d24e69..7a891ac62 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 @@ -46,7 +46,7 @@ registerServerReference($$effect_default, "default"); export default $$effect_default; ``` -## module-export +## module-export-wrap **Status:** transformed 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 02fa4c693..adb32e69e 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 @@ -23,7 +23,7 @@ (3:0) "export default action\n" --> (7:0) "export default $$effect_default;\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 bddcde2bc..2cf9abe44 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 @@ -46,7 +46,7 @@ registerServerReference($$effect_default, "default"); export default $$effect_default; ``` -## module-export +## module-export-wrap **Status:** transformed 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 d8b3d4ded..4346ba119 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 @@ -25,7 +25,7 @@ (6:0) "export default defaultIdentifier\n" --> (9:0) "export default $$effect_default;\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 9a7fbb1ee..b453ed846 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 @@ -52,7 +52,7 @@ registerServerReference($$effect_default, "default"); export default $$effect_default; ``` -## module-export +## module-export-wrap **Status:** transformed 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 e42bde8d8..6b6160629 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 @@ -22,7 +22,7 @@ (2:0) "export default async function defaultNamedFunction() {\n" --> (7:0) "export default defaultNamedFunction;\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 d7f592677..f002539e5 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 @@ -46,7 +46,7 @@ registerServerReference(defaultNamedFunction, "default"); export default defaultNamedFunction; ``` -## module-export +## module-export-wrap **Status:** transformed 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 8bc066dd1..2c86bd2e2 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 @@ -23,7 +23,7 @@ (2:0) "export const first = async () => 'first action called',\n" --> (7:0) "export { first, second };\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 d53d8a400..2605f5cec 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 @@ -45,7 +45,7 @@ registerServerReference(second, "second"); export { first, second }; ``` -## module-export +## module-export-wrap **Status:** transformed 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 57a0e330c..cdaab44b0 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 @@ -20,7 +20,7 @@ (4:0) "export const { action } = { action: source }\n" --> (7:0) "export { action };\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 2e703d219..fd4d34487 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 @@ -45,7 +45,7 @@ registerServerReference(action, "action"); export { action }; ``` -## module-export +## module-export-wrap **Status:** transformed 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 8b627177b..3d1e7e000 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 @@ -19,7 +19,7 @@ [unmapped] --> (6:0) "registerServerReference(action, \"renamed\");" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 24b438364..a27979108 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 @@ -45,7 +45,7 @@ action = async () => 'second' registerServerReference(action, "renamed"); ``` -## module-export +## module-export-wrap **Status:** transformed 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 3f3ef432c..3a5c81178 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 @@ -21,7 +21,7 @@ [unmapped] --> (8:0) "registerServerReference(localAlias, \"aliasedAction\");" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 15fef9b27..bfbf8706e 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 @@ -51,7 +51,7 @@ export { localAlias as aliasedAction } registerServerReference(localAlias, "aliasedAction"); ``` -## module-export +## module-export-wrap **Status:** transformed 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 2f9b56d6d..553b224b4 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 @@ -17,7 +17,7 @@ [unmapped] --> (5:0) "registerServerReference(action, \"action\");" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 b9c1fd668..4dd9d56de 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 @@ -42,7 +42,7 @@ const action = async () => 'action called' registerServerReference(action, "action"); ``` -## module-export +## module-export-wrap **Status:** transformed 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 25d420f04..cd606d91a 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 @@ -32,7 +32,7 @@ (6:0) "export async function secondAction() {\n" --> (14:0) "export { secondAction };\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 fcde169a2..ec9ccb0f1 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 @@ -62,7 +62,7 @@ registerServerReference(secondAction, "secondAction"); export { secondAction }; ``` -## module-export +## module-export-wrap **Status:** transformed 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 1d1eb69fc..81f00fda2 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 @@ -22,7 +22,7 @@ (2:0) "export const action = async function actionImplementation() {\n" --> (7:0) "export { action };\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 3e07cd3a8..f3b0f5519 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 @@ -45,7 +45,7 @@ registerServerReference(action, "action"); export { action }; ``` -## module-export +## module-export-wrap **Status:** transformed 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 8d7bd9128..38858b64d 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 @@ -21,7 +21,7 @@ (2:0) "export async function namedFunction() {\n" --> (7:0) "export { namedFunction };\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 e151703ab..a72ad9fcd 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 @@ -45,7 +45,7 @@ registerServerReference(namedFunction, "namedFunction"); export { namedFunction }; ``` -## module-export +## module-export-wrap **Status:** transformed 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 b47d6b357..f795d6598 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 @@ -23,7 +23,7 @@ (4:0) "export async function action() {\n" --> (9:0) "export { action };\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 610aecb43..267adf833 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 @@ -51,7 +51,7 @@ registerServerReference(action, "action"); export { action }; ``` -## module-export +## module-export-wrap **Status:** transformed 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 3de63c42b..818d5ba07 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 @@ -17,7 +17,7 @@ [unmapped] --> (5:0) "registerServerReference($$effect_import_reexportedAction, \"reexportedAction\");" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 5520be2c4..41b0a029a 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 @@ -41,7 +41,7 @@ import { reexportedAction as $$effect_import_reexportedAction } from './reexport registerServerReference($$effect_import_reexportedAction, "reexportedAction"); ``` -## module-export +## module-export-wrap **Status:** transformed 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 ed8e676b6..6bc55c701 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 @@ -17,7 +17,7 @@ [unmapped] --> (5:0) "registerServerReference($$effect_import_reexportedAction, \"reexportedAction\");" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 678819a60..f3e21dda7 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 @@ -41,7 +41,7 @@ import { reexportedAction as $$effect_import_reexportedAction } from './reexport registerServerReference($$effect_import_reexportedAction, "reexportedAction"); ``` -## module-export +## module-export-wrap **Status:** transformed 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 3d672b637..0098fee0a 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 @@ -30,7 +30,7 @@ (4:0) "export const functionExpression = async function () {\n" --> (12:0) "export { functionExpression };\n" ``` -## module-export +## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\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 12f59e92e..742b447f1 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 @@ -56,7 +56,7 @@ registerServerReference(functionExpression, "functionExpression"); export { functionExpression }; ``` -## module-export +## module-export-wrap **Status:** transformed diff --git a/packages/plugin-rsc/src/transforms/index.ts b/packages/plugin-rsc/src/transforms/index.ts index 6e4f6434c..7408b9b6f 100644 --- a/packages/plugin-rsc/src/transforms/index.ts +++ b/packages/plugin-rsc/src/transforms/index.ts @@ -1,5 +1,5 @@ export * from './hoist' -export * from './module-export' +export * from './module-export-wrap' export * from './module-exports' export * from './module-export-effect' export * from './wrap-export' diff --git a/packages/plugin-rsc/src/transforms/module-export.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts similarity index 94% rename from packages/plugin-rsc/src/transforms/module-export.test.ts rename to packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 606f45acd..4e8363b32 100644 --- a/packages/plugin-rsc/src/transforms/module-export.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -1,23 +1,23 @@ import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { - transformModuleExport, - type TransformModuleExportOptions, -} from './module-export' + transformModuleExportWrap, + type TransformModuleExportWrapOptions, +} from './module-export-wrap' async function transform( input: string, - options: Omit = {}, + options: Omit = {}, ) { const ast = await parseAstAsync(input) - return transformModuleExport(input, ast, { + return transformModuleExportWrap(input, ast, { ...options, runtime: ({ implementation, exportName }) => `wrap(${implementation}, ${JSON.stringify(exportName)})`, }) } -describe(transformModuleExport, () => { +describe(transformModuleExportWrap, () => { test('hoists direct functions and replaces their original value sites', async () => { const result = await transform(` 'use cache' @@ -133,7 +133,7 @@ export function recursive(depth) { } ` const ast = await parseAstAsync(input) - const result = transformModuleExport(input, ast, { + const result = transformModuleExportWrap(input, ast, { runtime: ({ implementation }) => `Object.assign((...args) => ${implementation}(...args), { marker: "wrapped" })`, }) diff --git a/packages/plugin-rsc/src/transforms/module-export.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts similarity index 91% rename from packages/plugin-rsc/src/transforms/module-export.ts rename to packages/plugin-rsc/src/transforms/module-export-wrap.ts index f2451e87b..2a7a5158b 100644 --- a/packages/plugin-rsc/src/transforms/module-export.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -18,25 +18,25 @@ type FunctionNode = | FunctionExpression | ArrowFunctionExpression -export type TransformModuleExportMeta = ModuleExportMeta & { +export type TransformModuleExportWrapMeta = ModuleExportMeta & { declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] } -export type TransformModuleExportContext = { +export type TransformModuleExportWrapContext = { implementation: string binding: string exportName: string - meta: TransformModuleExportMeta + meta: TransformModuleExportWrapMeta } -export type TransformModuleExportFilter = ( +export type TransformModuleExportWrapFilter = ( name: string, - meta: TransformModuleExportMeta, + meta: TransformModuleExportWrapMeta, ) => boolean -export type TransformModuleExportOptions = { - runtime: (context: TransformModuleExportContext) => string - filter?: TransformModuleExportFilter +export type TransformModuleExportWrapOptions = { + runtime: (context: TransformModuleExportWrapContext) => string + filter?: TransformModuleExportWrapFilter rejectNonAsyncFunction?: boolean exportAll?: 'error' | 'preserve' } @@ -46,13 +46,13 @@ export type TransformModuleExportOptions = { * and replaced at their original expression sites. Other selected exports keep * their source values and receive canonical bindings at the export boundary. */ -export function transformModuleExport( +export function transformModuleExportWrap( source: string, viteAst: ESTree.Program, - options: TransformModuleExportOptions, + options: TransformModuleExportWrapOptions, ): { output: MagicString - references: TransformModuleExportContext[] + references: TransformModuleExportWrapContext[] referenceNames: string[] } { const ast = viteAst as unknown as Program @@ -60,7 +60,7 @@ export function transformModuleExport( if (!input.endsWith('\n')) input += '\n' const output = new MagicString(input) const filter = options.filter ?? (() => true) - const references: TransformModuleExportContext[] = [] + const references: TransformModuleExportWrapContext[] = [] const fallbackCode: string[] = [] const hoistPosition = getHoistPosition(ast) @@ -68,14 +68,14 @@ export function transformModuleExport( implementation: string, binding: string, exportName: string, - meta: TransformModuleExportMeta, - ): TransformModuleExportContext { + meta: TransformModuleExportWrapMeta, + ): TransformModuleExportWrapContext { const context = { implementation, binding, exportName, meta } references.push(context) return context } - function runtime(context: TransformModuleExportContext): string { + function runtime(context: TransformModuleExportWrapContext): string { return `/* #__PURE__ */ ${options.runtime(context)}` } @@ -95,7 +95,7 @@ export function transformModuleExport( function emitFallback( implementation: string, exportName: string, - meta: TransformModuleExportMeta, + meta: TransformModuleExportWrapMeta, ): void { const binding = createName('binding', exportName) const context = createContext(implementation, binding, exportName, meta) @@ -109,7 +109,7 @@ export function transformModuleExport( node: FunctionNode, sourceName: string, exportName: string, - meta: TransformModuleExportMeta, + meta: TransformModuleExportWrapMeta, ): string { validateNonAsyncFunction(options, node) const implementation = createName('implementation', sourceName) @@ -143,7 +143,7 @@ export function transformModuleExport( if (group.type === 'declaration') { const [entry] = group.exports const { localName: name } = entry - const meta: TransformModuleExportMeta = { + const meta: TransformModuleExportWrapMeta = { ...entry.meta, declarationKind: group.declaration.type === 'FunctionDeclaration' @@ -184,7 +184,7 @@ export function transformModuleExport( let validate = false for (const entry of declarator.exports) { - const meta: TransformModuleExportMeta = { + const meta: TransformModuleExportWrapMeta = { ...entry.meta, declarationKind: group.declaration.kind, isFunction: directFunction @@ -274,7 +274,7 @@ export function transformModuleExport( } } else if (group.type === 'default') { const declaration = group.node.declaration - let meta: TransformModuleExportMeta + let meta: TransformModuleExportWrapMeta if (isFunctionNode(declaration)) { const sourceName = diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 1aa5f3972..8e3bdd249 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -2,8 +2,8 @@ import path from 'node:path' import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformHoistInlineDirective } from './hoist' -import { transformModuleExport } from './module-export' import { transformModuleExportEffect } from './module-export-effect' +import { transformModuleExportWrap } from './module-export-wrap' import { formatDecodedSourceMapMarkdown, formatSourceMapMarkdownFixture, @@ -20,7 +20,7 @@ describe('source map fixtures', () => { // rely on adjacent-source fallback. React uses the `registerServerReference` // caller as the reference's source location. for (const [file, load] of Object.entries(wrapExportFixtures)) { - test(`module-export/${path.basename(file)}`, async () => { + test(`module-export-wrap/${path.basename(file)}`, async () => { const input = ((await load()) as any).default as string const ast = await parseAstAsync(input) const wrapResult = transformWrapExport(input, ast, { @@ -31,7 +31,7 @@ describe('source map fixtures', () => { generate: ({ binding, exportName }) => `registerServerReference(${binding}, ${JSON.stringify(exportName)})`, }) - const moduleResult = transformModuleExport(input, ast, { + const moduleResult = transformModuleExportWrap(input, ast, { runtime: ({ implementation, exportName }) => `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, }) @@ -47,7 +47,7 @@ describe('source map fixtures', () => { references: effectResult.referenceNames, }, { - name: 'module-export', + name: 'module-export-wrap', output: moduleResult.output, references: moduleResult.referenceNames, }, From 5560fff5d7cd360418bfa139afc9a03c6632827c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:21:38 +0900 Subject: [PATCH 24/52] refactor(rsc): remove unused export metadata Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.test.ts | 1 - .../src/transforms/module-export-wrap.ts | 39 +++++-------------- 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 4e8363b32..989e6486c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -101,7 +101,6 @@ export * from './all' ]) expect(result.references[3]!.meta).toEqual({ localName: 'item', - declarationKind: 'const', isFunction: false, }) expect(code).toContain('const $$module_1_implementation_default = current') diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 2a7a5158b..25901c564 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -6,7 +6,6 @@ import type { ArrowFunctionExpression, Node, Program, - VariableDeclaration, } from 'estree' import MagicString from 'magic-string' import type { ESTree } from 'vite' @@ -18,20 +17,16 @@ type FunctionNode = | FunctionExpression | ArrowFunctionExpression -export type TransformModuleExportWrapMeta = ModuleExportMeta & { - declarationKind?: 'function' | 'class' | VariableDeclaration['kind'] -} - export type TransformModuleExportWrapContext = { implementation: string binding: string exportName: string - meta: TransformModuleExportWrapMeta + meta: ModuleExportMeta } export type TransformModuleExportWrapFilter = ( name: string, - meta: TransformModuleExportWrapMeta, + meta: ModuleExportMeta, ) => boolean export type TransformModuleExportWrapOptions = { @@ -68,7 +63,7 @@ export function transformModuleExportWrap( implementation: string, binding: string, exportName: string, - meta: TransformModuleExportWrapMeta, + meta: ModuleExportMeta, ): TransformModuleExportWrapContext { const context = { implementation, binding, exportName, meta } references.push(context) @@ -95,7 +90,7 @@ export function transformModuleExportWrap( function emitFallback( implementation: string, exportName: string, - meta: TransformModuleExportWrapMeta, + meta: ModuleExportMeta, ): void { const binding = createName('binding', exportName) const context = createContext(implementation, binding, exportName, meta) @@ -109,7 +104,7 @@ export function transformModuleExportWrap( node: FunctionNode, sourceName: string, exportName: string, - meta: TransformModuleExportWrapMeta, + meta: ModuleExportMeta, ): string { validateNonAsyncFunction(options, node) const implementation = createName('implementation', sourceName) @@ -143,13 +138,7 @@ export function transformModuleExportWrap( if (group.type === 'declaration') { const [entry] = group.exports const { localName: name } = entry - const meta: TransformModuleExportWrapMeta = { - ...entry.meta, - declarationKind: - group.declaration.type === 'FunctionDeclaration' - ? 'function' - : 'class', - } + const meta = entry.meta if (!filter(entry.exportName, meta)) continue if (group.declaration.type === 'FunctionDeclaration') { @@ -184,9 +173,8 @@ export function transformModuleExportWrap( let validate = false for (const entry of declarator.exports) { - const meta: TransformModuleExportWrapMeta = { + const meta: ModuleExportMeta = { ...entry.meta, - declarationKind: group.declaration.kind, isFunction: directFunction ? true : declarator.node.init @@ -274,18 +262,14 @@ export function transformModuleExportWrap( } } else if (group.type === 'default') { const declaration = group.node.declaration - let meta: TransformModuleExportWrapMeta + let meta: ModuleExportMeta if (isFunctionNode(declaration)) { const sourceName = declaration.type !== 'ArrowFunctionExpression' && declaration.id ? declaration.id.name : 'default' - meta = { - ...group.meta, - declarationKind: - declaration.type === 'FunctionDeclaration' ? 'function' : undefined, - } + meta = group.meta if (!filter('default', meta)) continue const replacement = hoistFunction( @@ -305,10 +289,7 @@ export function transformModuleExportWrap( let implementation: string if (declaration.type === 'ClassDeclaration' && declaration.id) { implementation = declaration.id.name - meta = { - ...group.meta, - declarationKind: 'class', - } + meta = group.meta if (!filter('default', meta)) continue output.remove(group.node.start, declaration.start) } else { From 040fd9eab109e946de7ad52f1dfedcbab433cdd5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:26:58 +0900 Subject: [PATCH 25/52] refactor(rsc): reuse scanned export metadata Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.test.ts | 2 +- .../src/transforms/module-export-wrap.ts | 24 +------------------ 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 989e6486c..7d8c8c3d6 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -101,7 +101,7 @@ export * from './all' ]) expect(result.references[3]!.meta).toEqual({ localName: 'item', - isFunction: false, + isFunction: undefined, }) expect(code).toContain('const $$module_1_implementation_default = current') expect( diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 25901c564..42bce3818 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -173,14 +173,7 @@ export function transformModuleExportWrap( let validate = false for (const entry of declarator.exports) { - const meta: ModuleExportMeta = { - ...entry.meta, - isFunction: directFunction - ? true - : declarator.node.init - ? getIsFunction(declarator.node.init) - : undefined, - } + const meta = entry.meta if (!filter(entry.exportName, meta)) continue validate = true @@ -333,21 +326,6 @@ function isFunctionNode( ) } -function getIsFunction( - node: Node | ExportDefaultDeclaration['declaration'], -): boolean | undefined { - if (isFunctionNode(node)) return true - if ( - node.type === 'ClassDeclaration' || - node.type === 'Literal' || - node.type === 'ObjectExpression' || - node.type === 'ArrayExpression' || - node.type === 'ClassExpression' - ) { - return false - } -} - function getHoistPosition(ast: Program): number { for (const statement of ast.body) { const isDirective = From 70d9def224d08aa1c41702ea54918125ae5baeed Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:36:17 +0900 Subject: [PATCH 26/52] docs(rsc): illustrate module export wrap rewrites Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.ts | 124 +++++++++++++++++- 1 file changed, 121 insertions(+), 3 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index ffeb61718..8bfbffc8f 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -37,9 +37,48 @@ export type TransformModuleExportWrapOptions = { } /** - * Produces canonical wrapper exports. Directly exported functions are hoisted - * and replaced at their original expression sites. Other selected exports keep - * their source values and receive canonical bindings at the export boundary. + * Replaces selected module exports with canonical runtime wrapper bindings. + * + * Conceptually: + * + * ```js + * 'use server' + * export async function action(value) { + * return value + * } + * export const loader = createLoader() + * ``` + * + * becomes: + * + * ```js + * 'use server' + * const $$module_0_implementation_action = async function $$module_0_implementation_action(value) { + * return value + * } + * Object.defineProperty($$module_0_implementation_action, 'name', { + * value: 'action', + * }) + * export const action = __WRAP__($$module_0_implementation_action, 'action') + * const loader = createLoader() + * + * const $$module_1_binding_loader = __WRAP__(loader, 'loader') + * export { $$module_1_binding_loader as loader } + * ``` + * + * Here, `__WRAP__(...)` represents the expression returned by the `runtime` + * callback for each `{ implementation, binding, exportName, meta }` context. + * `references` returns those contexts in wrapper creation order, while + * `referenceNames` returns only their export names. + * + * Direct function implementations move after leading directives and before + * their wrappers. This avoids initialization-order issues and makes recursive + * references resolve through the exported wrapper. Other values retain their + * source initialization and receive a separate canonical binding at the export + * boundary. + * + * Generated `$$module_*` names are not deconflicted from user bindings, + * consistent with the other transform helpers. */ export function transformModuleExportWrap( source: string, @@ -92,6 +131,10 @@ export function transformModuleExportWrap( exportName: string, meta: ModuleExportMeta, ): void { + // const value = init() + // ⬇️ (append after source initialization) + // const $$module_0_binding_value = __WRAP__(value, 'value') + // export { $$module_0_binding_value as value } const binding = createName('binding', exportName) const context = createContext(implementation, binding, exportName, meta) fallbackCode.push( @@ -108,6 +151,10 @@ export function transformModuleExportWrap( ): string { validateNonAsyncFunction(options, node) const implementation = createName('implementation', sourceName) + // export async function action() {} + // ^^^^^^ + // ⬇️ (rename before moving) + // const $$module_0_implementation_action = async function $$module_0_implementation_action() {} const originalPrefix = node.type === 'FunctionDeclaration' && node.id ? input.slice(node.start, node.id.start) + @@ -128,6 +175,12 @@ export function transformModuleExportWrap( node.end, `;\n/* #__PURE__ */ Object.defineProperty(${implementation}, "name", { value: ${JSON.stringify(originalName)} });\n`, ) + // 'use server' + // export async function action() {} + // ⬇️ (move after directives and before the wrapper) + // 'use server' + // const $$module_0_implementation_action = async function ... + // export const action = __WRAP__($$module_0_implementation_action, 'action') output.move(node.start, node.end, hoistPosition) const context = createContext(implementation, sourceName, exportName, meta) @@ -136,6 +189,16 @@ export function transformModuleExportWrap( for (const group of scanModuleExports(viteAst)) { if (group.type === 'declaration') { + // export function f() {} + // ⬇️ (hoist implementation and replace declaration) + // const $$module_0_implementation_f = function ... + // export const f = __WRAP__($$module_0_implementation_f, 'f') + // + // export class C {} + // ⬇️ (keep initialization in place and append fallback) + // class C {} + // const $$module_0_binding_C = __WRAP__(C, 'C') + // export { $$module_0_binding_C as C } const [entry] = group.exports const { localName: name } = entry const meta = entry.meta @@ -158,6 +221,13 @@ export function transformModuleExportWrap( emitFallback(name, entry.exportName, meta) } } else if (group.type === 'variable-declaration') { + // export const action = async () => {}, value = init() + // ⬇️ + // const $$module_0_implementation_action = async () => {} + // const action = __WRAP__($$module_0_implementation_action, 'action'), value = init() + // const $$module_1_binding_value = __WRAP__(value, 'value') + // export { $$module_1_binding_value as value } + // export { action } const fallbackNames = new Set() const exportNames = group.declarators.flatMap((item) => item.exports.map((entry) => entry.exportName), @@ -197,6 +267,11 @@ export function transformModuleExportWrap( } if (fallbackNames.size > 0) { + // export const selected = init(), skipped = init() + // ^^^^^^ + // ⬇️ (remove `export` and restore the unwrapped export separately) + // const selected = init(), skipped = init() + // export { skipped } output.remove(group.node.start, group.declaration.start) for (const name of exportNames) { if (!fallbackNames.has(name)) @@ -204,6 +279,11 @@ export function transformModuleExportWrap( } } } else if (group.type === 'specifiers') { + // export { selected as action, skipped } + // ⬇️ + // const $$module_0_binding_action = __WRAP__(selected, 'action') + // export { $$module_0_binding_action as action } + // export { skipped } const preserved: string[] = [] let selected = false for (const entry of group.exports) { @@ -227,6 +307,11 @@ export function transformModuleExportWrap( let implementation = localName if (group.node.source) { + // export { remote as action } from './dep' with { type: 'json' } + // ⬇️ (preserve the source tail, including attributes) + // import { remote as $$module_0_implementation_action } from './dep' with { type: 'json' } + // const $$module_0_binding_action = __WRAP__($$module_0_implementation_action, 'action') + // export { $$module_0_binding_action as action } implementation = createName('implementation', exportName) const sourceTail = input .slice(group.node.source.end, group.node.end) @@ -248,6 +333,9 @@ export function transformModuleExportWrap( } } } else if (group.type === 'export-all') { + // export * from './dep' + // ⬇️ (unless `exportAll: 'preserve'`) + // throw new Error('unsupported ExportAllDeclaration') if (options.exportAll !== 'preserve') { throw Object.assign(new Error('unsupported ExportAllDeclaration'), { pos: group.node.start, @@ -258,6 +346,16 @@ export function transformModuleExportWrap( let meta: ModuleExportMeta if (isFunctionNode(declaration)) { + // export default async function Page() {} + // ⬇️ + // const $$module_0_implementation_Page = async function ... + // const Page = __WRAP__($$module_0_implementation_Page, 'default') + // export default Page + // + // export default async () => {} + // ⬇️ + // const $$module_0_implementation_default = async () => {} + // export default __WRAP__($$module_0_implementation_default, 'default') const sourceName = declaration.type !== 'ArrowFunctionExpression' && declaration.id ? declaration.id.name @@ -281,11 +379,24 @@ export function transformModuleExportWrap( } else { let implementation: string if (declaration.type === 'ClassDeclaration' && declaration.id) { + // export default class Page {} + // ^^^^^^^^^^^^^^ + // ⬇️ (remove `export default` and append fallback) + // class Page {} + // const $$module_0_binding_default = __WRAP__(Page, 'default') + // export { $$module_0_binding_default as default } implementation = declaration.id.name meta = group.meta if (!filter('default', meta)) continue output.remove(group.node.start, declaration.start) } else { + // export default current + // current = next + // ⬇️ (snapshot at the original export site) + // const $$module_0_implementation_default = current + // current = next + // const $$module_0_binding_default = __WRAP__($$module_0_implementation_default, 'default') + // export { $$module_0_binding_default as default } implementation = createName('implementation', 'default') meta = group.meta if (!filter('default', meta)) continue @@ -306,6 +417,10 @@ export function transformModuleExportWrap( } if (fallbackCode.length > 0) { + // const value = init() + // ⬇️ (append) + // const $$module_0_binding_value = __WRAP__(value, 'value') + // export { $$module_0_binding_value as value } output.append(`\n${fallbackCode.join('\n')}\n`) } @@ -327,6 +442,9 @@ function isFunctionNode( } function getHoistPosition(ast: Program): number { + // 'use server' + // const value = 1 + // ^ (insert hoisted implementations here) for (const statement of ast.body) { const isDirective = statement.type === 'ExpressionStatement' && From 4077b24191d1564c5dbfc4fe89fd2c5dee28b5e5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:38:53 +0900 Subject: [PATCH 27/52] refactor(rsc): scan direct export functions Co-authored-by: OpenCode --- .../src/transforms/module-export-scan.test.ts | 24 +++++++-- .../src/transforms/module-export-scan.ts | 52 ++++++++++++++++--- .../src/transforms/module-export-wrap.ts | 48 +++++------------ 3 files changed, 76 insertions(+), 48 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.test.ts b/packages/plugin-rsc/src/transforms/module-export-scan.test.ts index aae47872b..f611e026f 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.test.ts @@ -19,6 +19,7 @@ export * from './all' expect(groups[0]).toMatchObject({ type: 'declaration', declaration: { type: 'FunctionDeclaration' }, + directFunction: { type: 'FunctionDeclaration' }, exports: [ { localName: 'action', @@ -35,6 +36,7 @@ export * from './all' declaration: { kind: 'const' }, declarators: [ { + directFunction: { type: 'ArrowFunctionExpression' }, exports: [ { localName: 'loader', @@ -47,6 +49,7 @@ export * from './all' ], }, { + directFunction: undefined, exports: [ { localName: 'value', @@ -64,6 +67,7 @@ export * from './all' type: 'variable-declaration', declarators: [ { + directFunction: undefined, exports: [ { localName: 'item', @@ -97,13 +101,23 @@ export * from './all' }) test.each([ - ['export default function action() {}', 'named-declaration'], - ['export default action', 'identifier'], - ['export default () => {}', 'other'], -] as const)('classifies %s', async (source, kind) => { + [ + 'export default function action() {}', + 'named-declaration', + 'FunctionDeclaration', + ], + ['export default action', 'identifier', undefined], + ['export default () => {}', 'other', 'ArrowFunctionExpression'], +] as const)('classifies %s', async (source, kind, functionType) => { const ast = await parseAstAsync(source) - expect(scanModuleExports(ast)).toMatchObject([{ type: 'default', kind }]) + expect(scanModuleExports(ast)).toMatchObject([ + { + type: 'default', + kind, + directFunction: functionType ? { type: functionType } : undefined, + }, + ]) }) test('flags string literal export names as unsupported', async () => { diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index c3b8ccf2a..47a38819c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -4,7 +4,9 @@ import type { ExportDefaultDeclaration, ExportNamedDeclaration, ExportSpecifier, + ArrowFunctionExpression, FunctionDeclaration, + FunctionExpression, ClassDeclaration, Node, Program, @@ -14,6 +16,14 @@ import type { import type { ESTree } from 'vite' import { extractNames } from './utils' +export type ModuleExportFunction = + | Extract< + ExportDefaultDeclaration['declaration'], + { type: 'FunctionDeclaration' } + > + | FunctionExpression + | ArrowFunctionExpression + export type ModuleExportMeta = { /** * The local declaration name when statically available. @@ -67,6 +77,7 @@ export type ModuleExportGroup = type: 'declaration' node: ExportNamedDeclaration declaration: FunctionDeclaration | ClassDeclaration + directFunction?: FunctionDeclaration exports: [ModuleExportEntry] } | { @@ -78,6 +89,7 @@ export type ModuleExportGroup = declaration: VariableDeclaration declarators: { node: VariableDeclarator + directFunction?: ModuleExportFunction exports: ModuleExportEntry[] }[] } @@ -109,6 +121,7 @@ export type ModuleExportGroup = kind: ModuleExportDefaultKind node: ExportDefaultDeclaration localName?: string + directFunction?: ModuleExportFunction meta: ModuleExportMeta } @@ -129,12 +142,17 @@ export function scanModuleExports( node, declaration, declarators: declaration.declarations.map((declarator) => { + const directFunction = + declarator.id.type === 'Identifier' && declarator.init + ? getFunctionNode(declarator.init) + : undefined const isFunction = declarator.id.type === 'Identifier' && declarator.init ? getIsFunction(declarator.init) : undefined return { node: declarator, + directFunction, exports: extractNames(declarator.id).map((name) => ({ localName: name, exportName: name, @@ -155,6 +173,10 @@ export function scanModuleExports( type: 'declaration', node, declaration: node.declaration, + directFunction: + node.declaration.type === 'FunctionDeclaration' + ? node.declaration + : undefined, exports: [ { localName: name, @@ -201,6 +223,7 @@ export function scanModuleExports( let kind: ModuleExportDefaultKind let localName: string | undefined let meta: ModuleExportMeta + const directFunction = getFunctionNode(node.declaration) if ( (node.declaration.type === 'FunctionDeclaration' || node.declaration.type === 'ClassDeclaration') && @@ -221,7 +244,14 @@ export function scanModuleExports( kind = 'other' meta = { isFunction: getIsFunction(node.declaration) } } - groups.push({ type: 'default', kind, node, localName, meta }) + groups.push({ + type: 'default', + kind, + node, + localName, + directFunction, + meta, + }) } } @@ -231,13 +261,7 @@ export function scanModuleExports( function getIsFunction( node: Node | ExportDefaultDeclaration['declaration'], ): boolean | undefined { - if ( - node.type === 'FunctionDeclaration' || - node.type === 'ArrowFunctionExpression' || - node.type === 'FunctionExpression' - ) { - return true - } + if (getFunctionNode(node)) return true if ( node.type === 'ClassDeclaration' || node.type === 'Literal' || @@ -248,3 +272,15 @@ function getIsFunction( return false } } + +function getFunctionNode( + node: Node | ExportDefaultDeclaration['declaration'], +): ModuleExportFunction | undefined { + if ( + node.type === 'FunctionDeclaration' || + node.type === 'ArrowFunctionExpression' || + node.type === 'FunctionExpression' + ) { + return node + } +} diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 8bfbffc8f..3dbeb6d3c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -1,22 +1,14 @@ import { tinyassert } from '@hiogawa/utils' -import type { - ExportDefaultDeclaration, - FunctionDeclaration, - FunctionExpression, - ArrowFunctionExpression, - Node, - Program, -} from 'estree' +import type { Program } from 'estree' import MagicString from 'magic-string' import type { ESTree } from 'vite' -import { scanModuleExports, type ModuleExportMeta } from './module-export-scan' +import { + scanModuleExports, + type ModuleExportFunction, + type ModuleExportMeta, +} from './module-export-scan' import { validateNonAsyncFunction } from './utils' -type FunctionNode = - | FunctionDeclaration - | FunctionExpression - | ArrowFunctionExpression - export type TransformModuleExportWrapContext = { implementation: string binding: string @@ -144,7 +136,7 @@ export function transformModuleExportWrap( } function hoistFunction( - node: FunctionNode, + node: ModuleExportFunction, sourceName: string, exportName: string, meta: ModuleExportMeta, @@ -204,9 +196,9 @@ export function transformModuleExportWrap( const meta = entry.meta if (!filter(entry.exportName, meta)) continue - if (group.declaration.type === 'FunctionDeclaration') { + if (group.directFunction) { const replacement = hoistFunction( - group.declaration, + group.directFunction, name, entry.exportName, meta, @@ -234,12 +226,7 @@ export function transformModuleExportWrap( ) for (const declarator of group.declarators) { - const directFunction = - declarator.node.id.type === 'Identifier' && - declarator.node.init && - isFunctionNode(declarator.node.init) - ? declarator.node.init - : undefined + const directFunction = declarator.directFunction let validate = false for (const entry of declarator.exports) { @@ -342,10 +329,10 @@ export function transformModuleExportWrap( }) } } else if (group.type === 'default') { - const declaration = group.node.declaration let meta: ModuleExportMeta - if (isFunctionNode(declaration)) { + if (group.directFunction) { + const declaration = group.directFunction // export default async function Page() {} // ⬇️ // const $$module_0_implementation_Page = async function ... @@ -377,6 +364,7 @@ export function transformModuleExportWrap( : `export default ${replacement};`, ) } else { + const declaration = group.node.declaration let implementation: string if (declaration.type === 'ClassDeclaration' && declaration.id) { // export default class Page {} @@ -431,16 +419,6 @@ export function transformModuleExportWrap( } } -function isFunctionNode( - node: Node | ExportDefaultDeclaration['declaration'], -): node is FunctionNode { - return ( - node.type === 'FunctionDeclaration' || - node.type === 'FunctionExpression' || - node.type === 'ArrowFunctionExpression' - ) -} - function getHoistPosition(ast: Program): number { // 'use server' // const value = 1 From 57ce2100f9a4e744d41220c6a6cac557fffa87c1 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:41:51 +0900 Subject: [PATCH 28/52] refactor(rsc): use maybe-named function type Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-scan.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 47a38819c..34ae66c15 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -12,15 +12,13 @@ import type { Program, VariableDeclaration, VariableDeclarator, + MaybeNamedFunctionDeclaration, } from 'estree' import type { ESTree } from 'vite' import { extractNames } from './utils' export type ModuleExportFunction = - | Extract< - ExportDefaultDeclaration['declaration'], - { type: 'FunctionDeclaration' } - > + | MaybeNamedFunctionDeclaration | FunctionExpression | ArrowFunctionExpression From ef3cccd283b1e5c9c0b7052a00d09cde13f27eaf Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:42:51 +0900 Subject: [PATCH 29/52] docs(rsc): explain direct export functions Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-scan.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 34ae66c15..74c61f236 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -75,6 +75,7 @@ export type ModuleExportGroup = type: 'declaration' node: ExportNamedDeclaration declaration: FunctionDeclaration | ClassDeclaration + /** The function node for `export function foo() {}`. */ directFunction?: FunctionDeclaration exports: [ModuleExportEntry] } @@ -87,6 +88,7 @@ export type ModuleExportGroup = declaration: VariableDeclaration declarators: { node: VariableDeclarator + /** The function node for `export const foo = () => {}`. */ directFunction?: ModuleExportFunction exports: ModuleExportEntry[] }[] @@ -119,6 +121,7 @@ export type ModuleExportGroup = kind: ModuleExportDefaultKind node: ExportDefaultDeclaration localName?: string + /** The function node for `export default function () {}`. */ directFunction?: ModuleExportFunction meta: ModuleExportMeta } From febdbd61d44bbb3d67303523be10d332b5f8e90a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:53:42 +0900 Subject: [PATCH 30/52] refactor(rsc): align module export wrap API Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.test.ts | 6 +-- .../src/transforms/module-export-wrap.ts | 37 +++++++++---------- .../src/transforms/source-map.test.ts | 8 ++-- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 7d8c8c3d6..91e69c2a7 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -7,12 +7,12 @@ import { async function transform( input: string, - options: Omit = {}, + options: Omit = {}, ) { const ast = await parseAstAsync(input) return transformModuleExportWrap(input, ast, { ...options, - runtime: ({ implementation, exportName }) => + generate: ({ implementation, exportName }) => `wrap(${implementation}, ${JSON.stringify(exportName)})`, }) } @@ -133,7 +133,7 @@ export function recursive(depth) { ` const ast = await parseAstAsync(input) const result = transformModuleExportWrap(input, ast, { - runtime: ({ implementation }) => + generate: ({ implementation }) => `Object.assign((...args) => ${implementation}(...args), { marker: "wrapped" })`, }) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 3dbeb6d3c..825169104 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -11,7 +11,6 @@ import { validateNonAsyncFunction } from './utils' export type TransformModuleExportWrapContext = { implementation: string - binding: string exportName: string meta: ModuleExportMeta } @@ -22,12 +21,18 @@ export type TransformModuleExportWrapFilter = ( ) => boolean export type TransformModuleExportWrapOptions = { - runtime: (context: TransformModuleExportWrapContext) => string + generate: (context: TransformModuleExportWrapContext) => string filter?: TransformModuleExportWrapFilter rejectNonAsyncFunction?: boolean exportAll?: 'error' | 'preserve' } +export type TransformModuleExportWrapResult = { + output: MagicString + references: TransformModuleExportWrapContext[] + referenceNames: string[] +} + /** * Replaces selected module exports with canonical runtime wrapper bindings. * @@ -58,8 +63,8 @@ export type TransformModuleExportWrapOptions = { * export { $$module_1_binding_loader as loader } * ``` * - * Here, `__WRAP__(...)` represents the expression returned by the `runtime` - * callback for each `{ implementation, binding, exportName, meta }` context. + * Here, `__WRAP__(...)` represents the expression returned by the `generate` + * callback for each `{ implementation, exportName, meta }` context. * `references` returns those contexts in wrapper creation order, while * `referenceNames` returns only their export names. * @@ -73,16 +78,11 @@ export type TransformModuleExportWrapOptions = { * consistent with the other transform helpers. */ export function transformModuleExportWrap( - source: string, + input: string, viteAst: ESTree.Program, options: TransformModuleExportWrapOptions, -): { - output: MagicString - references: TransformModuleExportWrapContext[] - referenceNames: string[] -} { +): TransformModuleExportWrapResult { const ast = viteAst as unknown as Program - let input = source if (!input.endsWith('\n')) input += '\n' const output = new MagicString(input) const filter = options.filter ?? (() => true) @@ -92,17 +92,16 @@ export function transformModuleExportWrap( function createContext( implementation: string, - binding: string, exportName: string, meta: ModuleExportMeta, ): TransformModuleExportWrapContext { - const context = { implementation, binding, exportName, meta } + const context = { implementation, exportName, meta } references.push(context) return context } - function runtime(context: TransformModuleExportWrapContext): string { - return `/* #__PURE__ */ ${options.runtime(context)}` + function generate(context: TransformModuleExportWrapContext): string { + return `/* #__PURE__ */ ${options.generate(context)}` } function exportBinding(binding: string, exportName: string): string { @@ -128,9 +127,9 @@ export function transformModuleExportWrap( // const $$module_0_binding_value = __WRAP__(value, 'value') // export { $$module_0_binding_value as value } const binding = createName('binding', exportName) - const context = createContext(implementation, binding, exportName, meta) + const context = createContext(implementation, exportName, meta) fallbackCode.push( - `const ${binding} = ${runtime(context)};`, + `const ${binding} = ${generate(context)};`, exportBinding(binding, exportName), ) } @@ -175,8 +174,8 @@ export function transformModuleExportWrap( // export const action = __WRAP__($$module_0_implementation_action, 'action') output.move(node.start, node.end, hoistPosition) - const context = createContext(implementation, sourceName, exportName, meta) - return runtime(context) + const context = createContext(implementation, exportName, meta) + return generate(context) } for (const group of scanModuleExports(viteAst)) { diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 8e3bdd249..4395f7687 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -31,8 +31,8 @@ describe('source map fixtures', () => { generate: ({ binding, exportName }) => `registerServerReference(${binding}, ${JSON.stringify(exportName)})`, }) - const moduleResult = transformModuleExportWrap(input, ast, { - runtime: ({ implementation, exportName }) => + const moduleWrapResult = transformModuleExportWrap(input, ast, { + generate: ({ implementation, exportName }) => `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, }) const outputs = [ @@ -48,8 +48,8 @@ describe('source map fixtures', () => { }, { name: 'module-export-wrap', - output: moduleResult.output, - references: moduleResult.referenceNames, + output: moduleWrapResult.output, + references: moduleWrapResult.referenceNames, }, ] await expect( From 8633c12939676ea1ec9b6f64feeac855ee481417 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:16:06 +0900 Subject: [PATCH 31/52] test(rsc): move module export wrap output to fixtures Co-authored-by: OpenCode --- .../source-map/wrap-export/classes.js | 7 + .../wrap-export/classes.js.map.snap.md | 49 ++++ .../source-map/wrap-export/classes.js.snap.md | 88 +++++++ .../wrap-export/default-anonymous-class.js | 3 + .../default-anonymous-class.js.map.snap.md | 31 +++ .../default-anonymous-class.js.snap.md | 58 +++++ .../source-map/wrap-export/recursive.js | 6 + .../wrap-export/recursive.js.map.snap.md | 38 +++ .../wrap-export/recursive.js.snap.md | 69 ++++++ .../src/transforms/module-export-wrap.test.ts | 224 +++++++----------- .../src/transforms/source-map.test.ts | 3 + 11 files changed, 434 insertions(+), 142 deletions(-) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.snap.md diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js new file mode 100644 index 000000000..8f55ccbeb --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js @@ -0,0 +1,7 @@ +'use server' + +export class NamedClass {} + +export const ClassExpression = class InnerClass {} + +export default class DefaultClass {} 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 new file mode 100644 index 000000000..76c6ecf1f --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md @@ -0,0 +1,49 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "class NamedClass {}\n" --> (2:0) "class NamedClass {}\n" +(4:7) "const" --> (4:0) "let" +(4:12) " ClassExpression = class InnerClass {}\n" --> (4:3) " ClassExpression = class InnerClass {}\n" +(6:15) "class DefaultClass {}\n" --> (6:0) "class DefaultClass {}\n" +(2:0) "export class NamedClass {}\n" --> (7:0) "NamedClass = /* #__PURE__ */ registerServerReference(NamedClass, \"NamedClass\");\n" +(2:0) "export class NamedClass {}\n" --> (8:0) "export { NamedClass };\n" +(4:0) "export const ClassExpression = class InnerClass {}\n" --> (9:0) "ClassExpression = /* #__PURE__ */ registerServerReference(ClassExpression, \"ClassExpression\");\n" +(4:0) "export const ClassExpression = class InnerClass {}\n" --> (10:0) "export { ClassExpression };\n" +[unmapped] --> (11:0) ";\n" +[unmapped] --> (12:0) "const $$wrap_DefaultClass = /* #__PURE__ */ registerServerReference(DefaultClass, \"default\");\n" +[unmapped] --> (13:0) "export { $$wrap_DefaultClass as default };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "class NamedClass {}\n" --> (2:0) "class NamedClass {}\n" +(4:7) "const ClassExpression = class InnerClass {}\n" --> (4:0) "const ClassExpression = class InnerClass {}\n" +(6:15) "class DefaultClass {}\n" --> (6:0) "class DefaultClass {}\n" +(2:0) "export class NamedClass {}\n" --> (7:0) "\n" +(2:0) "export class NamedClass {}\n" --> (8:0) "registerServerReference(NamedClass, \"NamedClass\");\n" +(2:0) "export class NamedClass {}\n" --> (9:0) "export { NamedClass };\n" +(4:0) "export const ClassExpression = class InnerClass {}\n" --> (10:0) "\n" +(4:0) "export const ClassExpression = class InnerClass {}\n" --> (11:0) "registerServerReference(ClassExpression, \"ClassExpression\");\n" +(4:0) "export const ClassExpression = class InnerClass {}\n" --> (12:0) "export { ClassExpression };\n" +(6:0) "export default class DefaultClass {}\n" --> (13:0) "\n" +(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" +``` + +## module-export-wrap + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "class NamedClass {}\n" --> (2:0) "class NamedClass {}\n" +(4:7) "const ClassExpression = class InnerClass {}\n" --> (4:0) "const ClassExpression = class InnerClass {}\n" +(6:15) "class DefaultClass {}\n" --> (6:0) "class DefaultClass {}\n" +[unmapped] --> (8:0) "const $$module_0_binding_NamedClass = /* #__PURE__ */ registerServerReference(NamedClass, \"NamedClass\");\n" +[unmapped] --> (9:0) "export { $$module_0_binding_NamedClass as NamedClass };\n" +[unmapped] --> (10:0) "const $$module_1_binding_ClassExpression = /* #__PURE__ */ registerServerReference(ClassExpression, \"ClassExpression\");\n" +[unmapped] --> (11:0) "export { $$module_1_binding_ClassExpression as ClassExpression };\n" +[unmapped] --> (12:0) "const $$module_2_binding_default = /* #__PURE__ */ registerServerReference(DefaultClass, \"default\");\n" +[unmapped] --> (13:0) "export { $$module_2_binding_default as 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 new file mode 100644 index 000000000..19121f813 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md @@ -0,0 +1,88 @@ +## Input + +```js +'use server' + +export class NamedClass {} + +export const ClassExpression = class InnerClass {} + +export default class DefaultClass {} +``` + +## wrap-export + +**Status:** transformed + +**References:** NamedClass, ClassExpression, default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDY1ACd1c2Ugc2VydmVyJwoKY2xhc3MgTmFtZWRDbGFzcyB7fQoKbGV0IENsYXNzRXhwcmVzc2lvbiA9IGNsYXNzIElubmVyQ2xhc3Mge30KCmNsYXNzIERlZmF1bHRDbGFzcyB7fQpOYW1lZENsYXNzID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE5hbWVkQ2xhc3MsICJOYW1lZENsYXNzIik7CmV4cG9ydCB7IE5hbWVkQ2xhc3MgfTsKQ2xhc3NFeHByZXNzaW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKENsYXNzRXhwcmVzc2lvbiwgIkNsYXNzRXhwcmVzc2lvbiIpOwpleHBvcnQgeyBDbGFzc0V4cHJlc3Npb24gfTsKOwpjb25zdCAkJHdyYXBfRGVmYXVsdENsYXNzID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKERlZmF1bHRDbGFzcywgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwX0RlZmF1bHRDbGFzcyBhcyBkZWZhdWx0IH07CjM4NwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgY2xhc3MgTmFtZWRDbGFzcyB7fVxuXG5leHBvcnQgY29uc3QgQ2xhc3NFeHByZXNzaW9uID0gY2xhc3MgSW5uZXJDbGFzcyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0Q2xhc3Mge31cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFFbEIsR0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOztBQUVsQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFKbkM7QUFBQTtBQUVBO0FBQUE7Ozs7In0=) + +```js +'use server' + +class NamedClass {} + +let ClassExpression = class InnerClass {} + +class DefaultClass {} +NamedClass = /* #__PURE__ */ registerServerReference(NamedClass, "NamedClass"); +export { NamedClass }; +ClassExpression = /* #__PURE__ */ registerServerReference(ClassExpression, "ClassExpression"); +export { ClassExpression }; +; +const $$wrap_DefaultClass = /* #__PURE__ */ registerServerReference(DefaultClass, "default"); +export { $$wrap_DefaultClass as default }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** NamedClass, ClassExpression, default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzQ3ACd1c2Ugc2VydmVyJwoKY2xhc3MgTmFtZWRDbGFzcyB7fQoKY29uc3QgQ2xhc3NFeHByZXNzaW9uID0gY2xhc3MgSW5uZXJDbGFzcyB7fQoKY2xhc3MgRGVmYXVsdENsYXNzIHt9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShOYW1lZENsYXNzLCAiTmFtZWRDbGFzcyIpOwpleHBvcnQgeyBOYW1lZENsYXNzIH07CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShDbGFzc0V4cHJlc3Npb24sICJDbGFzc0V4cHJlc3Npb24iKTsKZXhwb3J0IHsgQ2xhc3NFeHByZXNzaW9uIH07CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZShEZWZhdWx0Q2xhc3MsICJkZWZhdWx0Iik7CmV4cG9ydCBkZWZhdWx0IERlZmF1bHRDbGFzczsKNDA5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjbGFzcyBOYW1lZENsYXNzIHt9XG5cbmV4cG9ydCBjb25zdCBDbGFzc0V4cHJlc3Npb24gPSBjbGFzcyBJbm5lckNsYXNzIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmF1bHRDbGFzcyB7fVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOztBQUVsQixLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBRWxDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUpuQztBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +class NamedClass {} + +const ClassExpression = class InnerClass {} + +class DefaultClass {} + +registerServerReference(NamedClass, "NamedClass"); +export { NamedClass }; + +registerServerReference(ClassExpression, "ClassExpression"); +export { ClassExpression }; + +registerServerReference(DefaultClass, "default"); +export default DefaultClass; +``` + +## module-export-wrap + +**Status:** transformed + +**References:** NamedClass, ClassExpression, default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjAxACd1c2Ugc2VydmVyJwoKY2xhc3MgTmFtZWRDbGFzcyB7fQoKY29uc3QgQ2xhc3NFeHByZXNzaW9uID0gY2xhc3MgSW5uZXJDbGFzcyB7fQoKY2xhc3MgRGVmYXVsdENsYXNzIHt9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfTmFtZWRDbGFzcyA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShOYW1lZENsYXNzLCAiTmFtZWRDbGFzcyIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfTmFtZWRDbGFzcyBhcyBOYW1lZENsYXNzIH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19DbGFzc0V4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoQ2xhc3NFeHByZXNzaW9uLCAiQ2xhc3NFeHByZXNzaW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlXzFfYmluZGluZ19DbGFzc0V4cHJlc3Npb24gYXMgQ2xhc3NFeHByZXNzaW9uIH07CmNvbnN0ICQkbW9kdWxlXzJfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKERlZmF1bHRDbGFzcywgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMl9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozNzAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNsYXNzIE5hbWVkQ2xhc3Mge31cblxuZXhwb3J0IGNvbnN0IENsYXNzRXhwcmVzc2lvbiA9IGNsYXNzIElubmVyQ2xhc3Mge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmYXVsdENsYXNzIHt9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBRWxCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFFbEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDOzs7Ozs7OzsifQ==) + +```js +'use server' + +class NamedClass {} + +const ClassExpression = class InnerClass {} + +class DefaultClass {} + +const $$module_0_binding_NamedClass = /* #__PURE__ */ registerServerReference(NamedClass, "NamedClass"); +export { $$module_0_binding_NamedClass as NamedClass }; +const $$module_1_binding_ClassExpression = /* #__PURE__ */ registerServerReference(ClassExpression, "ClassExpression"); +export { $$module_1_binding_ClassExpression as ClassExpression }; +const $$module_2_binding_default = /* #__PURE__ */ registerServerReference(DefaultClass, "default"); +export { $$module_2_binding_default as default }; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js new file mode 100644 index 000000000..4bd0d1182 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js @@ -0,0 +1,3 @@ +'use server' + +export default class {} 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 new file mode 100644 index 000000000..ecde934cf --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md @@ -0,0 +1,31 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "export default " --> (2:0) "const $$default = " +(2:15) "class {}\n" --> (2:18) "class {}\n" +[unmapped] --> (3:0) ";\n" +[unmapped] --> (4:0) "const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, \"default\");\n" +[unmapped] --> (5:0) "export { $$wrap_$$default as default };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:6) " default " --> (2:0) "const $$effect_default = " +(2:15) "class {}\n" --> (2:25) "class {}\n" +(2:0) "export default class {}\n" --> (3:0) "\n" +(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" +``` + +## module-export-wrap + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "export default " --> (2:0) "const $$module_0_implementation_default = " +(2:15) "class {}\n" --> (2:42) "class {}\n" +[unmapped] --> (4:0) "const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, \"default\");\n" +[unmapped] --> (5:0) "export { $$module_0_binding_default as 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 new file mode 100644 index 000000000..71aeb4286 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md @@ -0,0 +1,58 @@ +## Input + +```js +'use server' + +export default class {} +``` + +## wrap-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTcxACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gY2xhc3Mge30KOwpjb25zdCAkJHdyYXBfJCRkZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwXyQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CjE3MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB7fVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsa0JBQWUsS0FBSyxDQUFDLENBQUM7Ozs7In0=) + +```js +'use server' + +const $$default = class {} +; +const $$wrap_$$default = /* #__PURE__ */ registerServerReference($$default, "default"); +export { $$wrap_$$default as default }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTM2ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGNsYXNzIHt9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwoxODQAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3Mge31cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVMLHlCQUFTLEtBQUssQ0FBQyxDQUFDO0FBQXRCO0FBQUE7QUFBQTsifQ==) + +```js +'use server' + +const $$effect_default = class {} + +registerServerReference($$effect_default, "default"); +export default $$effect_default; +``` + +## module-export-wrap + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM4ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gY2xhc3Mge30KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwoxNzEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3Mge31cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLDBDQUFlLEtBQUssQ0FBQyxDQUFDOzs7OyJ9) + +```js +'use server' + +const $$module_0_implementation_default = class {} + +const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, "default"); +export { $$module_0_binding_default as default }; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js new file mode 100644 index 000000000..f9953526b --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js @@ -0,0 +1,6 @@ +'use server' + +export function recursive(depth) { + if (depth > 0) return recursive(depth - 1) + return recursive.marker +} 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 new file mode 100644 index 000000000..13c301839 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.map.snap.md @@ -0,0 +1,38 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "function recursive(depth) {\n" --> (2:0) "function recursive(depth) {\n" +(3:0) " if (depth > 0) return recursive(depth - 1)\n" --> (3:0) " if (depth > 0) return recursive(depth - 1)\n" +(4:0) " return recursive.marker\n" --> (4:0) " return recursive.marker\n" +(5:0) "}\n" --> (5:0) "}\n" +(2:0) "export function recursive(depth) {\n" --> (6:0) "recursive = /* #__PURE__ */ registerServerReference(recursive, \"recursive\");\n" +(2:0) "export function recursive(depth) {\n" --> (7:0) "export { recursive };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "function recursive(depth) {\n" --> (2:0) "function recursive(depth) {\n" +(3:0) " if (depth > 0) return recursive(depth - 1)\n" --> (3:0) " if (depth > 0) return recursive(depth - 1)\n" +(4:0) " return recursive.marker\n" --> (4:0) " return recursive.marker\n" +(5:0) "}\n" --> (5:0) "}\n" +(2:0) "export function recursive(depth) {\n" --> (6:0) "\n" +(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" +``` + +## module-export-wrap + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:7) "function recursive(depth) {\n" --> (2:0) "\n" +(2:7) "function recursive(depth) " --> (3:0) "const $$module_0_implementation_recursive = function $$module_0_implementation_recursive(depth) " +(2:33) "{\n" --> (3:96) "{\n" +(3:0) " if (depth > 0) return recursive(depth - 1)\n" --> (4:0) " if (depth > 0) return recursive(depth - 1)\n" +(4:0) " return recursive.marker\n" --> (5:0) " return recursive.marker\n" +(5:0) "}\n" --> (6:0) "};\n" +[unmapped] --> (7:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_recursive, \"name\", { value: \"recursive\" });\n" +[unmapped] --> (8:0) "export const recursive = /* #__PURE__ */ registerServerReference($$module_0_implementation_recursive, \"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 new file mode 100644 index 000000000..dae319d29 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/recursive.js.snap.md @@ -0,0 +1,69 @@ +## Input + +```js +'use server' + +export function recursive(depth) { + if (depth > 0) return recursive(depth - 1) + return recursive.marker +} +``` + +## wrap-export + +**Status:** transformed + +**References:** recursive + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE0ACd1c2Ugc2VydmVyJwoKZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7CiAgaWYgKGRlcHRoID4gMCkgcmV0dXJuIHJlY3Vyc2l2ZShkZXB0aCAtIDEpCiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXIKfQpyZWN1cnNpdmUgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UocmVjdXJzaXZlLCAicmVjdXJzaXZlIik7CmV4cG9ydCB7IHJlY3Vyc2l2ZSB9Owo0MzIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZShkZXB0aCkge1xuICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSlcbiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXJcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDbkI7QUFIQTtBQUFBOyJ9) + +```js +'use server' + +function recursive(depth) { + if (depth > 0) return recursive(depth - 1) + return recursive.marker +} +recursive = /* #__PURE__ */ registerServerReference(recursive, "recursive"); +export { recursive }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** recursive + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTg3ACd1c2Ugc2VydmVyJwoKZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7CiAgaWYgKGRlcHRoID4gMCkgcmV0dXJuIHJlY3Vyc2l2ZShkZXB0aCAtIDEpCiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXIKfQoKcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UocmVjdXJzaXZlLCAicmVjdXJzaXZlIik7CmV4cG9ydCB7IHJlY3Vyc2l2ZSB9Owo0MzcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZShkZXB0aCkge1xuICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSlcbiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXJcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDbkI7QUFIQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +function recursive(depth) { + if (depth > 0) return recursive(depth - 1) + return recursive.marker +} + +registerServerReference(recursive, "recursive"); +export { recursive }; +``` + +## module-export-wrap + +**Status:** transformed + +**References:** recursive + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDExACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlID0gZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWN1cnNpdmUoZGVwdGgpIHsKICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSkKICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlcgp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlLCAibmFtZSIsIHsgdmFsdWU6ICJyZWN1cnNpdmUiIH0pOwpleHBvcnQgY29uc3QgcmVjdXJzaXZlID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlLCAicmVjdXJzaXZlIik7CjQwMQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7XG4gIGlmIChkZXB0aCA+IDApIHJldHVybiByZWN1cnNpdmUoZGVwdGggLSAxKVxuICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlclxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUo7QUFBQSxnR0FBMEI7QUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDbkI7OzsifQ==) + +```js +'use server' + + +const $$module_0_implementation_recursive = function $$module_0_implementation_recursive(depth) { + if (depth > 0) return recursive(depth - 1) + return recursive.marker +}; +/* #__PURE__ */ Object.defineProperty($$module_0_implementation_recursive, "name", { value: "recursive" }); +export const recursive = /* #__PURE__ */ registerServerReference($$module_0_implementation_recursive, "recursive"); +``` diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 91e69c2a7..d960d428e 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -2,181 +2,121 @@ import { parseAstAsync } from 'vite' import { describe, expect, test } from 'vitest' import { transformModuleExportWrap, + type TransformModuleExportWrapContext, type TransformModuleExportWrapOptions, } from './module-export-wrap' async function transform( input: string, - options: Omit = {}, + options: Partial = {}, ) { const ast = await parseAstAsync(input) return transformModuleExportWrap(input, ast, { - ...options, generate: ({ implementation, exportName }) => `wrap(${implementation}, ${JSON.stringify(exportName)})`, + ...options, }) } -describe(transformModuleExportWrap, () => { - test('hoists direct functions and replaces their original value sites', async () => { - const result = await transform(` -'use cache' -export async function action(value) { - return value -} -export const first = async () => 1, second = first -export const named = async function inner() { - return inner -} -export default async function Page() { - return 'page' +function formatContext({ + implementation, + exportName, +}: TransformModuleExportWrapContext) { + return { implementation, exportName } } + +describe(transformModuleExportWrap, () => { + test('returns generated export contexts in order', async () => { + const result = await transform(`\ +export async function action() {} +export const loader = async () => {} +const local = async () => {} +export { local as renamed } +export { remote as forwarded } from './dep' +export default async function Page() {} `) - const code = result.output.toString() - await expect(parseAstAsync(code)).resolves.toBeDefined() - expect(result.referenceNames).toEqual([ - 'action', - 'first', - 'second', - 'named', - 'default', + expect(result.references.map(formatContext)).toEqual([ + { + implementation: '$$module_0_implementation_action', + exportName: 'action', + }, + { + implementation: '$$module_1_implementation_loader', + exportName: 'loader', + }, + { implementation: 'local', exportName: 'renamed' }, + { + implementation: '$$module_3_implementation_forwarded', + exportName: 'forwarded', + }, + { + implementation: '$$module_4_implementation_Page', + exportName: 'default', + }, ]) - expect(code).toContain( - 'export const action = /* #__PURE__ */ wrap($$module_0_implementation_action, "action");', - ) - expect(code).toContain( - 'const $$module_0_implementation_action = async function $$module_0_implementation_action(value)', - ) - expect(code).toContain( - 'const first = /* #__PURE__ */ wrap($$module_1_implementation_first, "first"), second = first', - ) - expect(code).toContain('export { first };') - expect(code).toContain( - 'export const named = /* #__PURE__ */ wrap($$module_3_implementation_named, "named")', - ) - expect(code).toContain( - 'const $$module_3_implementation_named = async function inner()', - ) - expect(code).toContain('return inner') - expect(code).toContain( - 'Object.defineProperty($$module_3_implementation_named, "name", { value: "inner" })', - ) - expect(code).toContain( - 'const Page = /* #__PURE__ */ wrap($$module_4_implementation_Page, "default");\nexport default Page;', - ) - expect(code).toContain( - 'const $$module_2_binding_second = /* #__PURE__ */ wrap(second, "second");', - ) - expect(code.indexOf("'use cache'")).toBeLessThan( - code.indexOf('const $$module_0_implementation_action'), - ) - expect(code.indexOf('const $$module_0_implementation_action')).toBeLessThan( - code.indexOf('wrap($$module_0_implementation_action'), - ) - }) - - test('wraps unresolved values at export boundaries', async () => { - const result = await transform( - ` -const local = factory() -export { local as action } -let current = first -export default current -current = second -export { remote as loader } from './dep' -export const { item } = { item: 1 } -export * from './all' -`, - { exportAll: 'preserve' }, - ) - const code = result.output.toString() - - await expect(parseAstAsync(code)).resolves.toBeDefined() expect(result.referenceNames).toEqual([ 'action', - 'default', 'loader', - 'item', + 'renamed', + 'forwarded', + 'default', ]) - expect(result.references[3]!.meta).toEqual({ - localName: 'item', - isFunction: undefined, - }) - expect(code).toContain('const $$module_1_implementation_default = current') - expect( - code.indexOf('const $$module_1_implementation_default = current'), - ).toBeLessThan(code.indexOf('current = second')) - expect(code).toContain( - 'const $$module_0_binding_action = /* #__PURE__ */ wrap(local, "action");', - ) - expect(code).toContain( - 'const $$module_1_binding_default = /* #__PURE__ */ wrap($$module_1_implementation_default, "default");', - ) - expect(code).toContain( - "import { remote as $$module_2_implementation_loader } from './dep';", - ) - expect(code).toContain( - 'const $$module_3_binding_item = /* #__PURE__ */ wrap(item, "item");', - ) - expect(code).toContain("export * from './all'") - expect(code).not.toContain('export { local as action }') - expect(code).not.toContain('export const { item }') }) - test('initializes implementations before wrappers and routes recursion through the wrapper', async () => { - const input = ` -export function recursive(depth) { - if (depth > 0) return recursive(depth - 1) - return recursive.marker -} -` - const ast = await parseAstAsync(input) - const result = transformModuleExportWrap(input, ast, { - generate: ({ implementation }) => - `Object.assign((...args) => ${implementation}(...args), { marker: "wrapped" })`, + test('filters generated and reported exports', async () => { + const input = `export const selected = async () => {}, skipped = async () => {}` + const result = await transform(input, { + filter: (name) => name === 'selected', }) - const module = await import( - `data:text/javascript,${encodeURIComponent(result.output.toString())}` - ) - expect(module.recursive(1)).toBe('wrapped') - }) - - test('filters exports and validates selected functions', async () => { - const result = await transform( - `export const Page = async () => {}, value = 1\nexport * from './dep'`, + expect(result.references.map(formatContext)).toEqual([ { - exportAll: 'preserve', - filter: (_name, meta) => meta.isFunction !== false, - rejectNonAsyncFunction: true, + implementation: '$$module_0_implementation_selected', + exportName: 'selected', }, - ) - const code = result.output.toString() + ]) + expect(result.referenceNames).toEqual(['selected']) - await expect(parseAstAsync(code)).resolves.toBeDefined() - expect(result.referenceNames).toEqual(['Page']) - expect(code).toContain('export const Page = /* #__PURE__ */ wrap(') - expect(code).toContain('value = 1') - expect(code).toContain("export * from './dep'") + const filtered = await transform(input, { filter: () => false }) + expect(filtered.output.hasChanged()).toBe(false) + expect(filtered.references).toEqual([]) + expect(filtered.referenceNames).toEqual([]) + }) + + test('only validates selected exports as async functions', async () => { + const input = `export function action() {}` await expect( - transform(`export function action() {}`, { - rejectNonAsyncFunction: true, - }), + transform(input, { rejectNonAsyncFunction: true }), ).rejects.toThrow('unsupported non async function') - await expect(transform(`export * from './dep'`)).rejects.toThrow( + + const filtered = await transform(input, { + rejectNonAsyncFunction: true, + filter: () => false, + }) + expect(filtered.output.hasChanged()).toBe(false) + expect(filtered.references).toEqual([]) + }) + + test('controls export-all preservation', async () => { + const input = `export * from './dep'` + + await expect(transform(input)).rejects.toThrow( 'unsupported ExportAllDeclaration', ) - const defaultClass = await transform( - `export default (class Named { static value = 1 })`, - ) - await expect( - parseAstAsync(defaultClass.output.toString()), - ).resolves.toBeDefined() - expect(defaultClass.output.toString()).toContain( - 'const $$module_0_implementation_default = (class Named', - ) + const preserved = await transform(input, { exportAll: 'preserve' }) + expect(preserved.output.hasChanged()).toBe(false) + expect(preserved.references).toEqual([]) + }) + + test('rejects string literal export names', async () => { + const input = `const value = 0; export { value as "my value" }` + + await expect(transform(input)).rejects.toMatchObject({ + message: 'unsupported string literal export name', + pos: input.indexOf('"my value"'), + }) }) }) diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 4395f7687..e86c9e64e 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -35,6 +35,9 @@ describe('source map fixtures', () => { generate: ({ implementation, exportName }) => `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, }) + await expect( + parseAstAsync(moduleWrapResult.output.toString()), + ).resolves.toBeDefined() const outputs = [ { name: 'wrap-export', From e7c2d361321212c076c1e188abbb6c4a012992a3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:18:22 +0900 Subject: [PATCH 32/52] test(rsc): snapshot filtered module export wrap Co-authored-by: OpenCode --- .../plugin-rsc/src/transforms/module-export-wrap.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index d960d428e..0019375b7 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -77,6 +77,13 @@ export default async function Page() {} }, ]) expect(result.referenceNames).toEqual(['selected']) + expect(result.output.toString()).toMatchInlineSnapshot(` + " + const $$module_0_implementation_selected = async () => {}; + /* #__PURE__ */ Object.defineProperty($$module_0_implementation_selected, "name", { value: "selected" }); + export const selected = /* #__PURE__ */ wrap($$module_0_implementation_selected, "selected"), skipped = async () => {} + " + `) const filtered = await transform(input, { filter: () => false }) expect(filtered.output.hasChanged()).toBe(false) From 5bd0e0130206b5b6718a84730622e0aaad539e4e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:20:06 +0900 Subject: [PATCH 33/52] refactor(rsc): migrate module export wrappers Co-authored-by: OpenCode --- .../callable-cache-plugin.ts | 9 +++++---- packages/plugin-rsc/src/plugin.ts | 20 +++++++++---------- .../plugin-rsc/src/transforms/wrap-export.ts | 4 ++++ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts index f84717491..520af6d9f 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts +++ b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts @@ -3,7 +3,7 @@ import { hasDirective, transformDirectiveProxyExport, transformHoistInlineDirective, - transformWrapExport, + transformModuleExportWrap, } from '@vitejs/plugin-rsc/transforms' import { parseAstAsync, type Plugin } from 'vite' @@ -35,8 +35,9 @@ export function callableCachePlugin(): Plugin { `${JSON.stringify(reference.referenceKey)},` + `${JSON.stringify(name)})` const result = hasDirective(ast.body, directive) - ? transformWrapExport(code, ast, { - runtime, + ? transformModuleExportWrap(code, ast, { + generate: ({ implementation, exportName }) => + runtime(implementation, exportName), rejectNonAsyncFunction: true, }) : transformHoistInlineDirective(code, ast, { @@ -52,7 +53,7 @@ export function callableCachePlugin(): Plugin { manager.serverReferences.replaceClaim(pluginName, id, { ...reference, - exportNames: 'names' in result ? result.names : result.exportNames, + exportNames: 'names' in result ? result.names : result.referenceNames, }) result.output.prepend( `import $$cacheWrapper from "/src/framework/use-cache-runtime";\n` + diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index b29404cbc..cb1976dca 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -70,12 +70,12 @@ import { slash, } from './plugins/vite-utils' import { - type TransformWrapExportFilter, + type TransformModuleExportWrapFilter, hasDirective, transformDirectiveProxyExport, transformExpandExportAll, transformServerActionServer, - transformWrapExport, + transformModuleExportWrap, findDirectives, type TransformExpandExportAllContext, } from './transforms' @@ -2419,7 +2419,7 @@ function vitePluginRscCss( }: { id: string code: string - }): false | TransformWrapExportFilter { + }): false | TransformModuleExportWrapFilter { const { filename, query } = parseIdQuery(id) if ('vite-rsc-css-export' in query) { const value = query['vite-rsc-css-export'] @@ -2451,7 +2451,7 @@ function vitePluginRscCss( // export const Page = () => {} return (_name: string, meta) => !!( - (meta.isFunction && meta.declName && /^[A-Z]/.test(meta.declName)) || + (meta.isFunction && meta.localName && /^[A-Z]/.test(meta.localName)) || (meta.defaultExportIdentifierName && /^[A-Z]/.test(meta.defaultExportIdentifierName)) ) @@ -2753,19 +2753,19 @@ export async function transformRscCssExport(options: { ast: Awaited> code: string id?: string - filter: TransformWrapExportFilter + filter: TransformModuleExportWrapFilter }): Promise<{ output: MagicString } | undefined> { if (hasDirective(options.ast.body, 'use client')) { return } - const result = transformWrapExport(options.code, options.ast, { - runtime: (value, name, meta) => - `__vite_rsc_wrap_css__(${value}, ${JSON.stringify( - meta.defaultExportIdentifierName ?? name, + const result = transformModuleExportWrap(options.code, options.ast, { + generate: ({ implementation, exportName, meta }) => + `__vite_rsc_wrap_css__(${implementation}, ${JSON.stringify( + meta.defaultExportIdentifierName ?? exportName, )})`, filter: options.filter, - ignoreExportAllDeclaration: true, + exportAll: 'preserve', }) if (result.output.hasChanged()) { if (!options.code.includes('__vite_rsc_react__')) { diff --git a/packages/plugin-rsc/src/transforms/wrap-export.ts b/packages/plugin-rsc/src/transforms/wrap-export.ts index aaa9fcee8..c25ba25cb 100644 --- a/packages/plugin-rsc/src/transforms/wrap-export.ts +++ b/packages/plugin-rsc/src/transforms/wrap-export.ts @@ -51,6 +51,10 @@ export type TransformWrapExportOptions = { filter?: TransformWrapExportFilter } +/** + * @deprecated Use `transformModuleExportEffect` for registration side effects, + * or `transformModuleExportWrap` when the runtime returns a canonical wrapper. + */ export function transformWrapExport( input: string, viteAst: ESTree.Program, From 4bf52e54a66821738dd58563d39718602f318007 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:32:33 +0900 Subject: [PATCH 34/52] refactor(rsc): share directive prologue boundary Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/hoist.ts | 18 ++----------- .../src/transforms/module-export-wrap.ts | 26 +++++++------------ packages/plugin-rsc/src/transforms/utils.ts | 11 ++++++++ 3 files changed, 22 insertions(+), 33 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/hoist.ts b/packages/plugin-rsc/src/transforms/hoist.ts index 8f72cfad1..7cec8a782 100644 --- a/packages/plugin-rsc/src/transforms/hoist.ts +++ b/packages/plugin-rsc/src/transforms/hoist.ts @@ -10,6 +10,7 @@ import { walk } from 'estree-walker' import MagicString from 'magic-string' import type { ESTree } from 'vite' import { buildScopeTree, type ScopeTree } from './scope' +import { getDirectivePrologueEnd } from './utils' /** * Turns an inline directive function into a module-level registered function. @@ -247,7 +248,7 @@ export function transformHoistInlineDirective( if (runtimeHoists.length > 0) { // Define hoisted runtime wrappers after leading directives. - output.prependLeft(getRuntimeHoistPosition(ast), runtimeHoists.join('')) + output.prependLeft(getDirectivePrologueEnd(ast), runtimeHoists.join('')) } // Expose the canonical generated names. They identify the moved functions by @@ -259,21 +260,6 @@ export function transformHoistInlineDirective( } } -function getRuntimeHoistPosition(ast: Program): number { - // Preserve leading directives so directive-based transforms can - // still compose just in case. - for (const statement of ast.body) { - const isDirective = - statement.type === 'ExpressionStatement' && - statement.expression.type === 'Literal' && - typeof statement.expression.value === 'string' - if (!isDirective) { - return statement.start - } - } - return 0 -} - const exactRegex = (s: string): RegExp => new RegExp('^' + s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + '$') diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 825169104..77eb83ecc 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -7,7 +7,7 @@ import { type ModuleExportFunction, type ModuleExportMeta, } from './module-export-scan' -import { validateNonAsyncFunction } from './utils' +import { getDirectivePrologueEnd, validateNonAsyncFunction } from './utils' export type TransformModuleExportWrapContext = { implementation: string @@ -83,12 +83,18 @@ export function transformModuleExportWrap( options: TransformModuleExportWrapOptions, ): TransformModuleExportWrapResult { const ast = viteAst as unknown as Program - if (!input.endsWith('\n')) input += '\n' + + // Keep a boundary outside the parsed AST so moving an export at EOF does not + // also move code inserted at the export's end. + if (!input.endsWith('\n')) { + input += '\n' + } + const output = new MagicString(input) const filter = options.filter ?? (() => true) const references: TransformModuleExportWrapContext[] = [] const fallbackCode: string[] = [] - const hoistPosition = getHoistPosition(ast) + const hoistPosition = getDirectivePrologueEnd(ast) function createContext( implementation: string, @@ -417,17 +423,3 @@ export function transformModuleExportWrap( referenceNames: references.map((reference) => reference.exportName), } } - -function getHoistPosition(ast: Program): number { - // 'use server' - // const value = 1 - // ^ (insert hoisted implementations here) - for (const statement of ast.body) { - const isDirective = - statement.type === 'ExpressionStatement' && - statement.expression.type === 'Literal' && - typeof statement.expression.value === 'string' - if (!isDirective) return statement.start - } - return 0 -} diff --git a/packages/plugin-rsc/src/transforms/utils.ts b/packages/plugin-rsc/src/transforms/utils.ts index b97946510..b6595877e 100644 --- a/packages/plugin-rsc/src/transforms/utils.ts +++ b/packages/plugin-rsc/src/transforms/utils.ts @@ -16,6 +16,17 @@ export function hasDirective( ) } +export function getDirectivePrologueEnd(ast: Program): number { + for (const statement of ast.body) { + const isDirective = + statement.type === 'ExpressionStatement' && + statement.expression.type === 'Literal' && + typeof statement.expression.value === 'string' + if (!isDirective) return statement.start + } + return 0 +} + // Copied from periscopic `extract_names` / `extract_identifiers` export function extractNames(param: Pattern): string[] { return extractIdentifiers(param).map((n) => n.name) From bc30f801abc616af68a4f8dd34a34b3775b6ccb0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:35:47 +0900 Subject: [PATCH 35/52] refactor(rsc): delegate function name restoration Co-authored-by: OpenCode --- .../default-anonymous.js.map.snap.md | 3 +- .../wrap-export/default-anonymous.js.snap.md | 5 ++- .../wrap-export/default-named.js.map.snap.md | 5 ++- .../wrap-export/default-named.js.snap.md | 5 ++- .../dependent-declarators.js.map.snap.md | 13 ++++--- .../dependent-declarators.js.snap.md | 5 ++- .../multiple-exports.js.map.snap.md | 16 ++++----- .../wrap-export/multiple-exports.js.snap.md | 8 ++--- .../named-function-expression.js.map.snap.md | 3 +- .../named-function-expression.js.snap.md | 5 ++- .../wrap-export/named-function.js.map.snap.md | 3 +- .../wrap-export/named-function.js.snap.md | 5 ++- .../pre-declaration-reference.js.map.snap.md | 5 ++- .../pre-declaration-reference.js.snap.md | 5 ++- .../wrap-export/recursive.js.map.snap.md | 3 +- .../wrap-export/recursive.js.snap.md | 5 ++- .../wrap-export/variables.js.map.snap.md | 16 ++++----- .../wrap-export/variables.js.snap.md | 8 ++--- .../src/transforms/module-export-wrap.test.ts | 24 ++++++++++--- .../src/transforms/module-export-wrap.ts | 35 +++++++++++++------ .../src/transforms/source-map.test.ts | 10 ++++-- 21 files changed, 99 insertions(+), 88 deletions(-) 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 5a11eaea1..436cffa92 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 @@ -33,6 +33,5 @@ (2:33) "{\n" --> (3:60) "{\n" (3:0) " return 'default anonymous function called'\n" --> (4:0) " return 'default anonymous function called'\n" (4:0) "}\n" --> (5:0) "};\n" -[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_default, \"name\", { value: \"default\" });\n" -[unmapped] --> (7:0) "export default /* #__PURE__ */ registerServerReference($$module_0_implementation_default, \"default\");\n" +[unmapped] --> (6:0) "export default /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_default, \"name\", { value: \"default\" }), \"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 7a891ac62..11a221a84 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 @@ -52,7 +52,7 @@ export default $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzMxACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pOwpleHBvcnQgZGVmYXVsdCAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpOwoyOTMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVJO0FBQUEsNERBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjgwACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfTsKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pLCAiZGVmYXVsdCIpOwoyOTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVJO0FBQUEsNERBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzsifQ==) ```js 'use server' @@ -61,6 +61,5 @@ export default $$effect_default; const $$module_0_implementation_default = async function () { return 'default anonymous function called' }; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_default, "name", { value: "default" }); -export default /* #__PURE__ */ registerServerReference($$module_0_implementation_default, "default"); +export default /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_default, "name", { value: "default" }), "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 6b6160629..987fb400b 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 @@ -31,7 +31,6 @@ (2:53) "{\n" --> (3:119) "{\n" (3:0) " return 'default named function called'\n" --> (4:0) " return 'default named function called'\n" (4:0) "}\n" --> (5:0) "};\n" -[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_defaultNamedFunction, \"name\", { value: \"defaultNamedFunction\" });\n" -[unmapped] --> (7:0) "const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_defaultNamedFunction, \"default\");\n" -[unmapped] --> (8:0) "export default defaultNamedFunction;\n" +[unmapped] --> (6:0) "const defaultNamedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_defaultNamedFunction, \"name\", { value: \"defaultNamedFunction\" }), \"default\");\n" +[unmapped] --> (7:0) "export default defaultNamedFunction;\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 f002539e5..2cf6ae566 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 @@ -52,7 +52,7 @@ export default defaultNamedFunction; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDc2ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uKCkgewogIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0TmFtZWRGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiZGVmYXVsdE5hbWVkRnVuY3Rpb24iIH0pOwpjb25zdCBkZWZhdWx0TmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uLCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCBkZWZhdWx0TmFtZWRGdW5jdGlvbjsKMzEwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUk7QUFBQSx1SEFBc0M7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDEyACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uKCkgewogIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn07CmNvbnN0IGRlZmF1bHROYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0TmFtZWRGdW5jdGlvbiIgfSksICJkZWZhdWx0Iik7CmV4cG9ydCBkZWZhdWx0IGRlZmF1bHROYW1lZEZ1bmN0aW9uOwozMDkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSTtBQUFBLHVIQUFzQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OyJ9) ```js 'use server' @@ -61,7 +61,6 @@ export default defaultNamedFunction; const $$module_0_implementation_defaultNamedFunction = async function $$module_0_implementation_defaultNamedFunction() { return 'default named function called' }; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_defaultNamedFunction, "name", { value: "defaultNamedFunction" }); -const defaultNamedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_defaultNamedFunction, "default"); +const defaultNamedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_defaultNamedFunction, "name", { value: "defaultNamedFunction" }), "default"); export default defaultNamedFunction; ``` 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 2c86bd2e2..bc688b1f8 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 @@ -30,11 +30,10 @@ (2:21) "async () => 'first action called',\n" --> (2:0) "\n" (2:21) "async () => " --> (3:0) "const $$module_0_implementation_first = async () => " (2:33) "'first action called',\n" --> (3:52) "'first action called';\n" -[unmapped] --> (4:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_first, \"name\", { value: \"first\" });\n" -(2:7) "const first = async () => 'first action called'" --> (5:0) "const first = /* #__PURE__ */ registerServerReference($$module_0_implementation_first, \"first\")" -(2:54) ",\n" --> (5:95) ",\n" -(3:0) " second = first\n" --> (6:0) " second = first\n" -[unmapped] --> (8:0) "const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(second, \"second\");\n" -[unmapped] --> (9:0) "export { $$module_1_binding_second as second };\n" -[unmapped] --> (10:0) "export { first };\n" +(2:7) "const first = async () => 'first action called'" --> (4:0) "const first = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_first, \"name\", { value: \"first\" }), \"first\")" +(2:54) ",\n" --> (4:146) ",\n" +(3:0) " second = first\n" --> (5:0) " second = first\n" +[unmapped] --> (7:0) "const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(second, \"second\");\n" +[unmapped] --> (8:0) "export { $$module_1_binding_second as second };\n" +[unmapped] --> (9:0) "export { first };\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 2605f5cec..824b2a8b1 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 @@ -51,15 +51,14 @@ export { first, second }; **References:** first, second -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDY0ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCc7Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9maXJzdCwgIm5hbWUiLCB7IHZhbHVlOiAiZmlyc3QiIH0pOwpjb25zdCBmaXJzdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0LCAiZmlyc3QiKSwKICBzZWNvbmQgPSBmaXJzdAoKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmQsICJzZWNvbmQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCBhcyBzZWNvbmQgfTsKZXhwb3J0IHsgZmlyc3QgfTsKMzE3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVVO0FBQUEsb0RBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07O0FBQTlDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxrRkFBa0M7QUFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Ozs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDE1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCc7CmNvbnN0IGZpcnN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0LCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdCIgfSksICJmaXJzdCIpLAogIHNlY29uZCA9IGZpcnN0Cgpjb25zdCAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kIGFzIHNlY29uZCB9OwpleHBvcnQgeyBmaXJzdCB9OwozMTYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVU7QUFBQSxvREFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUE5QyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMscUlBQWtDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7OzsifQ==) ```js 'use server' const $$module_0_implementation_first = async () => 'first action called'; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_first, "name", { value: "first" }); -const first = /* #__PURE__ */ registerServerReference($$module_0_implementation_first, "first"), +const first = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_first, "name", { value: "first" }), "first"), second = first const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(second, "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 cd606d91a..72b9b5dd7 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 @@ -41,13 +41,11 @@ (2:36) "{\n" --> (3:101) "{\n" (3:0) " return 'first action called'\n" --> (4:0) " return 'first action called'\n" (4:0) "}\n" --> (5:0) "};\n" -[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_firstAction, \"name\", { value: \"firstAction\" });\n" -(6:7) "async function secondAction() {\n" --> (7:0) "\n" -(6:7) "async function secondAction() " --> (8:0) "const $$module_1_implementation_secondAction = async function $$module_1_implementation_secondAction() " -(6:37) "{\n" --> (8:103) "{\n" -(7:0) " return 'second action called'\n" --> (9:0) " return 'second action called'\n" -(8:0) "}\n" --> (10:0) "};\n" -[unmapped] --> (11:0) "/* #__PURE__ */ Object.defineProperty($$module_1_implementation_secondAction, \"name\", { value: \"secondAction\" });\n" -[unmapped] --> (12:0) "export const firstAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_firstAction, \"firstAction\");\n" -[unmapped] --> (14:0) "export const secondAction = /* #__PURE__ */ registerServerReference($$module_1_implementation_secondAction, \"secondAction\");\n" +(6:7) "async function secondAction() {\n" --> (6:0) "\n" +(6:7) "async function secondAction() " --> (7:0) "const $$module_1_implementation_secondAction = async function $$module_1_implementation_secondAction() " +(6:37) "{\n" --> (7:103) "{\n" +(7:0) " return 'second action called'\n" --> (8:0) " return 'second action called'\n" +(8:0) "}\n" --> (9:0) "};\n" +[unmapped] --> (10:0) "export const firstAction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_firstAction, \"name\", { value: \"firstAction\" }), \"firstAction\");\n" +[unmapped] --> (12:0) "export const secondAction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_1_implementation_secondAction, \"name\", { value: \"secondAction\" }), \"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 ec9ccb0f1..b5eba5171 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 @@ -68,7 +68,7 @@ export { secondAction }; **References:** firstAction, secondAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#NzY3ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3RBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdEFjdGlvbiIgfSk7Cgpjb25zdCAkJG1vZHVsZV8xX2ltcGxlbWVudGF0aW9uX3NlY29uZEFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fc2Vjb25kQWN0aW9uKCkgewogIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnCn07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogInNlY29uZEFjdGlvbiIgfSk7CmV4cG9ydCBjb25zdCBmaXJzdEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uLCAiZmlyc3RBY3Rpb24iKTsKCmV4cG9ydCBjb25zdCBzZWNvbmRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKTsKNDMyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXJzdEFjdGlvbigpIHtcbiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJ1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2Vjb25kQWN0aW9uKCkge1xuICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUo7QUFBQSxxR0FBNkI7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3Qjs7QUFFTztBQUFBLHVHQUE4QjtBQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzlCOzs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjU2ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3RBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfTsKCmNvbnN0ICQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fc2Vjb25kQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdEFjdGlvbiIgfSksICJmaXJzdEFjdGlvbiIpOwoKZXhwb3J0IGNvbnN0IHNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogInNlY29uZEFjdGlvbiIgfSksICJzZWNvbmRBY3Rpb24iKTsKNDMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXJzdEFjdGlvbigpIHtcbiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJ1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2Vjb25kQWN0aW9uKCkge1xuICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUo7QUFBQSxxR0FBNkI7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3QjtBQUVPO0FBQUEsdUdBQThCO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7Ozs7In0=) ```js 'use server' @@ -77,13 +77,11 @@ export { secondAction }; const $$module_0_implementation_firstAction = async function $$module_0_implementation_firstAction() { return 'first action called' }; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_firstAction, "name", { value: "firstAction" }); const $$module_1_implementation_secondAction = async function $$module_1_implementation_secondAction() { return 'second action called' }; -/* #__PURE__ */ Object.defineProperty($$module_1_implementation_secondAction, "name", { value: "secondAction" }); -export const firstAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_firstAction, "firstAction"); +export const firstAction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_firstAction, "name", { value: "firstAction" }), "firstAction"); -export const secondAction = /* #__PURE__ */ registerServerReference($$module_1_implementation_secondAction, "secondAction"); +export const secondAction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_1_implementation_secondAction, "name", { value: "secondAction" }), "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 81f00fda2..5217b019e 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 @@ -31,6 +31,5 @@ (2:60) "{\n" --> (3:79) "{\n" (3:0) " return 'named function expression called'\n" --> (4:0) " return 'named function expression called'\n" (4:0) "}\n" --> (5:0) "};\n" -[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, \"name\", { value: \"actionImplementation\" });\n" -(2:0) "export const action = async function actionImplementation() {\n" --> (7:0) "export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, \"action\")\n" +(2:0) "export const action = async function actionImplementation() {\n" --> (6:0) "export const action = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_action, \"name\", { value: \"actionImplementation\" }), \"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 f3b0f5519..c32fad4a9 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 @@ -51,7 +51,7 @@ export { action }; **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzY1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2FjdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYWN0aW9uSW1wbGVtZW50YXRpb24iIH0pOwpleHBvcnQgY29uc3QgYWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uLCAiYWN0aW9uIikKMzU4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVXO0FBQUEsK0VBQXNDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOztBQUZBLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzE1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbkltcGxlbWVudGF0aW9uIiB9KSwgImFjdGlvbiIpCjM1NwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFVztBQUFBLCtFQUFzQztBQUM1RCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUMxQztBQUZBLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7In0=) ```js 'use server' @@ -60,6 +60,5 @@ export { action }; const $$module_0_implementation_action = async function actionImplementation() { return 'named function expression called' }; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, "name", { value: "actionImplementation" }); -export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, "action") +export const action = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_action, "name", { value: "actionImplementation" }), "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 38858b64d..d24376038 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 @@ -30,6 +30,5 @@ (2:38) "{\n" --> (3:105) "{\n" (3:0) " return 'named function called'\n" --> (4:0) " return 'named function called'\n" (4:0) "}\n" --> (5:0) "};\n" -[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_namedFunction, \"name\", { value: \"namedFunction\" });\n" -[unmapped] --> (7:0) "export const namedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_namedFunction, \"namedFunction\");\n" +[unmapped] --> (6:0) "export const namedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_namedFunction, \"name\", { value: \"namedFunction\" }), \"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 a72ad9fcd..2f1e15f59 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 @@ -51,7 +51,7 @@ export { namedFunction }; **References:** namedFunction -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDAyACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX25hbWVkRnVuY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwpleHBvcnQgY29uc3QgbmFtZWRGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX25hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIik7CjI3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSjtBQUFBLHlHQUErQjtBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzQ1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IG5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAibmFtZWRGdW5jdGlvbiIgfSksICJuYW1lZEZ1bmN0aW9uIik7CjI3NQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSjtBQUFBLHlHQUErQjtBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzsifQ==) ```js 'use server' @@ -60,6 +60,5 @@ export { namedFunction }; const $$module_0_implementation_namedFunction = async function $$module_0_implementation_namedFunction() { return 'named function called' }; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_namedFunction, "name", { value: "namedFunction" }); -export const namedFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_namedFunction, "namedFunction"); +export const namedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_namedFunction, "name", { value: "namedFunction" }), "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 f795d6598..c7647a2aa 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 @@ -32,7 +32,6 @@ (4:31) "{\n" --> (3:91) "{\n" (5:0) " return 'action called'\n" --> (4:0) " return 'action called'\n" (6:0) "}\n" --> (5:0) "};\n" -[unmapped] --> (6:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, \"name\", { value: \"action\" });\n" -(2:0) "void action\n" --> (7:0) "void action\n" -[unmapped] --> (9:0) "export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, \"action\");\n" +(2:0) "void action\n" --> (6:0) "void action\n" +[unmapped] --> (8:0) "export const action = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_action, \"name\", { value: \"action\" }), \"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 267adf833..70c83615c 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 @@ -57,7 +57,7 @@ export { action }; **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzU4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24oKSB7CiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJhY3Rpb24iIH0pOwp2b2lkIGFjdGlvbgoKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2FjdGlvbiwgImFjdGlvbiIpOwoyODIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxudm9pZCBhY3Rpb25cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBSUo7QUFBQSwyRkFBd0I7QUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ3ZCOztBQUpBLElBQUksQ0FBQzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24oKSB7CiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJwp9Owp2b2lkIGFjdGlvbgoKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbiIgfSksICJhY3Rpb24iKTsKMjgxAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUlKO0FBQUEsMkZBQXdCO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2QjtBQUpBLElBQUksQ0FBQzs7OyJ9) ```js 'use server' @@ -66,8 +66,7 @@ export { action }; const $$module_0_implementation_action = async function $$module_0_implementation_action() { return 'action called' }; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_action, "name", { value: "action" }); void action -export const action = /* #__PURE__ */ registerServerReference($$module_0_implementation_action, "action"); +export const action = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_action, "name", { value: "action" }), "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 13c301839..14bac1eaf 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 @@ -33,6 +33,5 @@ (3:0) " if (depth > 0) return recursive(depth - 1)\n" --> (4:0) " if (depth > 0) return recursive(depth - 1)\n" (4:0) " return recursive.marker\n" --> (5:0) " return recursive.marker\n" (5:0) "}\n" --> (6:0) "};\n" -[unmapped] --> (7:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_recursive, \"name\", { value: \"recursive\" });\n" -[unmapped] --> (8:0) "export const recursive = /* #__PURE__ */ registerServerReference($$module_0_implementation_recursive, \"recursive\");\n" +[unmapped] --> (7:0) "export const recursive = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_recursive, \"name\", { value: \"recursive\" }), \"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 dae319d29..a622ddfd1 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 @@ -54,7 +54,7 @@ export { recursive }; **References:** recursive -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDExACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlID0gZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWN1cnNpdmUoZGVwdGgpIHsKICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSkKICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlcgp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlLCAibmFtZSIsIHsgdmFsdWU6ICJyZWN1cnNpdmUiIH0pOwpleHBvcnQgY29uc3QgcmVjdXJzaXZlID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlLCAicmVjdXJzaXZlIik7CjQwMQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7XG4gIGlmIChkZXB0aCA+IDApIHJldHVybiByZWN1cnNpdmUoZGVwdGggLSAxKVxuICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlclxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUo7QUFBQSxnR0FBMEI7QUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDbkI7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzU4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlID0gZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWN1cnNpdmUoZGVwdGgpIHsKICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSkKICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlcgp9OwpleHBvcnQgY29uc3QgcmVjdXJzaXZlID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX3JlY3Vyc2l2ZSwgIm5hbWUiLCB7IHZhbHVlOiAicmVjdXJzaXZlIiB9KSwgInJlY3Vyc2l2ZSIpOwo0MDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZShkZXB0aCkge1xuICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSlcbiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXJcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKO0FBQUEsZ0dBQTBCO0FBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ25COzsifQ==) ```js 'use server' @@ -64,6 +64,5 @@ const $$module_0_implementation_recursive = function $$module_0_implementation_r if (depth > 0) return recursive(depth - 1) return recursive.marker }; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_recursive, "name", { value: "recursive" }); -export const recursive = /* #__PURE__ */ registerServerReference($$module_0_implementation_recursive, "recursive"); +export const recursive = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_recursive, "name", { value: "recursive" }), "recursive"); ``` 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 0098fee0a..a8121b3d5 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 @@ -37,13 +37,11 @@ (2:29) "async () => 'arrow function called'\n" --> (2:0) "\n" (2:29) "async () => " --> (3:0) "const $$module_0_implementation_arrowFunction = async () => " (2:41) "'arrow function called'\n" --> (3:60) "'arrow function called';\n" -[unmapped] --> (4:0) "/* #__PURE__ */ Object.defineProperty($$module_0_implementation_arrowFunction, \"name\", { value: \"arrowFunction\" });\n" -(4:34) "async function () {\n" --> (5:0) "\n" -(4:34) "async function () " --> (6:0) "const $$module_1_implementation_functionExpression = async function () " -(4:52) "{\n" --> (6:71) "{\n" -(5:0) " return 'function expression called'\n" --> (7:0) " return 'function expression called'\n" -(6:0) "}\n" --> (8:0) "};\n" -[unmapped] --> (9:0) "/* #__PURE__ */ Object.defineProperty($$module_1_implementation_functionExpression, \"name\", { value: \"functionExpression\" });\n" -(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (10:0) "export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_arrowFunction, \"arrowFunction\")\n" -(4:0) "export const functionExpression = async function () {\n" --> (12:0) "export const functionExpression = /* #__PURE__ */ registerServerReference($$module_1_implementation_functionExpression, \"functionExpression\")\n" +(4:34) "async function () {\n" --> (4:0) "\n" +(4:34) "async function () " --> (5:0) "const $$module_1_implementation_functionExpression = async function () " +(4:52) "{\n" --> (5:71) "{\n" +(5:0) " return 'function expression called'\n" --> (6:0) " return 'function expression called'\n" +(6:0) "}\n" --> (7:0) "};\n" +(2:0) "export const arrowFunction = async () => 'arrow function called'\n" --> (8:0) "export const arrowFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_arrowFunction, \"name\", { value: \"arrowFunction\" }), \"arrowFunction\")\n" +(4:0) "export const functionExpression = async function () {\n" --> (10:0) "export const functionExpression = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_1_implementation_functionExpression, \"name\", { value: \"functionExpression\" }), \"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 742b447f1..158f61034 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 @@ -62,20 +62,18 @@ export { functionExpression }; **References:** arrowFunction, functionExpression -[Source map visualization](https://evanw.github.io/source-map-visualization/#NzI3ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnOwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7Cgpjb25zdCAkJG1vZHVsZV8xX2ltcGxlbWVudGF0aW9uX2Z1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJwp9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fZnVuY3Rpb25FeHByZXNzaW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmdW5jdGlvbkV4cHJlc3Npb24iIH0pOwpleHBvcnQgY29uc3QgYXJyb3dGdW5jdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2Fycm93RnVuY3Rpb24sICJhcnJvd0Z1bmN0aW9uIikKCmV4cG9ydCBjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9mdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKQo0OTUAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRWtCO0FBQUEsNERBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07O0FBRTdCO0FBQUEsdUVBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7O0FBSkEsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQzs7QUFFNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjA4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnOwoKY29uc3QgJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9mdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSksICJhcnJvd0Z1bmN0aW9uIikKCmV4cG9ydCBjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fZnVuY3Rpb25FeHByZXNzaW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmdW5jdGlvbkV4cHJlc3Npb24iIH0pLCAiZnVuY3Rpb25FeHByZXNzaW9uIikKNDkzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVrQjtBQUFBLDREQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBRTdCO0FBQUEsdUVBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7QUFKQSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDOztBQUU1QixNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7In0=) ```js 'use server' const $$module_0_implementation_arrowFunction = async () => 'arrow function called'; -/* #__PURE__ */ Object.defineProperty($$module_0_implementation_arrowFunction, "name", { value: "arrowFunction" }); const $$module_1_implementation_functionExpression = async function () { return 'function expression called' }; -/* #__PURE__ */ Object.defineProperty($$module_1_implementation_functionExpression, "name", { value: "functionExpression" }); -export const arrowFunction = /* #__PURE__ */ registerServerReference($$module_0_implementation_arrowFunction, "arrowFunction") +export const arrowFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_arrowFunction, "name", { value: "arrowFunction" }), "arrowFunction") -export const functionExpression = /* #__PURE__ */ registerServerReference($$module_1_implementation_functionExpression, "functionExpression") +export const functionExpression = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_1_implementation_functionExpression, "name", { value: "functionExpression" }), "functionExpression") ``` diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 0019375b7..34c23c29d 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -12,17 +12,28 @@ async function transform( ) { const ast = await parseAstAsync(input) return transformModuleExportWrap(input, ast, { - generate: ({ implementation, exportName }) => - `wrap(${implementation}, ${JSON.stringify(exportName)})`, + generate: ({ implementation, originalName, exportName }) => + `wrap(${restoreFunctionName(implementation, originalName)}, ${JSON.stringify(exportName)})`, ...options, }) } function formatContext({ implementation, + originalName, exportName, }: TransformModuleExportWrapContext) { - return { implementation, exportName } + return { + implementation, + ...(originalName && { originalName }), + exportName, + } +} + +function restoreFunctionName(value: string, name?: string): string { + return name + ? `Object.defineProperty(${value}, "name", { value: ${JSON.stringify(name)} })` + : value } describe(transformModuleExportWrap, () => { @@ -39,10 +50,12 @@ export default async function Page() {} expect(result.references.map(formatContext)).toEqual([ { implementation: '$$module_0_implementation_action', + originalName: 'action', exportName: 'action', }, { implementation: '$$module_1_implementation_loader', + originalName: 'loader', exportName: 'loader', }, { implementation: 'local', exportName: 'renamed' }, @@ -52,6 +65,7 @@ export default async function Page() {} }, { implementation: '$$module_4_implementation_Page', + originalName: 'Page', exportName: 'default', }, ]) @@ -73,6 +87,7 @@ export default async function Page() {} expect(result.references.map(formatContext)).toEqual([ { implementation: '$$module_0_implementation_selected', + originalName: 'selected', exportName: 'selected', }, ]) @@ -80,8 +95,7 @@ export default async function Page() {} expect(result.output.toString()).toMatchInlineSnapshot(` " const $$module_0_implementation_selected = async () => {}; - /* #__PURE__ */ Object.defineProperty($$module_0_implementation_selected, "name", { value: "selected" }); - export const selected = /* #__PURE__ */ wrap($$module_0_implementation_selected, "selected"), skipped = async () => {} + export const selected = /* #__PURE__ */ wrap(Object.defineProperty($$module_0_implementation_selected, "name", { value: "selected" }), "selected"), skipped = async () => {} " `) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 77eb83ecc..cae3160d9 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -11,6 +11,7 @@ import { getDirectivePrologueEnd, validateNonAsyncFunction } from './utils' export type TransformModuleExportWrapContext = { implementation: string + originalName?: string exportName: string meta: ModuleExportMeta } @@ -53,10 +54,12 @@ export type TransformModuleExportWrapResult = { * const $$module_0_implementation_action = async function $$module_0_implementation_action(value) { * return value * } - * Object.defineProperty($$module_0_implementation_action, 'name', { - * value: 'action', - * }) - * export const action = __WRAP__($$module_0_implementation_action, 'action') + * export const action = __WRAP__( + * Object.defineProperty($$module_0_implementation_action, 'name', { + * value: 'action', + * }), + * 'action', + * ) * const loader = createLoader() * * const $$module_1_binding_loader = __WRAP__(loader, 'loader') @@ -64,7 +67,9 @@ export type TransformModuleExportWrapResult = { * ``` * * Here, `__WRAP__(...)` represents the expression returned by the `generate` - * callback for each `{ implementation, exportName, meta }` context. + * callback for each `{ implementation, originalName, exportName, meta }` + * context. `originalName` is present for directly exported functions whose + * source name must be restored by the generated expression. * `references` returns those contexts in wrapper creation order, while * `referenceNames` returns only their export names. * @@ -100,8 +105,14 @@ export function transformModuleExportWrap( implementation: string, exportName: string, meta: ModuleExportMeta, + originalName?: string, ): TransformModuleExportWrapContext { - const context = { implementation, exportName, meta } + const context = { + implementation, + exportName, + meta, + ...(originalName && { originalName }), + } references.push(context) return context } @@ -168,10 +179,7 @@ export function transformModuleExportWrap( node.body.start, `\nconst ${implementation} = ${originalPrefix}`, ) - output.appendLeft( - node.end, - `;\n/* #__PURE__ */ Object.defineProperty(${implementation}, "name", { value: ${JSON.stringify(originalName)} });\n`, - ) + output.appendLeft(node.end, ';\n') // 'use server' // export async function action() {} // ⬇️ (move after directives and before the wrapper) @@ -180,7 +188,12 @@ export function transformModuleExportWrap( // export const action = __WRAP__($$module_0_implementation_action, 'action') output.move(node.start, node.end, hoistPosition) - const context = createContext(implementation, exportName, meta) + const context = createContext( + implementation, + exportName, + meta, + originalName, + ) return generate(context) } diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index e86c9e64e..74283c1d6 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -32,8 +32,8 @@ describe('source map fixtures', () => { `registerServerReference(${binding}, ${JSON.stringify(exportName)})`, }) const moduleWrapResult = transformModuleExportWrap(input, ast, { - generate: ({ implementation, exportName }) => - `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, + generate: ({ implementation, originalName, exportName }) => + `registerServerReference(${restoreFunctionName(implementation, originalName)}, ${JSON.stringify(exportName)})`, }) await expect( parseAstAsync(moduleWrapResult.output.toString()), @@ -96,3 +96,9 @@ describe('source map fixtures', () => { }) } }) + +function restoreFunctionName(value: string, name?: string): string { + return name + ? `Object.defineProperty(${value}, "name", { value: ${JSON.stringify(name)} })` + : value +} From c5366a3472340695b1b17f41edf6882700da5af0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:40:17 +0900 Subject: [PATCH 36/52] docs(rsc): document module export wrap context Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index cae3160d9..3d9e3b8bd 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -10,9 +10,16 @@ import { import { getDirectivePrologueEnd, validateNonAsyncFunction } from './utils' export type TransformModuleExportWrapContext = { + /** The local expression that evaluates to the exported implementation. */ implementation: string + /** + * The function's runtime name before rewriting a direct function export. + * When present, the generated expression is responsible for restoring it. + */ originalName?: string + /** The public export name, or `"default"` for a default export. */ exportName: string + /** Static metadata collected from the original export declaration. */ meta: ModuleExportMeta } From 4101c454b783a6d67dbbbdae05d2458de73e1580 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:44:45 +0900 Subject: [PATCH 37/52] docs(rsc): illustrate original function names Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 3d9e3b8bd..9e0fab695 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -15,6 +15,11 @@ export type TransformModuleExportWrapContext = { /** * The function's runtime name before rewriting a direct function export. * When present, the generated expression is responsible for restoring it. + * + * - `"action"` for `export const action = () => {}` + * - `"implementation"` for `export const action = function implementation() {}` + * - `"default"` for `export default () => {}` + * - `undefined` for an indirect export such as `export { action }` */ originalName?: string /** The public export name, or `"default"` for a default export. */ From 10063a447eeee4b61c354d77ffe41334825a9d4e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:55:04 +0900 Subject: [PATCH 38/52] docs(rsc): clarify module export wrap example Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 9e0fab695..da8b973e2 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -53,29 +53,32 @@ export type TransformModuleExportWrapResult = { * * ```js * 'use server' - * export async function action(value) { + * + * export async function someFn(value) { * return value * } - * export const loader = createLoader() + * + * export const someValue = createSomeValue() * ``` * * becomes: * * ```js * 'use server' - * const $$module_0_implementation_action = async function $$module_0_implementation_action(value) { + * + * const $$module_0_implementation_someFn = async function $$module_0_implementation_someFn(value) { * return value * } - * export const action = __WRAP__( - * Object.defineProperty($$module_0_implementation_action, 'name', { - * value: 'action', + * export const someFn = __WRAP__( + * Object.defineProperty($$module_0_implementation_someFn, 'name', { + * value: 'someFn', * }), - * 'action', + * 'someFn', * ) - * const loader = createLoader() * - * const $$module_1_binding_loader = __WRAP__(loader, 'loader') - * export { $$module_1_binding_loader as loader } + * const someValue = createSomeValue() + * const $$module_1_binding_someValue = __WRAP__(someValue, 'someValue') + * export { $$module_1_binding_someValue as someValue } * ``` * * Here, `__WRAP__(...)` represents the expression returned by the `generate` From 3b5551ee20c5ae8e6af85c5fb66e82df645c9133 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 16:56:42 +0900 Subject: [PATCH 39/52] refactor(rsc): simplify wrap context creation Co-authored-by: OpenCode --- .../plugin-rsc/src/transforms/module-export-wrap.test.ts | 9 +++++++-- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 34c23c29d..2d021a919 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -25,7 +25,7 @@ function formatContext({ }: TransformModuleExportWrapContext) { return { implementation, - ...(originalName && { originalName }), + originalName, exportName, } } @@ -58,9 +58,14 @@ export default async function Page() {} originalName: 'loader', exportName: 'loader', }, - { implementation: 'local', exportName: 'renamed' }, + { + implementation: 'local', + originalName: undefined, + exportName: 'renamed', + }, { implementation: '$$module_3_implementation_forwarded', + originalName: undefined, exportName: 'forwarded', }, { diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index da8b973e2..68f427e89 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -124,9 +124,9 @@ export function transformModuleExportWrap( ): TransformModuleExportWrapContext { const context = { implementation, + originalName, exportName, meta, - ...(originalName && { originalName }), } references.push(context) return context From 1f805f2748158f678f4a1bad720b15e598a4c45d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 17:20:18 +0900 Subject: [PATCH 40/52] fix(rsc): preserve callable cache export names Co-authored-by: OpenCode --- .../plugin-rsc/e2e/use-cache-callable.test.ts | 3 +++ .../callable-cache-plugin.ts | 12 ++++++++---- .../file-directive-from-server/server.tsx | 18 ++++++++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/packages/plugin-rsc/e2e/use-cache-callable.test.ts b/packages/plugin-rsc/e2e/use-cache-callable.test.ts index e30eb24a6..3d7624f5f 100644 --- a/packages/plugin-rsc/e2e/use-cache-callable.test.ts +++ b/packages/plugin-rsc/e2e/use-cache-callable.test.ts @@ -99,6 +99,9 @@ function defineTests(f: Fixture) { const executionCount = example.getByTestId('execution-count') const result = example.getByTestId('result') const argument = example.getByRole('textbox', { name: 'Cache key' }) + await expect(page.getByTestId('callable-name')).toHaveText( + 'cachedFromServer', + ) await page.getByRole('button', { name: 'Reset' }).click() await expect(submissionCount).toHaveText('0') await expect(executionCount).toHaveText('0') diff --git a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts index 520af6d9f..0b4cdde33 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts +++ b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts @@ -29,21 +29,25 @@ export function callableCachePlugin(): Plugin { const environmentName = this.environment.name if (environmentName === 'rsc') { - const runtime = (value: string, name: string) => + const runtime = (value: string, name: string, originalName?: string) => `$$ReactServer.registerServerReference(` + - `$$cacheWrapper(${value}),` + + (originalName + ? `Object.defineProperty($$cacheWrapper(${value}), "name", { value: ${JSON.stringify(originalName)} }),` + : `$$cacheWrapper(${value}),`) + `${JSON.stringify(reference.referenceKey)},` + `${JSON.stringify(name)})` const result = hasDirective(ast.body, directive) ? transformModuleExportWrap(code, ast, { - generate: ({ implementation, exportName }) => - runtime(implementation, exportName), + generate: ({ implementation, originalName, exportName }) => + runtime(implementation, exportName, originalName ?? exportName), rejectNonAsyncFunction: true, }) : transformHoistInlineDirective(code, ast, { directive, rejectNonAsyncFunction: true, hoistRuntime: true, + // TODO: Preserve the source function name once the inline hoist + // runtime callback exposes it. runtime, }) if (!result.output.hasChanged()) { diff --git a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx index e6c340114..2edbd043e 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx +++ b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx @@ -5,11 +5,17 @@ import { state } from './state' export function FileDirectiveFromServer() { return ( - + <> +

+ Callable name:{' '} + {cachedFromServer.name} +

+ + ) } From 9df7b20e0dff9c76e028ad6258b6a506ba657923 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 17:22:07 +0900 Subject: [PATCH 41/52] fix(rsc): adapt inline cache runtime callback Co-authored-by: OpenCode --- .../examples/use-cache-callable/callable-cache-plugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts index 0b4cdde33..268a48611 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts +++ b/packages/plugin-rsc/examples/use-cache-callable/callable-cache-plugin.ts @@ -48,7 +48,7 @@ export function callableCachePlugin(): Plugin { hoistRuntime: true, // TODO: Preserve the source function name once the inline hoist // runtime callback exposes it. - runtime, + runtime: (value, name) => runtime(value, name), }) if (!result.output.hasChanged()) { manager.serverReferences.deleteClaim(pluginName, id) From f831e47e38d9bb0879ffc6763bfbc33bd0dca58d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 17:23:37 +0900 Subject: [PATCH 42/52] test(rsc): remove callable name e2e assertion Co-authored-by: OpenCode --- .../plugin-rsc/e2e/use-cache-callable.test.ts | 3 --- .../file-directive-from-server/server.tsx | 18 ++++++------------ 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/packages/plugin-rsc/e2e/use-cache-callable.test.ts b/packages/plugin-rsc/e2e/use-cache-callable.test.ts index 3d7624f5f..e30eb24a6 100644 --- a/packages/plugin-rsc/e2e/use-cache-callable.test.ts +++ b/packages/plugin-rsc/e2e/use-cache-callable.test.ts @@ -99,9 +99,6 @@ function defineTests(f: Fixture) { const executionCount = example.getByTestId('execution-count') const result = example.getByTestId('result') const argument = example.getByRole('textbox', { name: 'Cache key' }) - await expect(page.getByTestId('callable-name')).toHaveText( - 'cachedFromServer', - ) await page.getByRole('button', { name: 'Reset' }).click() await expect(submissionCount).toHaveText('0') await expect(executionCount).toHaveText('0') diff --git a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx index 2edbd043e..e6c340114 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx +++ b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/server.tsx @@ -5,17 +5,11 @@ import { state } from './state' export function FileDirectiveFromServer() { return ( - <> -

- Callable name:{' '} - {cachedFromServer.name} -

- - + ) } From 17437f841653c7cff2bbaf97e0153df7bf4636da Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:13:51 +0900 Subject: [PATCH 43/52] docs(rsc): explain module export rewrite helpers Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.ts | 65 +++++++++++++++---- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 68f427e89..e5ba7915e 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -149,15 +149,32 @@ export function transformModuleExportWrap( return `$$module_${references.length}_${kind}_${name}` } + /** + * Wraps an export whose original local initialization must remain in place, + * such as a class, an arbitrary expression, or an export specifier. The + * generated wrapper is assigned to a separate binding and exported after the + * source declarations, leaving the original local binding unchanged. + * + * For `emitFallback('value', 'renamed', meta)`: + * + * ```js + * // Existing source initialization, left in place + * const value = init() + * + * // Code appended by emitFallback + * const $$module_0_binding_renamed = __WRAP__(value, 'renamed') + * export { $$module_0_binding_renamed as renamed } + * ``` + * + * @param implementation Local expression to pass to the generated wrapper. + * @param exportName Public name for the generated export. + * @param meta Static metadata collected from the original export. + */ function emitFallback( implementation: string, exportName: string, meta: ModuleExportMeta, ): void { - // const value = init() - // ⬇️ (append after source initialization) - // const $$module_0_binding_value = __WRAP__(value, 'value') - // export { $$module_0_binding_value as value } const binding = createName('binding', exportName) const context = createContext(implementation, exportName, meta) fallbackCode.push( @@ -166,6 +183,36 @@ export function transformModuleExportWrap( ) } + /** + * Splits a directly exported function into a private implementation and a + * generated wrapper expression. The implementation is moved after the + * directive prologue, while the caller inserts the wrapper at the original + * declaration site. The context includes the source-level function name so + * the generated expression can restore it on the exported callable. + * + * For `hoistFunction(node, 'action', 'action', meta)`: + * + * ```js + * // Before + * export async function action() {} + * + * // Moved into output by hoistFunction + * const $$module_0_implementation_action = + * async function $$module_0_implementation_action() {} + * + * // Returned by hoistFunction + * __WRAP__($$module_0_implementation_action, 'action') + * + * // Final declaration assembled by the caller + * export const action = __WRAP__($$module_0_implementation_action, 'action') + * ``` + * + * @param node Directly exported function node to move. + * @param sourceName Local declaration name used for the implementation binding. + * @param exportName Public name for the generated export. + * @param meta Static metadata collected from the original export. + * @returns Generated wrapper expression for the original declaration site. + */ function hoistFunction( node: ModuleExportFunction, sourceName: string, @@ -174,10 +221,6 @@ export function transformModuleExportWrap( ): string { validateNonAsyncFunction(options, node) const implementation = createName('implementation', sourceName) - // export async function action() {} - // ^^^^^^ - // ⬇️ (rename before moving) - // const $$module_0_implementation_action = async function $$module_0_implementation_action() {} const originalPrefix = node.type === 'FunctionDeclaration' && node.id ? input.slice(node.start, node.id.start) + @@ -195,12 +238,6 @@ export function transformModuleExportWrap( `\nconst ${implementation} = ${originalPrefix}`, ) output.appendLeft(node.end, ';\n') - // 'use server' - // export async function action() {} - // ⬇️ (move after directives and before the wrapper) - // 'use server' - // const $$module_0_implementation_action = async function ... - // export const action = __WRAP__($$module_0_implementation_action, 'action') output.move(node.start, node.end, hoistPosition) const context = createContext( From f7dbaa9d5d093a9ef51df970bbfb27ae1813a410 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:17:09 +0900 Subject: [PATCH 44/52] refactor(rsc): clarify wrapped binding strategy Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.ts | 73 +++++++++++-------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index e5ba7915e..cf9c4fdf3 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -113,7 +113,7 @@ export function transformModuleExportWrap( const output = new MagicString(input) const filter = options.filter ?? (() => true) const references: TransformModuleExportWrapContext[] = [] - const fallbackCode: string[] = [] + const wrappedBindingCode: string[] = [] const hoistPosition = getDirectivePrologueEnd(ast) function createContext( @@ -155,13 +155,13 @@ export function transformModuleExportWrap( * generated wrapper is assigned to a separate binding and exported after the * source declarations, leaving the original local binding unchanged. * - * For `emitFallback('value', 'renamed', meta)`: + * For `emitWrappedBinding('value', 'renamed', meta)`: * * ```js * // Existing source initialization, left in place * const value = init() * - * // Code appended by emitFallback + * // Code appended by emitWrappedBinding * const $$module_0_binding_renamed = __WRAP__(value, 'renamed') * export { $$module_0_binding_renamed as renamed } * ``` @@ -170,14 +170,14 @@ export function transformModuleExportWrap( * @param exportName Public name for the generated export. * @param meta Static metadata collected from the original export. */ - function emitFallback( + function emitWrappedBinding( implementation: string, exportName: string, meta: ModuleExportMeta, ): void { const binding = createName('binding', exportName) const context = createContext(implementation, exportName, meta) - fallbackCode.push( + wrappedBindingCode.push( `const ${binding} = ${generate(context)};`, exportBinding(binding, exportName), ) @@ -251,36 +251,36 @@ export function transformModuleExportWrap( for (const group of scanModuleExports(viteAst)) { if (group.type === 'declaration') { - // export function f() {} - // ⬇️ (hoist implementation and replace declaration) - // const $$module_0_implementation_f = function ... - // export const f = __WRAP__($$module_0_implementation_f, 'f') - // - // export class C {} - // ⬇️ (keep initialization in place and append fallback) - // class C {} - // const $$module_0_binding_C = __WRAP__(C, 'C') - // export { $$module_0_binding_C as C } const [entry] = group.exports const { localName: name } = entry const meta = entry.meta if (!filter(entry.exportName, meta)) continue if (group.directFunction) { + // export function f() {} + // ⬇️ (hoist implementation and replace declaration) + // const $$module_0_implementation_f = function ... + // export const f = __WRAP__($$module_0_implementation_f, 'f') const replacement = hoistFunction( group.directFunction, name, entry.exportName, meta, ) + // strip `export` output.remove(group.node.start, group.declaration.start) output.appendLeft( group.declaration.start, `export const ${name} = ${replacement};`, ) } else { + // export class C {} + // ⬇️ (keep initialization in place and append wrapped binding) + // class C {} + // const $$module_0_binding_C = __WRAP__(C, 'C') + // export { $$module_0_binding_C as C } output.remove(group.node.start, group.declaration.start) - emitFallback(name, entry.exportName, meta) + emitWrappedBinding(name, entry.exportName, meta) } } else if (group.type === 'variable-declaration') { // export const action = async () => {}, value = init() @@ -290,7 +290,7 @@ export function transformModuleExportWrap( // const $$module_1_binding_value = __WRAP__(value, 'value') // export { $$module_1_binding_value as value } // export { action } - const fallbackNames = new Set() + const wrappedBindingNames = new Set() const exportNames = group.declarators.flatMap((item) => item.exports.map((entry) => entry.exportName), ) @@ -305,6 +305,11 @@ export function transformModuleExportWrap( validate = true if (directFunction) { + // export const action = async () => {} + // ⬇️ + // const $$module_0_implementation_action = async () => {} + // const action = __WRAP__($$module_0_implementation_action, 'action') + // export { action } const replacement = hoistFunction( directFunction, entry.localName, @@ -313,8 +318,13 @@ export function transformModuleExportWrap( ) output.appendLeft(directFunction.start, replacement) } else { - fallbackNames.add(entry.exportName) - emitFallback(entry.localName, entry.exportName, meta) + // export const value = init() + // ⬇️ + // const value = init() + // const $$module_1_binding_value = __WRAP__(value, 'value') + // export { $$module_1_binding_value as value } + wrappedBindingNames.add(entry.exportName) + emitWrappedBinding(entry.localName, entry.exportName, meta) } } @@ -323,7 +333,7 @@ export function transformModuleExportWrap( } } - if (fallbackNames.size > 0) { + if (wrappedBindingNames.size > 0) { // export const selected = init(), skipped = init() // ^^^^^^ // ⬇️ (remove `export` and restore the unwrapped export separately) @@ -331,8 +341,9 @@ export function transformModuleExportWrap( // export { skipped } output.remove(group.node.start, group.declaration.start) for (const name of exportNames) { - if (!fallbackNames.has(name)) - fallbackCode.push(exportBinding(name, name)) + if (!wrappedBindingNames.has(name)) { + wrappedBindingCode.push(exportBinding(name, name)) + } } } } else if (group.type === 'specifiers') { @@ -373,11 +384,11 @@ export function transformModuleExportWrap( const sourceTail = input .slice(group.node.source.end, group.node.end) .replace(/;?\s*$/, ';') - fallbackCode.push( + wrappedBindingCode.push( `import { ${localName} as ${implementation} } from ${group.node.source.raw}${sourceTail}`, ) } - emitFallback(implementation, exportName, meta) + emitWrappedBinding(implementation, exportName, meta) } if (selected) { @@ -386,13 +397,13 @@ export function transformModuleExportWrap( const source = group.node.source ? ` from ${group.node.source.raw}` : '' - fallbackCode.push(`export { ${preserved.join(', ')} }${source};`) + wrappedBindingCode.push( + `export { ${preserved.join(', ')} }${source};`, + ) } } } else if (group.type === 'export-all') { // export * from './dep' - // ⬇️ (unless `exportAll: 'preserve'`) - // throw new Error('unsupported ExportAllDeclaration') if (options.exportAll !== 'preserve') { throw Object.assign(new Error('unsupported ExportAllDeclaration'), { pos: group.node.start, @@ -439,7 +450,7 @@ export function transformModuleExportWrap( if (declaration.type === 'ClassDeclaration' && declaration.id) { // export default class Page {} // ^^^^^^^^^^^^^^ - // ⬇️ (remove `export default` and append fallback) + // ⬇️ (remove `export default` and append wrapped binding) // class Page {} // const $$module_0_binding_default = __WRAP__(Page, 'default') // export { $$module_0_binding_default as default } @@ -469,17 +480,17 @@ export function transformModuleExportWrap( ), ) } - emitFallback(implementation, 'default', meta) + emitWrappedBinding(implementation, 'default', meta) } } } - if (fallbackCode.length > 0) { + if (wrappedBindingCode.length > 0) { // const value = init() // ⬇️ (append) // const $$module_0_binding_value = __WRAP__(value, 'value') // export { $$module_0_binding_value as value } - output.append(`\n${fallbackCode.join('\n')}\n`) + output.append(`\n${wrappedBindingCode.join('\n')}\n`) } return { From 53c87a571eb1e6310bee6b10d3ef7d660cb6fddf Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:30:21 +0900 Subject: [PATCH 45/52] nit --- .../plugin-rsc/src/transforms/module-export-wrap.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index cf9c4fdf3..e75c097c5 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -132,6 +132,7 @@ export function transformModuleExportWrap( return context } + // TODO: should we move PURE annotation to user side responsibility? function generate(context: TransformModuleExportWrapContext): string { return `/* #__PURE__ */ ${options.generate(context)}` } @@ -142,6 +143,7 @@ export function transformModuleExportWrap( : `export { ${binding} as ${exportName} };` } + // TODO: maybe too long? function createName( kind: 'implementation' | 'binding', name: string, @@ -155,15 +157,15 @@ export function transformModuleExportWrap( * generated wrapper is assigned to a separate binding and exported after the * source declarations, leaving the original local binding unchanged. * - * For `emitWrappedBinding('value', 'renamed', meta)`: + * For `emitWrappedBinding('value', 'value', meta)`: * * ```js * // Existing source initialization, left in place - * const value = init() + * export const value = init() * * // Code appended by emitWrappedBinding - * const $$module_0_binding_renamed = __WRAP__(value, 'renamed') - * export { $$module_0_binding_renamed as renamed } + * const $$module_0_binding_value = __WRAP__(value, 'value') + * export { $$module_0_binding_value as value } * ``` * * @param implementation Local expression to pass to the generated wrapper. From 1f977eca6d30f2f8c8cde90ec007896c0796eb48 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:40:12 +0900 Subject: [PATCH 46/52] refactor(rsc): scan direct function names Co-authored-by: OpenCode --- .../src/transforms/module-export-scan.test.ts | 50 +++++++++++++++---- .../src/transforms/module-export-scan.ts | 40 +++++++++++---- .../src/transforms/module-export-wrap.ts | 25 ++++------ 3 files changed, 81 insertions(+), 34 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.test.ts b/packages/plugin-rsc/src/transforms/module-export-scan.test.ts index f611e026f..c1891e4e5 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.test.ts @@ -19,7 +19,10 @@ export * from './all' expect(groups[0]).toMatchObject({ type: 'declaration', declaration: { type: 'FunctionDeclaration' }, - directFunction: { type: 'FunctionDeclaration' }, + directFunction: { + node: { type: 'FunctionDeclaration' }, + originalName: 'action', + }, exports: [ { localName: 'action', @@ -36,7 +39,10 @@ export * from './all' declaration: { kind: 'const' }, declarators: [ { - directFunction: { type: 'ArrowFunctionExpression' }, + directFunction: { + node: { type: 'ArrowFunctionExpression' }, + originalName: 'loader', + }, exports: [ { localName: 'loader', @@ -105,17 +111,43 @@ test.each([ 'export default function action() {}', 'named-declaration', 'FunctionDeclaration', + 'action', ], - ['export default action', 'identifier', undefined], - ['export default () => {}', 'other', 'ArrowFunctionExpression'], -] as const)('classifies %s', async (source, kind, functionType) => { - const ast = await parseAstAsync(source) + ['export default action', 'identifier', undefined, undefined], + ['export default () => {}', 'other', 'ArrowFunctionExpression', 'default'], +] as const)( + 'classifies %s', + async (source, kind, functionType, originalName) => { + const ast = await parseAstAsync(source) + + expect(scanModuleExports(ast)).toMatchObject([ + { + type: 'default', + kind, + directFunction: functionType + ? { node: { type: functionType }, originalName } + : undefined, + }, + ]) + }, +) + +test('records explicit function expression names', async () => { + const ast = await parseAstAsync( + `export const action = function implementation() {}`, + ) expect(scanModuleExports(ast)).toMatchObject([ { - type: 'default', - kind, - directFunction: functionType ? { type: functionType } : undefined, + type: 'variable-declaration', + declarators: [ + { + directFunction: { + node: { type: 'FunctionExpression' }, + originalName: 'implementation', + }, + }, + ], }, ]) }) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 74c61f236..0a55b2242 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -22,6 +22,13 @@ export type ModuleExportFunction = | FunctionExpression | ArrowFunctionExpression +export type ModuleExportDirectFunction = { + /** The directly exported function node. */ + node: ModuleExportFunction + /** The function's runtime name before rewriting. */ + originalName: string +} + export type ModuleExportMeta = { /** * The local declaration name when statically available. @@ -75,8 +82,8 @@ export type ModuleExportGroup = type: 'declaration' node: ExportNamedDeclaration declaration: FunctionDeclaration | ClassDeclaration - /** The function node for `export function foo() {}`. */ - directFunction?: FunctionDeclaration + /** Direct function metadata for `export function foo() {}`. */ + directFunction?: ModuleExportDirectFunction exports: [ModuleExportEntry] } | { @@ -88,8 +95,8 @@ export type ModuleExportGroup = declaration: VariableDeclaration declarators: { node: VariableDeclarator - /** The function node for `export const foo = () => {}`. */ - directFunction?: ModuleExportFunction + /** Direct function metadata for `export const foo = () => {}`. */ + directFunction?: ModuleExportDirectFunction exports: ModuleExportEntry[] }[] } @@ -121,8 +128,8 @@ export type ModuleExportGroup = kind: ModuleExportDefaultKind node: ExportDefaultDeclaration localName?: string - /** The function node for `export default function () {}`. */ - directFunction?: ModuleExportFunction + /** Direct function metadata for `export default function () {}`. */ + directFunction?: ModuleExportDirectFunction meta: ModuleExportMeta } @@ -145,7 +152,7 @@ export function scanModuleExports( declarators: declaration.declarations.map((declarator) => { const directFunction = declarator.id.type === 'Identifier' && declarator.init - ? getFunctionNode(declarator.init) + ? getDirectFunction(declarator.init, declarator.id.name) : undefined const isFunction = declarator.id.type === 'Identifier' && declarator.init @@ -176,7 +183,7 @@ export function scanModuleExports( declaration: node.declaration, directFunction: node.declaration.type === 'FunctionDeclaration' - ? node.declaration + ? getDirectFunction(node.declaration, name) : undefined, exports: [ { @@ -224,7 +231,7 @@ export function scanModuleExports( let kind: ModuleExportDefaultKind let localName: string | undefined let meta: ModuleExportMeta - const directFunction = getFunctionNode(node.declaration) + const directFunction = getDirectFunction(node.declaration, 'default') if ( (node.declaration.type === 'FunctionDeclaration' || node.declaration.type === 'ClassDeclaration') && @@ -285,3 +292,18 @@ function getFunctionNode( return node } } + +function getDirectFunction( + node: Node | ExportDefaultDeclaration['declaration'], + fallbackName: string, +): ModuleExportDirectFunction | undefined { + const functionNode = getFunctionNode(node) + if (!functionNode) return + return { + node: functionNode, + originalName: + functionNode.type !== 'ArrowFunctionExpression' && functionNode.id + ? functionNode.id.name + : fallbackName, + } +} diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index e75c097c5..b1b7b759b 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -4,7 +4,7 @@ import MagicString from 'magic-string' import type { ESTree } from 'vite' import { scanModuleExports, - type ModuleExportFunction, + type ModuleExportDirectFunction, type ModuleExportMeta, } from './module-export-scan' import { getDirectivePrologueEnd, validateNonAsyncFunction } from './utils' @@ -192,7 +192,7 @@ export function transformModuleExportWrap( * declaration site. The context includes the source-level function name so * the generated expression can restore it on the exported callable. * - * For `hoistFunction(node, 'action', 'action', meta)`: + * For `hoistFunction({ node, originalName: 'action' }, 'action', 'action', meta)`: * * ```js * // Before @@ -209,18 +209,19 @@ export function transformModuleExportWrap( * export const action = __WRAP__($$module_0_implementation_action, 'action') * ``` * - * @param node Directly exported function node to move. + * @param directFunction Scanner metadata for the function to move. * @param sourceName Local declaration name used for the implementation binding. * @param exportName Public name for the generated export. * @param meta Static metadata collected from the original export. * @returns Generated wrapper expression for the original declaration site. */ function hoistFunction( - node: ModuleExportFunction, + directFunction: ModuleExportDirectFunction, sourceName: string, exportName: string, meta: ModuleExportMeta, ): string { + const { node, originalName } = directFunction validateNonAsyncFunction(options, node) const implementation = createName('implementation', sourceName) const originalPrefix = @@ -229,11 +230,6 @@ export function transformModuleExportWrap( implementation + input.slice(node.id.end, node.body.start) : input.slice(node.start, node.body.start) - const originalName = - node.type !== 'ArrowFunctionExpression' && node.id - ? node.id.name - : sourceName - output.update( node.start, node.body.start, @@ -318,7 +314,7 @@ export function transformModuleExportWrap( entry.exportName, meta, ) - output.appendLeft(directFunction.start, replacement) + output.appendLeft(directFunction.node.start, replacement) } else { // export const value = init() // ⬇️ @@ -415,7 +411,7 @@ export function transformModuleExportWrap( let meta: ModuleExportMeta if (group.directFunction) { - const declaration = group.directFunction + const declaration = group.directFunction.node // export default async function Page() {} // ⬇️ // const $$module_0_implementation_Page = async function ... @@ -426,15 +422,12 @@ export function transformModuleExportWrap( // ⬇️ // const $$module_0_implementation_default = async () => {} // export default __WRAP__($$module_0_implementation_default, 'default') - const sourceName = - declaration.type !== 'ArrowFunctionExpression' && declaration.id - ? declaration.id.name - : 'default' + const sourceName = group.directFunction.originalName meta = group.meta if (!filter('default', meta)) continue const replacement = hoistFunction( - declaration, + group.directFunction, sourceName, 'default', meta, From 820ec08ce10e8fe540522fc6f4cf5d21f975dcfd Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:49:49 +0900 Subject: [PATCH 47/52] test(rsc): contrast module wrapper bindings Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.test.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 2d021a919..7492bb89c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -83,6 +83,28 @@ export default async function Page() {} ]) }) + test('distinguishes canonical and separately wrapped bindings', async () => { + const result = await transform(`\ +export async function direct() {} +const indirect = async () => {} +export { indirect } +consume(direct, indirect) +`) + + expect(result.output.toString()).toMatchInlineSnapshot(` + " + const $$module_0_implementation_direct = async function $$module_0_implementation_direct() {}; + export const direct = /* #__PURE__ */ wrap(Object.defineProperty($$module_0_implementation_direct, \"name\", { value: \"direct\" }), \"direct\"); + const indirect = async () => {} + + consume(direct, indirect) + + const $$module_1_binding_indirect = /* #__PURE__ */ wrap(indirect, \"indirect\"); + export { $$module_1_binding_indirect as indirect }; + " + `) + }) + test('filters generated and reported exports', async () => { const input = `export const selected = async () => {}, skipped = async () => {}` const result = await transform(input, { From 45eeb0f18286633efe44dc76c9f236efa31f3585 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:51:46 +0900 Subject: [PATCH 48/52] test(rsc): dump canonical wrapper bindings Co-authored-by: OpenCode --- .../canonical-vs-wrapped-binding.js | 6 ++ ...anonical-vs-wrapped-binding.js.map.snap.md | 38 ++++++++++ .../canonical-vs-wrapped-binding.js.snap.md | 76 +++++++++++++++++++ .../src/transforms/module-export-wrap.test.ts | 22 ------ 4 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.snap.md diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js new file mode 100644 index 000000000..06e0bcbf2 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js @@ -0,0 +1,6 @@ +export async function direct() {} + +const indirect = async () => {} +export { indirect } + +consume(direct, indirect) diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.map.snap.md new file mode 100644 index 000000000..2627e5e80 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.map.snap.md @@ -0,0 +1,38 @@ +## wrap-export + +```txt +(0:7) "async function direct() {}\n" --> (0:0) "async function direct() {}\n" +(2:0) "const indirect = async () => {}\n" --> (2:0) "const indirect = async () => {}\n" +(5:0) "consume(direct, indirect)\n" --> (5:0) "consume(direct, indirect)\n" +(0:0) "export async function direct() {}\n" --> (6:0) "direct = /* #__PURE__ */ registerServerReference(direct, \"direct\");\n" +(0:0) "export async function direct() {}\n" --> (7:0) "export { direct };\n" +[unmapped] --> (8:0) ";\n" +[unmapped] --> (9:0) "const $$wrap_indirect = /* #__PURE__ */ registerServerReference(indirect, \"indirect\");\n" +[unmapped] --> (10:0) "export { $$wrap_indirect as indirect };\n" +``` + +## module-export-effect + +```txt +(0:7) "async function direct() {}\n" --> (0:0) "async function direct() {}\n" +(2:0) "const indirect = async () => {}\n" --> (2:0) "const indirect = async () => {}\n" +(3:0) "export { indirect }\n" --> (3:0) "export { indirect }\n" +(5:0) "consume(direct, indirect)\n" --> (5:0) "consume(direct, indirect)\n" +(0:0) "export async function direct() {}\n" --> (6:0) "\n" +(0:0) "export async function direct() {}\n" --> (7:0) "registerServerReference(direct, \"direct\");\n" +(0:0) "export async function direct() {}\n" --> (8:0) "export { direct };\n" +[unmapped] --> (10:0) "registerServerReference(indirect, \"indirect\");" +``` + +## module-export-wrap + +```txt +(0:7) "async function direct() {}\n" --> (0:0) "\n" +(0:7) "async function direct() " --> (1:0) "const $$module_0_implementation_direct = async function $$module_0_implementation_direct() " +(0:31) "{}\n" --> (1:91) "{};\n" +[unmapped] --> (2:0) "export const direct = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_direct, \"name\", { value: \"direct\" }), \"direct\");\n" +(2:0) "const indirect = async () => {}\n" --> (4:0) "const indirect = async () => {}\n" +(5:0) "consume(direct, indirect)\n" --> (7:0) "consume(direct, indirect)\n" +[unmapped] --> (9:0) "const $$module_1_binding_indirect = /* #__PURE__ */ registerServerReference(indirect, \"indirect\");\n" +[unmapped] --> (10:0) "export { $$module_1_binding_indirect as indirect };\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.snap.md new file mode 100644 index 000000000..4d21726b6 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.snap.md @@ -0,0 +1,76 @@ +## Input + +```js +export async function direct() {} + +const indirect = async () => {} +export { indirect } + +consume(direct, indirect) +``` + +## wrap-export + +**Status:** transformed + +**References:** direct, indirect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA0AGFzeW5jIGZ1bmN0aW9uIGRpcmVjdCgpIHt9Cgpjb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9CgoKY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KQpkaXJlY3QgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGlyZWN0LCAiZGlyZWN0Iik7CmV4cG9ydCB7IGRpcmVjdCB9Owo7CmNvbnN0ICQkd3JhcF9pbmRpcmVjdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShpbmRpcmVjdCwgImluZGlyZWN0Iik7CmV4cG9ydCB7ICQkd3JhcF9pbmRpcmVjdCBhcyBpbmRpcmVjdCB9OwozNzkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlyZWN0KCkge31cblxuY29uc3QgaW5kaXJlY3QgPSBhc3luYyAoKSA9PiB7fVxuZXhwb3J0IHsgaW5kaXJlY3QgfVxuXG5jb25zdW1lKGRpcmVjdCwgaW5kaXJlY3QpXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWhDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVE7QUFMeEI7QUFBQTs7OzsifQ==) + +```js +async function direct() {} + +const indirect = async () => {} + + +consume(direct, indirect) +direct = /* #__PURE__ */ registerServerReference(direct, "direct"); +export { direct }; +; +const $$wrap_indirect = /* #__PURE__ */ registerServerReference(indirect, "indirect"); +export { $$wrap_indirect as indirect }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** direct, indirect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE3AGFzeW5jIGZ1bmN0aW9uIGRpcmVjdCgpIHt9Cgpjb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9CmV4cG9ydCB7IGluZGlyZWN0IH0KCmNvbnN1bWUoZGlyZWN0LCBpbmRpcmVjdCkKCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRpcmVjdCwgImRpcmVjdCIpOwpleHBvcnQgeyBkaXJlY3QgfTsKCnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGluZGlyZWN0LCAiaW5kaXJlY3QiKTs0MTcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlyZWN0KCkge31cblxuY29uc3QgaW5kaXJlY3QgPSBhc3luYyAoKSA9PiB7fVxuZXhwb3J0IHsgaW5kaXJlY3QgfVxuXG5jb25zdW1lKGRpcmVjdCwgaW5kaXJlY3QpXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWhDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDOztBQUVsQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUTtBQUx4QjtBQUFBO0FBQUE7OyJ9) + +```js +async function direct() {} + +const indirect = async () => {} +export { indirect } + +consume(direct, indirect) + +registerServerReference(direct, "direct"); +export { direct }; + +registerServerReference(indirect, "indirect"); +``` + +## module-export-wrap + +**Status:** transformed + +**References:** direct, indirect + +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDY4AApjb25zdCAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RpcmVjdCA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGlyZWN0KCkge307CmV4cG9ydCBjb25zdCBkaXJlY3QgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGlyZWN0LCAibmFtZSIsIHsgdmFsdWU6ICJkaXJlY3QiIH0pLCAiZGlyZWN0Iik7Cgpjb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9CgoKY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KQoKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX2luZGlyZWN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGluZGlyZWN0LCAiaW5kaXJlY3QiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX2luZGlyZWN0IGFzIGluZGlyZWN0IH07CjM0MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXJlY3QoKSB7fVxuXG5jb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9XG5leHBvcnQgeyBpbmRpcmVjdCB9XG5cbmNvbnN1bWUoZGlyZWN0LCBpbmRpcmVjdClcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBTztBQUFBLDJGQUF3QixDQUFDOzs7QUFFaEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUc5QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUTs7OzsifQ==) + +```js + +const $$module_0_implementation_direct = async function $$module_0_implementation_direct() {}; +export const direct = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_direct, "name", { value: "direct" }), "direct"); + +const indirect = async () => {} + + +consume(direct, indirect) + +const $$module_1_binding_indirect = /* #__PURE__ */ registerServerReference(indirect, "indirect"); +export { $$module_1_binding_indirect as indirect }; +``` diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts index 7492bb89c..2d021a919 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -83,28 +83,6 @@ export default async function Page() {} ]) }) - test('distinguishes canonical and separately wrapped bindings', async () => { - const result = await transform(`\ -export async function direct() {} -const indirect = async () => {} -export { indirect } -consume(direct, indirect) -`) - - expect(result.output.toString()).toMatchInlineSnapshot(` - " - const $$module_0_implementation_direct = async function $$module_0_implementation_direct() {}; - export const direct = /* #__PURE__ */ wrap(Object.defineProperty($$module_0_implementation_direct, \"name\", { value: \"direct\" }), \"direct\"); - const indirect = async () => {} - - consume(direct, indirect) - - const $$module_1_binding_indirect = /* #__PURE__ */ wrap(indirect, \"indirect\"); - export { $$module_1_binding_indirect as indirect }; - " - `) - }) - test('filters generated and reported exports', async () => { const input = `export const selected = async () => {}, skipped = async () => {}` const result = await transform(input, { From 401af0e36423cb318d02c02e884c6384a68dd939 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:54:39 +0900 Subject: [PATCH 49/52] docs(rsc): explain local wrapper bindings Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index b1b7b759b..2b6b088bc 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -59,6 +59,8 @@ export type TransformModuleExportWrapResult = { * } * * export const someValue = createSomeValue() + * + * consume(someFn, someValue) * ``` * * becomes: @@ -77,6 +79,9 @@ export type TransformModuleExportWrapResult = { * ) * * const someValue = createSomeValue() + * + * consume(someFn, someValue) + * * const $$module_1_binding_someValue = __WRAP__(someValue, 'someValue') * export { $$module_1_binding_someValue as someValue } * ``` @@ -88,11 +93,10 @@ export type TransformModuleExportWrapResult = { * `references` returns those contexts in wrapper creation order, while * `referenceNames` returns only their export names. * - * Direct function implementations move after leading directives and before - * their wrappers. This avoids initialization-order issues and makes recursive - * references resolve through the exported wrapper. Other values retain their - * source initialization and receive a separate canonical binding at the export - * boundary. + * A direct function export makes its source name the canonical wrapper binding, + * so local and imported reads of `someFn` receive the same value. Other exports + * retain their source binding and receive a separate wrapper at the export + * boundary, so the local `someValue` above remains the unwrapped value. * * Generated `$$module_*` names are not deconflicted from user bindings, * consistent with the other transform helpers. From bd92188b8e8c53c3fc149b83d0a92a61173f9676 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:59:00 +0900 Subject: [PATCH 50/52] docs(rsc): highlight local wrapper resolution Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 2b6b088bc..80cfada74 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -59,8 +59,6 @@ export type TransformModuleExportWrapResult = { * } * * export const someValue = createSomeValue() - * - * consume(someFn, someValue) * ``` * * becomes: @@ -71,6 +69,7 @@ export type TransformModuleExportWrapResult = { * const $$module_0_implementation_someFn = async function $$module_0_implementation_someFn(value) { * return value * } + * // References within this module resolve to the wrapper. * export const someFn = __WRAP__( * Object.defineProperty($$module_0_implementation_someFn, 'name', { * value: 'someFn', @@ -78,10 +77,8 @@ export type TransformModuleExportWrapResult = { * 'someFn', * ) * + * // References within this module resolve to the original value. * const someValue = createSomeValue() - * - * consume(someFn, someValue) - * * const $$module_1_binding_someValue = __WRAP__(someValue, 'someValue') * export { $$module_1_binding_someValue as someValue } * ``` From ad77ddd9b19c72cf8496e3c0ba48b7157ddd0a72 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 19:33:06 +0900 Subject: [PATCH 51/52] nit --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 80cfada74..18c1bafc6 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -456,10 +456,8 @@ export function transformModuleExportWrap( output.remove(group.node.start, declaration.start) } else { // export default current - // current = next // ⬇️ (snapshot at the original export site) // const $$module_0_implementation_default = current - // current = next // const $$module_0_binding_default = __WRAP__($$module_0_implementation_default, 'default') // export { $$module_0_binding_default as default } implementation = createName('implementation', 'default') From f2146be8c6de95dca58d12bbe45110fb3410c4ad Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 19:33:32 +0900 Subject: [PATCH 52/52] refactor(rsc): simplify default export snapshot Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 18c1bafc6..c089ed6dd 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -464,14 +464,10 @@ export function transformModuleExportWrap( meta = group.meta if (!filter('default', meta)) continue validateNonAsyncFunction(options, declaration) - const prefix = input.slice(group.node.start, declaration.start) output.update( group.node.start, declaration.start, - prefix.replace( - /^export\s+default/, - () => `const ${implementation} =`, - ), + `const ${implementation} = `, ) } emitWrappedBinding(implementation, 'default', meta)